在Linux系统里,cat命令是最常被使用的文件处理工具之一,它的名字来自concatenate(连接),最基础的能力是把一个或多个文件的内容连续输出到标准输出设备,也就是终端屏幕。掌握它不仅能查看文本,还能在脚本里完成文件合并与内容传递。

一、cat命令的基本语法
cat命令的通用格式非常简单,通常由命令本身、可选参数以及一个或多个文件参数组成。如果不加任何参数,直接写cat后面跟文件名,系统就会打开该文件并把内容全部打印出来。这种设计让它成为排查配置文件、查看日志的首选。
需要注意的是,cat并不是分页器,它会一次性把所有内容抛到屏幕上。如果文件很大,终端会快速滚动,用户根本看不清开头。因此cat更适合中小文件,或者配合其他命令如more、grep来使用。下面是最直接的一个调用示例:
# 查看单个文件内容 cat /etc/hostname # 同时查看多个文件 cat file1.txt file2.txt
二、常用参数详解
1. 显示行号 -n 与 -b
在排查代码或日志时,行号能帮我们快速定位。参数-n会为每一行编号,包括空行;而-b只给非空行编号,忽略空白行。这两个参数在对比文件差异、引用具体行时非常实用。
例如查看脚本时只想看有效代码行数,用-b更清爽。但如果需要严格对应文件物理行,就得用-n。示例如下:
# 所有行显示编号 cat -n config.conf # 仅非空行编号 cat -b script.sh
2. 压缩连续空行 -s
很多配置文件或程序输出会包含成片空白行,影响阅读。参数-s可以把多个相邻空行压缩成单独一行,让版面更紧凑。它不改变文本内容,只是减少视觉干扰。
这个参数常和-n组合使用,既压缩空行又显示编号。对于从Windows传到Linux的文档,常因换行符问题出现怪异空白,此时-s能稍微缓解阅读压力,但根本解决还需dos2unix工具。
# 压缩空行并编号 cat -sn log.txt
3. 显示特殊字符 -A
当文件出现莫名格式错乱,可能是隐藏的制表符或回车符作怪。参数-A等价于-vET,会把行尾的换行显示为$,制表符显示为^I,其他非打印字符也可见。这能帮我们揪出脚本里混用的空格与Tab。
比如Shell脚本若用空格代替Tab写在了该用Tab的地方,执行会报错。用cat -A一眼就能看出。示例如下:
# 显示所有特殊符号 cat -A deploy.sh
三、cat的文件合并与重定向
cat真正的威力在于连接。把多个文件依次传给cat,它会按参数顺序拼接输出。配合Shell的重定向符号>或>>,就能生成新文件或追加内容。这在日志归档、配置整合时极高效。
但要注意,使用>会覆盖目标文件,操作前务必确认。若想安全合并,可先预览再写入。以下示例把三个日志按时间顺序合并:
# 合并三个文件到 all.log cat jan.log feb.log mar.log > all.log # 追加而不是覆盖 cat extra.log >> all.log
四、常见误区与替代方案
1. 用cat打开大文件
有人习惯直接cat几十兆的日志,结果终端卡死。因为cat不加区分地全量读取,对大文件极不友好。正确做法是用less或more分页,或者用tail看末尾。
如果非要用cat处理大文件,也应配合管道过滤,例如只取含错误的行:
# 过滤大文件中的ERROR行 cat huge.log | grep ERROR
2. 误把cat当编辑器
cat本身不能编辑,网上有些用cat配合重定向“修改”文件的方法,实则先覆盖再写,容易清空原内容。小规模改动请用sed或vim,避免数据丢失。
若仅想在文件头加一行说明,可用临时文件中转,而非冒险用cat直接重写:
# 安全地在文件前加注释 echo "# generated by script" | cat - old.conf > new.conf
五、在脚本中的实际运用
在自动化任务里,cat常用来把模板文件内容读入变量,或把多段配置拼成最终文件。结合Here Document还能在脚本内嵌文本块,提升可维护性。
下面例子展示用cat读取模板并替换占位符,生成最终Nginx配置。这种方式比一行行echo更直观:
#!/bin/bash
DOMAIN="ipipp.com"
cat > site.conf <<EOF
server {
listen 80;
server_name $DOMAIN;
root /var/www/$DOMAIN;
}
EOF
通过上述用法可以看出,cat虽简单,却贯穿了Linux日常操作的方方面面。理清参数差异、规避误用场景,才能让它成为顺手而非添乱的工具。