干运维5年,这30条Linux命令救了我无数次,第8条最管用!
线上服务器挂了,领导在群里催,你打开终端,手抖着敲了半天,脑子一片空白。干运维5年,我踩过太多这种坑。后来我逼自己把最常用的命令整理成清单,出事的时候照着敲就行。今天把这份清单给你,30条,每一条都是真刀真枪换来的经验。服务器卡了?先看这5条
1. top -c
踩坑:没加-c,你看到的都是缩写,根本认不出是哪个进程。加了-c显示完整命令行,一眼就能定位到问题进程。有次一个Java进程疯狂吃CPU,top -c一看,完整启动参数全出来了,直接锁定是哪个服务。2. free -h
踩坑:别用free -m,-h自动换算成人类可读的单位,一眼看出还剩多少G。重点看available那列,那才是真正能用的内存。buffers和cached不算真正的占用,系统需要时会自动释放。3. df -hT
场景:磁盘空间告警,或者写入报"No space left on device"踩坑:加-T显示文件系统类型,这个很重要。有次根分区满了,我一看是xfs格式,直接用xfs_growfs扩容,如果不知道文件系统类型,你可能选错工具。另外,df显示满了但du显示没满,大概率是删了文件但进程还在持有,lsof | grep deleted一眼就能找到。4. iostat -x 1
踩坑:重点看%util和await。%util接近100%说明磁盘已经打满,await超过10ms说明响应慢。有次MySQL慢查询,所有人都去查SQL,结果iostat一看,磁盘util 99%,根因是磁盘瓶颈不是SQL问题。5. vmstat 1 5
场景:系统整体性能排查,不知道是CPU、内存还是I/O的问题踩坑: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
踩坑:最基础的命令,但很多人用错了。加个-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
踩坑:这是我最管用的一条。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
场景:查看当前服务器监听了哪些端口,或者端口被谁占了踩坑:别再用netstat了,ss比netstat快得多,服务器连接数多的时候netstat能卡死,ss秒出结果。-t是TCP,-l是监听,-n显示端口号,-p显示进程。四层信息一步到位。12. curl -v http://xxx
场景:测试HTTP接口是否正常,看完整的请求和响应过程踩坑:-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比nslookup信息更全。重点看ANSWER SECTION,确认解析结果对不对。有次服务突然连不上数据库,ping能通但连接超时,dig一查,域名解析到了一个内网IP,DNS配置被人改了。加+short只看IP,写脚本时很好用。15. 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
踩坑:启动服务报"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 &
命令:nohup command > output.log 2>&1 &踩坑:很多人只写nohup command &,忘了重定向输出。nohup默认输出到nohup.out,多人共用服务器的时候会互相覆盖。加> output.log 2>&1,日志和错误都写到指定文件,排查问题方便。&别忘了加,否则你关终端进程就没了。20. 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
命令:nc -zv 192.168.1.100 3306踩坑:telnet测试端口还得装,nc大部分系统自带。-z扫描端口不发送数据,-v显示详细信息。有次排查数据库连不上,ping能通但nc -zv 3306不通,说明端口被防火墙挡了,找网络组一开就好了。服务器被入侵?这5条先跑起来
26. lastb
踩坑:lastb显示的是登录失败的记录,如果某个IP出现几百次,大概率在暴力破解。配合last看成功登录记录,对比一下就知道有没有异常登录。有次服务器被暴力破解,lastb一看,某个境外IP尝试了2000多次,直接封IP改密码。27. w
踩坑:w比who信息更全,能看到登录用户在执行什么命令。有次半夜看到有个陌生用户在线,w一看正在执行cat /etc/passwd,直接踢掉锁定账号。whoami确认自己身份,w看别人,组合使用。28. chattr +i /etc/passwd
踩坑:+i之后,root都改不了这个文件。应急的时候先锁住关键配置,防止入侵者改你的用户和密码。解除用chattr -i。有次服务器被入侵,第一时间锁了passwd、shadow和sudoers,争取了时间排查。lsattr可以查看文件属性。29. passwd -l username
踩坑:-l锁定,-u解锁。锁定后该账号无法登录,但进程还在跑,不影响服务。有次发现一个测试账号被入侵者利用,passwd -l锁定,然后慢慢排查,不慌。解锁用passwd -u,别搞混了。30. iptables -L -n -v
踩坑:-n不解析域名,速度快。-v显示详细信息,包括匹配的包数量。有次服务器被入侵后排查,iptables -L -n -v一看,多了一条放行规则,把某个端口对外开放了,入侵者就是从这进来的。删掉规则用iptables -D,加规则用iptables -A。30条命令,看着多,但真到了出事的时候,你只会感谢自己提前看过。建议你现在就收藏。不用背,下次服务器出事的时候,翻出来照着敲就行。运维这行,拼的不是你记住了多少,而是出事的时候你能不能第一时间稳住。手里有清单,心里就不慌。