前言
在前面的文章中,我们已经成功在虚拟机中安装了Linux系统,并通过Xshell实现了远程连接。今天,我们将深入Linux命令行的世界,重点学习三个高频实用命令:top(系统监控)、sort(数据排序)和grep(文本搜索)。

这三个命令被称为Linux运维与开发中的“三驾马车”——top是系统监控的“晴雨表”,sort是数据排序的“整理师”,grep是文本搜索的“侦察兵”。本文将通过在Xshell中的实际操作,详细讲解每个命令的用途、主要参数及用法,并针对常见错误提供解决方案,帮助大家建立自己的知识框架体系。

一、top命令:系统监控“晴雨表”
1.1 什么是top命令?
top命令是Linux系统中最基础且最强大的实时系统监控工具,能够动态显示系统中各个进程的资源占用情况,包括CPU使用率、内存消耗、进程状态等关键指标。与静态的ps命令不同,top提供的是实时更新的动态视图,让管理员能够快速识别系统瓶颈。

简单来说,top就像Windows中的“任务管理器”——可以实时查看系统负载、CPU使用率、内存占用,以及每个进程的资源消耗情况。

适用场景:

服务器卡顿、响应变慢时,快速定位CPU或内存占用过高的进程

日常运维中监控关键进程(如Nginx、MySQL)的存活状态和资源消耗趋势

开发测试阶段观察程序运行时的资源需求,判断是否存在内存泄漏或CPU空转

1.2 top命令的常用参数
top命令的基础语法非常简洁:

bash
top [选项]
参数 含义 示例
-d <秒数> 设置刷新间隔(默认3秒) top -d 1 每秒刷新一次
-p 仅监控指定PID的进程 top -p 1234 聚焦PID为1234的进程
-u <用户名> 仅显示指定用户的进程 top -u root 仅显示root用户的进程
-b 批处理模式,适合输出到文件或脚本 top -b -n 1 输出一次监控数据后退出
-n <次数> 限制刷新次数后退出 top -n 5 刷新5次后退出
1.3 top命令的交互操作
在Xshell中直接输入top进入交互界面后,可以通过以下快捷键进行操作:

按键 功能
P(大写) 按CPU使用率排序(默认)
M(大写) 按内存使用率排序
T(大写) 按运行时间排序
1(数字) 显示所有CPU核心的详细使用情况
c 显示完整命令路径
k 终止进程(需输入PID)
q 退出top
1.4 top命令实操演示
Step 1:直接输入top命令

在Xshell终端中输入:

bash
top
此时将进入top的实时监控界面,界面分为两个部分:

摘要信息区(前5行) :

第1行:系统当前时间、运行时长、登录用户数、1/5/15分钟平均负载

第2行:进程总数、运行中、休眠、停止、僵尸进程数量

第3行:CPU使用率分布——us(用户空间)、sy(内核空间)、id(空闲)、wa(I/O等待)等

第4-5行:物理内存和交换分区的总量、已用、空闲、缓存

进程列表区:显示每个进程的PID、用户、CPU占用率、内存占用率、运行时间、命令名等详细信息。

Step 2:按M键按内存排序

在top界面中按下M键(大写),进程列表将按照内存占用率从高到低排序,快速找出内存消耗最大的进程。

Step 3:按P键按CPU排序

按下P键(大写),进程列表将按照CPU使用率从高到低排序,快速定位CPU占用最高的进程。

Step 4:按1键查看多核CPU

按下数字1键,可以展开显示每个CPU核心的使用率,便于分析多核系统的负载分布。

Step 5:按q键退出

按下q键退出top监控界面。

1.5 top命令常见错误及解决方案
错误1:top命令卡住不动或不更新

现象:进入top界面后,显示内容长时间不刷新,或按任何键都没有反应。

原因分析:可能是由于系统负载过高,导致top命令无法及时获取和处理数据。

解决方案:

使用Ctrl+C强制退出top命令

尝试降低刷新频率:top -d 10(每10秒刷新一次)

在top交互界面中按d键,然后输入一个较大的秒数来降低刷新频率

错误2:top命令显示“command not found”

现象:在终端中输入top后,提示“command not found”。

原因分析:top命令未安装。在大多数Linux发行版中,top是默认安装的,但某些最小化安装的系统可能未包含。

解决方案:

bash

Debian/Ubuntu系统

sudo apt-get install procps

CentOS/RHEL系统

sudo yum install procps-ng
错误3:top显示的CPU使用率过高,但实际应用未感觉到明显卡顿

现象:top显示CPU使用率接近100%,但系统操作依然流畅。

原因分析:可能是对top输出信息的误读。top显示的CPU使用率包含多个维度(us用户空间、sy内核空间、id空闲、waI/O等待等),需要综合判断。

解决方案:

使用top命令结合ps或pstree查找占用CPU资源的进程

检查是用户态(us)还是内核态(sy)占用较高,针对性排查

如果是I/O等待(wa)过高,检查磁盘性能

二、sort命令:数据排序“整理师”
2.1 什么是sort命令?
sort命令用于对文本文件的内容(或标准输入)按指定规则进行排序,然后输出排序结果。默认情况下,sort将文件的每一行作为一个单位,按字符编码顺序(即ASCII码值)对每行进行排序。

核心作用:对文本文件内容、管道输出进行排序,支持数字、字典序等多种规则。

2.2 sort命令的常用参数
sort命令的基本语法:

bash
sort [选项] [文件]
参数 含义 示例
-n 按数值大小排序(避免字符排序陷阱) sort -n nums.txt
-r 反向排序(降序) sort -nr nums.txt
-k <列数> 指定按第几列排序 sort -k 2 data.txt
-t <分隔符> 指定字段分隔符 sort -t ‘,’ -k 2 data.csv
-u 去除重复行,仅保留第一次出现的行 sort -u names.txt
-o <文件> 将结果输出到指定文件 sort -o sorted.txt nums.txt
-f 忽略大小写进行排序 sort -f words.txt
-S <大小> 指定内存使用量,处理大文件时使用 sort -S 50% bigfile.txt
-b 忽略行首的空白字符 sort -b data.txt
⚠️ 关键注意:默认情况下,sort会把数字当作“字符”排序(比如10会排在2前面,因为字符“1”比“2”小),排序数字时必须使用-n参数。

2.3 sort命令实操演示
练习题1:创建数字文件并排序

Step 1:创建测试文件

在Xshell中执行以下命令,创建一个包含数字的测试文件:

bash
echo -e “5\n2\n8\n1\n10\n3” > nums.txt
Step 2:查看文件内容

bash
cat nums.txt
输出:

text
5
2
8
1
10
3
Step 3:默认排序(字符排序——不推荐用于数字)

bash
sort nums.txt
输出(注意10排在了2前面,因为字符’1’<‘2’):

text
1
10
2
3
5
8
Step 4:数字排序(正确方式)

bash
sort -n nums.txt
输出(按数值大小升序):

text
1
2
3
5
8
10
Step 5:逆序数字排序(降序)

bash
sort -nr nums.txt
输出(按数值大小降序):

text
10
8
5
3
2
1
练习题2:多列数据按指定字段排序

Step 1:创建包含多列数据的测试文件

bash
echo -e “Tom 25\nJerry 22\nAlice 27\nBob 30” > data.txt
Step 2:按第二列(年龄)排序

bash
sort -k 2 -n data.txt
输出(按年龄升序):

text
Jerry 22
Tom 25
Alice 27
Bob 30
Step 3:按第二列降序排序

bash
sort -k 2 -nr data.txt
输出:

text
Bob 30
Alice 27
Tom 25
Jerry 22
练习题3:去除重复行

bash
echo -e “Tom\nJerry\nTom\nAlice\nJerry” > names.txt
sort -u names.txt
输出(去重后按字母排序):

text
Alice
Jerry
Tom
2.4 sort命令常见错误及解决方案
错误1:数字排序结果不正确

现象:排序后10排在2前面,或数字顺序混乱。

原因分析:默认情况下,sort命令按字母顺序排序,而不是数字顺序。

解决方案:

bash

使用-n选项按数字顺序排序

sort -n nums.txt
错误2:按指定列排序无效

现象:使用-k选项指定列后,排序结果不符合预期。

原因分析:

字段分隔符设置错误

数据中包含特殊字符或空格,导致sort命令无法正确识别列边界

默认情况下,sort将所有字段视为字符串进行排序

解决方案:

bash

使用-t选项指定正确的分隔符

例如:CSV文件用逗号分隔

sort -t ‘,’ -k 2 data.csv

例如:制表符分隔的文件

sort -t $‘\t’ -k 2 data.tsv
错误3:大文件排序消耗过多内存

现象:对大文件执行sort时,系统内存占用急剧上升,甚至导致系统卡顿。

原因分析:sort命令默认会将数据加载到内存中进行排序,文件过大时内存不足。

解决方案:

bash

使用-S参数限制内存使用量

sort -S 50% bigfile.txt

或指定具体大小

sort -S 1G bigfile.txt
错误4:排序结果受特殊字符影响

现象:排序结果中出现意外的顺序。

原因分析:文本中含有特殊字符或空格,影响了排序逻辑。

解决方案:

bash

使用-b选项忽略行首的空白字符

sort -b data.txt

使用–ignore-nonprinting忽略非打印字符

sort --ignore-nonprinting data.txt
三、grep命令:文本搜索“侦察兵”
3.1 什么是grep命令?
grep(Global Regular Expression Print)是Linux/Unix系统中非常强大的文本搜索工具,用于在文件中或管道输入中查找包含指定模式的行。它支持正则表达式、递归搜索、高亮显示等功能,是开发、运维人员日常工作中不可或缺的利器。

核心功能:在文件或管道输出中匹配正则表达式,筛选目标内容,是日志分析、文本处理的关键工具。

3.2 grep命令的常用参数
grep命令的基本语法:

bash
grep [选项] ‘搜索模式’ [文件…]
参数 含义 示例
-i 忽略大小写匹配 grep -i “error” log.txt
-v 反向匹配(输出不包含匹配内容的行) grep -v “debug” app.log
-n 显示匹配行的行号 grep -n “TODO” script.py
-c 仅统计匹配的行数 grep -c “404” access.log
-o 仅输出匹配的文本片段(而非整行) grep -o “[0-9]+” data
-w 整词匹配(避免部分匹配) grep -w “int” code.c
-r 递归搜索目录下的所有文件 grep -r “main” /src
-A NUM 显示匹配行及后NUM行 grep -A 2 “Exception” log
-B NUM 显示匹配行及前NUM行 grep -B 1 “crash” report
-l 仅显示包含匹配项的文件名 grep -l “pattern” .txt
-F 将模式视为固定字符串(而非正则表达式) grep -F ".
" file.txt
–color=auto 对匹配到的文本着色显示 grep --color=auto “error” log.txt
3.3 grep命令的正则表达式支持
grep支持强大的正则表达式匹配:

表达式 功能 示例
^ 匹配行首 grep “^root” /etc/passwd
$ 匹配行尾 grep “bash$” /etc/passwd
. 匹配任意单个字符 grep “r…t” /etc/passwd

  • 前一个字符出现0次或多次 grep “go*d”
    [] 匹配括号内的任意一个字符 grep “[aeiou]”
    | 逻辑或(需-E) grep -E “err|warn”
    3.4 grep命令实操演示
    练习题1:基础搜索

Step 1:创建测试日志文件

bash
echo -e “2024-01-01 INFO: User login success\n2024-01-02 ERROR: Connection failed\n2024-01-03 INFO: Data updated\n2024-01-04 WARNING: Disk space low” > test.log
Step 2:基础匹配——提取包含ERROR的行

bash
grep “ERROR” test.log
输出:

text
2024-01-02 ERROR: Connection failed
Step 3:忽略大小写匹配

bash
grep -i “error” test.log
输出(匹配ERROR、Error、error等):

text
2024-01-02 ERROR: Connection failed
Step 4:反向匹配——过滤掉INFO行

bash
grep -v “INFO” test.log
输出(显示所有不包含INFO的行):

text
2024-01-02 ERROR: Connection failed
2024-01-04 WARNING: Disk space low
Step 5:显示行号

bash
grep -n “INFO” test.log
输出:

text
1:2024-01-01 INFO: User login success
3:2024-01-03 INFO: Data updated
Step 6:统计匹配行数

bash
grep -c “INFO” test.log
输出:

text
2
练习题2:正则表达式实战

Step 1:匹配以特定字符开头的行

bash
grep “^2024-01-02” test.log
输出(仅显示以"2024-01-02"开头的行):

text
2024-01-02 ERROR: Connection failed
Step 2:匹配以特定字符结尾的行

bash
grep “low$” test.log
输出(仅显示以"low"结尾的行):

text
2024-01-04 WARNING: Disk space low
Step 3:在系统文件中查找

bash

在/etc/passwd中查找以root开头的行

grep “^root” /etc/passwd
bash

在/etc/passwd中查找以bash结尾的行

grep “bash$” /etc/passwd
练习题3:grep与管道符结合

grep最常用的场景之一是与管道符|结合,从命令输出中筛选目标内容:

bash

查看所有进程,筛选出包含"sshd"的进程

ps -ef | grep sshd
bash

查看历史命令,筛选出包含"top"的命令

history | grep top
3.5 grep命令常见错误及解决方案
错误1:grep: command not found

现象:在终端中输入grep后,提示“command not found”。

原因分析:

PATH环境变量未包含grep所在目录

grep软件包未安装

解决方案:

bash

1. 检查PATH环境变量

echo $PATH

2. 检查grep是否存在

which grep

type grep

3. 如果未安装,使用包管理器安装

Debian/Ubuntu

sudo apt-get install grep

CentOS/RHEL

sudo yum install grep
错误2:grep执行后无任何输出

现象:执行grep命令后,没有任何输出结果,直接返回命令提示符。

原因分析:

搜索模式不正确

文件编码格式不匹配

权限不足

解决方案:

确认搜索模式是否正确(注意大小写、正则表达式语法)

检查文件编码:file -i 文件名

检查文件读取权限:ls -l 文件名

使用-i参数忽略大小写重新尝试

错误3:grep匹配结果过多或过少

现象:grep返回的结果包含许多不相关的行,或漏掉了应该匹配的行。

原因分析:

正则表达式编写不够精确

未使用-w进行整词匹配

特殊字符未转义

解决方案:

bash

使用-w进行整词匹配

grep -w “int” code.c

使用-F将模式视为固定字符串(避免正则转义问题)

grep -F “.*” file.txt

使用-E启用扩展正则表达式

grep -E “error|warning” log.txt
错误4:grep递归搜索时权限被拒绝

现象:使用grep -r递归搜索时,出现“Permission denied”错误。

原因分析:当前用户对某些目录或文件没有读取权限。

解决方案:

bash

使用sudo提升权限

sudo grep -r “pattern” /root/

或使用2>/dev/null忽略错误信息

grep -r “pattern” /var/ 2>/dev/null
四、命令组合实战:grep + sort + top 的威力
grep负责“筛选”,sort负责“整理”,top负责“监控”,三者通过管道符|结合,可以快速完成很多复杂的数据处理任务。

实战示例1:从日志中筛选ERROR并按时间排序

bash
grep “ERROR” app.log | sort
实战示例2:统计特定进程的数量

bash

统计当前系统中nginx进程的数量

ps -ef | grep nginx | grep -v grep | wc -l
💡 小技巧:grep -v grep用于过滤掉grep命令本身产生的进程行,避免干扰统计结果。

实战示例3:监控并筛选特定用户的进程

bash

在top的批处理模式中筛选特定用户的进程

top -b -n 1 | grep username
实战示例4:查找CPU占用最高的前5个进程

bash
ps aux --sort=-%cpu | head -6
五、知识框架体系总结
为了帮助大家更好地记忆和运用这些命令,下面建立清晰的知识框架:

📊 top —— 系统监控
text
top [选项]
├── -d N → 设置刷新间隔(秒)
├── -p PID → 监控指定进程
├── -u 用户 → 筛选指定用户的进程
├── -b → 批处理模式(脚本用)
└── 交互快捷键
├── P → 按CPU排序[reference:58]
├── M → 按内存排序[reference:59]
├── 1 → 显示多核CPU
└── q → 退出
📝 sort —— 数据排序
text
sort [选项] [文件]
├── -n → 按数值排序(数字必加!)[reference:61]
├── -r → 反向排序(降序)
├── -k N → 按第N列排序
├── -t 分隔符 → 指定列分隔符[reference:62]
├── -u → 去重
├── -o 文件 → 输出到文件
├── -S 大小 → 限制内存使用[reference:63]
└── -b → 忽略行首空白[reference:64]
🔍 grep —— 文本搜索
text
grep [选项] ‘模式’ [文件]
├── -i → 忽略大小写
├── -v → 反向匹配(排除)[reference:66]
├── -n → 显示行号
├── -c → 统计行数
├── -o → 仅输出匹配部分
├── -w → 整词匹配[reference:67]
├── -r → 递归搜索目录
├── -A N → 显示匹配行及后N行
├── -B N → 显示匹配行及前N行
├── -F → 固定字符串模式[reference:68]
└── 正则表达式:^ $ . * [] |
🔗 组合使用
text
命令1 | 命令2 | 命令3
(管道符串联,前一个输出作为后一个输入)
经典组合:

bash
ps -ef | grep nginx # 查找nginx进程
grep ERROR log.txt | sort # 筛选ERROR并排序
cat data.txt | grep “pattern” | sort -n -k 2 # 筛选+按第2列排序
六、过程中的结果截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐