Linux命令之tail – 输出文件尾部/动态监视文件尾部

Linux命令之tail – 输出文件尾部/动态监视文件尾部本文链接:http://codingstandards.iteye.com/blog/832575  (转载请注明链接)用途说明tail命令可以输出文件的尾部内容,默认情况下它显示文件的最后十行。它常用来动态监视文件的尾部内容的增长情况,比如用来监视日志文件的变化。与tail命令对应的是head命令,用来显示文件头部内容。 常用参数格式:tailfile

大家好,又见面了,我是你们的朋友全栈君。

本文链接:http://codingstandards.iteye.com/blog/832575   (转载请注明链接)

用途说明

tail命令可以输出文件的尾部内容,默认情况下它显示文件的最后十行。它常用来动态监视文件的尾部内容的增长情况,比如用来监视日志文件的变化。与tail命令对应的是head命令,用来显示文件头部内容。

 

常用参数

格式:tail file

输出指定文件file的尾部内容,默认输出最后十行内容(output the last part of files。Print  the  last 10 lines of each FILE to standard output. )

 

格式:tail file1 file2 …

指定多个文件时,会显示每个文件的文件名称,再显示该文件的尾部内容(With more than one FILE, precede each with a header giving the file name.)

 

格式:tail

格式:tail –

不指定文件时,表明从标准输入读取内容,这通常用在管道线后面,把前一个命令的输出作为tail的输入内容(With no FILE, or when FILE is -, read standard input.)

 

格式:tail –n file

格式:tail -n n file

格式:tail –lines=n

显示文件最后n 行,比如tail -20 file就是显示文件最后10行,这个参数可以配合其他参数与使用。注意上面三种格式的斜体n 是实际要显示的行数的数值。

 

注意:tail -n可以显示最后n行的文本内容。那么有没有一种方式显示从n行开始的文本内容,答案是肯定的。

tail -n +4 file表示显示文件file从第4行开始的内容。从1开始计数。

 

格式:tail -f file

动态跟踪文件file的增长情况(output appended data as the file grows),tail会每隔一秒去检查一下文件是否增加新的内容,如果增加就追加在原来的输出后面显示。但这种情况,必须保证在执行tail命令时,文件已经存在。

如果想终止tail -f的输出,按Ctrl+C中断tail程序即可。如果按Ctrl+C不能中断输出,那么可以在别的终端上执行killall tail强行终止。

 

注意:采用tail -f来监控文件变化情况时,在某些情况会不太灵。比如在java应用程序中采用log4j日志时,每隔1个小时生成一个新的日志文件,当前的日志输出在LOG4J.LOG中,当一个小时过去后,log4j会将LOG4J.LOG改名成LOG4J.yyyy-mm-dd-HH的形式。那么这个时候tail -f就不能动态输出新的日志内容了。tail命令本身提供了很多参数,似乎都不能完美的解决这个问题。最后只好编写了一个脚本ftail.sh来跟踪日志,详见《Linux下实时跟踪log4j日志文件的bash脚本 – 增强了tail -f的功能 》。刚才我仔细查看了tail的手册页,发现tail -F就能够做到跟踪这种类型的日志。转念一想,这种需求应该早就被Linux世界的人给满足了的。

 

格式:tail -F file

格式:tail –follow=name –retry file

功能与tail -f file相同,也是动态跟踪文件的变化,不同的是执行此命令时文件可以不存在。

 

以上处理都是针对文本文件的,下面是针对二进制文件的情形。

 

格式:tail -c n file

取文件file的最后n个字节。

 

格式:tail -c +n file

取文件file的第n个字节后的内容。从1开始计数。

使用示例

示例一 输出文件尾部

先使用seq命令输出20个数字保存到1.txt,然后尝试使用tail命令。

[root@new55 ~]# seq 20 >1.txt 
[root@new55 ~]# cat 1.txt 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@new55 ~]# tail 1.txt 
11
12
13
14
15
16
17
18
19
20
[root@new55 ~]# tail -3 1.txt 
18
19
20
[root@new55 ~]# tail -n 3 1.txt 
18
19
20
[root@new55 ~]# tail –lines=3 1.txt 
18
19
20

[root@new55 ~]# tail -n +14 1.txt 
14
15
16
17
18
19
20
[root@new55 ~]#

 

示例二 动态跟踪tomcat输出

动态跟踪tomcat输出。

[root@web logs]# tail -f catalina.out 
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:619)
2010-12-03 13:23:02,236 [http-80-15] DEBUG mhr.roi.MhrManager – MhrGetJobReq={seq=991,job_id=’86130469-0006′}
2010-12-03 13:23:02,301 [http-80-15] DEBUG mhr.roi.MhrManager – MhrGetJobRsp={seq=991,result=0(成功),,info={job_id=’86130469-0006′,employer_id=86130469,employer_name=无锡富士时装有限公司,,,job_title=’|570309|’,job_title0=’文员’,job_type=f(全职),issue_time=’2010-11-03 00:00:00.0′,work_address=’1902′,work_address0=无锡市,desired_count=’1′,,,,,,job_desc=大专,1年以上5s管理工作经验,电脑操作熟练。,required_experience=1(一年以上),,,,required_degree=15(大专),,,,,,,valid_days=30,access_count=12,expire_time=’2010-12-03 00:00:00.0′,job_status=1(过期),,,,,,contact_name=王小姐,contact_number=0510-85550088,remarks=’★此职位是从后台导入的
‘,enter_time=’2010-11-03 09:45:11.0’,change_time=2010-12-03 02:18:05.0,,job_seq=123201,,required_min_age=22,,,accommodations=面议,serve_principal=wjw12580,job_summary=大专,1年以上5s管理工作经验,电脑操作熟练,,}}
2010-12-03 13:23:02,302 [http-80-15] DEBUG mhr.roi.MhrManager – MhrGetEmployerReq={seq=0,employer_id=’86130469′}
2010-12-03 13:23:02,304 [http-80-15] DEBUG mhr.roi.MhrManager – MhrGetEmployerRsp={seq=0,result=0(成功),,info={employer_id=’86130469′,employer_name=无锡富士时装有限公司,employer_region=1902,employer_address=无锡市滨湖镇山水城科技园8号,,employer_desc=无锡富士时装(集团)有限公司成立于1992年,是中日韩合资企业。主要生产高档针织时装,产品全部外销,连续多年荣获“中国行业500强”、“全国工业重点行业效益十佳企业”、“无锡市百佳企业”等称号。公司总部位于江苏省无锡市滨湖镇山水城科技园,全新的厂房设施,占地面积30亩。公司分别在苏州、泰兴、盐城、徐州设有分厂,集团公司现有职工1500多人,年销售额近3亿元。,,,,,,open_mode=5(系统自动操作),open_time=’2010-11-03 09:45:10.0′,,,,,contact_name=王小姐,contact_number=0510-85550088,,,,,employer_status=1(已经开通),,,login_password=871386,,agency=false,balance=100.0000,,,,,serve_principal=wjw12580,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,remarks=’此帐号由“12580zgz-盐城维克多网络传媒有限公司”导入’,enter_time=’2010-11-03 09:45:10.0′,}}
Ctrl+C 
[root@web logs]#

 

示例三 动态跟踪log4j日志

经过我的试验,发现tail -F功能的强大,它等同于–follow=name –retry。如果你跟踪的文件被移动或者改名后, 你还想继续tail它, 你可以使用这个选项。

tail手册页中关于–retry的说明:keep trying to open a file even if it is inaccessible when tail starts or  if  it  becomes  inaccessible later; useful when following by name, i.e., with –follow=name。 tail命令开始执行时文件不存在或者执行过程中文件不能访问,会不断重试。

关于–follow的说明:-f, –follow[={name|descriptor}] output appended data as the file grows; -f, –follow, and –follow=descriptor are equivalent –follow=descriptor表明跟踪的是文件描述符,  –follow=name表明跟踪的是文件名称。 如果文件名称改掉之后,还想继续跟踪原文件名称对应的尾部内容,就得使用-F选项而不是-f选项了。

[root@web imx_server]# tail -F log/IMX.LOG 
14:13:28.892  INFO ImxConnection[6] imx.server.ImxConnection – RX IMX_ACTIVE_TEST{seq=3460,client_id=1291343201649042,presence_status=1(presence_status_online),}
14:13:28.892 DEBUG ImxConnection[6] org.logicalcobwebs.proxool.ImxDB – 006417 (01/02/00) – Connection #9 served
14:13:28.892  INFO ImxConnection[6] imx.dbo.ImxOnlineInfoRow – EXEC SQL UPDATE imx_online_info SET last_active_time = ‘2010-12-03 14:13:28.0’ WHERE account = ‘zhy’
14:13:28.894 DEBUG ImxConnection[6] org.logicalcobwebs.proxool.ImxDB – UPDATE imx_online_info SET last_active_time = ‘2010-12-03 14:13:28.0’ WHERE account = ‘zhy’;  (1 milliseconds)
14:13:28.894 DEBUG ImxConnection[6] org.logicalcobwebs.proxool.ImxDB – 006417 (00/02/00) – Connection #9 returned (now AVAILABLE)
14:13:29.625  INFO ImxConnection[6] imx.server.ImxConnection – RX IMX_ACTIVE_TEST{seq=3461,client_id=1291343201649042,presence_status=1(presence_status_online),}
14:13:29.626 DEBUG ImxConnection[6] org.logicalcobwebs.proxool.ImxDB – 006418 (01/02/00) – Connection #8 served
14:13:29.626  INFO ImxConnection[6] imx.dbo.ImxOnlineInfoRow – EXEC SQL UPDATE imx_online_info SET last_active_time = ‘2010-12-03 14:13:29.0’ WHERE account = ‘zhy’
14:13:29.627 DEBUG ImxConnection[6] org.logicalcobwebs.proxool.ImxDB – UPDATE imx_online_info SET last_active_time = ‘2010-12-03 14:13:29.0’ WHERE account = ‘zhy’;  (0 milliseconds)
14:13:29.653 DEBUG ImxConnection[6] org.logicalcobwebs.proxool.ImxDB – 006418 (00/02/00) – Connection #8 returned (now AVAILABLE)
Ctrl+C 
[root@web imx_server]#

 

总结一下:要想跟踪会更名的日志的话,用tail -F而不是tail -f。

 

示例四 处理二进制文件

[root@new55 ~]# seq 20 >1.txt 
[root@new55 ~]# cat 1.txt 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@new55 ~]# hexdump -C 1.txt 
00000000  31 0a 32 0a 33 0a 34 0a  35 0a 36 0a 37 0a 38 0a  |1.2.3.4.5.6.7.8.|
00000010  39 0a 31 30 0a 31 31 0a  31 32 0a 31 33 0a 31 34  |9.10.11.12.13.14|
00000020  0a 31 35 0a 31 36 0a 31  37 0a 31 38 0a 31 39 0a  |.15.16.17.18.19.|
00000030  32 30 0a                                          |20.|
00000033
[root@new55 ~]# tail -c 10 1.txt | hexdump -C 
00000000  0a 31 38 0a 31 39 0a 32  30 0a                    |.18.19.20.|
0000000a
[root@new55 ~]# tail -c -10 1.txt | hexdump -C 
00000000  0a 31 38 0a 31 39 0a 32  30 0a                    |.18.19.20.|
0000000a
[root@new55 ~]# tail -c +10 1.txt | hexdump -C 
00000000  0a 36 0a 37 0a 38 0a 39  0a 31 30 0a 31 31 0a 31  |.6.7.8.9.10.11.1|
00000010  32 0a 31 33 0a 31 34 0a  31 35 0a 31 36 0a 31 37  |2.13.14.15.16.17|
00000020  0a 31 38 0a 31 39 0a 32  30 0a                    |.18.19.20.|
0000002a
[root@new55 ~]#

 

问题思考

相关资料

【1】Linux宝库  head,tail,sed   
【2】Tai的日记  tail -f 和 -F 的用法   
【3】CSDN论坛  tail -f run.log 导致 tail: run.log: file truncated     
【4】短裤党    tail -f 退出不了?      
【5】新课网    linux下tail命令创建自解压tar文件教程

 

返回 我使用过的Linux命令系列总目录

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136124.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月4日 上午7:36
下一篇 2022年6月4日 上午7:36


相关推荐

  • Excel 科学计数法数值转换

    Excel 科学计数法数值转换Excel 科学计数法数值转换 解决数据超过 15 位后面几位变成 0 的问题

    2026年3月16日
    2
  • linux(8)Linux 查看端口占用情况「建议收藏」

    linux(8)Linux 查看端口占用情况「建议收藏」前言平常使用linux,我们经常需要查看哪个服务占用了哪个端口,接下来就为大家介绍了2种Linux查看端口占用情况可以使用lsof和netstat命令。1.lsof-i:端口号用

    2022年8月6日
    5
  • 孤儿进程与僵尸进程[总结]「建议收藏」

    孤儿进程与僵尸进程[总结]「建议收藏」1、前言之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入

    2022年7月2日
    26
  • QT基本介绍

    QT基本介绍一、什么是QT?Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。二、发展历史1991年Qt最早由奇趣科技开发1996年进入商业领域,它也是目前流行的Linux桌面环境…

    2022年5月13日
    114
  • WebLogic的下载与安装

    WebLogic的下载与安装一、WebLogic的介绍WebLogic是美国bea公司出品的一个applicationserver,确切的说是一个基于Javaee架构的中间件,纯java开发的,最新版本WebLogicSe

    2022年7月1日
    33
  • oracle 11g安装时未能满足某些最低安装要求

    oracle 11g安装时未能满足某些最低安装要求本文是转载文章,文章的来源:csdn博客博主:huazicomeon文章:oracle11g安装时未能满足某些最低安装要求博文地址:https://blog.csdn.net/huazicomeon/article/details/53337849失败描述:Oracle安装包在"先决条件检查"步骤报告"未能满足某些最低安装要求。请复查并修复下表中列出的问题,然后重新检查系统。"并在安装界面下方…

    2022年7月25日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号