cat命令是gnu coreutils包中的posix标准工具,默认存在于所有标准linux发行版中,用于查看、合并和创建文件;其核心功能包括显示文件内容、编号行、显示非打印字符及处理标准i/o。

cat 命令不需要安装——它在所有标准 Linux 发行版中默认存在,属于 coreutils 软件包的一部分。如果你执行 cat --version 报错,那不是“没装”,而是环境异常(比如容器镜像被精简、PATH 损坏或 shell 限制)。
为什么 cat 不是“要安装的命令”
cat 是 POSIX 标准工具,和 ls、echo 一样属于基础系统能力。几乎所有发行版(Ubuntu、CentOS、Alpine、Debian)默认自带。即使最小化安装的系统,只要没手动删掉 coreutils,cat 就在。
- 检查是否存在:
which cat或command -v cat - 确认归属:
rpm -qf $(which cat)(RHEL/CentOS)或dpkg -S $(which cat)(Debian/Ubuntu)会显示它来自coreutils - 真缺失?只可能出现在极简容器(如
scratch或某些 distroless 镜像)中——此时不该“装 cat”,而应换用带busybox的基础镜像,或改用sh -c 'echo "$(cat file)"'这类绕过方式
cat 查看小文件的正确姿势
小文件(通常指 cat 直接输出,但要注意终端是否截断、编码是否乱码、是否含控制字符。
- 基础查看:
cat filename—— 最简,但若文件末尾无换行符,shell 提示符会粘在最后一行后面,容易误判内容是否完整 - 带行号且防粘连:
cat -n filename——-n强制给每行编号,同时隐式确保每行以换行结尾,视觉更可靠 - 过滤不可见字符:
cat -A filename—— 显示$(行尾)、^I(tab)、^M(CR),帮你识别 Windows 换行或隐藏控制符 - 避免误刷屏:
cat filename | head -n 50—— 即使你认为“很小”,也建议加head防一手;尤其当文件可能被意外追加时
cat 和 less / head / tail 的边界在哪
别迷信“小文件就一定用 cat”。实际工作中,以下情况哪怕只有 3 行,也该换命令:
- 文件路径含空格或特殊字符:用
cat容易报错,改用less "./my file.txt"更安全 - 不确定是否为纯文本:
file filename先判断类型;若返回data或UTF-8 Unicode text, with CRLF line terminators,就别直接cat,先less -f或hexdump -C filename | head - 想快速确认末尾是否有新日志:
tail -n 3 filename比cat看全部更高效,也避免漏掉最后几行 - 终端宽度窄、行超长:用
cat会自动折行,但折点不可控;less -S可水平滚动,真正看清长行
容易被忽略的细节
很多人把 cat 当作“万能打印器”,但它的行为受环境变量和文件本身影响极大:
-
cat不做编码转换:如果文件是 GBK 编码,而终端是 UTF-8,cat会原样输出乱码;此时应先用iconv -f GBK -t UTF-8 filename转码,再 pipe 给cat -
cat读取失败时不总报错:比如权限不足时可能静默输出空,需配合|| echo "read failed"检查退出码 -
cat *.log展开顺序依赖 locale:中文环境下可能按拼音排,而非字典序;如需确定顺序,显式用printf '%s\n' *.log | sort | xargs -I{} cat {}











