【busybox记录】【shell指令】tail

目录

内容来源:

【GUN】【tail】指令介绍

【busybox】【tail】指令介绍

【linux】【tail】指令介绍

使用示例:

输出文件 - 只输出最后n个字节

输出文件 - 跳过文件开头n个字节输出整个文件

输出文件 - 只输出最后n行

输出文件 - 跳过文件开头n行输出整个文件

输出文件 - 持续输出文件新内容1

输出文件 - 持续输出文件新内容2

输出文件 - 指定进程结束,结束输出

输出文件 - 多文件同时输出时,不打印文件名(默认打印)

输出文件 - 多文件同时输出时,打印文件名

输出文件 - 如果文件暂时不存在,指令也可以检测文件,有了就打印

输出文件 - 可以指定检测文件的间隔时间(默认1s),可以用小数间隔

常用组合指令:

指令不常用/组合用法还需继续挖掘:


内容来源:

        GUN : Coreutils - GNU core utilities

        busybox v1.36.1 : 【busybox记录】【shell指令】基于的Busybox的版本和下载方式-CSDN博客

【GUN】【tail】指令介绍

tail:输出文件的最后一部分
tail 打印每个文件的最后一部分(默认为10行);如果没有给定文件,或者给定' - '文件,则从标准输入读取。
简介:
tail [option]... [file]...
如果指定了多个文件,tail在每个文件的输出前打印一行头文件,包括:
==>文件名称<== >
为了进一步处理尾部输出,将文件头转换为行前缀可能很有用,可以这样做:
指令: tail ... | awk '/^==> .* <==$/ {prefix=substr($0,5,length-8)":"; next}{print prefix$0}'
GNU tail可以输出任意数量的数据(一些其他版本的tail不能)。它也没有-r选项(反向打印),因为反向打印文件和打印文件的结尾是不同的工作;
BSD tail(带-r的那个)只能反转最多与其缓冲区一样大的文件,缓冲区通常为32kib。一种更可靠、更通用的反向文件的方法是GNU tac命令。
程序接受以下选项。请参见第2章[常用选项],第2页。

‘-c [+]num’
‘--bytes=[+]num’
	输出最后num字节,而不是最后一行。如果num以'+'为前缀,则从每个文件的开头开始打印字节num。
	例如,跳过第一个字节使用tail -c +2,而跳过除最后一个字节外的所有字节使用tail -c 1。Num可以是一个可选的整数,后跟下列相乘后缀之一:
		'b' => 512 ("blocks")
		'KB' => 1000 (KB)
		'K' => 1024 (KibiBytes)
		'MB' => 1000*1000 (MB)
		'M' => 1024*1024 (mb)
		'GB' => 1000*1000*1000 (GB)
		'G' => 1024*1024*1024 (GibiBytes)
	等等'T', 'P', 'E', 'Z', 'Y','R','Q'。也可以使用二进制前缀:‘KiB’=‘K’, ‘MiB’=‘M’,等等。
‘-f’
‘--follow[=how]’
	循环永远尝试在文件末尾读取更多字符,可能是因为文件正在增长。如果给出了多个文件,那么每当tail从不同的文件获得输出时,它都会打印一个头文件,以指示输出来自哪个文件。
	有两种方法可以指定使用该选项跟踪文件的方式,但只有在删除或重命名所跟踪的文件时,这种差异才会明显。
		如果您想继续跟踪一个不断增长的文件的结尾,即使它已经被解除链接,使用--follow=descriptor。这是默认的行为,但是如果您正在跟踪可能被旋转(删除或重命名,然后重新打开)的日志文件,那么它就没有用了。
		在这种情况下,使用--follow=name来跟踪命名的文件,也许可以通过定期重新打开它来查看它是否已被其他程序删除并重新创建。基于通知的实现处理这种情况,而不需要任何定期重新打开。
	无论您使用哪种方法,如果确定跟踪的文件已缩小,tail都会打印一条消息,说明文件已被截断,并从文件的开头继续跟踪,假设它已被截断为0,这是日志文件通常的截断操作。
		当文件被删除时,tail的行为取决于它是跟随文件名还是描述符。当跟随名称时,tail可以检测到文件已被删除,并给出相应的消息,如果指定了--retry,它将继续定期检查,看看文件是否重新出现。
		当跟随描述符时,tail不会检测到文件已被解除链接或重命名,并且不会发出消息;即使该文件可能不再可以通过其原始名称访问,但它仍可能在增长。
	选项值'descriptor'和'name'只能使用选项的长形式来指定,而不能使用-f。
	如果没有指定文件操作数并且标准输入是FIFO或管道,则忽略-f选项。同样,当标准输入是FIFO或管道时,-f选项对指定为'-'的任何操作数都没有影响。
	使用内核inotify支持,输出由文件更改触发,并且通常非常提示。否则,在两次检查之间,tail会休眠一秒钟 - 使用 --sleep-interval=n 来改变这个默认值 - 这可能会使输出看起来稍微不那么响应或突然。
	在没有通知支持的情况下使用tail时,您可以通过使用亚秒睡眠间隔来使其响应更快,例如,通过这样的别名:alias tail='tail -s.1'
‘-F’
	该选项与 --follow=name --retry 相同。也就是说,当文件被删除时,tail将尝试重新打开它。如果失败,tail将继续尝试,直到再次可访问为止。
‘--max-unchanged-stats=n’
	当按名称跟踪文件时,如果有n次(默认n=5)连续迭代,而文件没有更改,则打开 /fstat 文件以确定该文件名是否仍然与以前相同的设备/索引节点编号对相关联。
	当跟踪一个被旋转的日志文件时,这大约是tail打印最后一个预旋转行和打印新日志文件中累积的行之间的秒数。此选项仅在轮询(即,不通知)和跟随名称时才有意义。
‘-n [+]num’
‘--lines=[+]’
	输出最后的num行。如果num以'+'为前缀,则从每个文件的开头开始打印第num行。
	例如,跳过第一行使用tail -n +2,而跳过除最后一行外的所有行使用tail -n 1。大小乘数后缀与-c选项相同。
‘--pid=pid’
	当跟随名称或描述符时,您可以指定一个或多个(通过重复 --pid)文件参数编写器的进程ID, pid。
	然后,在所有确定的进程终止后不久,tail也将终止。只有当写入器和尾进程在同一台机器上运行时,这才能正常工作。例如,要将构建的输出保存在文件中并观察文件的增长,如果像这样调用make和tail,那么在构建完成时,tail进程将停止。
	如果没有这个选项,您将不得不自己终止tail -f进程。
	$ make >& makerr & tail --pid=$! -f makerr
	如果您指定的pid没有被使用,或者与正在写入被跟踪文件的进程不对应,那么tail可能会在任何文件停止增长之前很久就终止,或者直到真正的写入器结束很久之后才终止。在某些系统上,不支持 --pid,并且tail输出一个警告。
‘-q’
‘--quiet’
‘--silent’
	永远不要打印文件名头。
‘--retry’ 
	无限期地尝试打开指定的文件。此选项主要在以下情况下有用(否则会发出警告)。
		当紧跟在文件描述符后面时(即使用 --follow=descriptor),此选项只影响文件的首次打开,因为成功打开后,tail将开始跟随文件描述符。
		当跟踪文件名时(即使用 --follow=name), tail会无限次尝试重新打开给定的文件,直到终止。
	如果没有这个选项,当tail遇到一个不存在或无法访问的文件时,它会报告这个事实,并且不再检查它。
‘-s number’
‘--sleep-interval=number’
	更改迭代之间等待的秒数(默认为1.0)。在一次迭代中,检查每个指定文件的大小是否发生了变化。
	当tail使用inotify时,这个轮询相关的选项通常会被忽略。但如果还指定了 --pid=p, tail至少每隔若干秒检查进程p是否活着。
	该数字必须是非负的,并且可以是浮点数,既可以是当前语言环境,也可以是C语言环境。参见第2.12节[浮点数],第10页。
‘-v’
‘--verbose’
始终打印文件名头。
‘-z’
‘--zero-terminated’
	用0字节而不是换行符分隔项(ASCII LF)。例如,将输入视为用ASCII NUL分隔的项目,并以ASCII NUL终止输出项目。
	此选项可以与`perl -0`或`find -print0`和`xargs -0`一起使用,它们的作用相同,以便可靠地处理任意文件名(即使是包含空格或其他特殊字符的文件名)。为了兼容,tail还支持废弃的用法‘tail -[num][bcl][f] [file]’,只有在与上述用法不冲突的情况下才能识别。这种过时的形式只使用一个选项,最多只使用一个文件。
	在选项中,num是一个可选的小数,后面可选地跟着大小字母('b','c','l'),表示以512字节的块、字节或行进行计数,后面可选地跟着`f`,其含义与-f相同。
	在不符合POSIX 1003.1-2001的系统上,在传统的option语法中,开头的“-”可以被“+”取代,其含义与counts中的含义相同,在POSIX 1003.1-2001之前的废弃系统上,当两者冲突时,传统用法将覆盖正常用法。该行为可以通过_POSIX2_VERSION环境变量控制(参见2.13节)。
	打算在标准主机上使用的脚本应该避免使用传统语法,而应该使用-c num[b]、-n num和/或-f。如果你的脚本必须运行在只支持传统语法的主机上,你通常可以重写它以避免有问题的使用,例如,使用‘sed -n '$p'’而不是‘tail -1’.
	如果这是不可能的,脚本可以使用类似‘if tail -c +1 </dev/null >/dev/null 2>&1; then ...’来决定使用哪种语法。
	即使你的脚本假定了标准的行为,你仍然应该注意那些行为因POSIX版本而不同的用法。
	例如:
	避免`tail - main.c`,因为它可能被解释为`tail main.c`或`tail -- - main.c`;
	避免`tail -c4`,因为它可能意味着`tail -c4`或`tail -c 10 4`;
	避免`tail +4`,因为它可能意味着`tail ./+4`或`tail -n +4`。

退出状态为零表示成功,非零值表示失败。

【busybox】【tail】指令介绍

NA

【linux】【tail】指令介绍

[root@localhost bin]# tail --help
用法:tail [选项]... [文件]...
Print the last 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the file name.

如果没有指定文件,或者文件为"-",则从标准输入读取。

必选参数对长短选项同时适用。
  -c, --bytes=[+]NUM       output the last NUM bytes; or use -c +NUM to
                             output starting with byte NUM of each file
  -f, --follow[={name|descriptor}]
                           output appended data as the file grows;
                             an absent option argument means 'descriptor'
  -F                       same as --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            with -f, terminate after process ID, PID dies
  -q, --quiet, --silent    never output headers giving file names
      --retry              keep trying to open a file if it is inaccessible
  -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.

如果您希望即时追查一个文件的有效名称而非描述内容(例如循环日志),默认
的程序动作并不如您所愿。在这种场合可以使用--follow=name 选项,它会使
tail 定期追踪打开给定名称的文件,以确认它是否被删除或被其它某些程序重新创建过。

GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告 tail 的翻译错误
完整文档请见:<https://www.gnu.org/software/coreutils/tail>
或者在本地使用:info '(coreutils) tail invocation'

使用示例:

输出文件 - 只输出最后n个字节

指令: tail -c 15 test2.txt

输出文件 - 跳过文件开头n个字节输出整个文件

指令: tail -c +15 test2.txt

输出文件 - 只输出最后n行

指令: tail -n 2 test2.txt

输出文件 - 跳过文件开头n行输出整个文件

指令: tail -n +2 test2.txt

输出文件 - 持续输出文件新内容1

如果文件有新写入的东西,那么会持续输出,持续向文件增加新内容,tail可以输出出新内容

注意: 如果文件在指令运行期间被删除了,那么后续如果有新内容增加,-f参数就不会显示,-F选项可以输出

指令: tail -f test2.txt

新增内容的指令:echo 123 >> test2.txt

输出文件 - 持续输出文件新内容2

如果文件有新写入的东西,那么会持续输出,持续向文件增加新内容,tail可以输出出新内容

注意: 如果文件在指令运行期间被删除了,那么后续如果有新内容增加,-f选项就不会显示,-F选项可以输出

指令: tail -F test2.txt

此处删除test2.txt文件,tail在新文件创建以后继续输出

输出文件 - 指定进程结束,结束输出

注意:该指令必须是使用-f/-F跟随文件输出以后才能生效

指令: tail --pid=92595 -f test2.txt

过程1:当前有一个sleep 30 的进程在运行,如果这个进程结束,那么tail也结束,使用ps指令查看sleep 30 的进程号,示例中是92595,然后使用--pid选项

结果:进程结束,tail结束

输出文件 - 多文件同时输出时,不打印文件名(默认打印)

指令: tail -q test1.txt test2.txt

输出文件 - 多文件同时输出时,打印文件名

指令: tail -v test1.txt test2.txt

输出文件 - 如果文件暂时不存在,指令也可以检测文件,有了就打印

注意:也是必须运行在跟随模式下,也就是加-f/-F选项

指令: tail --retry -f test3.txt

直接tail一个不存在的文件会报错打不开,使用 --retry 选项以后就能在文件还没创建前就执行,文件创建后输出文件内容

输出文件 - 可以指定检测文件的间隔时间(默认1s),可以用小数间隔

注意: 目前测试是跟随模式下有用,并且需要指定--pid选项

效果是修改了检测pid还活着的检测时间,进程已经停止了,tail还能再活一段时间。

指令: tail -s 2 test2.txt

下图红框是进程停止以后tail还没退出

常用组合指令:

可以和多种指令组合

指令不常用/组合用法还需继续挖掘:

  • 17
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值