Linux显示文件最后几行内容,tail 显示文件最后若干行内容

功能:tail命令可以输出文件的尾部内容,默认情况下它显示文件的最后十行。

显示每个指定文件的最后10 行到标准输出。若指定了多于一个文件,程序会在每段输出的开始添加相应文件名作为头。如果不指定文件或文件为"-" ,则从标准输入读取数据。

它常用来动态监视文件的尾部内容的增长情况,比如用来监视日志文件的变化。

语法:tail   [选项]   [文件]

短选项长选项涵义

-c [+] K--bytes=[+] K输出最后 K 字节;另外,使用-c +K 从每个文件的第 K 字节输出

-n [+] K--lines=[+] K输出最后 K 行,代替最后10 行;使用-n +K 从每个文件的第 K 字节输出

-f--follow=descriptor

--follow=namedescriptor是 --follow 默认值,所以 -f 等价 --follow 等价--follow=descriptor

即时输出文件变化后追加的数据。

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

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

--pid=PID同 -f 使用,当 PID 所对应的进程死去后,终止。

---retry即使目标文件不可访问依然试图打开;在与参数-f 或 --follow=name 同时使用时常常有用。

-F--follow=name --retry与 -f 相同,也是动态跟踪文件的变化,不同的是执行此命令时文件可以不存在。

--max-unchanged-stats=NN 默认为5,使用--follow=name,重新打开一个在 N 次迭代后没有改变大小的文件来看它是否被解除连接或重命名(这是循环日志文件的通常情况)。

由于有inotify,这个选项很少使用。

-s S--sleep-interval=S与 -f 合用,表示在每次反复的间隔休眠 S 秒

对于 --pid=PID ,每隔 S 秒检查进程。

-q--quiet 或 --silent不输出文件名

-v--verbose总是输出给出文件名的首部

K 后面可以跟乘号:

b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,GB 1000*1000*1000, G 1024*1024*1024, 对于T, P, E, Z, Y 同样适用。

如果 + K (字节或者行数),那么从每个文件的开头算起的第 K 项开始显示。否则,显示该文件的最后 K 项。

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

同时按键盘上 Ctrl 键 和 C 键,退出显示。

tail 实例

测试的文件内容如下

[[email protected] tail_test]$ cat tail_test

1  04_libraryTest

2  a.out

3  a.out.symbol

4  autotools

5  core.31058

6  cpp_test

7  download_blog

8  gpg_test

9  hello-1.0.tar.gz

10  hello-2.0

11  hello-2.0.tgz

12  main.cpp

13  mysql20110512.sql

14  rsynctest

15  tail_

16  tail_test

显示文件的最后10行

[[email protected] tail_test]$ tail tail_test   显示文件tail_test的最后10行

7  download_blog

8  gpg_test

9  hello-1.0.tar.gz

10  hello-2.0

11  hello-2.0.tgz

12  main.cpp

13  mysql20110512.sql

14  rsynctest

15  tail_

16  tail_test

显示文件的最后N行

[[email protected] tail_test]$ tail -n 5 tail_test   显示文件tail_test的最后5行

12  main.cpp

13  mysql20110512.sql

14  rsynctest

15  tail_

16  tail_test

从第5行开始显示文件

[[email protected] tail_test]$ tail -n +5 tail_test   注意指定的数字前面 + 代表从这个数字相应的位置开始,显示后面的内容

5  core.31058

6  cpp_test

7  download_blog

8  gpg_test

9  hello-1.0.tar.gz

10  hello-2.0

11  hello-2.0.tgz

12  main.cpp

13  mysql20110512.sql

14  rsynctest

15  tail_

16  tail_test

显示文件最后38个字节的内容

[[email protected] tail_test]$ tail -c 38 tail_test

ynctest

15  tail_

16  tail_test

显示文件第38个字节开始之后的内容

[[email protected] tail_test]$ tail -c +38 tail_test

3  a.out.symbol

4  autotools

5  core.31058

6  cpp_test

7  download_blog

8  gpg_test

9  hello-1.0.tar.gz

10  hello-2.0

11  hello-2.0.tgz

12  main.cpp

13  mysql20110512.sql

14  rsynctest

15  tail_

16  tail_test

注意指定的数字前面 + 代表从这个数字相应的位置开始,显示后面的内容。

跟踪文件,tail -f 两种模式

默认是以文件描述符方式,跟踪文件的增长

[[email protected] tail_test]$ tail -f tail_test   此时等价于命令 --follow=descriptor tail_test

7  download_blog

8  gpg_test

9  hello-1.0.tar.gz

10  hello-2.0

11  hello-2.0.tgz

12  main.cpp

13  mysql20110512.sql

14  rsynctest

15  tail_

16  tail_test

这里,输入之后,显示默认的文件的后10行,但是tail并没有因此而结束,而是一直在运行着,保持这那个文件对应的索引节点的打开状态。 接下来

如果使用 echo new >>tail_test ,向文件追加新内容。那么会看到tail又继续将追加的内容打印出来。

如果使用 echo new > tail_test ,清空原内容并重新写入新内容。那么tail会输出类似"tail: tail_test: file truncated"的字样来告诉文件内容被truncated了。

这个命令用于:跟踪动态增长的文件。例如系统日志。在默认情况下,根据它自己的文件描述符号来跟踪文件。但是,有的程序追加文件内容的时候会将文件删除然后新建立一个。例如有些日志程序会在一定的时候将追加的日志文件重命名,然后再建立一个之前同名的新日志文件追加新的内容,这样的话这个命令就不好用了。再例如有些编辑器例如vim进行修改文件的时候,无法跟踪其变化。通过"ls -il"对vim编辑之前的文件和之后的文件的inode号对比发现,两者不同,应当是编辑的时候先删除文件的索引节点再新建立一个,新建的节点内容才包含了最新的内容,而之前tail打开的那个索引节点已经被删除了,看不见了,所以当然不会发生变化。

如果想要确定那么就先用"ps -aux |grep tail"找到tail的进程号,进入/proc目录的tail进程号目录中,查看其fd文件中的某个描述符号,例如"cat 3"这样会发现原来的内容。

以文件名方式,跟踪文件增长

[[email protected] tail_test]$ tail --follow=name tail_test

7  download_blog

8  gpg_test

9  hello-1.0.tar.gz

10  hello-2.0

11  hello-2.0.tgz

12  main.cpp

13  mysql20110512.sql

14  rsynctest

15  tail_

16  tail_test

这样,tail根据文件名称跟踪文件的变化,默认来说tail就根据它自己的文件描述符号来跟踪文件,就像前面所说的,有的程序追加文件内容的时候会将文件删除然后新建立一个,例如有些日志程序会在一定的时候将追加的日志文件重命名,然后再建立一个之前同名的新日志文件追加新的内容,那么默认的方式就无法跟踪到文件的变化了,因为文件描述符号是代表一个索引节点的,而新追加的内容可能追加到新的索引节点上面了,这个时候就使用这个 --follow=name 选项。这样,如果当文件新追加内容是追加到同一名称的不同索引节点的情况发生时,那么tail那里就会提示 "tail: “tail_test” has been replaced;  following end of new file"之后,再重新显示追加之后的新的最后10行。

tail -f 与 tail -F

tail -f 和tail -F 的区别

-f 参数,如果在追踪此文档时,此文档被删除、转移或者重建了, 那就停止不会再输出了。

-F 参数,如果在追踪此文档时,此文档被删除、转移或者重建了, 那会再重新try那個同名的那個文档, 如果重建了, 会继续追踪此文档。

tail -f 文件-f 是--follow[=HOW]的缩写。"[=HOW]"有两个写法,一个"=descriptor",另一个是"=name"。[=HOW]省略时,默认使用的是"--follow=descriptor"。-f 等价 -follow 等价--follow=descriptor。

第一个窗口

[[email protected] ~]# tail -f messages.3

helll test2

第二个窗口

[[email protected] ~]# rm messages.3

rm: remove regular file `messages.3'? y

[[email protected] ~]# echo "helll test3">>messages.3

但是第一个窗口的tail -f 命令不会出现 hello test3

descriptor 虽然是默认的参数,但是不一定是最有用的。比如在tail 一个log文件的时候,这个文件很可能是按照日期或者大小滚动,文件滚动之后这个tail -f 命令,就失效了。

如果你跟踪的文件被被删除、转移或者重建, 你还想继续tail它, 你可以使用这个 tail --follow=name 或者 tail -F

tail -F 文件-F 是 -follow=name --retry 的缩写。--follow=name 是按照文件名跟踪文件,可以定期去重新打开文件检查文件是否被其它程序删除并重新建立。 --retry 这个参数,保证文件重新建立后,可以继续被跟踪。

第一个窗口

[[email protected] ~]# tail -F messages.3

helll test1

tail: `messages.3' has become inaccessible: No such file or directory

tail: `messages.3' has appeared;  following end of new file

helll test2

第二个窗口

[[email protected] ~]# rm messages.3

rm: remove regular file `messages.3'? y

[[email protected] ~]# echo "helll test3">>messages.3

第一个窗口可以看到,中间删除了messages.3,但重新创建后并输入helll test2,会继续显示出来。

tail -F 更强大

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 选项了。

[[email protected] 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

[[email protected] imx_server]#

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux中,你可以使用"tail"命令来显示文件最后几行。默认情况下,"tail"命令将显示文件最后10。你可以使用"-n"选项指定要显示的数,例如,如果要显示文件最后20,可以运以下命令: tail -n 20 文件名 其中"文件名"是你想查看的文件的名称。 ### 回答2: 在Linux系统中,有多种方法可以显示文件最后几行。以下是其中的三种常用方法: 方法一:使用tail命令 tail命令是Linux系统的一个强大的工具,它可以用来展示文件的最后几行。我们可以在终端中输入以下命令来显示文件最后10: ``` tail -n 10 文件名 ``` 其中,-n参数表示要显示文件最后几行,我们可以自替换想要的数字。例如,如果我们想要查看文件的最后20,则输入: ``` tail -n 20 文件名 ``` 方法二:使用sed命令 除了使用tail命令,我们还可以使用sed命令来显示文件最后几行。以下是使用sed命令来查看文件的最后10的命令: ``` sed -n -e :a -e "1,$L!{P;N;D;};N;ba" 文件名 | tail -n 10 ``` 上述命令通过一个小技巧,先将整个文件读入到内存中,然后再输出文件的最后几行。其中,tail -n 10命令用于输出最后10。 方法三:使用less命令 less是一个常用的Linux终端工具,它可以用于浏览文件。我们可以通过以下命令来使用less命令显示文件最后几行: ``` less 文件名 ``` 接着,按下Shift + G,就可以跳转到文件的最后。然后,我们可以再按下Shift + F,不断向上滚动,直到找到想要的最后几行。 ### 回答3: 在 Linux 中,可以使用一些命令来显示文件最后几行。 1. tail命令 tail 命令是一种用于在终端中显示文件最后几行的命令。tail 命令默认显示文件最后 10 ,可以使用参数 -n 来自定义显示数,例如: tail -n 5 file.txt 上面的命令会以终端输出 file.txt 文件的最后 5 。 2. cat命令 + tail命令组合 cat 命令用于显示文件内容,可以结合 tail 命令使用来显示文件最后几行。例如: cat file.txt | tail -n 5 上面的命令会以终端输出 file.txt 文件的最后 5 。 3. sed命令 sed 命令是一种流编辑器,也可以使用它来显示文件最后几行。例如: sed -n '$p' file.txt 上面的命令会以终端输出 file.txt 文件的最后。 总之,通过使用 tail 命令、cat 命令和 tail 命令组合、sed 命令,可以方便地显示文件最后几行。用户可以根据需要选择合适的命令来实现目标。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值