Linux tail 命令

17 Mar 2025 | 6 分钟阅读

Linux tail 命令用于显示一个或多个文件的最后十行。它的主要目的是读取错误消息。默认情况下,它显示文件的最后十行。此外,它还用于实时监控文件更改。它是 head 命令的补充命令。

tail 简介

默认情况下,tail 命令显示文件内容。显示从行、512 字节块或输入内的块位置开始。包含前导加号的数字与输入的开始相关,例如,"-c +2" 在第二个输入字节处开始显示。包含前导减号或没有显式符号的数字与输入的完成相关,例如,"-n 2" 显示最后两行输入。"-n 10" 或最后十行输入是默认的起始位置。

tail 命令将指定文件复制到 stdout,从指定位置开始。如果未指定文件,则复制 stdin。复制从 +number 位置(从输入开始测量)或 -number(从输入完成处测量)开始。根据附加的 b、c 或 l 标志,数字以字节、1K 块或行计量。-101 是默认值。

此外,r 标志导致 tail 命令从文件末尾开始反向显示行。f 标志导致 tail 命令在显示完末尾后继续监视并显示更多数据。

语法

实现

GNU coreutils 中包含的 tail 版本由 Jim Meyering、Ian Lance Taylor、David MacKenzie 和 Paul Rubin 指定。该命令作为独立包提供给 Microsoft Windows,是 UnxUtils 一系列通用 GNU 类 Unix 实用程序的原生 Win32 端口的一部分。FreeDOS 版本由 M. Aitchison 集成。此外,tail 命令是 ASCII 为 MSX-DOS2 提供的 MSX-DOS2 Tools 的组件。

CCZE 在显示彩色结果时也类似于 tail。pctail 与 CCZE 相同。它是一个用 Python 编写的彩色 tail,可以对 syslog 结果进行着色和 tail。Inotail 是一个 detracted inotify 内核接口实现。早期版本的 tail 每次都会轮询以检查是否可以显示新数据。Inotail 使用 Linux 内核的 inotify 接口,该接口于 2015 年 8 月在 2.6.13 版本中引入,因此它只检查新数据。

MultiTail 不仅以多种颜色显示日志文件;它还可以过滤、滚动回、合并和将终端屏幕分割成子窗口。它或多或少是 Beeper、diff、grep、CCZE/pctail、watch、sed、tail 等的组合。

文件监控

tail 命令有两个特殊的行选项 -F 和 -f,允许管理文件。tail 命令不只是显示一些最后几行然后关闭,而是显示行并审计文件。当新行被其他进程添加到文件时,tail 命令可以更新显示。

特别是,它对于审计日志文件非常有用。旧版本的 tail 命令默认每次都轮询文件,但它支持 2005 年 8 月 Linux 内核 2.6.13 版本中指定的 inotify 基础结构,该基础结构仅在内核通知修改时才监视文件。

默认行为

tail 命令的默认用法是显示文件的最后十行。创建一个文件 'num.txt',其中包含数字 1 到 15(每个数字占一行)。

让我们通过执行不带任何参数的 tail 命令来打开它,如下所示

考虑下面的输出

Linux File tail

从上面的输出中,我们可以看到 'num.txt' 的最后十行被显示出来了。

tail 的选项

  • --block=number, -b number: number 512 字节块是位置。
  • --bytes=number, -c number: number 字节是位置。
  • -f: 此选项使 tail 命令在达到文件末尾时不会停止,而是等待其他数据被添加到输入中。当 stdin 是管道时,此选项被避免,但当它是 FIFO 时则不避免。
  • -F: 此选项表示 -f 标志,但 tail 命令还会查找跟踪的文件是否已轮换或重命名。如果 tail 命令发现读取的文件名包含新 inode 的编号,则文件将被关闭并重新打开。

如果跟踪的文件变得不可用或被删除,tail 命令将继续搜索,并在文件创建时显示文件内容。当从 stdin 而不是文件读取时,-F 选项类似于 -f 选项。

  • --lines=number, -n number: number 行是位置。
  • -q: -q 选项用于在监控两个或多个文件时抑制标题打印。
  • -r: -r 选项导致输入按行反向显示。此选项还会修改 -n、-b 和 -c 选项的含义。如果调用了 -r 选项,这些选项将定义要显示的 512 字节块、行或字节的总数,而不是从输入开始或结束开始显示的字节、块或行。对于 -r,默认是显示所有输入。

除非指定了 -q 选项,否则所有文件都以 **"==> XXX <=="** 字符串组成标题进行前缀,其中 XXX 是文件名,如果指定了多个文件。

显示特定行数

'-n' 选项显示指定行数。要指定行数,请执行如下命令

它将从末尾显示指定行数。请看下面的例子

上面的命令将显示 'num.txt' 的最后五行。我们也可以省略字母 'n',而是使用连字符 (-) 和数字,中间没有空格。请看下面的输出

Linux File tail

从上面的输出中可以看出,'num.txt' 的最后五行被显示出来了。

显示指定字节数

'-c' 选项从末尾显示指定的字节数。要显示指定的字节数,请执行如下命令

它将显示指定的字节数。请看下面的例子

上面的命令将显示从末尾开始 up to 6 字节的文件内容。请看下面的输出

Linux File tail

从上面的输出中,显示了 'num.txt' 文件的最后六个字节。

我们也可以在数字后面使用后缀,例如 b、kb、k、MB 等来指定字节数。这些后缀将指定的数字乘以

b:乘以 512。

kb:乘以 1000。

k:乘以 1024。

MB:乘以 1000000。

跟踪文件更改

要跟踪文件更改,可以使用 '-f' 选项。这里,'-f' 表示“跟随”。它对于监控日志文件很有用。执行以下命令

上面的命令将监控 'num.txt' 文件。要退出监控,请按 "CTRL+C" 键。请看下面的输出

Linux File tail

显示多个文件

我们可以通过执行 tail 命令一次显示多个文件的末尾内容。要显示多个文件,请将文件名作为输入。它将显示指定文件的最后十行。

例如,我们有另一个文件 'alphabet.txt',其中包含字母表中的每个字符,每个字符占一行。要显示 'num.txt' 和 'alphabet.txt' 这两个文件,请执行以下命令

上面的命令将显示指定文件的最后十行。请看下面的输出

Linux File tail

从上面的输出中可以看出,指定文件的最后十行被同时显示出来了。

Tail 与其他命令结合使用

tail 命令可以与其他命令一起使用。它可以被管道传输到其他命令以过滤输出。请看下面的命令

从上面的命令中,我们将 tail 命令与 ls 命令管道化。它将只显示最后修改的六个文件或文件夹。请看下面的输出

Linux File tail

让我们执行 tail 命令和 ps 命令以显示顶部正在运行的进程。执行以下命令

考虑下面的输出

Linux File tail
下一主题Linux cat