cat 命令是什么?
cat 是 concatenate (连接、串联) 的缩写,虽然它的名字意思是“连接”,但最广为人知的用途是显示文件内容。

cat 命令在 Linux/Unix 系统中是标准输入输出流处理工具,功能强大且用途广泛。
基本语法
cat [选项] [文件名...]
- 选项: 用于控制
cat命令的行为。 - 文件名: 可以是一个或多个文件名。
cat会将这些文件的内容按顺序连接并输出到标准输出(通常是你的终端屏幕)。
主要功能和常用选项
显示文件内容 (最常用的功能)
这是 cat 最简单的用法,如果只提供一个文件名,它会将该文件的全部内容打印到屏幕上。
示例:
假设你有一个名为 hello.txt 的文件,内容如下:
Hello, World!
This is a test file.
执行命令:

cat hello.txt
终端输出:
Hello, World!
This is a test file.
注意事项:
- 如果文件非常大(比如几百MB或几GB),使用
cat会让你的终端窗口瞬间被刷屏,导致你无法看到文件的开头部分,对于大文件,推荐使用less或more命令进行分页查看。less bigfile.log
同时显示多个文件
cat 可以按顺序连接并显示多个文件的内容。
示例:
你有 file1.txt 和 file2.txt 两个文件。

cat file1.txt file2.txt
终端会先显示 file1.txt 的全部内容,紧接着显示 file2.txt 的全部内容。
重定向到新文件
你可以使用输出重定向符 > 将 cat 的输出(一个或多个文件的内容)写入到一个新文件中,如果目标文件已存在,它将被覆盖。
示例:
cat file1.txt file2.txt > combined.txt
执行后,会创建一个名为 combined.txt 的新文件,其内容是 file1.txt 和 file2.txt 的连接。
追加到现有文件
使用输出追加重定向符 >> 可以将 cat 的输出追加到现有文件的末尾,而不是覆盖它。
示例:
假设 combined.txt 已经存在,你想要在它后面再添加 file3.txt 的内容:
cat file3.txt >> combined.txt
这样,combined.txt 的末尾就会增加 file3.txt 的内容。
从标准输入读取内容
当你不带任何文件名运行 cat 时,它会进入“交互模式”,等待你从键盘输入,你可以输入任意多行文本,按 Ctrl+D (EOF, End of File) 结束输入,cat 会将你输入的所有内容输出到标准输出。
示例:
cat
然后你开始输入:
This is line 1.
This is line 2.
And this is the final line.
最后按 Ctrl+D,终端会原样输出你输入的三行内容。
这个功能通常与输入重定向 < 或管道 结合使用,但最经典的应用是创建一个新文件。
使用 cat 创建一个新文件并写入内容:
cat > my_new_file.txt
然后输入你想要写入的内容,最后按 Ctrl+D就会被保存到 my_new_file.txt 中。
常用选项详解
| 选项 | 全称 | 描述 | 示例 |
|---|---|---|---|
-n |
--number |
对所有输出的行数进行编号(包括空行)。 | cat -n hello.txt |
-b |
--number-nonblank |
对非空行进行编号,空行不显示行号。 | cat -b hello.txt |
-A |
--show-all |
显示所有字符,包括不可见的字符,如行尾的 (使用 -E) 和制表符 ^I (使用 -T),这是 -vET 的组合。 |
cat -A file_with_tabs.txt |
-T |
--show-tabs |
将制表符显示为 ^I。 |
cat -T file_with_tabs.txt |
-E |
--show-ends |
在每行结尾显示 符号。 | cat -E hello.txt |
-s |
--squeeze-blank |
将连续的多个空行压缩为一个空行。 | cat -s messy_file.txt |
-v |
--show-nonprinting |
使用 ^ 和 M- 来显示控制字符(除了 Tab 和 Line Feed)。 |
cat -v control_chars.txt |
实用技巧和高级用法
使用 cat 显示行号
# 显示行号(包括空行)
$ cat -n script.sh
1 #!/bin/bash
2 echo "Hello, World!"
3 for i in {1..5}
4 do
5 echo "Number $i"
6 done
7
# 只对非空行编号
$ cat -b script.sh
1 #!/bin/bash
2 echo "Hello, World!"
3 for i in {1..5}
4 do
5 echo "Number $i"
6 done
7
查看文件中的特殊字符
文件中可能包含看不见的空格或制表符,这会导致脚本或程序出错,使用 -A 或 -vTE 可以轻松识别它们。
# 假设文件末尾有一个看不见的空格 $ cat -A file_with_issue.txt Hello, World!^M$ <-- ^M 表示 Windows 的回车符 (CRLF) Goodbye^I$ <-- ^I 表示一个制表符
合并多个文件并添加标题
你可以通过命令的组合来实现更复杂的功能,合并多个文件,并在每个文件内容前添加一个标题。
# 使用 echo 和 cat 的组合 echo "===== Section 1: Log Data =====" > report.log cat system.log >> report.log echo -e "\n\n===== Section 2: Error Log =====" >> report.log cat error.log >> report.log
cat vs. less, more, head, tail
初学者常常混淆这些命令,了解它们的区别很重要:
| 命令 | 主要用途 | 特点 |
|---|---|---|
cat |
显示整个文件内容 | 一次性全部输出,适合短文件或需要将内容作为输入传递给其他命令时使用。 |
less |
分页查看文件内容 | 可以向上/下滚动,搜索内容,是查看大文件的首选工具。 |
more |
分页查看文件内容 | less 的前身,功能较少,只能向下滚动,不能向上。 |
head |
查看文件的开头部分 | 默认显示前 10 行,可以用 -n 指定行数,如 head -n 20 file.txt。 |
tail |
查看文件的结尾部分 | 默认显示后 10 行,非常适合查看日志文件的最新更新。-f 选项可以实时跟踪文件变化。 |
cat 是一个看似简单但极其强大的命令,是 Unix/Linux 哲学“小工具,大作用”的完美体现,它的核心是连接和显示,但通过与标准输入输出、重定向和管道结合,它可以胜任从简单查看文件到复杂文本处理的各种任务。
cat 的核心优势:
- 快速查看短文件。
- 连接多个文件。
- 从键盘或标准输入创建/追加内容。
- 作为其他命令的输入源(管道)。
