ZetCode

Linux head 和 tail 命令

最后修改于 2025 年 2 月 25 日

Linux 中的 headtail 命令分别用于查看文件的开头和结尾。它们是无需打开整个文件即可快速检查文件内容的重要工具。本教程将通过实际示例介绍 headtail 的基本和高级用法。

headtail 通常用于日志文件分析、调试和实时监控文件更改。

查看文件开头

这显示了系统日志文件的顶部。

head_basic.sh
head /var/log/syslog

head 命令默认输出 /var/log/syslog 的前 10 行。这对于检查初始日志条目(如系统启动消息)非常有用。如果文件少于 10 行,则显示所有内容。使用 wc -l /var/log/syslog 检查总行数。不带选项意味着它快速而简单,适合初步查看。

查看指定行数

这显示了 CSV 文件的前几行。

head_lines.sh
head -n 5 data.csv

-n 5 选项将 head 限制为 data.csv 的前 5 行。非常适合在不加载全部内容的情况下检查大型文件的标题或示例数据。您可以使用任何数字(例如,-n 3)。旧的语法如 head -5 也有效。如果文件较短,它会显示可用的内容。使用 ls -lh 检查文件大小。

查看文件结尾

这会检查错误日志中的最新条目。

tail_basic.sh
tail /var/log/error.log

tail 命令默认显示 /var/log/error.log 的最后 10 行。这是发现最近问题(如应用程序崩溃)的理想选择。如果文件很小,它会显示所有行。与 head 不同,它从末尾开始,因此对于大文件来说效率很高。使用 ls -l 确认文件存在且有内容。

从末尾查看指定行数

这会查看日志中的最后几次事务。

tail_lines.sh
tail -n 5 transactions.log

-n 5 选项告诉 tail 输出 transactions.log 的最后 5 行。非常适合在不滚动完整文件的情况下查看最近的活动。根据需要调整数字(例如,-n 20)。旧样式 tail -5 等效。如果存在的行数少于指定行数,它会显示所有行。先与 wc -l 结合使用以计算总行数。

实时监控文件更改

这会在 Web 服务器日志更新时对其进行监视。

tail_follow.sh
tail -f /var/log/apache2/access.log

-f(follow)选项使 tail 保持运行,显示添加到 /var/log/apache2/access.log 的新行。对于实时监控(如跟踪网站点击)至关重要。按 Ctrl+C 停止。如果文件未更新,则不会显示新内容。使用 -n 20 -f 从最后 20 行开始。如果文件为空,请使用 ls -l 检查权限。

查看多个文件

这会比较两个日志的开头或结尾。

multiple_files.sh
head auth.log app.log
tail auth.log app.log

head 命令会显示 auth.log 然后 app.log 的前 10 行,并带有 ==> auth.log <== 这样的标题。tail 对最后 10 行做同样的事情。非常适合并排检查。添加 -n 5 来调整行数。如果某个文件丢失,它会跳过并发出警告。事先使用 ls 验证文件是否存在。

高级:合并 head 和 tail

这会提取报告的中间部分。

combine_head_tail.sh
head -n 50 report.txt | tail -n 10

这会将 headreport.txt 的前 50 行通过管道传递给 tail,然后 tail 输出这 50 行中的最后 10 行——即第 41-50 行。非常适合在大型文件中定位特定范围。调整数字(例如,head -n 100 | tail -n 20)以获取不同的部分。如果文件行数少于 head 的限制,tail 会相应调整。使用 wc -l 测试文件长度。

示例:查看字节而不是行

这会显示文件的开头或结尾的字节。

bytes_view.sh
head -c 100 binary.dat
tail -c 50 binary.dat

-c 100 选项使 head 显示 binary.dat 的前 100 个字节,而 tail -c 50 显示最后 50 个字节。对于二进制文件或精确的数据块(例如,标题)非常有用。像 -c 1k(1KB)这样的单位也有效。输出可能包含不可打印字符;通过管道传递给 odhexdump 以提高可读性。使用 ls -lh 检查大小。

示例:从开头跳过行

这会跳过 CSV 文件的标题。

skip_lines.sh
tail -n +2 data.csv

-n +2 选项告诉 taildata.csv 的第 2 行开始,跳过第一行(例如,标题)。使用 +N 从第 N 行开始。非常适合不需要标题的数据处理。如果文件行数少于指定行数,它会从头开始显示。与 head 结合使用(例如,tail -n +2 | head -n 5)以获取一个范围。使用 cat -n 进行验证。

示例:与其他命令结合过滤

这会在最近的日志条目中查找错误。

filter_combo.sh
tail -n 50 error.log | grep "ERROR"

这会使用 tail 获取 error.log 的最后 50 行,然后将它们通过管道传递给 grep,以仅显示包含“ERROR”的行。非常适合调试最近的问题。调整 -n 以指定范围;将 -f 添加到 tail 以进行实时过滤。区分大小写的搜索?使用 grep -i。使用 wc -l error.log 检查日志大小,以设置合理的范围。

head 和 tail 的最佳实践

来源

GNU head 手册

GNU tail 手册

在本文中,我们探讨了使用 headtail 命令查看文件内容的各种示例,包括实时监控以及结合使用这两个命令进行高级文件检查。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Linux 教程