Linux命令实战:top、sort、grep详解与Xshell实操
前言
在前面的文章中,我们已经成功在虚拟机中安装了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列排序
六、过程中的结果截图







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



所有评论(0)