首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Linux进阶必备:系统监控、文本处理与运维排错指令实战
📅 2026/9/16 3:45:37
✍️ 爱科研究院
👁 阅读 3,247
1. 从“会敲命令”到“懂Linux”还差这几条指令的距离不少朋友学Linux都会经历一个阶段ls、cd、pwd、cp、mv这些基础指令已经用得很顺了文件能建、目录能进、权限能改觉得自己“差不多会了”。但真到了配环境、跑服务、排查问题的时候又发现处处卡壳——文件解压乱码不知道怎么处理磁盘空间莫名其妙被占满系统里跑着哪些进程完全没概念更别提写个循环批量处理日志了。这篇文章就是给处在“基础已会、实战不足”阶段的朋友准备的。我挑了Linux入门路径里第三批最该掌握的指令按“系统状态查看、文本处理三剑客、压缩打包、用户与权限、网络与进程、Shell脚本基础”这几条线展开每条指令都结合真实场景讲不堆参数表重点说清楚“什么时候用它、为什么用它、用的时候容易踩什么坑”。适合谁看正在学Linux准备面试的、刚入职需要天天跟服务器打交道的、想把自己的开发环境从Windows迁到Linux的都可以对照着查缺补漏。2. 系统状态类指令先把机器的“身体指标”摸清楚2.1 top、free、df、du——性能与磁盘的四个老熟人先说说最常用的四个查看类指令很多新手把它们混着用其实分工很明确top看CPU、内存占用哪个进程吃资源一眼就能定位。进去后按P按CPU排序按M按内存排序按q退出。free -h看内存总量、已用、可用-h参数会以G/M为单位显示比默认的KB友好太多。df -h看磁盘分区使用率服务器磁盘满没满这命令说了算。du -sh 目录名看某个目录总共占了多大空间。想找“谁把磁盘吃满了”就一层层du下去。这四个命令的组合用法才是关键。比如接到告警说磁盘使用率超过90%我的排查习惯是先df -h确认哪个分区满了再cd /后用du -sh *挨个看哪些目录体积大顺着往下找到具体文件。特别注意du -sh *在目录文件特别多的根目录下可能稍慢但一般都能接受。2.2 两个容易忽略但极其有用的参数top -u 用户名只看某个用户的进程。服务器上多用户共用时别人说“我那边好卡”你敲这一条就能快速判断是不是他的进程在吃资源。du -sh * | sort -rhdu的结果按体积倒序排sort -rh中的-r是倒序-h是识别du输出的G/M单位来排序。这个组合我在定位磁盘占用问题时几乎必用。注意free命令在CentOS 6和7里的输出列含义有差异新版里buff/cache那部分内存其实是可回收的所以“可用内存”别只看free那一列要看available。这也是面试里常考的一个点。2.3 实战一条命令定位“磁盘莫名其妙被占满”我遇到过一台开发服务器df -h显示根分区100%但du -sh *算下来所有文件加起来远不到总量折腾了半天才发现是/tmp目录下有个被进程占用但已删除的大文件。这种场景的处理办法先用lsof | grep deleted查看已被删除但仍被进程占用的文件确认后用kill结束对应进程系统才会真正释放磁盘空间。这算是Linux运维里很经典的坑了处理过一次之后就长记性了。另外补充一个相关经验在WSL环境里删了大文件后Windows侧的空间也可能不释放。这不是Linux命令本身的问题而是WSL的虚拟磁盘不会自动收缩。处理办法是在Windows里执行wsl --shutdown再重新进入空间就正常了。3. 文本处理三剑客grep、sed、awk的黄金组合3.1 grep从“找得到”到“找得快”grep是Linux里使用频率最高的命令之一但很多人只会grep 关键字 文件这种最基础用法。几个高频参数值得重点掌握grep -r 关键字 目录递归搜索目录下所有文件。grep -i 关键字忽略大小写。grep -n 关键字显示行号看日志定位问题时几乎必须加。grep -v 关键字反向匹配排除掉包含关键字的行。grep -c 关键字统计匹配行数。实际场景中查看日志时我最常用的是grep -n 关键字 日志文件 | tail -50直接看最后50条匹配记录。定位报错时还会配合grep -A 5 -B 5来显示匹配行前后各5行这样能看到上下文比单看一行报错信息有用得多。如果搜索的内容包含特殊字符比如[、]、*、$记得用grep -F把内容当纯文本处理或者用\转义。否则可能什么都匹配不到白白浪费时间。3.2 sed流式编辑的威力sed是文本处理的关键工具。新手经常听到“用sed改文件”但自己尝试时总搞不明白为什么跟vim改文件不一样。sed是按行读取、按规则处理、输出结果的流式编辑器适合处理大文件或批量替换。最常用的三个场景替换文本sed -i s/旧内容/新内容/g 文件其中-i表示直接修改原文件g表示全局替换。打印指定行sed -n 10,20p 文件打印第10到20行。删除指定行sed -i 5d 文件删除第5行。注意-i参数很强大但也危险。如果不加-ised只是把处理结果输出到屏幕原文件不会变。建议第一次操作时先不加-i试运行确认结果无误后再加上否则改错了没有后悔药。我一般还会在替换前先备份一份原文件cp 文件 文件.bak。3.3 awk按列处理数据的瑞士军刀awk是三个工具里学习曲线最陡的但也是最能提升效率的。它的核心逻辑是“按行读取按列处理”。默认按空格或Tab键把每行拆成多列$1代表第一列$2代表第二列$0代表整行。常见场景举例查看某进程的PIDps aux | grep 进程名 | grep -v grep | awk {print $2}按条件筛出列awk $3 80 {print $1, $3} 文件比如打印第三列数值大于80的行里的第一列和第三列。统计求和awk {sum $1} END {print sum} 文件把第一列所有数值加起来。awk还内置了BEGIN和END两个特殊块BEGIN在读取文件前执行END在处理完所有行后执行。配合这两个块能写出很多高效的小脚本。3.4 三剑客组合实战统计日志里的异常IP举一个综合例子假设access.log是Nginx访问日志每行格式为“IP 时间 请求 状态码”想统计访问量最高的前10个IPawk {print $1} access.log | sort | uniq -c | sort -rn | head -10这条命令拆解开来就是标准的三剑客组合思路awk取出第一列IPsort排序让相同IP相邻uniq -c统计每个IP出现次数sort -rn按次数倒序最后head -10取前10。这个组合在日志分析里极度常用建议把每个环节是什么作用背下来。4. 压缩打包与文件传输tar、zip、unzip的细节处理4.1 tar打包和压缩其实是两件事很多初学者会把“打包”和“压缩”混为一谈。tar本身是把多个文件合并成一个文件打包加上-z参数才调用gzip进行压缩。所以看到tar -czvf时-z是压缩、-c是创建、-v是显示过程、-f是指定文件名。日常高频组合打包并压缩tar -czvf 名字.tar.gz 目录/解压tar -xzvf 名字.tar.gz只打包不压缩tar -cvf 名字.tar 目录/查看压缩包内容不解压tar -tzvf 名字.tar.gz4.2 解压乱码问题的处理中文文件名在Windows下创建的压缩包传到Linux里解压后经常出现乱码这是字符编码问题。Windows默认用GBK编码Linux默认用UTF-8。用unzip解压时可以通过-O GBK参数来指定编码unzip -O GBK 文件名.zip如果是zip文件还可以用unar这个工具它能自动识别编码比手动指定省心很多。但注意-O参数在部分Linux发行版自带的unzip里可能不支持需要安装unzip的替代版本具体可以查看你系统包管理器里有没有unzip-iconv这类扩展包。tar.gz文件理论上不会出现乱码因为文件名在打包时已经以UTF-8存储了。如果你遇到tar.gz解压乱码反而要检查是不是终端显示问题试试把终端的字符编码切到UTF-8。4.3 zip和unzip的常用参数压缩目录zip -r 名字.zip 目录/-r表示递归包含子目录。解压到指定目录unzip 名字.zip -d 目标目录查看压缩包内容unzip -l 名字.zip排除特定文件zip -r 名字.zip 目录/ -x *.log把日志文件排除在压缩包外。4.4 小技巧用tar快速复制目录tar还有一个高级用法在同一台机器上复制目录时如果目录特别大用cp -r可能比较慢可以这样tar -C 源目录父路径 -cf - 源目录 | tar -C 目标目录父路径 -xf -这条命令把前一个tar打包的数据流直接交给后一个tar解包不落地生成中间文件。在目录很大时这个方式通常比cp -r快不少。当然了如果源目录和目标目录在不同磁盘或文件系统上差异会更明显。5. 用户与权限管理新建用户、授权、切换身份5.1 新建用户的完整步骤服务器上多人共用或者要部署一个独立服务时新建一个专用用户是常规操作。完整流程# 新建用户同时创建家目录和指定shell useradd -m -s /bin/bash 用户名 # 设置密码 passwd 用户名 # 把用户加入sudo组CentOS系是wheel组Ubuntu系是sudo组 usermod -aG wheel 用户名这里解释一下几个参数-m是useradd创建用户时同时创建家目录-s /bin/bash指定默认shell不指定的话有的系统默认是/bin/sh交互体验差别很大。usermod -aG中的-a表示追加-G表示附加组。一定要加-a否则会把用户从其他组里踢出去。用户建完后用su - 用户名可以切换过去。注意su和su -的区别su -会同时切换环境变量到目标用户su只在当前shell切换身份。日常操作建议使用su -。5.2 文件权限的三组rwxls -l输出里那串-rwxr-xr--是最容易绕晕的部分。拆开来看一共9个位置分成三组所有者user、所属组group、其他人others每组三个字符r读、w写、x执行。快速记忆法chmod 754 文件这里的数字分别对应三组权限。r4、w2、x1三者相加得到组权限值。所以754就是所有者7421读写执行、组541读执行、其他人4只读。需要注意对目录来说x权限是否开启决定了你能不能cd进去。只有r没有x能列出目录内容但无法进入目录。这个细节经常让人卡壳。5.3 修改所有者chown把文件或目录的所有者变更给另一个用户用chown。高频用法chown 用户名:组名 文件或目录 chown -R 用户名:组名 目录-R参数表示递归处理目录下所有内容。部署应用时经常需要把代码目录的所有者改成运行服务的用户否则进程没有权限读写日志或配置文件。6. 网络与进程管理从定位问题到解决问题6.1 查端口占用ss和netstat服务起不来、端口被占用、想确认服务是否在监听这些场景都离不开端口查看指令。老牌工具是netstat新系统更推荐ss它的输出更快更清晰ss -tlnp参数拆解-t查看TCP端口-l只看监听状态的端口-n不做域名解析直接显示IP-p显示对应的进程PID和名称。这四条组合在一起就能把“谁在监听哪个端口”一次看清楚。如果只想查某个端口被谁占用ss -tlnp | grep 8080对应的netstat写法是netstat -tlnp | grep 80806.2 查看与结束进程ps和killps命令最常用的组合是ps aux-e或-A显示所有进程-f显示完整格式。大多数发行版里直接ps aux就能看到所有进程的PID、CPU、内存占用、启动命令等信息。找到进程后要结束它kill PID kill -9 PID这里的区别很多人不清楚kill PID默认发送SIGTERM信号进程收到后可以自行清理资源再退出是“礼貌地请它退出”kill -9 PID发送SIGKILL信号由内核强制结束进程没有机会做清理。优先用普通killkill -9是在进程无响应时的最后手段。6.3 如何判断服务是否在运行很多新手一上来就用ps aux | grep 服务名但这个判断方式有个陷阱grep自身也会出现在结果里。更可靠的方法是pgrep -f 服务名 pgrep -u 用户名 -f 服务名pgrep直接返回匹配进程的PID没有输出则说明没有匹配进程。这样避免grep匹配到自己的尴尬。类似的命令还有pgrep -l-l表示同时显示进程名。6.4 一条命令拿到指定服务的PID结合上面讲的pgrep和awk可以写一个通用取PID的用法pgrep -f 关键字 | xargs -I {} ps -p {} -o pid,cmd或者直接pgrep -f 关键字关于xargs多说一句xargs可以把前一个命令的输出作为参数传给后一个命令是Linux管道里的“粘合剂”。在处理文件列表、批量删除、批量移动时特别有用。7. 查找文件find的高效用法7.1 按名称、类型、时间查找find是查找文件的常用工具比locate灵活比grep在文件系统层面查找更高效。常用组合按文件名查找find /路径 -name 文件名按文件类型查找find /路径 -type f普通文件find /路径 -type d目录按修改时间查找find /路径 -mtime -77天内修改过的文件按大小查找find /路径 -size 100M大于100MB的文件7.2 配合-exec执行操作find最强大的地方是可以配合-exec对每个查到的结果执行命令。比如删除一天前的临时日志find /var/log -name *.log -mtime 1 -exec rm -f {} \;这里的{}是查找到的文件名的占位符\;表示-exec参数结束。执行前可以先去掉-exec部分预览一下会匹配到哪些文件确认无误再执行删除。7.3 查找大文件定位磁盘问题前面说过用du -sh *逐层排查其实还有更直接的find写法find / -xdev -type f -size 500M -exec ls -lh {} \;-xdev限制只在当前文件系统内查找避免进入其他挂载点导致搜索范围过大。-size 500M筛选大于500MB的文件。这个命令在快速定位大文件时非常有效。8. Shell脚本基础把零散命令固化成工具8.1 脚本的基本结构学指令的最终目的是组合使用而组合的容器就是Shell脚本。一个最基础的脚本长这样#!/bin/bash # 备份指定目录 BACKUP_DIR/data DEST_DIR/backup DATE$(date %Y%m%d) tar -czvf $DEST_DIR/backup_$DATE.tar.gz $BACKUP_DIR第一行#!/bin/bash叫shebang指定用哪个解释器执行这个脚本。$(date %Y%m%d)是命令替换把date命令的输出赋值给变量。脚本写完后执行chmod x 脚本.sh赋予执行权限然后./脚本.sh运行。8.2 变量与引号的坑Shell脚本里变量的引号问题经常让人抓狂。简单记一个原则所有变量引用尽量加双引号比如$DEST_DIR。如果目录名或文件名里有空格不加引号会直接被拆成多段命令就出错了。单引号和双引号的区别也要分清双引号里的$变量会被展开成值单引号里的$变量只会原样输出。如果需要在字符串里拼接变量加后缀用双引号backup_$DATE.tar.gz。8.3 循环批量处理for的典型用法批量处理文件是脚本最常用的场景。比如把一个目录下所有.txt文件改成.mdfor file in /data/*.txt; do mv $file ${file%.txt}.md done${file%.txt}是Shell的参数扩展表示去掉变量file末尾的.txt。这种写法比sed替换文件名更可靠。在循环里务必给变量加引号否则遇到含空格的文件名就会出错。8.4 条件判断if的常见写法判断文件是否存在的标准写法if [ -f /路径/文件 ]; then echo 文件存在 else echo 文件不存在 fi注意[和]两侧必须有空格-f判断是否普通文件-d判断是否目录-e判断路径是否存在不区分文件还是目录。条件判断里常见的坑就是在方括号内部忘了留空格导致报command not found。9. 常见问题与排查技巧实录9.1 解压文件乱码前面讲过的编码问题再总结一下。遇到中文文件名乱码首选unar自动识别编码其次用unzip -O GBK指定编码。如果已经解压出现了乱码文件可以改用convmv工具批量转换文件名编码。务必先备份再操作convmv本身也支持--notest参数直接修改。9.2 WSL删除文件后空间未释放WSL环境删除大文件后Windows的vhd虚拟磁盘文件并不会自动变小。排查方法在WSL里执行df -h确认分区使用率是否已下降如果文件系统里已释放但Windows侧磁盘没释放需要执行wsl --shutdown后重新进入让虚拟磁盘向Windows报告实际使用空间。这一步只影响WSL的虚拟磁盘收缩不会删除任何数据。9.3 端口被占用服务起不来排查顺序先用ss -tlnp | grep 端口号确认哪个进程占用了端口拿到PID后用ps -p PID -o pid,cmd看具体是可执行文件还是其他脚本。如果是旧服务实例残留kill PID先优雅停止不行再kill -9。如果端口根本没被监听那就检查服务的配置文件里绑定的IP和端口是否正确。9.4 远程机器连接不上这是一道经典面试题。可以先自己按这个顺序排查先ping目标IP确认网络通不通再telnet 目标IP 端口确认端口通不通然后检查本机防火墙和对方防火墙是否放行。如果端口不通但IP通多半是防火墙或服务没启动如果服务启动但绑定了127.0.0.1外部自然连不上需要把监听地址改成0.0.0.0。如果上面这些都查完还是不通最后再看SELinux针对CentOS系。遇到过几次服务明明在监听、防火墙也放行了但就是连不上最后定位到SELinux拦截了端口访问用setsebool -P httpd_can_network_connect 1之类的方式放行才解决。9.5 tar解压单个文件有时候压缩包很大只想解压出其中一个文件可以用tar -xzvf 包名.tar.gz 包内路径/文件名解压前可以先用tar -tzvf 包名.tar.gz列出包内所有文件路径确认路径后再精准解压。这种操作避免解压整个包省时间省磁盘。10. 一条指令的“组合拳”比二十条孤立指令更有价值再强调一次Linux学习到了这个阶段真正拉开差距的不是会多少条命令而是能把这些指令组合成解决问题的“组合拳”。分享一个我日常排查问题的习惯。任何异常出现我先用df -h看磁盘用free -h看内存再用top看CPU这三个命令基本把服务器最核心的健康状态摸清了。进一步定位时日志文件用grep配合sed、awk处理进程和端口用ss、ps、kill处理批量操作交给find和循环脚本。这一套流程几乎覆盖了90%的Linux日常运维需求。另外有个心态上的建议不要死记硬背每条命令的所有参数。把高频参数用熟剩下的靠man页和--help查。真正重要的是理解每条命令的作用对象和处理逻辑——grep处理的是“行内的文本内容”find处理的是“文件系统里的文件名”sed是流式处理awk是列处理。把这几个维度搞清楚遇到新场景自然能想到该用什么工具。这条学习路径往后的扩展方向很明确掌握这些指令后可以继续学习Shell脚本的流程控制、管道符的复杂组合、文本处理的正则表达式再往后就是系统服务配置、网络配置、容器化部署这些工程化主题了。每一步都是踩着前一步的基础往上走的所以现阶段把指令的“为什么”弄懂比背下“怎么敲”重要得多。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/16 3:40:36
课程设计zip包处理:从解压校验到环境复现的完整指南
2026/9/16 3:40:36
计算机毕业设计之基于Java的图书管理系统的设计与实现
2026/9/16 3:40:36
安卓单词App完整架构:Spring Boot+MySQL+Room同步实战
2026/9/16 6:10:45
Gazebo强化学习仿真实战:从环境搭建到机械臂训练避坑指南
2026/9/16 6:10:45
人体工学椅实测横评:2026年选购指南,八品牌坐感对比与避坑建议
2026/9/16 6:10:45
STM32驱动DS1302 RTC芯片:从时序到稳定运行的实战笔记
2026/9/16 6:10:45
CVE-2023-4863漏洞深度剖析:WebP堆缓冲区溢出如何影响全系浏览器与系统库
2026/9/16 6:10:44
基于IsaacGym的四足机器人sim to real实战:从RMA训练到真机部署
2026/9/16 6:05:44
AI辅助设计PCB:STM32最小系统板从画图到实物的成本真相
2026/9/16 0:00:15
嵌入式三大高薪赛道:车规功能安全、RISC-V固件架构、边缘AI部署
2026/9/16 0:00:15
Zephyr 移植指南:SAM R34 Xplained Pro(samr34_xpro)评估板支持与 LoRa 开发实战
2026/9/16 0:00:15
纯HTML+SVG图解工具:出版级架构图的语义化生成方案
2026/9/15 13:08:25
拯救者Y7000黑屏故障排查与维修实战指南
2026/9/14 2:50:57
AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
2026/9/16 1:54:57
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化