cat 是 concatenate(连接)的缩写,它是最基础、最常用的命令之一,尽管功能看似简单,但熟练掌握它在日常管理和脚本编写中至关重要。

cat 命令的核心功能
- 显示文件内容:这是
cat最基本的功能,它会将文件的全部内容输出到标准输出(通常是你的终端屏幕)。 - 连接文件:可以将多个文件按顺序连接起来,然后输出到一个新的文件或标准输出。
- 创建文件:通过结合标准输入(键盘输入),可以创建一个新文件。
- 合并文件:将多个文件的内容合并到一个文件中。
基本语法
cat [选项] [文件名1] [文件名2] ...
- 选项:用于控制
cat的行为。 - 文件名:一个或多个要处理的文件,如果不指定文件名,
cat会等待从标准输入(键盘)读取数据。
常用选项和示例
显示文件内容
这是最常见的用法。
示例:
显示 my_text_file.txt 的内容。
cat my_text_file.txt
输出:
文件 my_text_file.txt 的所有内容会直接显示在终端上。
同时显示多个文件
cat 会按照你指定的顺序依次显示每个文件的内容。

示例:
先显示 file1.txt 的内容,接着显示 file2.txt 的内容。
cat file1.txt file2.txt
输出:
file1.txt 的内容全部显示完后,紧接着显示 file2.txt 的内容,两者之间没有明显的分隔。
使用选项 -n (Number)
在输出的每一行前加上行号。
示例:
显示 script.sh 的内容,并带行号。

cat -n script.sh
输出:
1 #!/bin/ksh
2 # A simple backup script
3 echo "Starting backup..."
4 cp /data/source/* /data/backup/
5 echo "Backup completed."
注意:行号从 1 开始计数。
使用选项 -b (Number Blank Lines)
与 -n 类似,但只对非空行进行编号,空行不编号。
示例:
cat -b my_text_file.txt
使用选项 -A (Show All)
这是一个非常有用的选项,它会显示所有字符,包括不可见的字符。
- 行尾 显示为
- 制表符 显示为
^I - 换行符 显示为
^J
这在调试脚本或检查文件格式问题时非常有用。
示例: 检查一个可能包含隐藏字符的配置文件。
cat -A my_config.conf
使用选项 -T (Show Tabs)
专门用于显示制表符,将其显示为 ^I。
示例:
cat -T my_text_file.txt
使用选项 -v (Show Non-Printing)
显示非打印字符(除了换行符和制表符)。
示例:
cat -v my_text_file.txt
使用选项 -s (Squeeze Blank Lines)
将连续的多个空行压缩成一个空行,这对于清理格式混乱的文件很有帮助。
示例:
cat -s messy_file.txt
高级用法
创建新文件或追加内容
通过将标准输入重定向到文件,cat 可以用来创建新文件或向现有文件追加内容。
示例:创建新文件
使用 > 符号将键盘输入的内容创建到 new_file.txt 中,输入 EOF 并回车可以结束输入。
cat > new_file.txt This is the first line. This is the second line. This is the third line. <Ctrl+D> 或者输入 EOF 并回车
文件 new_file.txt 就被创建并包含了上面的三行内容。
示例:追加内容到文件
使用 >> 符号将键盘输入的内容追加到 existing_file.txt 的末尾。
cat >> existing_file.txt This line will be appended to the file. <Ctrl+D>
连接文件并保存到新文件
这是 cat 作为 "concatenate" 的核心功能。
示例:
将 file1.txt 和 file2.txt 的内容合并,并保存到 combined_file.txt 中。
cat file1.txt file2.txt > combined_file.txt
执行后,combined_file.txt 的内容是 file1.txt 的内容后跟 file2.txt 的内容。
在 AIX 中的特别注意事项
cat 命令在 AIX 和其他 Unix-like 系统(如 Linux, Solaris)中的行为基本一致,因为它们都遵循 POSIX 标准,但有几个细微差别值得注意:
-
文件编码:AIX 默认使用 EBCDIC 字符编码,而 Linux 使用 ASCII/UTF-8,虽然
cat本身不关心编码,它只是逐字节读取并输出,但如果你处理的文件是文本文件,并且终端设置不正确,可能会显示乱码,确保你的终端(如 PuTTY, xterm)设置为支持 EBCDIC 或使用iconv等工具进行转换。 -
性能:对于超大文件(几十 GB 的日志文件),直接使用
cat一次性加载到内存可能会导致性能问题,甚至终端缓冲区溢出,在 AIX 和其他系统上,处理大文件更推荐使用less或more命令,它们是分页显示器,不会一次性加载整个文件。# 推荐:分页查看大文件 less huge_log_file.log # 或者,只查看文件的前几行 head -n 100 huge_log_file.log # 或者,只查看文件的后几行 tail -n 100 huge_log_file.log
-
命令行长度限制:在 AIX 的旧版本或特定 shell(如
ksh)下,命令行的长度可能有限制,如果你需要连接成百上千个文件,在命令行中列出所有文件名可能会失败,在这种情况下,更稳健的方法是使用循环:# 创建一个包含所有文件名的列表文件 echo "file1.txt" > file_list.txt echo "file2.txt" >> file_list.txt echo "file3.txt" >> file_list.txt # 使用 xargs 来处理文件列表 cat $(cat file_list.txt) > combined_file.txt # 或者使用 while 循环 (更健壮) cat > combined_file.txt while read filename; do cat "$filename" done < file_list.txt <Ctrl+D>
总结表格
| 选项 | 全称 | 功能描述 |
|---|---|---|
-n |
--number | 对输出的所有行(包括空行)进行编号。 |
-b |
--number-nonblank | 对输出的非空行进行编号,空行不编号。 |
-A |
--show-all | 等价于 -vET,显示所有字符,包括 (行尾), ^I (制表符)。 |
-E |
--show-ends | 在每行结尾显示 字符。 |
-T |
--show-tabs | 将制表符显示为 ^I。 |
-v |
--show-nonprinting | 显示非打印字符(除了换行符和制表符)。 |
-s |
--squeeze-blank | 将连续的多个空行压缩成一个空行。 |
--help |
显示 cat 命令的帮助信息。 |
|
--version |
显示 cat 命令的版本信息。 |
希望这份详细的指南能帮助你完全掌握 AIX 中的 cat 命令!
