Linux运维大佬总结的常用高级命令,拿走不谢!
做Linux运维的同学都知道,基础命令人人都会,但想要高效搞定日常故障排查、批量运维、性能优化这些核心工作,必须掌握一批“高级命令”。这些命令能帮你跳过繁琐操作,直接命中问题核心,既是提升工作效率的利器,也是区分普通运维和资深大佬的关键。
今天就结合我多年的运维经验,整理一批实战性极强的高级命令,涵盖性能排查、日志分析、批量操作、文件处理等高频场景,每一条都附具体用法和场景说明,保证拿来就能用,还能帮你避开不少坑。
一、性能排查高级命令(精准定位瓶颈)
运维中最常见的需求就是排查性能问题,CPU、内存、磁盘IO、网络,每一项都有对应的“高级工具”,比基础的top、free好用太多。
1. pidstat:精准定位进程资源占用
top命令能看到整体资源占用,但想锁定某个进程的CPU、内存、IO详情,pidstat更精准,还能避免top的瞬时数据误导。
核心用法:
# 每隔1秒采样1次,显示所有进程的CPU使用情况,共采样5次
pidstat 1 5
# 显示指定进程(PID=1234)的磁盘IO统计,单位为KB
pidstat -d -p 1234 1 3
# 显示所有进程的内存使用详情,包括物理内存占比(%MEM)和虚拟内存(VSZ)
pidstat -r -u 2实战场景:线上服务器磁盘IO飙升,用pidstat -d 1 10就能快速找到哪个进程在频繁读写磁盘,比iostat更直接定位到进程。注意:部分系统默认没有pidstat,需安装sysstat包(yum install sysstat -y / apt install sysstat -y)。
2. perf:内核级性能分析神器
如果遇到CPU使用率高但找不到具体原因(比如不是用户进程占用),perf能深入内核态,分析函数调用、中断、上下文切换等细节,是排查内核级性能问题的首选。
# 查看CPU热点函数,按占用率排序(最常用)
perf top
# 采样10秒内的CPU事件,生成报告文件,后续可详细分析
perf record -g -p 1234 sleep 10
perf report # 查看生成的报告
# 分析进程的上下文切换情况
perf stat -e context-switches,cpu-migrations -p 1234 1 5注意事项:perf需要内核支持,部分精简系统可能需要安装kernel-devel包。新手用perf top先看Top Events,重点关注占比高的内核函数或用户进程函数,快速锁定瓶颈。
3. ss:比netstat更快的网络连接工具
netstat虽然常用,但在高并发场景下(比如几千个TCP连接),查询速度慢且占用资源多,ss基于内核哈希表实现,速度更快,功能更全。
# 显示所有监听状态的TCP连接,包括端口、进程名
ss -ltnp
# 统计各状态的TCP连接数(运维排查高并发必备)
ss -s
# 查找与指定IP(192.168.1.100)建立的连接
ss dst 192.168.1.100
# 显示所有UDP连接,包括隐藏连接
ss -uap实战技巧:排查服务端口是否被占用时,用ss -ltnp | grep 8080,比netstat -tulnp更快,尤其在服务器连接数多的情况下,差距明显。
4. iotop:磁盘IO实时监控
类似top的磁盘IO版本,能实时显示每个进程的磁盘读写速度、IO优先级,精准定位“吃IO”的进程。
# 启动iotop,按IO使用率排序
iotop -o
# 只显示进程名,不显示线程,简化输出
iotop -P
# 每隔2秒刷新一次,显示前10个IO占用最高的进程
iotop -b -d 2 -n 5 -o | head -20适用场景:服务器磁盘满、IO wait高时,用iotop -o能快速找到罪魁祸首,比如数据库备份进程、日志写入进程等。
二、日志分析高级命令(高效提取关键信息)
运维日常要处理大量日志(Nginx、Tomcat、系统日志等),单纯用cat、grep效率极低,结合awk、sed、jq等工具,能快速提取有用信息。
1. awk:日志格式化提取神器
awk是处理文本的强大工具,支持条件判断、字段分割、数学运算,尤其适合分析结构化日志(比如Nginx访问日志)。
# 分析Nginx访问日志,统计每个IP的访问次数(按次数排序)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
# 提取Nginx日志中状态码为404的请求,包含IP、时间、URL
awk '$9=="404"{print $1, $4, $7}' /var/log/nginx/access.log
# 统计每天的访问总量(日志时间格式为[01/Jan/2026:12:00:00])
awk -F'[ :/]' '{print $3"/"$2"/"$4}' /var/log/nginx/access.log | sort | uniq -c进阶用法:用awk过滤超大日志(比如10G以上)时,无需先打开文件,直接按条件提取,效率比grep+sed更高,且支持多字段组合分析。
2. sed:日志替换与多行处理
sed擅长文本替换、删除、插入操作,适合对日志进行批量修改或提取特定行内容,支持正则表达式,灵活度极高。
# 替换日志中的IP地址(将192.168.1.替换为10.0.0.),不修改原文件
sed 's/192\.168\.1\./10.0.0./g' /var/log/messages
# 删除日志中包含“INFO”的行,并重定向到新文件
sed '/INFO/d' /var/log/tomcat/catalina.out > catalina_filtered.out
# 提取日志中2026-01-18 10:00-11:00之间的内容(按时间过滤)
sed -n '/2026-01-18 10:/,/2026-01-18 11:/p' /var/log/nginx/error.log注意:sed默认是行处理,修改原文件需加-i参数(sed -i 's/old/new/g' file),建议先测试再执行,避免误改日志。
3. jq:JSON日志解析工具
现在很多服务(比如Docker、K8s、API服务)的日志都是JSON格式,用cat、grep难以提取字段,jq能快速格式化JSON并提取指定字段。
# 格式化JSON日志,便于阅读
cat app.log | jq .
# 提取JSON日志中的“level”(日志级别)和“message”(日志内容)
cat app.log | jq '.level, .message'
# 过滤出级别为“ERROR”的日志,并提取时间和信息
cat app.log | jq 'select(.level=="ERROR") | {time: .timestamp, msg: .message}'实战场景:K8s容器日志多为JSON格式,用kubectl logs pod-name | jq '.message',能快速过滤出核心日志内容,避免被JSON结构干扰。
三、批量运维与文件处理命令(提升效率利器)
面对多台服务器或大量文件时,手动操作效率极低,这些命令能帮你实现批量处理,减少重复工作。
1. xargs:命令行参数传递神器
xargs能将标准输入转换成命令行参数,常与find、ls等命令配合,解决“参数过长”问题,或实现批量操作。
# 批量删除7天前的Nginx日志文件(避免rm命令参数过长报错)
find /var/log/nginx -name "access.log.*" -mtime +7 | xargs rm -rf
# 批量修改文件权限(将当前目录下所有.sh文件权限设为755)
find . -name "*.sh" | xargs chmod 755
# 统计多个文件的总行数(结合ls和wc)
ls *.log | xargs wc -l避坑提醒:如果文件名包含空格,直接用xargs会报错,需加上-0参数(find ... -print0 | xargs -0 ...),确保空格被正确识别。
2. rsync:高效文件同步工具
rsync比scp更快、更灵活,支持增量同步、断点续传,还能同步权限、所有者等属性,是跨服务器文件同步的首选。
# 将本地/opt/data目录同步到远程服务器(192.168.1.200)的/opt/backup,增量同步
rsync -avz /opt/data/ root@192.168.1.200:/opt/backup/
# 从远程服务器同步日志文件到本地,排除tmp目录
rsync -avz --exclude=tmp root@192.168.1.200:/var/log/ /local/log/
# 后台同步大文件,记录日志,支持断点续传
rsync -avz --progress --log-file=sync.log --daemon /opt/bigfile/ root@192.168.1.200:/opt/核心参数说明:-a(归档模式,保留属性)、-v(显示详细过程)、-z(压缩传输),这三个参数是日常同步的必选项。
3. find:高级文件查找与批量处理
find不只是简单查找文件,结合-exec参数能实现批量处理,支持按名称、大小、修改时间、权限等多条件过滤。
# 查找/opt目录下大小超过1G的文件,显示大小和路径
find /opt -size +1G -exec du -sh {} \;
# 查找近24小时内修改过的配置文件(.conf结尾),并备份到/backup
find /etc -name "*.conf" -mtime 0 -exec cp {} /backup/ \;
# 查找权限为777的文件,批量修改为755(运维安全加固常用)
find /var -type f -perm 777 -exec chmod 755 {} \;技巧:-exec参数后用{}表示找到的文件,;表示命令结束,也可以用+替代;,减少命令执行次数,提升效率(适合批量处理大量文件)。
四、系统管理与安全命令(运维必备)
除了性能和日志,系统管理和安全加固也是运维核心工作,这些命令能帮你搞定用户权限、服务管理、安全排查。
1. systemctl:服务管理进阶用法
systemctl是CentOS 7+、Ubuntu 16+默认的服务管理工具,除了start、stop,还有很多高级用法,比如查看服务依赖、日志、开机启动配置。
# 查看服务的详细状态,包括依赖、进程ID、启动日志
systemctl status nginx -l
# 查看服务的依赖关系(排查服务启动失败原因)
systemctl list-dependencies nginx
# 设置服务开机自启,同时禁用其他无关服务
systemctl enable --now nginx
systemctl disable firewalld NetworkManager
# 查看服务的日志(无需单独找日志文件,整合了journalctl)
journalctl -u nginx -f # -f实时跟踪日志实战场景:服务启动失败时,先用systemctl status 服务名查看状态,再用journalctl -u 服务名排查具体错误,比手动找日志文件更高效。
2. chown/chmod:权限管理高级用法
权限管理是运维安全的基础,除了简单的chmod 755,还有递归授权、按用户组授权等高级用法,避免权限混乱。
# 递归修改目录及子文件的所有者为www,所属组为www(Web服务常用)
chown -R www:www /var/www/html
# 只修改目录权限,子文件权限保持不变(避免递归修改文件权限出错)
find /var/www -type d -exec chmod 755 {} \;
# 用符号权限设置,让所有者有读写执行权限,组和其他只有读权限
chmod u=rwx,g=r,o=r /opt/script.sh
# 设置文件的SUID权限(允许普通用户以所有者权限执行,谨慎使用)
chmod u+s /usr/bin/passwd注意:SUID权限风险较高,仅在必要时使用(比如passwd命令),避免普通用户通过SUID权限提权。
3. last/lastb:登录日志排查
排查服务器是否被非法登录时,last和lastb是关键工具,能查看用户登录历史、登录IP、登录时间,以及失败的登录尝试。
# 查看所有用户的登录历史,包括登录时间、IP、退出时间
last
# 查看失败的登录尝试(排查暴力破解常用)
lastb
# 只查看root用户的登录历史,按时间排序
last root | sort -k4,6补充:登录日志默认存放在/var/log/wtmp(last读取)和/var/log/btmp(lastb读取),如果日志被清空,可通过auditd服务进一步排查。
五、实用小技巧与避坑总结
掌握命令用法只是基础,结合实际运维场景的技巧,能让你少走很多弯路:
• 命令组合使用:很多高级需求需要多个命令组合,比如“find + xargs + rsync”实现批量文件同步,“awk + sort + uniq”实现日志统计,灵活组合能发挥更大作用。 • 测试后再执行:批量修改、删除命令(比如rm、chmod -R),建议先不加执行参数测试(比如find ... | xargs echo rm -rf),确认目标正确后再执行,避免误操作。 • 记录命令别名:将常用的复杂命令设置为别名(比如alias ngxlog='tail -f /var/log/nginx/access.log'),放在~/.bashrc中,提升日常操作效率。 • 注意命令兼容性:不同Linux发行版(CentOS、Ubuntu、Debian)的命令可能有差异,比如Ubuntu用apt,CentOS用yum,执行前需确认系统版本。
以上这些命令都是我在日常运维中反复用到的,覆盖了绝大多数高频场景。其实Linux运维的核心不是记多少命令,而是理解命令的原理和适用场景,遇到问题能快速想到用哪个工具解决。