应使用 head 而非 cat -10,因 cat 不支持行数截断;head 默认输出前 10 行,推荐用 head -n 10 保证可移植性;空文件静默输出,二进制文件需谨慎处理。

直接用 head,别碰 cat -10 —— 后者根本不存在,会报错。
为什么不能用 cat -10
cat 命令不支持行数截断参数,cat -10 filename 会被解释为“读取名为 -10 和 filename 的两个文件”,结果通常是:cat: invalid option -- '1' 或 No such file or directory。这个错误在 CI/CD 流水线、Alpine 容器或老版 BusyBox 环境里尤其常见,且难以排查。
- 新手常从搜索引擎抄错命令,把
head -10记混成cat -10 - 脚本里硬编码
cat -N,换环境就挂,而head -n N是 POSIX 标准,全平台兼容 -
cat本身是拼接(concatenate)工具,不是查看器;强行让它“截断”违背设计意图
head -n 10 和 head -10 有区别吗
有,而且影响可移植性。head -10 是 head -n 10 的简写,在大多数 GNU/Linux 发行版上能用,但不是所有系统都支持:
- Alpine Linux(默认用 BusyBox
head):执行head -10会报head: option requires an argument -- '10' - 某些嵌入式系统或最小化镜像:只认
-n显式写法 - 和
tail -10混用时容易误判对称性——tail -10支持度更高,但依然不推荐依赖
所以统一用 head -n 10 filename,哪怕多敲两个字符,也省去后续调试时间。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
空文件、超大文件、二进制文件怎么处理
head 不加载整个文件,只读到目标行就停止,所以 GB 级日志也能秒出结果。但要注意三类边界情况:
- 空文件:
head -n 10 empty.txt静默输出空,不报错也不提示,脚本里需用test -s预判 - 行数不足(如只有 3 行):
head -n 10只输出这 3 行,不会补空行,行为符合预期 - 二进制文件(如
/bin/ls):head /bin/ls可能输出乱码甚至破坏终端;应先file /bin/ls确认类型,或改用head -c 64 /bin/ls控制字节数
想同时看前 10 行和后 10 行怎么办
别写 head -n 10 file | tail -n 10 —— 这只会输出前 10 行里的最后 10 行(也就是全部 10 行),不是你想要的“头尾各 10 行”。
- 正确做法是分两次调用:
head -n 10 file和tail -n 10 file,中间加echo "=== SPLIT ==="分隔 - 如果必须单条命令,可用
sed,但难读难维护,比如sed -n '1,10p; $(wc -l —— 这种写法既不可靠又不值得 - 自动化脚本中,优先选逻辑清晰、结果可控的方式,而不是“看起来更短”
真正容易被忽略的是:head 在管道中行为一致(比如 ps aux | head -n 5),但很多人只记得它查文件,忘了它还能截取任意命令输出 —— 这才是日常高频用法。










