我尝试使用以下选项尾随两个文件:
tail -0f file1.log -0f file2.log
在 Linux 中,我看到一个错误“tail:一次只能处理一个文件”。
在 AIX 中,我看到错误为“无效选项”。
当我使用以下方法时效果很好:
tail -f file1 -f file 2
在 Linux 中,但在 AIX 中则不然。
我希望能够在 AIX/Linux 中使用-0f
或来跟踪多个文件-f
multitail
在这两个操作系统中都无法识别。
答案1
关于什么:
tail -f file1 & tail -f file2
或者在每一行前面加上文件名前缀:
tail -f file1 | sed 's/^/file1: /' &
tail -f file2 | sed 's/^/file2: /'
要跟踪名称与模式匹配的所有文件,您可以tail -f
使用如下脚本来实现(每秒连续从文件中读取)zsh
:
#! /bin/zsh -
zmodload zsh/stat
zmodload zsh/zselect
zmodload zsh/system
set -o extendedglob
typeset -A tracked
typeset -F SECONDS=0
pattern=${1?}; shift
drain() {
while sysread -s 65536 -i $1 -o 1; do
continue
done
}
for ((t = 1; ; t++)); do
typeset -A still_there
still_there=()
for file in $^@/$~pattern(#q-.NoN); do
stat -H stat -- $file || continue
inode=$stat[device]:$stat[inode]
if
(($+tracked[$inode])) ||
{ exec {fd}< $file && tracked[$inode]=$fd; }
then
still_there[$inode]=
fi
done
for inode fd in ${(kv)tracked}; do
drain $fd
if ! (($+still_there[$inode])); then
exec {fd}<&-
unset "tracked[$inode]"
fi
done
((t <= SECONDS)) || zselect -t $((((t - SECONDS) * 100) | 0))
done
例如,递归地跟踪当前目录中的所有文本文件:
that-script '**/*.txt' .
答案2
在 OSX 和 Linux 中,使用
tail -f <file1> <file2>
对我来说效果很好。另一个好处是它有以下输出:
==> /srv/www/my-app/shared/log/nginx.access.log <==
things from log 1
==> /srv/www/my-app/shared/log/nginx.error.log <==
things from log 2
==> /srv/www/my-app/shared/log/nginx.access.log <==
new things from log 1
帮助您识别哪个输出来自哪个日志。
答案3
答案4
我将提供一个代码片段,tmux
它可以为您提供两个不同的窗口,您可以使用它同时跟踪两个文件:
tmux new-window -a -n Tail
tmux new-session -d -s Tail -n SSH0 -d
tmux selectp -t Tail
#This is tmux interactions with the user (colors of the tabs used, hot keys, etc.)
tmux bind-key -n M-Left previous-window -t WinSplit
tmux bind-key -n M-Right next-window -t WinSplit
tmux set-window-option -g monitor-activity on
tmux set -g visual-activity on
tmux set-window-option -g window-status-current-bg blue
tmux set-window-option -g window-status-fg red
tmux set -g pane-border-fg yellow
tmux set -g pane-active-border-bg red
tmux set -g message-fg yellow
tmux set -g message-bg red
tmux set -g message-attr bright
tmux set -g status-left "#[fg=red]#S"
#Names two seperate windows
tmux new-window -n tail1 -t Tail
tmux new-window -n tail2 -t Tail
#Now this will allow you to automatically run tail when this tmux script is run
tmux send-keys -t Tail:0 'tail -f file1.log' C-m
tmux send-keys -t Tail:1 'tail -f file2.log' C-m
更新:使用screen
还可以附加/分离多个会话,因此您tail
也可以运行多次。我可以建议这样做:
screen -s Tail_Server1.log
接下来,您需要保持CTRL+A+D
分离而不终止会话,然后下一步:
screen -s Tail_Server2.log
两者都会单独运行两个screens
,我会参考screen --help
这样您可以将其调整为您希望两个屏幕在您的terminal
.