如何在Linux上使用Tail命令

Linux ail命令显示文件末尾的数据。它甚至可以实时显示添加到文件中的更新。我们向您展示如何使用它。

系统杀了尾巴吗?

Tail命令显示文件末尾的数据。通常,新数据会添加到文件的末尾,因此Tail命令是查看文件中最新添加内容的一种快捷而简单的方法。它还可以监视文件,并在文件中出现每个新文本条目时将其显示出来。这使得它成为监控日志文件的一个很棒的工具。

许多现代Linux发行版都采用了操作系统和服务管理器。这是第一个执行的进程,它的进程ID为1,并且它是所有其他进程的父进程。此角色过去由较旧的init系统处理。

随之而来的是一种新的系统日志文件格式。不再以纯文本创建,在systemd下,它们以二进制格式记录。要读取这些日志文件,必须使用Jouractl实用程序。尾部命令使用纯文本格式。它不读取二进制文件。那么,这是否意味着Tail命令是寻找问题的解决方案呢?它还有什么可以提供的吗?

除了实时显示更新之外,Tail命令还有更多的功能。在这个问题上,仍然有大量的日志文件不是系统生成的,仍然是以纯文本文件的形式创建的。例如,应用程序生成的日志文件没有更改其格式。

使用尾部

将文件名传递给Tail,它将显示该文件的最后10行。我们使用的示例文件包含已排序单词的列表。每一行都有编号,因此按照示例操作并查看各种选项的效果应该很容易。

tail word-list.txt

要查看不同的行数,请使用-n(行数)选项:

tail -n 15 word-list.txt

实际上,您可以省略“-n”,只使用连字符“-”和数字。确保它们之间没有空格。从技术上讲,这是一个过时的命令表单,但它仍然在手册页中,并且仍然有效。

tail -12 word-list.txt

对多个文件使用Tail

您可以让Tail一次处理多个文件。只需在命令行上传递文件名:

tail -n 4 list-1.txt list-2.txt list-3.txt

每个文件都会显示一个小标题,这样您就可以知道这些行属于哪个文件。

显示从文件开头开始的行

+(从开始计数)修饰符使尾部显示从文件开头开始的行,从特定行号开始。如果您的文件非常长,并且您选择了靠近文件开头的一行,那么您将得到很多发送到终端窗口的输出。如果是这样的话,通过管道从Tail输出到LESS是有意义的。

tail +440 list-1.txt

您可以以受控方式翻阅文本。

由于此文件中恰好有20,445行,因此此命令相当于使用“-6”选项:

tail +20440 list-1.txt

使用带尾部的字节

您可以使用-c(字节)选项告诉Tail使用以字节为单位的偏移量,而不是以行为单位的偏移量。如果您有一个格式化为常规大小记录的文本文件,这可能会很有用。请注意,换行符被视为一个字节。此命令将显示文件中的最后93个字节:

tail -c 93 list-2.txt

您可以将-c(字节)选项与+(从文件开始计数)修饰符组合使用,并指定从文件开始计数的偏移量(以字节为单位):

tail -c +351053 list-e.txt

连接到尾部的管道

早些时候,我们通过管道将Tail的输出转换为LESS。我们还可以将其他命令的输出通过管道传输到Tail。

要识别修改时间最早的五个文件或文件夹,可以使用带有ls的-t(按修改时间排序)选项,并将输出通过管道传输到Tail。

ls -tl | tail -5

HEAD命令列出从文件开头开始的文本行。我们可以结合使用Tail和Tail来提取文件的一部分。现在,我们使用head命令从文件中提取前200行。它被输送到尾部,尾部提取最后10行。这给我们提供了从191行到200行的结果。即前200行中的最后10行:

head -n 200 list-1.txt | tail -10

此命令列出了最耗费内存的五个进程。

ps aux | sort -nk +4 | tail -5

我们来分析一下。

ps命令显示有关正在运行的进程的信息。使用的选项包括:

答:列出所有进程,而不仅仅是当前用户的进程。 u:显示面向用户的输出。 x:列出所有进程,包括那些不在TTY内运行的进程。

SORT命令对ps的输出进行排序。我们在排序中使用的选项包括:

N:我按数字排序。 K+4:按第四列排序。

Tail-5命令显示排序输出中的最后五个进程。这是最耗费内存的五个进程。

使用Tail实时跟踪文件

使用Tail可以轻松跟踪到达文件(通常是日志文件)的新文本条目。在命令行上传递文件名,并使用-f(跟随)选项。

tail -f geek-1.log

当每个新的日志条目添加到日志文件中时,Tail会更新其在终端窗口中的显示。

您可以优化输出,使其仅包含特定相关或感兴趣的行。在这里,我们使用grep仅显示包含单词“Average”的行:

tail -f geek-1.log | grep average

要跟踪对两个或更多文件的更改,请在命令行上传递文件名:

tail -f -n 5 geek-1.log geek-2.log

每个条目都标记有一个标头,该标头显示文本来自哪个文件。

每次新条目到达后续文件时,显示都会更新。要指定更新周期,请使用-s(休眠周期)选项。这告诉Tail在两次文件检查之间等待若干秒(在本例中为5秒)。

tail -f -s 5 geek-1.log

诚然,您不能通过查看屏幕截图来判断,但是文件的更新是每两秒进行一次。新文件条目每五秒在终端窗口中显示一次。

当您将文本添加到多个文件时,可以隐藏指示文本来自哪个日志文件的标头。使用-q(安静)选项执行此操作:

tail -f -q geek-1.log geek-2.log

文件的输出以文本的无缝混合形式显示。没有任何迹象表明每个条目来自哪个日志文件。

尾巴还是有价值的

虽然现在由Jouralctl提供对系统日志文件的访问,但Tail仍然可以提供很多功能。当它与其他命令结合使用时,通过管道进入或退出尾部时尤其如此。

systemd可能已经改变了格局,但传统实用程序仍然有一席之地,这些实用程序符合Unix的理念,即做一件事并做好它。

相关文章