Linux查看文件前几行或后几行 head和tail常用技巧

落雪吖_4109

落雪吖_4109

2026-04-10

547人浏览

原创

用 head -n 参数可灵活控制行数:正数取前n行,负数排除末尾n行;跳过前m行需结合 tail -n +m 与 head;大文件慎用超大 -n 值,超长行可能导致失败。

linux查看文件前几行或后几行 head和tail常用技巧

查看文件开头几行用 head,但默认 10 行不够用怎么办

head 默认只输出前 10 行,实际中经常要查前 5 行、前 1 行(比如看 CSV 表头),或跳过开头若干行再取。关键靠 -n 参数控制行数,支持正负两种写法:

  • head -n 5 file.txt:取前 5 行
  • head -n -3 file.txt:排除最后 3 行,即取“除末尾三行外的所有行”——这个容易误以为是“从第 3 行开始”,其实不是
  • 想跳过前 2 行再取 5 行?tail -n +3 file.txt | head -n 5,不能只用 head 实现
  • 大文件慎用 head -n 1000000,虽然快,但若行极长(如单行 JSON),仍可能卡住——本质是按换行符读,不是按字节截

用 tail 实时跟踪日志,但 -f 卡住或不刷新

tail -f 是运维最常用的实时监控手段,但它依赖文件是否被“追加写入”且内核缓冲是否及时刷出。常见问题不是命令写错,而是场景不匹配:

  • 程序用 printf 写日志但没加 \n,或开了全缓冲(如 C 的 setvbuf),tail -f 就看不到——因为没换行,tail 不认为是“新行”
  • 日志文件被轮转(logrotate)后,tail -f 会停在原 inode,不再跟随新文件。应改用 tail -F(大写 F),它能检测文件重命名/重建并自动 reopen
  • tail -f -n 0 file.log 表示“从当前末尾开始监听”,避免刷屏历史内容;而 -n 20 是先输出最后 20 行再监听
  • 某些容器环境(如 Docker)日志驱动为 json-file,直接 tail -f /var/lib/docker/containers/xxx/xxx-json.log 可能乱码,因每行是完整 JSON——这时需要 jq 配合解析

head 和 tail 处理二进制文件或超长行会出什么问题

这两个命令设计初衷是处理文本,遇到非文本内容时行为不可靠:

onewo-rtlinux
onewo-rtlinux

Linux 实时编程助手。生成、审查并修改用于周期性控制任务和中断驱动程序的 C 代码。强制实施实时调度策略。

下载
  • 对二进制文件(如 .png、.zip)执行 head file.png,可能输出乱码甚至卡终端(尤其含 ANSI 转义序列时)。真要查二进制头,用 xxd -l 32 file.png 或 od -N 32 -c file.png
  • 某行超 2MB(glibc 默认行缓冲上限),head -n 1 可能失败并报 head: cannot open 'file' for reading: Argument list too long——这不是权限问题,是内部 malloc 失败
  • tail -n 1 在超大文件上依然很快,因为它从文件末尾反向找换行符,不加载全文;但若最后一行本身超长且无换行,tail 会尝试读到文件头,变慢甚至 OOM
  • 跨平台注意:macOS 的 tail 不支持 -F(需用 brew install coreutils 换成 gtail)

管道中组合使用 head/tail 时顺序和性能陷阱

很多人习惯把 head 放管道前面“提前截断”,但顺序错了反而更慢:

  • cat huge.log | head -n 100 | grep ERROR:看似合理,实则 cat 还是得读完整个文件(除非 head 能让上游感知 EOF 并退出)。正确做法是 head -n 100 huge.log | grep ERROR,让 head 直接打开文件并只读前 N 行
  • tail -n +100 file.txt | head -n 10 等价于“跳过前 99 行,取接下来 10 行”,但比 sed -n '100,109p' 多一次进程调度,小文件无所谓,高频调用建议压成单条 sed 或 awk
  • 用 tail -n +2 去掉第一行(如 CSV 表头)很常见,但如果文件只有 1 行,结果为空——不会报错,容易静默丢失数据,脚本里需加 if [ $(wc -l 判断

真正麻烦的不是语法,是当文件没有换行符、被并发写入、或者路径指向符号链接时,head 和 tail 的行为会偏离直觉。动手前先 file file.txt 看类型,再 stat file.txt 看 inode 和 size 变化趋势,比硬试更省时间。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

1975

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

2662

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

916

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

2979

7

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

889

5

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.25

2380

5

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

2023.06.20

628

5

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.28

1009

10

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

2023.07.24

645

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习