一、文件内容快速预览:cat 命令

(一)基础功能与核心特性

cat 命令使用时,可以先使用 cat --help 查看帮助文档。

cat命令的主要职责是将文件的内容 “搬运” 到终端屏幕上展示出来。它能迅速将文件里的每一个字符,从第一行到最后一行,依次呈现在你眼前,就像把文件内容直接平铺展开一样。

假设你有一个记录日常工作安排的文本文件,使用cat命令,就能立刻看到今天要完成的任务、会议时间等内容,一目了然。它特别适合快速查看一些内容较少的小文件,比如简单的配置文件,几秒钟就能掌握其中的关键信息,高效又便捷。

(二)常用参数与典型场景

参数

说明

示例场景

-n

显示行号(包含空行)

调试配置文件时定位具体行号

-b

仅对非空行显示行号

过滤空白行并标注有效内容位置

-s

压缩连续空行为单个空行

清理日志文件中的冗余空白

-A

显示所有隐藏字符(如 $ 表示换行符,^I 表示 Tab 键),等于-vET

排查文件中的特殊格式问题

(三)实战示例

1.查看文件内容并显示行号:当你需要调试一个程序的配置文件,想快速定位某一行内容时,-n参数就派上用场了。比如有个config.txt配置文件,执行cat -n config.txt,命令执行后,每一行内容前都会清晰地显示出行号,方便你精准找到需要修改或查看的那一行。

# 示例命令
cat -n config.txt

2.仅对非空行显示行号:对于一些包含大量空行的文件,只想关注有实际内容的行,使用-b参数最合适不过。比如有个记录数据的文件,中间有很多空行作为分隔,运行cat -b data.txt,这时,只有那些包含有效数据的非空行才会被标上行号,让你更专注于关键信息,避免被大量空行干扰。

# 示例命令
cat -b data.txt

3.压缩连续空行为单个空行:在处理日志文件时,经常会遇到连续的空行,影响查看效率。利用-s参数就能轻松解决这个问题。假设你有一个app.log日志文件,执行cat -s app.log,文件中原本连续出现的多个空行就会被合并成一个,整个日志文件看起来更加简洁规整,便于你快速定位重要的日志信息。

# 示例命令
cat -s app.log

4.显示所有隐藏字符:当你怀疑文件存在一些特殊格式问题,比如奇怪的换行或者 Tab 缩进错误时,-A参数能帮你一探究竟。比如有个格式不太正常的report.txt文件,运行cat -A report.txt,文件中的换行符会显示为$,Tab 键显示为^I ,这样你就能清楚看到文件中隐藏的格式细节,从而准确找出并解决格式问题。

# 示例命令
cat -A report.txt

二、大文件分页利器:less 命令

(一)核心优势与模式特性

当面对几百 MB 甚至更大的日志文件时,cat命令会一次性将整个文件内容加载到终端,不仅可能导致终端卡顿,而且查找特定信息犹如大海捞针。而less命令就像是为大文件量身定制的 “分页阅读器”,它的出现完美解决了这些问题。

less命令支持分页浏览,每次只加载一屏的内容到内存中,大大降低了内存占用,即使是处理 GB 级别的大文件,也能轻松应对,不会让系统因为内存不足而 “罢工”。它还提供了强大的关键词搜索功能,无论是正向搜索还是反向搜索,都能快速定位到你需要的信息,就像在一本厚厚的词典中快速查找某个单词一样方便。在操作上,less命令允许用户通过上下箭头、PageUp、PageDown 等按键自由地在文件中前后滚动,查看不同位置的内容 ,这种灵活性是cat命令所不具备的。

(二)常用参数与操作快捷键

参数 / 快捷键

说明

示例场景

-N

显示行号

定位日志中的具体行号

-n

不显示行号、不计算行数

使用G命令跳转到大文件末尾时,不会计算行号导致卡顿

/ 关键词

向下搜索关键词(按 n 跳转下一个匹配,N 跳转上一个)

在日志中快速定位错误关键词

q

退出查看

结束文件浏览

空格键 / PgDn

向下翻页

逐页查看大文件内容

b/PgUp

向上翻页

逐页查看大文件内容

g

跳转到文件开头

快速回到文件起始位置

G

跳转到文件末尾

直接查看文件最后部分内容

ng

跳转到第 n 行(n 为具体数字)

精准定位到指定行号

v

在 vim 中打开当前文件(需系统安装 vim)

浏览时发现需要编辑,直接切换到编辑器

=

显示当前文件的元信息(总行数、当前位置等)

了解文件规模或当前浏览进度

(三)实战示例

1.查看日志文件并显示行号:执行less -N access.log命令,打开网站的访问日志文件,并显示行号。这样在后续查找问题时,能够更准确地定位到相关信息所在的位置。

# 示例命令
less -N access.log

2.查看日志文件不显示行号:我们线上日志文件有时可能会达到1G或者更大,如果有时使用less命令查看最近的日志,比如 less info.log,然后使用 G 跳转到日志结尾,这时我们可以看到命令行会输出Calculating line numbers...,表示正在计算行号,我们可以执行less -n info.log命令,这样不仅不会显示行号,也不会去计算行号。

# 示例命令
less -n access.log

3.在日志中搜索关键词:如果你怀疑是 “out of memory”(内存不足)错误导致的问题,那么可以在less命令中输入/out of memory,按下回车键后,less会自动在日志文件中向下搜索包含该关键词的行,并将其高亮显示。找到第一个匹配项后,通过按n键可以快速跳转到下一个匹配项,方便查看所有相关的日志记录。

# 在less命令中执行搜索
/out of memory

4.实时监控日志更新:当你想要实时查看日志文件的更新情况,了解网站的最新运行状态时,可以使用less +F access.log命令。这个命令会使less进入实时监控模式,自动滚到底部显示最新添加到文件中的内容,就像使用tail -f命令一样。如果需要停止实时监控,按Ctrl + C组合键即可,之后还可以通过按F键重新开启实时监控

# 实时监控日志更新
less +F access.log

5.仅显示匹配行(过滤功能):当你想要只查看过滤出的文件内容,不匹配的行被隐藏,类似grep的效果,可以使用 &pattern进行过滤。若需要取消过滤,恢复显示所有行,输入& 后直接按回车即可(即&空模式)。

# 查看日志文件
less access.log
# 执行过滤,只显示Exception行
&Exception

三、文本搜索王者:grep 命令

(一)正则驱动的精准匹配

在 CentOS 系统的文本处理领域,grep命令基于强大的正则表达式引擎,能在茫茫的文本海洋中精准地找到你需要的信息。无论是单个文件还是整个目录下的多个文件,它都能迅速展开搜索,不放过任何一个可能的线索。在代码审查中,它可以帮助开发人员快速定位到特定函数、变量的使用位置,提高代码维护效率;在日志分析时,通过grep命令能快速筛选出关键的错误信息、用户行为记录等,为系统优化和故障排查提供有力支持。

(二)核心参数与正则应用

参数

说明

示例场景

-i

忽略大小写

搜索不区分大小写的关键词

-v

反向匹配(显示不包含关键词的行)

过滤无关日志信息

-n

显示匹配行的行号

搜索配置文件行数

-w

匹配整词(避免部分匹配,如搜索 "test" 不会匹配 "testing")

仅展示grep -w "test" file.txt # 只匹配独立的 test 单词

-c

统计匹配的行数(不显示具体内容,只输出数量)

统计 1 小时内 “接口调用失败” 的次数(评估问题频率)

-C n

显示匹配行及前后各 n 行

查询程序异常发生前后的日志

-r / -R

递归搜索:在指定目录下的所有文件中搜索(-R 会跟随符号链接)

检索目录中所有的日志文件

(三)实战示例

1.搜索日志文件中异常信息:执行grep -i exception access.log命令,搜索日志文件中所有包含异常的信息。也可以使用管道结合sed 10q命令只检索出前10行。

# 检索access.log中包含exception的前10行日志
grep -i exception access.log | sed 10q

2.过滤无关日志信息:当我们使用grep检索出日志后,但是有部分数据想过滤掉,可以使用-v参数参数反向匹配。

# 检索出包含exception的日志,但是不显示NullPointException的日志
grep -i exception access.log | grep -v NullPointException

3.在日志目录中递归搜索:当我们有多个日志文件,可以使用递归搜索命令。

# 在logs目录中递归检索所有包含Exception的日志信息
grep -r Exception ./logs/
# 如果目录只有一层,也可以使用通配符,检索所有.log结尾的文件
grep Exception *.log

4.统计异常数据数量:当我们需要根据日志信息来做一些统计,比如统计某个日志信息打印了多少次,就可以使用-c参数进行统计。

# 统计日志信息中,一共有多少提交短信任务异常的日志数量
grep -c "提交短信任务异常" info.log
# 也可以使用管道操作,使用wc -l命令来统计
grep "提交短信任务异常" info.log | wc -l

四、文件头尾快速定位:head & tail 命令

(一)功能互补的前后截取

headtail命令在文件内容查看方面,各自发挥着独特的作用,一个专注于文件开头,一个聚焦于文件末尾,两者相辅相成,为我们提供了便捷的文件局部内容查看方式。

head命令的主要职责是快速展示文件的开头部分,默认情况下,它会将文件的前 10 行内容清晰地呈现在你眼前。在查看系统日志文件时,日志的开头部分通常记录着关键的时间戳、启动信息等,使用head命令,就能快速获取这些重要的起始信息,帮助你了解日志产生的背景和初始状态,就像翻开一本书,先看前言和目录,对整体内容有个初步的了解。

tail命令则恰恰相反,它主要用于查看文件的末尾部分,默认展示文件的最后 10 行。在实时监控系统日志时,最新产生的日志信息会不断追加到文件末尾,通过tail命令,特别是搭配-f参数使用时,你可以实时追踪文件的新增内容,仿佛拥有了一双 “实时监控眼”,能够第一时间捕捉到系统运行过程中的最新动态和异常情况,及时发现并解决问题。

(二)常用参数对比

命令

参数

说明

示例场景

head

-n 5

显示前 5 行

查看 CSV 文件的表头信息

head

-c 100

显示前 100 字节

快速预览二进制文件的文本部分

tail

-n +5

从第 5 行开始显示到文件末尾

过滤日志文件的前缀信息

tail

-f

实时跟踪文件新增内容(按 Ctrl+C 停止)

监控应用实时日志输出

(三)实战示例

1.使用 head 查看文件前几行:假设你有一个记录员工信息的employees.csv文件,文件内容较多,你只想快速查看文件的表头信息,了解数据的字段结构。这时,就可以使用head命令的-n参数,执行head -n 1 employees.csv ,命令执行后,终端会显示文件的第一行内容,也就是表头信息,让你清楚知道每个字段所代表的含义,方便后续对数据的处理和分析。

# 示例命令
head -n 1 employees.csv

2.结合管道操作:head命令更多时候会结合管道操作,对输出内容进行截取。

# 检索error.log中的系统异常,然后只输出前10行
grep 系统异常 error.log | head -n 10

3.使用 tail 查看文件后几行:在一个电商网站的运营过程中,orders.log日志文件记录着每一笔订单的详细信息,包括订单时间、用户 ID、商品信息等。当你想要快速了解最近的订单情况时,使用tail命令的-n参数就能轻松实现。执行tail -n 5 orders.log,命令会显示日志文件的最后 5 行内容,也就是最近的 5 笔订单记录,让你及时掌握最新的订单动态。

# 示例命令
tail -n 5 orders.log

4.使用 tail 实时跟踪文件新增内容:在一个 Web 应用的开发和运维过程中,app.log日志文件记录着应用的运行状态和各种事件信息。为了及时发现应用运行过程中的异常情况,你可以使用tail -f app.log命令实时监控日志文件的更新。当应用有新的日志信息产生时,终端会实时显示这些新增内容,一旦出现错误信息或异常事件,你就能第一时间察觉并进行处理,确保应用的稳定运行。

# 示例命令
tail -f app.log

五、结构化文本处理:awk 命令

(一)字段级处理的编程能力

在 CentOS 系统的文本处理工具中,awk命令的字段级处理能力和强大的编程特性,在处理结构化文本数据时表现得淋漓尽致。它能够对文本数据进行细致入微的剖析和处理,将复杂的数据处理任务变得轻松简单 。

(二)核心语法与典型参数

语法元素

说明

示例场景

-F

指定字段分隔符(如处理 CSV 文件)

解析逗号分隔的日志数据

1,NF

引用第一个字段和最后一个字段

提取日志中的 IP 地址或状态码

BEGIN/END

脚本开始 / 结束时执行的代码块

输出统计信息表头或尾部汇总

(三)实战示例

假设你有一个记录网站访问日志的access.log文件,日志格式如下:

192.168.1.1 - - [10/Jan/2025:14:00:01] "GET index.html HTTP/1.1" 200 233
192.168.1.2 - - [10/Jan/2025:14:05:01] "POST login HTTP/1.1" 200 512
192.168.1.3 - - [10/Jan/2025:14:10:01] "GET about.html HTTP/1.1" 404 128

1.提取 IP 地址:使用awk命令提取日志中的 IP 地址,执行awk '{print $1}' access.log ,命令执行后,会输出每一行日志的第一个字段,也就是 IP 地址。

# 示例命令
awk '{print $1}' access.log

2.统计状态码出现次数:想要统计不同 HTTP 状态码出现的次数,可以执行awk '{codes[$9]++} END {for (code in codes) print code, codes[code]}' access.log 。这个命令利用awk的数组特性,将状态码作为数组的键,出现的次数作为值进行统计,最后在END块中输出统计结果,让你清楚了解每种状态码的出现频率,为网站的性能分析和故障排查提供有力的数据支持。

# 示例命令
awk '{codes[$9]++} END {for (code in codes) print code, codes[code]}' access.log

六、文本高效编辑:vim 命令

(一)基础功能与核心特性

vim 命令的核心是启动多模式文本编辑器,支持从基础文本修改到代码编写的全场景编辑。它通过「普通模式、插入模式、末行模式」的切换,实现复制、删除、查找替换等高效操作,无需鼠标即可完成所有编辑动作。

它特别适合修改 CentOS 系统配置文件(如 /etc/profile)、编写脚本或代码,既能通过快捷键提升编辑速度,又能通过参数自定义启动方式,兼顾便捷性和功能性。使用前可通过 vim --help 查看完整参数说明。

(二)常用参数与典型场景

  1. 模式切换(核心基础)

    命令

    说明

    i

    在光标插入(最常用)

    a

    在光标插入

    o

    在光标下一行新建空白行并插入

    Esc

    退出插入模式

    进入末行模式,屏幕底部出现冒号,可输入保存 / 查找等命令

    v

    字符级可视模式(逐字符选择)

    Ctrl+v

    块级可视模式(矩形块选择,适合列操作),比如注释多行

  2. 光标移动(普通模式)

    命令

    说明

    ^/$

    跳至行首(第一个非空格字符) / 跳至行尾

    w/b

    跳至下一个单词开头 / 跳至上一个单词开头

    gg

    跳至文档首行

    G

    跳至文档尾行

    nG(如5G

    跳至第 n 行(n 为数字)

  3. 编辑操作(普通模式)

    命令

    说明

    yy / nyy

    复制当前行 / 复制从当前行开始的 n 行(n 为数字),例如5yy

    y$/y^

    复制从光标到行尾的内容 / 复制从光标到行首的内容

    y(可视模式下)

    复制选中的内容(选中文本后按 y),例如按v选中,然后按y复制,最后按p粘贴

    p / P

    粘贴到光标(下行 / 后位) / 粘贴到光标(上行 / 前位)

    dd / ndd

    删除当前行(可当作 “剪切行”,删除后可粘贴)/ 删除从当前行开始的 n 行

    d$ / d^

    删除从光标到行尾的内容 / 删除从光标到行首的内容

    d(可视模式下)

    删除选中的内容

    u

    撤销上一步操作(vim 支持多级撤销)

    Ctrl+r

    恢复被撤销的操作

    .

    重复最后一次修改(如删除、复制后,按。可快速重复)

  4. 查找与替换(末行模式)

    命令

    说明

    /关键词

    向下查找

    :set ic

    开启忽略大小写(ic=ignore case)

    :s/旧内容/新内容 :s/旧内容/新内容/g

    仅替换当前行第一个 / 所有 “旧内容”

    :%s/旧内容/新内容/g :%s/旧内容/新内容/gc

    替换文档中所有 “旧内容”(% 表示全文)/ 替换时逐处确认(c=confirm),按 y 确认替换,n 跳过

七、命令对比与选型指南

(一)文件查看场景对比

需求场景

推荐命令

核心优势

快速预览小文件

cat

简洁高效,直接输出全部内容

分页浏览大文件

less

支持搜索、翻页,内存友好

实时监控日志

tail -f

动态跟踪文件新增内容

查看文件头部

head

精准截取前 N 行或 N 字节

查看文件尾部

tail

快速获取末尾内容,支持反向定位

(二)文本处理场景对比

需求场景

推荐命令

核心优势

关键词搜索

grep

正则驱动,支持递归搜索和反向匹配

结构化数据处理

awk

字段级操作,支持复杂脚本逻辑

文件编辑

vim

多模式高效编辑,支持代码补全和宏操作

批量替换

sed(配合 grep)

流处理模式,适合大规模文本转换

文章作者: Z
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 微博客
工具 运维 基础
喜欢就支持一下吧