当你需要查看配置文件、把两个文件拼接在一起,或往新文件里写入几行内容时,cat 通常是最快的办法。该命令会把文件内容打印到标准输出,因此无论单独使用还是放在管道中都很方便。

如果不提供文件名,cat 会从标准输入读取;如果提供了多个文件,它会按参数顺序依次打印,这也是 cat 这个名字源于 concatenate(连接)的原因。
本指南讲解 Linux 中最常用的 cat 命令示例,包括重定向、行号显示、隐藏字符,以及何时改用 less、head 或 tail 等工具。
cat 命令语法
cat 的基本语法如下:
cat [OPTION]... [FILE]...
- OPTION - 可选的标记,用于改变 cat 打印内容的方式。
- FILE - 要读取的文件。可以提供多个;若未提供文件,cat 从标准输入读取。
使用 cat --help 或 cat 的手册页可查看所有可用选项。
显示文件内容
cat 命令最基础、最常见的用法是读取文件内容。
例如,以下命令会在终端显示 /etc/issue 文件的内容:
cat /etc/issue
重定向文件内容
除了把输出显示到 stdout(屏幕上),你也可以将其重定向到文件。
以下命令使用 > 运算符把 file1.txt 的内容复制到 file2.txt:
cat file1.txt > file2.txt
注意:> 运算符会覆盖目标文件。若要改为追加,请使用 >>。
提示:通常你会用 cp 命令来复制文件。
如果 file2.txt 不存在,该命令会创建它;否则会覆盖该文件。
使用 >> 运算符把 file1.txt 的内容追加到 file2.txt:
cat file1.txt >> file2.txt
同上,如果文件不存在则会被创建。
显示行号
要带行号显示文件内容,使用 -n 选项:
cat -n /etc/os-release
1 NAME="Ubuntu" 2 VERSION="24.04 LTS (Noble Numbat)" 3 ID=ubuntu 4 VERSION_CODENAME=noble
-b 选项类似,但它只为非空行编号:
cat -b file.txt
压缩连续空行
使用 -s 选项可将连续的空行压缩成单个空行:
cat -s file.txt
显示隐藏字符
cat 命令可以显示终端中通常不可见的字符。
要把制表符显示为 ^I,使用 -T:
cat -T /etc/hosts
127.0.0.1^Ilocalhost 127.0.1.1^Ilinuxize
制表符会显示为 ^I。
要在每行末尾显示 $,使用 -E:
cat -E /etc/os-release
NAME="Ubuntu"$ VERSION="24.04 LTS (Noble Numbat)"$ ID=ubuntu$ VERSION_CODENAME=noble$
-v 选项使用脱字符(caret)表示法显示控制字符(制表符和换行符 LF 除外),并用 M- 表示法表示高位被置位的字符:
cat -v file.txt
Windows 风格 CRLF 换行中的回车符会显示为 ^M,这是脚本因莫名其妙的错误而失败的常见原因。
要同时显示制表符、行尾和其他非打印字符,使用 -A,它等价于 -vET:
cat -A file.txt
连接文件
向 cat 命令传入两个或多个文件名作为参数时,这些文件的内容会被连接起来。cat 会按参数给定的顺序读取文件,并按相同顺序显示内容。
例如,以下命令会读取 file1.txt 和 file2.txt 的内容并在终端显示结果:
cat file1.txt file2.txt
你可以连接两个或多个文本文件并写入另一个文件。
以下命令使用 > 运算符把 file1.txt 和 file2.txt 的内容连接后写入新文件 combinedfile.txt:
cat file1.txt file2.txt > combinedfile.txt
如果 combinedfile.txt 不存在,命令会创建它;否则会覆盖该文件。
要把 file1.txt 和 file2.txt 的内容连接后追加到 combinedfile.txt,使用 >> 运算符:
cat file1.txt file2.txt >> combinedfile.txt
如果文件不存在则会被创建。
连接操作也可以与上一节的选项组合,例如 cat -n file1.txt file2.txt 可为合并后的输出添加行号。
创建文件
用 cat 创建小文件通常比打开文本编辑器更快。
要创建新文件,可使用 cat 命令,后接重定向运算符 > 和你要创建的文件名。按 Enter,输入文本,完成后按 CTRL+D 保存文件。
在下面的示例中,我们创建一个名为 file1.txt 的新文件:
cat > file1.txt
如果已存在名为 file1.txt 的文件,它会被覆盖。使用 >> 运算符可将输出追加到已有文件。
cat >> file1.txt
在新的一行按 CTRL+D 即可结束输入并返回 shell。
将 cat 与管道配合使用
cat 命令常与管道配合,把文件内容传给另一个命令。例如,你可以用 grep 显示日志文件并搜索某个模式:
cat /var/log/syslog | grep "error"
对于单个文件,下面这种更简短的写法通常更好:
grep "error" /var/log/syslog
要统计文件行数,可以把 cat 通过管道传给 wc:
cat file.txt | wc -l
当不需要管道时,直接写法更简单:
wc -l file.txt
查看大文件
虽然 cat 对小型文件很有用,但对大文件并不理想,因为它会一次性把所有内容打印到终端。
对于大文件,建议考虑使用:
- less - 一次一屏地查看文件内容,可滚动
- more - 与 less 类似但功能更少
- head - 显示文件开头几行
- tail - 显示文件末尾几行
less /var/log/syslog
head -20 file.txt
tail -50 file.txt
用 tac 反向打印文件
tac 命令与 cat 相反,它从最后一行开始、以相反顺序打印文件内容:
tac file.txt
当你想先看到最新条目的日志文件时,这很有用。
故障排查
Permission denied(权限不足)
用 ls -l file.txt 检查文件权限。如果文件需要提升的权限,使用 sudo cat file.txt 读取。
输出过长
改用 less、head 或 tail,而不要一次性把整个文件打印到终端。
终端显示乱码
文件可能是二进制文件或包含非打印字符。打印前可用 file 命令检查。
文件被覆盖> 运算符会覆盖目标文件。用 >> 进行追加;若想防止误覆盖,可开启 shell 的 noclobber 选项。
隐藏字符导致脚本出错
使用 cat -A file 或 cat -vET file 显示制表符、回车符和其他非打印字符。
快速参考
如需可打印的快速参考,请参阅 cat 速查表。
| 命令 | 说明 |
|---|---|
cat file.txt | 显示文件内容 |
cat file1 file2 | 按顺序显示多个文件 |
cat -n file.txt | 为所有行显示行号 |
cat -b file.txt | 仅为非空行编号 |
cat -s file.txt | 压缩连续的空行 |
cat -v file.txt | 显示非打印字符,如 ^M |
cat -A file.txt | 显示隐藏字符,等价于 -vET |
cat file1 > file2 | 复制文件内容并覆盖目标 |
cat file1 >> file2 | 追加到文件 |
cat > file.txt | 创建或覆盖文件 |
cat >> file.txt | 把键入的内容追加到文件 |
tac file.txt | 反向显示文件 |
结论
cat 命令最适合查看小型文本文件、合并文件,以及把文件内容送入简单的管道。对于较长的文件,请使用 less、head 或 tail,以便输出保持在可控范围。