head默认输出文件前10行,适合快速查看日志或配置文件头部;tail默认输出最后10行,常配合-f实时跟踪日志,-f可应对日志轮转;二者均不加载全文件,但tail对超大文件略慢。

用 head 查看文件开头几行
head 默认输出文件前 10 行,适合快速确认日志、配置文件或 CSV 的头部结构。它不加载整个文件,对大文件也很快。
常见用法:
- 查看前 5 行:
head -n 5 /var/log/syslog - 查看前 1KB 内容(按字节):
head -c 1024 access.log - 同时查看多个文件:
head -n 3 file1.txt file2.json,会自动加文件名分隔
注意:-n 参数必须带数字,head -n 单独写会报错 head: option requires an argument -- 'n';省略 -n 直接写 head 5 filename 是旧版兼容写法,但不可靠,建议始终显式用 -n。
用 tail 查看文件末尾几行
tail 默认输出最后 10 行,常用于实时跟踪日志变化(配合 -f),或检查程序崩溃前的输出。
关键操作:
- 查看最后 20 行:
tail -n 20 error.log - 从第 100 行开始往后全部显示(跳过前 99 行):
tail -n +100 data.csv - 实时追加监控:
tail -f /var/log/nginx/access.log,按Ctrl+C退出
陷阱:如果文件被轮转(如 logrotate),tail -f 可能停在旧文件句柄上,不再输出新内容。此时应改用 tail -F(大写 F),它会自动重打开新文件。
head 和 tail 的性能与边界行为
两者都按行读取,但内部处理方式不同:当指定行数远小于文件总行数时,head 从头顺序读到目标行就停止;tail 则需先定位文件末尾,再反向扫描换行符——所以对超大文件(如百 GB 日志),tail -n 1 仍可能稍慢,但通常可接受。
边界情况要注意:
- 空文件:两个命令都静默输出空行,不报错
- 行数不足:比如
head -n 100 small.txt(实际只有 3 行),就只输出全部 3 行,不会补空行 - 二进制文件:可能输出乱码甚至终端控制字符,建议先用
file或hexdump -C确认类型
想一次看头尾各 N 行?别拼管道
有人写 head -n 5 file | tail -n 5 想取中间片段,这其实只输出前 5 行里的后 5 行(也就是全部 5 行),逻辑错误。真要“头 5 行 + 尾 5 行”,得用两个命令分别执行:
head -n 5 /tmp/log.txt echo "=== SPLIT ===" tail -n 5 /tmp/log.txt
或者用 sed 更紧凑:sed -n '1,5p;$p' file(前 5 行 + 最后 1 行),但可读性差、不易维护。日常排查,分开运行更稳妥。
真正容易被忽略的是:当文件路径含空格或特殊字符时,务必用引号包裹,比如 head -n 10 "my app.log",否则 shell 会把空格当作分隔符,报错 No such file or directory。











