cat 是 Linux 系统中一个基础而强大的命令,全称为 "concatenate"(连接),主要用于查看、创建、合并文件内容。在Linux当中无法想Windows一样用鼠标点开某一文件进行阅读,要想阅读文件可以用cat指令。cat 命令虽然简单,但在日常系统管理、文件处理和脚本编写中非常实用。掌握它的各种用法可以显著提高工作效率。对于大文件操作,建议结合 lesstail 或 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 [选项] [文件...]

二、主要功能

  1. 查看文件内容

  2. 创建新文件

  3. 合并多个文件

  4. 将文件内容重定向到其他文件或命令


三、常用选项

选项 描述
-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
  1. 在终端输入命令

  2. 此时终端会等待你输入内容,可以开始打字

  3. 输入完成后,按 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'
  1. cat - 连接(concatenate)命令,通常用于显示文件内容

  2. > - 重定向输出到文件(会覆盖已有文件)

  3. test.txt - 要创建/覆盖的目标文件名

  4. <<'EOF' - 开始heredoc输入,使用EOF作为结束标记:

    • << 表示开始heredoc

    • 'EOF' 是自定义的结束标记(单引号包裹表示不展开变量)

关键特点

  1. 结束标记:当输入单独一行只有EOF时停止输入(可以替换为其他单词)

  2. 引号区别

    • <<'EOF':内容中的$VAR等不会被展开

    • <<EOF:内容中的变量和命令会被解析

  3. 自动保存:输入完成后自动写入文件,无需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

虽然不推荐,但某些情况下仍然可以使用:

  1. 结合其他命令

    grep "keyword" longfile.txt | less

    这样可以在 grep 结果中使用 less 分页查看。

  2. 查看命令输出

    ls -l /usr/bin | less

    这样可以在 ls 输出较长时使用 less 分页查看。


五、注意事项

  1. 大文件处理cat 不适合查看非常大的文件(建议使用 less 或 more

  2. 二进制文件:不要用 cat 查看二进制文件,可能导致终端混乱

  3. 权限问题:需要有文件的读取权限才能查看内容

  4. 覆盖风险使用 > 重定向时会覆盖目标文件(可使用 set -o noclobber 防止意外覆盖)

    📌 示例 :> 的覆盖风险

    👉 test.txt 的原始内容 "Hello, World\!" 被覆盖,没有任何警告!


    🛡️ 示例 2:使用 set -o noclobber 防止覆盖

    👉 启用 noclobber 后,Shell 会阻止覆盖,避免数据丢失!


六、实际应用技巧

  1. 快速查看文件

    cat /etc/os-release

    查看系统版本信息:

  2. 创建简单脚本

    cat > myscript.sh <<EOF
    #!/bin/bash
    echo "Hello World"
    EOF

    使用heredoc方式创建脚本文件。

  3. 合并多个日志文件

    cat *.log > all_logs.txt

    合并当前目录下所有.log文件:

  4. 清空文件内容

    cat /dev/null > largefile.log

    快速清空大文件而不删除文件本身。

  5. 显示不可见字符

    cat -vET filename

    调试时查看文件中的特殊字符。

  6. 与tee命令配合

    cat file.txt | tee -a logfile.log

    同时输出到屏幕和日志文件:

Logo

欢迎加入我们的广州开发者社区,与优秀的开发者共同成长!

更多推荐