Linux基本命令篇 —— cat命令
Linux系统中的cat命令是一个基础但功能强大的文件操作工具,主要用于文件查看、创建、合并等操作。它能够显示文件内容(包括特殊字符)、创建新文件、追加内容、合并多个文件,并支持显示行号(-n)、压缩空行(-s)等实用选项。对于大文件建议结合less命令使用,避免直接cat导致终端刷屏。典型应用包括查看配置文件、合并日志、清空文件内容等,是日常系统管理和脚本编写的重要工具。但需注意二进制文件查看风
cat是 Linux 系统中一个基础而强大的命令,全称为 "concatenate"(连接),主要用于查看、创建、合并文件内容。在Linux当中无法想Windows一样用鼠标点开某一文件进行阅读,要想阅读文件可以用cat指令。cat命令虽然简单,但在日常系统管理、文件处理和脚本编写中非常实用。掌握它的各种用法可以显著提高工作效率。对于大文件操作,建议结合less、tail或head等命令使用。下面详细介绍这个命令的用法、选项和实际应用场景:
目录
一、基本语法
cat [选项] [文件...]
二、主要功能
-
查看文件内容
-
创建新文件
-
合并多个文件
-
将文件内容重定向到其他文件或命令
三、常用选项
| 选项 | 描述 |
|---|---|
-n |
显示行号(包括空行) |
-b |
显示行号(忽略空行) |
-s |
压缩连续空行为一行 |
-E |
在每行末尾显示 $ 符号 |
-T |
将制表符显示为 ^I |
-A |
相当于 -vET(显示所有特殊字符) |
-v |
显示非打印字符(除换行符和制表符外) |
注意:
cat指令会将目标文件内容全部打印到屏幕上。若是目标文件内容过大,则会导致刷屏(直到将文件内容全部打印到屏幕上)。因此cat指令一般仅适用于查看内容较少的文件。
四、使用示例
1. 查看文件内容
cat filename.txt
显示文件内容:

2. 查看多个文件内容
cat file1.txt file2.txt
依次显示多个文件内容:

3. 显示行号
包括空行的行号:
cat -n filename.txt
显示文件内容并添加行号(包括空行):

不包括空行的行号:
cat -b filename.txt
显示文件内容并添加行号(忽略空行):

4. 创建新文件
cat > newfile.txt
-
在终端输入命令
-
此时终端会等待你输入内容,可以开始打字
-
输入完成后,按 Ctrl+D (EOF) 保存文件并退出

5. 追加内容到文件
cat >> existingfile.txt
向已有文件追加内容,按 Ctrl+D 保存退出:

通过上面的两个指令的展现,我们可以发现一个问题,如果我们输入内容时输入错误了,想删除错误的内容,但是按删除键只是对应其中的特殊字符显示出来,并没有完成删除,这是很麻烦的事情,这是因为终端在原始模式下处理输入的方式导致的。虽然我们可以使用下面的方法来进行删除,但是还是很麻烦:
方法一:使用 Ctrl+退格键 删除
在大多数终端中,可以尝试:
-
Ctrl+Backspace:删除前一个单词 -
Ctrl+U:删除整行
而且我们如果输入的内容到最后没有带上换行的话,保存退出后,终端会显示还是在上一行中,并没有另起一行来进行输入,看着很变扭的(关于Shell的底层会在后面进行模拟实现,到时候我们就知道它是怎么运作的,就会理解为什么会这样了)。所以我们一般都是输入改用更友好的输入方式,避免发生这样的事,也方便我们输入内容:
方法二:使用 nano 或 vim 编辑器
nano file.txt # 更友好的终端编辑器
或
vim file.txt
6. 合并文件
cat file1.txt file2.txt > combined.txt
将两个文件内容合并输出到新文件:

7. 显示特殊字符
cat -A filename.txt
显示文件中的所有特殊字符(包括行尾、制表符等),举个例子如下:
示例文件内容
我们先创建一个包含各种特殊字符的测试文件:

解释 cat > test.txt <<'EOF' 命令
这是一个使用 here document (heredoc) 语法(Here Document(有时称为"here-doc")是Linux和Unix shell中的一种特殊重定向方式,它允许你将多行输入直接传递给命令,而不需要从文件中读取,后面会详细讲解)创建或覆盖文件的命令,让我详细解释它的每个部分(这个也适合用来解决上面说到的问题,我们可以称其为方法三):
命令分解
cat > test.txt <<'EOF'
-
cat- 连接(concatenate)命令,通常用于显示文件内容 -
>- 重定向输出到文件(会覆盖已有文件) -
test.txt- 要创建/覆盖的目标文件名 -
<<'EOF'- 开始heredoc输入,使用EOF作为结束标记:-
<<表示开始heredoc -
'EOF'是自定义的结束标记(单引号包裹表示不展开变量)
-
关键特点
-
结束标记:当输入单独一行只有
EOF时停止输入(可以替换为其他单词) -
引号区别:
-
<<'EOF':内容中的$VAR等不会被展开
-
<<EOF:内容中的变量和命令会被解析
-
-
自动保存:输入完成后自动写入文件,无需Ctrl+D
使用 cat -A 查看
cat -A test.txt
预期输出及解释

符号解释:
-
$- 表示行尾的换行符(LF) -
^I- 表示制表符(TAB) -
^M- 表示回车符(CR),常见于Windows换行符 -
行尾的空格也会显示出来
8. 压缩空行
cat -s filename.txt

我们可以观察到,十行空行变成一行空行了,无论多少连续空行都是一样的,这就是将连续的空行压缩为一行的功能:

9. 与管道配合使用
cat filename.txt | grep "keyword"

我们可以观察到,该指令的功能是将文件内容传递给grep命令进行搜索,并将想要搜索的内容提取出来了:

10. 显示文件内容并分页
cat longfile.txt | less
当文件内容较长时,使用less分页查看:cat longfile.txt | less 这个命令组合的功能主要是 分页查看文件内容,并借助 less 提供的交互式功能进行浏览、搜索等操作。虽然直接 less longfile.txt 更高效,但 cat file | less 仍然支持 less 的所有交互功能。
在 Linux 中,如果你想查看一个长文件(longfile.txt)的内容,并且希望使用 less 分页浏览,那么 cat longfile.txt | less 是一种可行的方法,但 这并不是最高效的用法。
方法 1:直接使用 less(推荐)
less 本身就可以直接打开文件,不需要先 cat 再管道传给 less:
less longfile.txt
优点
-
更高效:
less直接读取文件,不需要额外启动cat进程。 -
支持更多功能:
-
按
↑/↓或PageUp/PageDown滚动 -
按
/搜索内容(如/keyword) -
按
q退出 -
按
g跳到文件开头,G跳到文件末尾
-
方法 2:使用 cat + less(不推荐)
cat longfile.txt | less
下面是cat+less的一些常用功能:
1. 基本浏览
| 按键 | 功能 |
|---|---|
↑ / ↓ |
逐行滚动 |
PageUp / PageDown |
翻页 |
Space |
向下翻一页 |
b |
向上翻一页 |
g |
跳到文件开头 |
G |
跳到文件末尾 |
q |
退出 less |
2. 搜索功能
| 按键 | 功能 |
|---|---|
/keyword |
向下搜索 keyword |
?keyword |
向上搜索 keyword |
n |
跳转到下一个匹配项 |
N |
跳转到上一个匹配项 |
3. 行号导航
| 按键 | 功能 |
|---|---|
10G |
跳转到第 10 行 |
:n |
跳转到第 n 行(需先输入 :) |
为什么不太推荐?
-
多了一个不必要的
cat进程:cat读取整个文件,再传给less,而less本身可以直接读取文件,这样会稍微降低性能(尽管对小文件影响不大)。 -
不适用于大文件:如果文件特别大,
cat会先读取整个文件到内存,而less是按需加载,更节省资源。
什么时候应该用 cat file | less?
虽然不推荐,但某些情况下仍然可以使用:
-
结合其他命令:
grep "keyword" longfile.txt | less这样可以在
grep结果中使用less分页查看。 -
查看命令输出:
ls -l /usr/bin | less这样可以在
ls输出较长时使用less分页查看。
五、注意事项
-
大文件处理:
cat不适合查看非常大的文件(建议使用less或more) -
二进制文件:不要用
cat查看二进制文件,可能导致终端混乱 -
权限问题:需要有文件的读取权限才能查看内容
-
覆盖风险:使用
>重定向时会覆盖目标文件(可使用set -o noclobber防止意外覆盖)📌 示例 :
>的覆盖风险
👉
test.txt的原始内容"Hello, World\!"被覆盖,没有任何警告!
🛡️ 示例 2:使用
set -o noclobber防止覆盖
👉 启用
noclobber后,Shell 会阻止覆盖,避免数据丢失!
六、实际应用技巧
-
快速查看文件
cat /etc/os-release查看系统版本信息:

-
创建简单脚本
cat > myscript.sh <<EOF #!/bin/bash echo "Hello World" EOF使用heredoc方式创建脚本文件。
-
合并多个日志文件
cat *.log > all_logs.txt合并当前目录下所有.log文件:

-
清空文件内容
cat /dev/null > largefile.log快速清空大文件而不删除文件本身。
-
显示不可见字符
cat -vET filename调试时查看文件中的特殊字符。
-
与tee命令配合
cat file.txt | tee -a logfile.log同时输出到屏幕和日志文件:

更多推荐


所有评论(0)