Linux基本命令篇 —— cat命令
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 同时输出到屏幕和日志文件:
