tail 是一个在 Linux、macOS 和其他类 Unix 操作系统中非常常用的命令行工具,它的核心功能非常直观:

tail 命令用于显示文件的开头部分(默认是末尾 10 行)。
你可以把它想象成查看一本书的“最后一页”或“目录页”,在系统管理和调试中,我们经常需要查看日志文件的最新内容,tail 命令就是完成这项任务的最佳工具。
核心功能与基本用法
基本用法:查看文件的末尾部分
如果不带任何选项,tail 会默认显示指定文件的10 行。
语法:

tail [文件名]
示例:
假设你有一个名为 system.log 的日志文件,你想看它的最新内容。
tail system.log
输出:
2025-10-27 10:30:05 INFO: User 'alice' logged in successfully.
2025-10-27 10:30:15 WARN: Disk space is running low on /dev/sda1.
2025-10-27 10:31:02 INFO: Scheduled backup job started.
2025-10-27 10:35:48 ERROR: Failed to connect to database.
2025-10-27 10:35:49 INFO: Retrying database connection...
2025-10-27 10:35:50 INFO: Database connection established.
2025-10-27 10:40:01 INFO: User 'bob' logged in.
2025-10-27 10:45:33 INFO: User 'charlie' logged out.
2025-10-27 10:50:00 INFO: System health check passed.
2025-10-27 10:55:12 INFO: User 'david' logged in.
指定行数:-n 选项
如果你想查看文件末尾的任意行数,可以使用 -n 选项。
语法:

tail -n [行数] [文件名]
示例:
查看文件 system.log 的最后 5 行。
tail -n 5 system.log
输出:
2025-10-27 10:45:33 INFO: User 'charlie' logged out.
2025-10-27 10:50:00 INFO: System health check passed.
2025-10-27 10:55:12 INFO: User 'david' logged in.
快捷写法:
-n 选项可以简写为 ,并且数字 N 前面可以加 或不加。
tail -N等同于tail -n N(显示最后 N 行)tail +N等同于tail -n +N(从第 N 行开始显示到文件末尾)
示例:
查看文件 system.log 的最后 20 行。
tail -20 system.log
进阶用法
实时追踪文件变化:-f (follow)
这是 tail 命令最强大、最常用的功能之一,它允许你实时监控一个文件的增长,特别是对于那些不断写入新内容的文件(如日志文件)。
当你运行 tail -f 时,它会打开文件并显示其末尾内容,然后会一直保持打开状态,每当有新的内容被追加到文件末尾时,tail 会立即在终端上显示出来,就像“追剧”一样。
语法:
tail -f [文件名]
示例:
假设有一个 Web 服务器正在向 access.log 文件写入访问日志,你可以在一个终端窗口运行:
tail -f access.log
在另一个终端窗口访问你的网站,你会在第一个终端窗口中实时看到新的访问日志记录被打印出来。
要停止实时追踪,只需在 tail -f 运行的终端按下 Ctrl + C。
同时监控多个文件:-f 与多个文件名
你可以使用 tail -f 同时监控多个文件。tail 会为每个文件打印一个头部信息,标明是哪个文件的新内容。
语法:
tail -f [文件1] [文件2] ...
示例: 同时监控系统日志和应用程序日志。
tail -f /var/log/syslog /var/log/app.log
输出可能如下:
==> /var/log/syslog <==
Oct 27 11:00:01 my-server kernel: [ 0.000000] Linux version 5.15.0-76-generic (buildd@lcy01-amd64-015) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #83-Ubuntu SMP Thu Jun 15 19:16:32 UTC 2025
==> /var/log/app.log <==
2025-10-27 11:00:05 INFO: Application started.
2025-10-27 11:00:06 INFO: Loading configuration from /etc/app/config.ini.
==> /var/log/syslog <==
Oct 27 11:00:02 my-server systemd[1]: Started Daily apt download activities.
==> /var/log/app.log <==
2025-10-27 11:00:07 INFO: Listening on port 8080.
当你看到 ==> /var/log/syslog <== 这样的行时,表示接下来的输出是来自 syslog 文件的新内容。
从指定字节开始显示:-c 选项
如果你不想按行查看,而是想从文件末尾的某个字节位置开始显示,可以使用 -c 选项。
语法:
tail -c [字节数] [文件名]
示例:
查看文件 data.txt 的最后 100 个字节。
tail -c 100 data.txt
显示除最后 N 行外的所有内容:-q 和 -v 选项
这两个选项主要用于处理多个文件。
-q或--quiet/--silent: 不显示文件名头部。-v或--verbose: 总是显示文件名头部。
当 tail 处理多个文件时,默认行为是显示文件名头部,以便区分不同文件的内容。-q 可以关闭这个行为。
总结表格
| 选项 | 全称 | 描述 | 示例 |
|---|---|---|---|
-n |
--lines=[NUM] |
显示文件末尾的 NUM 行。 | tail -n 50 file.txt |
-c |
--bytes=[NUM] |
显示文件末尾的 NUM 个字节。 | tail -c 1024 file.txt |
-f |
--follow[=name|descriptor] |
实时追踪文件增长,这是 tail 的“杀手级”功能。 |
tail -f /var/log/nginx/access.log |
-F |
--follow=name |
类似于 -f,但如果文件被移动或删除,会尝试重新打开同名文件,常用于日志轮转。 |
tail -F /var/log/syslog |
--pid=PID |
--pid=PID |
与 -f 一起使用,当指定的进程 ID (PID) 终止时,tail 也会退出。 |
tail -f --pid=1234 log.txt |
-q |
--quiet / --silent |
在处理多个文件时,不显示文件名。 | tail -q file1.log file2.log |
-v |
--verbose |
在处理多个文件时,总是显示文件名。 | tail -v file1.log file2.log |
实际应用场景
- 调试应用程序:查看应用程序的日志文件,实时追踪错误信息和运行状态。
tail -f /var/log/myapp/error.log
- 监控系统:实时查看系统日志、安全审计日志等。
tail -f /var/log/auth.log
- 分析 Web 服务器访问:查看 Web 服务器的访问日志,分析用户访问模式或排查问题。
tail -f /var/log/apache2/access.log
- 查看大文件的最新内容:当你有一个巨大的日志文件,只想知道最新的发生了什么时,
tail是最快的工具。
tail 是系统管理员、开发人员和任何需要在命令行下工作的人的必备工具,尤其是在处理日志文件时,它的 -f 选项更是不可或缺。
