当查看文件末尾位置,或者实时监控文件变化的时候我们常常会使用到tail命令。但是它的功能还远远不仅如此,本片文章将详细讲述tail命令的功能,同时也会给出工作中经常会使用的案例供大家参考。
tail命令和head命令是一对互补命令。当我们需要查看一个文件的部分的时候会经常使用。tail命令查看文件末尾位置,head命令查看文件头部位置。和head一样tail默认会查看末尾后10行的数据。如果tail命令跟多个文件的话,那么每个文件都会打印最后10行。tail如果没有指定文件名将会出标准输入(键盘)读取,输入到标准(屏幕)输出。
head命令请查看这里:
Linux:Head命令好像没有比这篇更详细的了吧
说道这很自然的就会引出一个问题,如果想要查看文件中间行的数据怎么办?比如查看文件的20-30行内容。这个问题可以借助sed命令实现,先把命令写出来: sed -n '5,10p' filename,详细解释会在以后的文章讲述。
2.1 语法
tail [OPTION]... [FILE]...
2.2 选项
说明:短选项和长选项作用相同
-c 或 --bytes = K : 打印最后K个字节;使用-c +K 或者 +K从开始的第K个字节一直到文件结束(包括K位置的字符)。-f 或 --follow : 打印最后10行以后,一直追踪文件新增数据变化。直到使用ctrl + c退出或者文件被修改名称又或者被删除时停止追踪。(常用)根据文件描述追踪文件-F : 打印最后10行以后,一直追踪文件新增数据变化,并保持重试。直到使用ctrl + c退出;另外文件修改名或者删除后,如果再次创建相同文件名,依然继续追踪。(常用)根据文件名称追踪文件-n 或 --lines = K : 打印最后K行;使用-n +K 或者 +K 从开始的K行一直打印到文件结束(包括K行数据)。 (常用)--max-unchanged-stats=N : 设置交互次数, 通常和-F 一起使用。当被监控文件经过N(默认5次)次交互以后大小仍然没有变化将被重新打一个文件。用来判别并监控文件是否已经失去连接或者被重新命名。(不经常使用)-pid = PID : 通常和-f一起使用,指定一个进程的PID,当指定进程的PID退出(执行完比或者被kill)后,则退出追踪(监控)文件。(能用到)-q 或 --quiet 或 --silent : 从不打印文件名-s--sleep-interval=N : 设置休眠间隔,单位秒,默认为1秒;如果和-f 一起使用时表示每隔N秒进行一个交互。如果和 --pid=P一起使用时表示每隔N秒至少检查一次P进程是否还在运行。-v 或 --verbose : 一直打印文件名--help : 查看帮助--version : 查看版本
3.0 数据准备
在开始案例之前,我们先做好数据准备。假如我们有timewentby.com 和 elfgril.top 两个文件,内容如下:
[root@dongjing tail]# cat timewentby.com9932266208785JavaPHPHttps://timewentby.comWelcomeByteByte[root@dongjing tail]# cat elfgirl.topABED
3.1 tail查看timewentby.com(默认不加其他选项)
tail timewentby.com
通过观察: 确实是显示文件最后10行数据。
3.2 查看timewentby.com、elfgirl.top文件的最后5行数据
选项:
-n 或 --lines = K : 打印最后K行;使用-n +K 或者 +K 从开始的K行一直打印到文件结束(包括K行数据)。 (常用)-q --quiet 或 --silent : 从不打印文件名
命令:
# 显示文件名和空行分隔符tail -n 5 timewentby.com elfgirl.top# 使用-q 不显示文件名和空行分隔符tail -q -n 5 timewentby.com elfgirl.top
3.3 查看timewentby.com最后10个字节数据
选项:
-c 或 --bytes = K : 打印最后K个字节;使用-c +K 或者 +K从开始的第K个字节一直到文件结束(包括K位置的字符)。
命令
tail -c 10 timewentby.com
说明:tail -c 算字节是将换行符算进去的。
3.4 查看timewentby.com从开始第5个字节到结束(尾)行数据,一起带着文件名输出
选项:
-c 或 --bytes = K : 打印最后K个字节;使用-c +K 或者 +K从开始的第K个字节一直到文件结束(包括K位置的字符)。
命令
tail -c +5 timewentby.com
3.5 查看从4行到结束(尾)行数据
选项:
-n 或 --lines = K : 打印最后K行;使用-n +K 或者 +K 从开始的K行一直打印到文件结束(包括K行数据)。 (常用)
命令:
tail -n +4 timewentby.com
3.6 监控timewentby.com文件,当有内容追加时,将追加的内容打印出来。
选项:
-f 或 --follow : 打印最后10行以后,一直追踪文件新增数据变化。直到使用ctrl + c退出或者文件被修改名称又或者被删除时停止追踪。(常用)根据文件描述追踪文件-F : 打印最后10行以后,一直追踪文件新增数据变化,并保持重试。直到使用ctrl + c退出;另外文件修改名或者删除后,如果再次创建相同文件名,依然继续追踪。(常用)根据文件名称追踪文件
方法1:
tail -f timewentby.com
过程解析:
a. 在窗口1(左边)使用tail -f timewentby.com监控文件,在窗口2(右边)模拟向timewentby.com追加数据(内容为hello),可以在窗口1观察到追加的数据被打印出来。
b. 在窗口2(右边)将文件名修改(模拟删除或者修改文件名),发现窗口1没有任何的提示。
c. 紧接着在窗口2(右边)将文件名修改回来(模拟新创建一个文件或者从其他地方拷贝一个文件过来),观察窗口1没有任何变化。
d. 在接着在窗口2(右边)想timewentby.com追加数据(内容为hello),窗口1没有变化。
这个过程说明当使用tail -f 监控文件时,遇到文件名修改或者文件删除的情况,文件监控将会失效。即使从新将文件恢复过来,也不会起到监控的作用。
方法2:
tail -F timewentby.com
过程解析:
a. 在窗口1(左边)使用tail -f timewentby.com监控文件,在窗口2(右边)模拟向timewentby.com追加数据(内容为hello),可以在窗口1观察到追加的数据被打印出来。
b. 在窗口2(右边)将文件名修改(模拟删除或者修改文件名),发现窗口1有提示:tail: ‘timewentby.com’ has become inaccessible: No such file or directory。提示文件不可访问。
c. 紧接着在窗口2(右边)将文件名修改回来(模拟新创建一个文件或者从其他地方拷贝一个文件过来),观察窗口1重新读取timewentby.com全部文件内容。
d. 在接着在窗口2(右边)想timewentby.com追加数据(内容为hello),窗口1依然能够打印出来。
这个过程说明当使用tail -F 监控文件时,遇到文件名修改或者文件删除的情况,文件监控将会失效。但是有和以前名称相同的文件被发现时依然可以重新文件内容并起到监听的作用。
3.7 监控timewentby.com文件是指定某个PID,观察当PID进程结束以后监控文件是否停止
选项:
-pid = PID : 通常和-f一起使用,指定一个进程的PID,当指定进程的PID退出(执行完比或者被kill)后,则退出追踪(监控)文件。
命令:
tail -f --pid=5192 timewentby.com
说明: 这里的 --pid=5192 中的5192这个PID只是我本次测试时的值,如果你要测试一定要修改成的PID值。
过程解析:
a. 窗口2(右边1)使用命令 man tail 查看tail帮助文档
b. 窗口1(左边),使用命令 ps -ef | grep tail 查找到man tail 进程ID
c. 窗口1使用命令tail -f timewentby.com 监控文件。
d. 窗口3(右边2)使用命令 echo hello >> timewentby.com 向文件内追加内容
e. 窗口1可以观察到有追加的内容输出
f. 窗口2退出man tail进程(按下 q)
g. 窗口1中的ail -f timewentby.com进程自动退出
-s 或 --sleep-interval=N : 设置休眠间隔,单位秒,默认为1秒;如果和-f 一起使用时表示每隔N秒进行一个交互。如果和 --pid=P一起使用时表示每隔N秒至少检查一次P进程是否还在运行。
还可以使用-s 选项设置检查指定进程(-pid = PID)是否存活时间间隔
通过这个过程可以总结出监控一个文件可以和另外一个进程绑定,随着进程的销毁而停止。这个在实际的应用中可以使用到。
看到这里是不是觉得tail命令也没有什么呀。哈哈,本来就是吗。
如果你觉得这篇文章帮助到您了,麻烦您给点个赞,要是能关注就更好了!您的点赞和关注是对我最大的鼓励,同时也激励我创作出更好的作品。