这篇文章上次修改于 616 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
tail根据文件名监视输: tail -F。
应用中,常常会使用 tail
命令监视日志文件输出情况。但日志文件往往为了限制大小,需要在达到一定大小或到一定时刻进行重命名等操作,重新输出日志到新的文件中。这时,如果仍使用 tail -f
将不能监视到输出到新文件中的日志。
其实,GUN tail是支持根据文件名追踪文件内容更新的,这在工具的帮助信息已经提示说明了,只不过默认是根据文件打开后的描述符而已。
$ tail --help
用法:tail [选项]... [文件]...
显示每个指定文件的最后 10 行并输出至标准输出。
若指定了多于一个文件,程序会在每段输出的开始添加相应文件名作为头。
如果没有指定文件,或者文件为"-",则从标准输入读取。
必选参数对长短选项同时适用。
-c, --bytes=[+]NUM 输出最后 NUM 字节;或者使用 -c +NUM 以输出
每个文件第 NUM 个字节之后的全部内容
-f, --follow[={name|descriptor}]
随文件增长即时输出新增数据;
若未给定选项参数,则默认使用 'descriptor'
-F 和 --follow=name --retry 相同
-n, --lines=[+]NUM output the last NUM lines, instead of the last 10;
or use -n +NUM to output starting with line NUM
--max-unchanged-stats=N
with --follow=name, reopen a FILE which has not
changed size after N (default 5) iterations
to see if it has been unlinked or renamed
(this is the usual case of rotated log files);
with inotify, this option is rarely useful
--pid=PID 同 -f 一起使用,当所指定<PID>对应的进程死去后终止
-q, --quiet, --silent 不输出给出文件名的头
--retry 即使目标文件不可访问依然重复试图打开
-s, --sleep-interval=N with -f, sleep for approximately N seconds
(default 1.0) between iterations;
with inotify and --pid=P, check process P at
least once every N seconds
-v, --verbose always output headers giving file names
-z, --zero-terminated 以 NUL 字符而非换行符作为行尾分隔符
--help 显示此帮助信息并退出
--version 显示版本信息并退出
NUM may have a multiplier suffix:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.
Binary prefixes can be used, too: KiB=K, MiB=M, and so on.
如果您希望即时追查一个文件的有效名称而非描述内容(例如循环日志),默认
的程序动作并不如您所愿。在这种场合可以使用--follow=name 选项,它会使
tail 定期追踪打开给定名称的文件,以确认它是否被删除或被其它某些程序重新创建过。
故只需使用 -F 替换掉 -f 即可,这样当日志 xxx.log 达到了设定条件重命名为 xxx.log.1 时,-f 选项追踪的还是 xxx.log.1 文件而不是新创建的 xxx.log 文件,这时就不能继续监控最新日志了;而 -F 是根据文件名而非描述符方式。
- tail -f
等同于–follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止
- tail -F
等同于–follow=name --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪
没有评论
博主关闭了评论...