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

Linux cat命令详解:查看、合并与创建文件

如果不提供文件名,cat 会从标准输入读取;如果提供了多个文件,它会按参数顺序依次打印,这也是 cat 这个名字源于 concatenate(连接)的原因。

本指南讲解 Linux 中最常用的 cat 命令示例,包括重定向、行号显示、隐藏字符,以及何时改用 lessheadtail 等工具。

cat 命令语法

cat 的基本语法如下:

cat [OPTION]... [FILE]...

- OPTION - 可选的标记,用于改变 cat 打印内容的方式。
- FILE - 要读取的文件。可以提供多个;若未提供文件,cat 从标准输入读取。

使用 cat --helpcat 的手册页可查看所有可用选项。

显示文件内容

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.txtfile2.txt 的内容并在终端显示结果:

cat file1.txt file2.txt

你可以连接两个或多个文本文件并写入另一个文件。

以下命令使用 > 运算符把 file1.txtfile2.txt 的内容连接后写入新文件 combinedfile.txt

cat file1.txt file2.txt > combinedfile.txt

如果 combinedfile.txt 不存在,命令会创建它;否则会覆盖该文件。

要把 file1.txtfile2.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 读取。

输出过长
改用 lessheadtail,而不要一次性把整个文件打印到终端。

终端显示乱码
文件可能是二进制文件或包含非打印字符。打印前可用 file 命令检查。

文件被覆盖
> 运算符会覆盖目标文件。用 >> 进行追加;若想防止误覆盖,可开启 shell 的 noclobber 选项。

隐藏字符导致脚本出错
使用 cat -A filecat -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 命令最适合查看小型文本文件、合并文件,以及把文件内容送入简单的管道。对于较长的文件,请使用 lessheadtail,以便输出保持在可控范围。