head 默认显示前10行,无需参数;-n按行、-c按字节截取;处理大文件安全高效;文件不存在时退出码非零,需用2>/dev/null || true忽略错误。

head 命令怎么只看前 10 行
默认就是看前 10 行,直接 head filename 就行。不用加参数,也不用记默认值——它真就默认是 10。
常见错误是以为要写 head -n 10 才保险,其实多此一举;反过来,如果写了 head -n 却没跟数字,会报错 head: option requires an argument -- 'n'。
- 想看前 5 行:用
head -n 5 filename - 想看前 1 行(比如取第一行当标题):用
head -n 1 filename - 文件名含空格?加引号:
head "my file.txt"
head 怎么处理大文件不卡住
大日志文件(比如几个 GB 的 access.log)用 head 是安全的——它只读开头部分,不会加载整个文件。这点比 cat filename | head -n 10 稍好,因为管道会让 cat 启动并尝试读完整文件(虽然实际会被 head 关闭读端,但仍有开销)。
- 推荐直接
head -n 20 /var/log/syslog,别套管道 - 如果文件是 FIFO 或设备(比如
/dev/random),head会按需读取后退出,不会死等 - 注意:某些老旧 BusyBox 版本的
head不支持-c(按字节截取),但-n都支持
head -c 和 head -n 的区别到底在哪
-n 按行数,-c 按字节数——这是本质区别,不是“差不多”。比如一个 UTF-8 中文文件,一行可能占多个字节,head -n 1 能完整取出第一行(含换行符),而 head -c 10 可能切在中文字符中间,导致乱码或截断。
- 查文件头格式(如 PNG、PDF):用
head -c 8 filename看 magic bytes - 提取前 N 个字符(非行):必须用
-c,-n无能为力 -
head -c -10 filename表示“去掉末尾 10 字节”,这个负数用法容易被忽略,但很实用
head 在脚本里怎么避免报错退出
如果文件不存在或没权限,head 默认返回非零退出码,可能导致 set -e 脚本中断。这不是 bug,是设计行为——它把“无法读取”当作失败,而非静默跳过。
- 想忽略错误继续执行:
head -n 1 filename 2>/dev/null || true - 想区分“空文件”和“文件不存在”:
head -n 1 filename对空文件输出为空但退出码是 0;对不存在的文件退出码是 1 - 检查文件是否存在再执行更稳妥:
[ -f filename ] && head -n 1 filename
真正麻烦的是那种“文件存在但只有几行,却硬要 head -n 100”——这完全没问题,head 就是这么设计的:行数不够就输出全部,不报错也不补空行。










