Linux基本命令篇 —— cat命令

2025-10-09 02:32:29 7490

cat 是 Linux 系统中一个基础而强大的命令,全称为 "concatenate"(连接),主要用于查看、创建、合并文件内容。在Linux当中无法想Windows一样用鼠标点开某一文件进行阅读,要想阅读文件可以用cat指令。cat 命令虽然简单,但在日常系统管理、文件处理和脚本编写中非常实用。掌握它的各种用法可以显著提高工作效率。对于大文件操作,建议结合 less、tail 或 head 等命令使用。下面详细介绍这个命令的用法、选项和实际应用场景:

目录

一、基本语法

二、主要功能

三、常用选项

四、使用示例

1. 查看文件内容

2. 查看多个文件内容

3. 显示行号

包括空行的行号:

不包括空行的行号:

4. 创建新文件

5. 追加内容到文件

6. 合并文件

7. 显示特殊字符

示例文件内容

解释 cat > test.txt <<'EOF' 命令

命令分解

关键特点

使用 cat -A 查看

预期输出及解释

8. 压缩空行

9. 与管道配合使用

10. 显示文件内容并分页

方法 1:直接使用 less(推荐)

优点

方法 2:使用 cat + less(不推荐)

下面是cat+less的一些常用功能:

1. 基本浏览

2. 搜索功能

3. 行号导航

为什么不太推荐?

什么时候应该用 cat file | less?

五、注意事项

六、实际应用技巧

快速查看文件

创建简单脚本

合并多个日志文件

清空文件内容

显示不可见字符

与tee命令配合

一、基本语法

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等不会被展开

<

自动保存:输入完成后自动写入文件,无需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向上搜索 keywordn跳转到下一个匹配项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 <

#!/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 同时输出到屏幕和日志文件: