在一些地方我得到了这个工作
ls -rt /path/to/log/file/ | tail -1 | xargs tail -f
Run Code Online (Sandbox Code Playgroud)
但我不知道为什么它不会总是有效
(这是快速修复,直到我在这里修复日志滚动)
F. *_*uri 15
为什么使用-r
(反向排序)而不是使用tail
?
使用正常的排序顺序并获取第一个条目会更快!
tail -f `/bin/ls -1td /path/to/log/file/*| /usr/bin/head -n1`
Run Code Online (Sandbox Code Playgroud)
或者
tail -f $(/bin/ls -1t /path/to/log/file/* | /bin/sed q)
Run Code Online (Sandbox Code Playgroud)
工作正常。
注意:我喜欢使用,sed
因为此命令存在于 中/bin
,可能在/usr
安装之前。
tail -f `/bin/ls -1tr /path/to/log/file/* | /bin/sed -ne '$p'`
Run Code Online (Sandbox Code Playgroud)
会起作用,但是,正如已经说过的:反转排序顺序,而不是仅使用最后一个条目而删除整个输出并不是一个真正的好主意;-)
警告,在最后一个目录中,*
必须与目录不匹配,否则命令tail
将不知道如何打开它。
find
用于搜索最近的文件:read -a file < <(
find /tmp 2>/dev/null -type f -mmin +-1 -mmin -10 -printf "%Ts %p\n" |
sort -rn)
tail -f ${file[1]}
Run Code Online (Sandbox Code Playgroud)
笔记:
-mmin +-1
保证不坏列表文件定时:在未来的危机。read
是内置的,创建一个数组并阻止使用 head -n1| cut -d \ -f2
-mmin -10
可以更改或抑制,但这会阻止长时间的排序过程。尝试打开两个 shell 控制台并尝试以下操作:
在第一个控制台中:
user@host[pts/1]:~$ touch /tmp/file_{1,2,3}
user@host[pts/1]:~$ tail -f /tmp/file_{1,2,3}
==> /tmp/file_1 <==
==> /tmp/file_2 <==
==> /tmp/file_3 <==
Run Code Online (Sandbox Code Playgroud)
在第二个中,同时保持第一个控制台可见,多次点击:
user@host[pts/2]:~$ tee -a /tmp/file_$((RANDOM%3+1)) <<<$RANDOM
25285
user@host[pts/2]:~$ tee -a /tmp/file_$((RANDOM%3+1)) <<<$RANDOM
16381
user@host[pts/2]:~$ tee -a /tmp/file_$((RANDOM%3+1)) <<<$RANDOM
19766
user@host[pts/2]:~$ tee -a /tmp/file_$((RANDOM%3+1)) <<<$RANDOM
3053
Run Code Online (Sandbox Code Playgroud)
第一个控制台可能如下所示:
==> /tmp/file_2 <==
25285
==> /tmp/file_1 <==
16381
19766
==> /tmp/file_3 <==
3053
Run Code Online (Sandbox Code Playgroud)
...
通过使用find
命令,我们可以查看最后几分钟修改的文件-mmin
或最后几天-mtime
:
find /path/to/logdir -type f -mmin -10 -exec tail -f {} +
Run Code Online (Sandbox Code Playgroud)
用于查看最近 10 分钟修改的日志文件。
笔记:
man tail
,关于
-F
长时间观看的选项-q
不打印文件名的选项find /path/to/logdir -type f -mmin -10 -exec tail -f {} + |
sed -une 's/^==> .path.to.logdir.\(.*\) <==$/\1 /;ta;bb;
:a;s/^\(.\{12\}\) *$/\1: /;h;bc;
:b;G;s/^\(..*\)\n\(.*\)/\2 \1/p;:c;'
Run Code Online (Sandbox Code Playgroud)
您可以在哪里修改.path.to.logdir.
和更改12
更合适的长度。
例如,保持我们的两个控制台,第一个停止并尝试
user@host[pts/1]:~$ find /tmp/ -type f -mtime -1 -name 'file_?' -exec tail -f {} + |
sed -une 's/^==> .tmp.\(.*\) <==$/\1 /;ta;bb;
:a;s/^\(.\{12\}\) *$/\1: /;h;bc;
:b;G;s/^\(..*\)\n\(.*\)/\2 \1/p;:c;'
file_2 : 25285
file_1 : 16381
file_1 : 19766
file_3 : 3053
Run Code Online (Sandbox Code Playgroud)
比在第二个控制台,再打一些
user@host[pts/2]:~$ tee -a /tmp/file_$((RANDOM%3+1)) <<<$RANDOM
Run Code Online (Sandbox Code Playgroud)
除非您位于 中,否则这将不起作用/path/to/log/file
,因为ls
只给您文件的名称,而tail -f
不会找到它。如果您*
在末尾添加一个ls
,它将为您提供完整路径:
ls -rt /var/log/apache2/* | tail -1 | xargs tail -f
Run Code Online (Sandbox Code Playgroud)