当前位置:首页>Linux>干运维5年,这30条Linux命令救了我无数次,第8条最管用!

干运维5年,这30条Linux命令救了我无数次,第8条最管用!

  • 2026-09-06 06:32:35
干运维5年,这30条Linux命令救了我无数次,第8条最管用!
凌晨3点,手机响了。
线上服务器挂了,领导在群里催,你打开终端,手抖着敲了半天,脑子一片空白。
不是你不会,是那一瞬间想不起来该敲哪条。
干运维5年,我踩过太多这种坑。后来我逼自己把最常用的命令整理成清单,出事的时候照着敲就行。今天把这份清单给你,30条,每一条都是真刀真枪换来的经验。

服务器卡了?先看这5条

1. top -c

场景:服务器突然变卡,不知道哪个进程在吃资源
命令:top -c
踩坑:没加-c,你看到的都是缩写,根本认不出是哪个进程。加了-c显示完整命令行,一眼就能定位到问题进程。有次一个Java进程疯狂吃CPU,top -c一看,完整启动参数全出来了,直接锁定是哪个服务。

2. free -h

场景:服务报OOM,或者内存使用率飙升
命令:free -h
踩坑:别用free -m,-h自动换算成人类可读的单位,一眼看出还剩多少G。重点看available那列,那才是真正能用的内存。buffers和cached不算真正的占用,系统需要时会自动释放。

3. df -hT

场景:磁盘空间告警,或者写入报"No space left on device"
命令:df -hT
踩坑:加-T显示文件系统类型,这个很重要。有次根分区满了,我一看是xfs格式,直接用xfs_growfs扩容,如果不知道文件系统类型,你可能选错工具。另外,df显示满了但du显示没满,大概率是删了文件但进程还在持有,lsof | grep deleted一眼就能找到。

4. iostat -x 1

场景:数据库变慢,或者磁盘读写延迟高
命令:iostat -x 1(1秒刷新一次)
踩坑:重点看%util和await。%util接近100%说明磁盘已经打满,await超过10ms说明响应慢。有次MySQL慢查询,所有人都去查SQL,结果iostat一看,磁盘util 99%,根因是磁盘瓶颈不是SQL问题。

5. vmstat 1 5

场景:系统整体性能排查,不知道是CPU、内存还是I/O的问题
命令:vmstat 1 5(1秒采样,共5次)
踩坑:vmstat一次看全貌。r列是等待CPU的进程数,b列是等待I/O的进程数。r持续大于CPU核数,说明CPU不够用。b持续大于0,说明I/O是瓶颈。有次服务器卡,所有人都在看CPU,vmstat一看b列居高不下,原来是磁盘I/O拖了后腿。

出了问题找不到原因?这5条帮你定位

6. tail -f /var/log/xxx

场景:实时看日志,排查正在发生的问题
命令:tail -f /var/log/xxx
踩坑:最基础的命令,但很多人用错了。加个-f是follow的意思,日志有新内容会实时显示。配合grep用更狠:tail -f /var/log/syslog | grep "error",只看错误行,信息量瞬间降下来。

7. grep -rn "error" /path

场景:在日志或代码里搜关键字,定位报错位置
命令:grep -rn "error" /path
踩坑:-r递归搜索,-n显示行号,这两个参数必须加。不加-n你搜到了也不知道在第几行,还得再找一遍。有次排查一个线上报错,grep -rn一把搜出在哪个文件哪一行,直接打开改,10分钟搞定。

8. less +F /var/log/xxx

场景:实时追踪日志,但偶尔需要停下来翻看
命令:less +F /var/log/xxx
踩坑:这是我最管用的一条。tail -f看日志,关键报错一闪而过,想回去翻已经来不及了。less +F跟tail -f一样实时追踪,但Ctrl+C可以暂停,用方向键上下翻看,Shift+F继续追踪。就这一个功能,我用了3年,再也没漏过关键报错。

9. journalctl -u nginx --since "1 hour ago"

场景:查看systemd管理服务的日志,指定时间范围
命令:journalctl -u 服务名 --since "1 hour ago"
踩坑:很多人还在tail /var/log/nginx/xxx,其实systemd的服务日志用journalctl更方便。--since指定时间范围,-u指定服务,比翻日志文件快10倍。配合-f参数还能实时追踪:journalctl -u nginx -f。

10. awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

场景:统计访问日志中IP访问频率,排查异常流量或攻击
命令:awk '{print $1}' access.log | sort | uniq -c | sort -rn | head
踩坑:这条看着长,但拆开看就懂了:awk提取第一列IP,sort排序,uniq -c统计次数,sort -rn按次数倒序,head取前10。有次服务器被爬虫疯狂请求,这条命令一跑,IP直接暴露,iptables一封,世界清净了。

网络不通?这5条逐层排查

11. ss -tlnp

场景:查看当前服务器监听了哪些端口,或者端口被谁占了
命令:ss -tlnp
踩坑:别再用netstat了,ss比netstat快得多,服务器连接数多的时候netstat能卡死,ss秒出结果。-t是TCP,-l是监听,-n显示端口号,-p显示进程。四层信息一步到位。

12. curl -v http://xxx

场景:测试HTTP接口是否正常,看完整的请求和响应过程
命令:curl -v http://xxx
踩坑:-v显示完整交互过程,包括DNS解析、TCP连接、请求头、响应头。有次接口返回502,curl -v一看,连接超时,问题出在上游服务器,不是本地的问题。加个-w "\n%{time_total}\n"还能看响应时间,排查慢接口很好用。

13. tcpdump -i eth0 port 80

场景:抓包分析,排查网络层的问题
命令:tcpdump -i eth0 port 80 -nn -c 100
踩坑:加-nn不解析域名和端口名,速度会快很多。-c 100只抓100个包,防止刷屏。有次两个服务之间通信异常,tcpdump一抓,发现是TLS握手失败,证书问题,应用层根本看不出这个信息。

14. dig xxx.com

场景:DNS解析排查,域名解析不了或者解析到错误IP
命令:dig xxx.com
踩坑:dig比nslookup信息更全。重点看ANSWER SECTION,确认解析结果对不对。有次服务突然连不上数据库,ping能通但连接超时,dig一查,域名解析到了一个内网IP,DNS配置被人改了。加+short只看IP,写脚本时很好用。

15. traceroute xxx.com

场景:网络不通,想知道卡在哪一跳
命令:traceroute xxx.com
踩坑:从本机到目标服务器,经过的每一跳都显示延迟。哪一跳开始出现星号,问题就在那一层。有次跨机房访问慢,traceroute一看,延迟在某个运营商的网关突然飙升,直接找网络组处理。

进程卡死/端口被占?这5条搞定

16. ps aux --sort=-%mem | head -10

场景:按内存占用排序,找出最吃内存的进程
命令:ps aux --sort=-%mem | head -10
踩坑:--sort=-%mem按内存降序,--sort=-%cpu按CPU降序。很多人只知道ps aux,不排序的话几十个进程里根本找不到重点。head -10只看前10个,信息量刚好。

17. lsof -i:8080

场景:端口被占用了,想知道是哪个进程
命令:lsof -i:8080
踩坑:启动服务报"Address already in use",用这条命令一查,PID和进程名全出来了。有次一个僵尸进程占着8080端口,ps aux里根本找不到,lsof -i:8080直接定位,kill掉就好了。

18. kill -9 $(lsof -t -i:8080)

场景:一键杀掉占用指定端口的进程
命令:kill -9 $(lsof -t -i:8080)
踩坑:lsof加-t只输出PID,配合kill -9一行搞定。不用先查PID再手动kill,省了一步。有次生产环境紧急释放端口,这条命令30秒搞定,领导还以为我处理了半小时。

19. nohup command &

场景:后台运行命令,SSH断开也不会中断
命令:nohup command > output.log 2>&1 &
踩坑:很多人只写nohup command &,忘了重定向输出。nohup默认输出到nohup.out,多人共用服务器的时候会互相覆盖。加> output.log 2>&1,日志和错误都写到指定文件,排查问题方便。&别忘了加,否则你关终端进程就没了。

20. strace -p PID

场景:进程卡住了,不知道卡在哪里,想知道它在等什么
命令:strace -p PID
踩坑:strace是终极排查武器。进程卡死,top看不出问题,日志也没报错,strace一挂,系统调用全出来了。有次一个Java进程卡住不动,strace一看,卡在futex,是线程死锁,直接拿结果给开发,定位问题从2小时缩短到5分钟。

磁盘满了/文件丢了?这5条救急

21. du -sh / | sort -rh | head -10*

场景:磁盘满了,不知道哪个目录占的空间最大
命令:du -sh /* | sort -rh | head -10
踩坑:先从根目录开始,找出最大的目录,再一层层往下钻。别上来就du -sh /xxx/yyy/zzz,范围太大等于大海捞针。sort -rh按大小倒序,最大的排最前面,head -10只看前10个,够用了。

22. find / -name "*.log" -mtime +7 -delete

场景:清理过期日志文件,释放磁盘空间
命令:find /var/log -name "*.log" -mtime +7 -delete
踩坑:先删-mtime +7的,7天前的日志。别上来就删所有log,有些日志还在用。保险起见,先跑find不带-delete,看看会删哪些文件,确认没问题再加-delete。有次同事直接rm -rf /var/log/*,结果应用在写的日志文件也被删了,服务直接崩了。

23. tar -czf backup.tar.gz /path

场景:打包压缩文件,备份或迁移数据
命令:tar -czf backup.tar.gz /path
踩坑:-c创建,-z用gzip压缩,-f指定文件名,这三个参数顺序不能乱。解压用tar -xzf。大文件用tar -cJf,-J用xz压缩,压缩率更高但更慢。有次迁移几十G的日志,tar -czf打包后只有原来的1/5,传输时间省了80%。

24. rsync -avz --progress src/ dst/

场景:增量同步文件,备份或迁移数据
命令:rsync -avz --progress src/ dst/
踩坑:rsync只传差异部分,比scp快得多。几十G的数据,第一次全量传,后面只传变化的部分,速度提升几十倍。--progress看进度,不然大文件传输时你不知道是卡了还是在传。注意src/带斜杠是传目录内容,不带斜杠是传目录本身,这个坑我踩过。

25. nc -zv host port

场景:测试远程端口是否通,比telnet好用
命令:nc -zv 192.168.1.100 3306
踩坑:telnet测试端口还得装,nc大部分系统自带。-z扫描端口不发送数据,-v显示详细信息。有次排查数据库连不上,ping能通但nc -zv 3306不通,说明端口被防火墙挡了,找网络组一开就好了。

服务器被入侵?这5条先跑起来

26. lastb

场景:查看登录失败记录,排查是否有人在暴力破解
命令:lastb
踩坑:lastb显示的是登录失败的记录,如果某个IP出现几百次,大概率在暴力破解。配合last看成功登录记录,对比一下就知道有没有异常登录。有次服务器被暴力破解,lastb一看,某个境外IP尝试了2000多次,直接封IP改密码。

27. w

场景:查看当前谁在登录,在做什么
命令:w
踩坑:w比who信息更全,能看到登录用户在执行什么命令。有次半夜看到有个陌生用户在线,w一看正在执行cat /etc/passwd,直接踢掉锁定账号。whoami确认自己身份,w看别人,组合使用。

28. chattr +i /etc/passwd

场景:锁定关键文件,防止被篡改
命令:chattr +i /etc/passwd
踩坑:+i之后,root都改不了这个文件。应急的时候先锁住关键配置,防止入侵者改你的用户和密码。解除用chattr -i。有次服务器被入侵,第一时间锁了passwd、shadow和sudoers,争取了时间排查。lsattr可以查看文件属性。

29. passwd -l username

场景:锁定可疑账号,禁止登录
命令:passwd -l username
踩坑:-l锁定,-u解锁。锁定后该账号无法登录,但进程还在跑,不影响服务。有次发现一个测试账号被入侵者利用,passwd -l锁定,然后慢慢排查,不慌。解锁用passwd -u,别搞混了。

30. iptables -L -n -v

场景:查看当前防火墙规则,排查是否有异常放行
命令:iptables -L -n -v
踩坑:-n不解析域名,速度快。-v显示详细信息,包括匹配的包数量。有次服务器被入侵后排查,iptables -L -n -v一看,多了一条放行规则,把某个端口对外开放了,入侵者就是从这进来的。删掉规则用iptables -D,加规则用iptables -A。
30条命令,看着多,但真到了出事的时候,你只会感谢自己提前看过。
建议你现在就收藏。不用背,下次服务器出事的时候,翻出来照着敲就行。
运维这行,拼的不是你记住了多少,而是出事的时候你能不能第一时间稳住。手里有清单,心里就不慌。

最新文章

随机文章