Linux组合命令

2025/9/23 语法

# 第一类:文件与目录管理

# find + xargs rm:批量删老文件,防磁盘爆

  • find /var/log -name "*.log" -mtime +30 -print0 | xargs -0 rm -f
    
    1
  • 解释:find找30天前的日志,-print0用null分隔防空格名,xargs传给rm删除。

  • 示例:在/var/log下敲,输出无(安静删),但先去掉rm用ls预览:/var/log/oldapp.2024-01.log等文件列出。

  • 场景:服务器磁盘99%满,日志狂长,用这个瘦身,瞬间空出10G。

  • 我的坑:第一次忘-mtime,差点删光所有log。绝招:加-exec echo {} \;先模拟删,确认再真刀。Tips:CentOS用sudo,权限不够哭晕。

# ls -la + grep + sort:文件权限大排查

  • ls -la /etc | grep "^d" | sort -k9
    
    1
  • 解释:ls列详尽权限,grep滤目录(^d),sort按第九列(大小)排。

  • 示例:输出如drwxr-xr-x 2 root root 4096 Sep 10 14:30 passwd,排序后大目录在前。

  • 场景:安全审计,查/etc下可疑大文件夹,防黑客藏木马。

  • 故事:一次入侵事件,用这个发现/root下怪目录,及时隔离。绝招:加head -10只看前10大,效率拉满。Tips:Ubuntu权限严,换ls -lah人性化大小。

# du -sh * + sort -hr:目录占用Top榜

  • du -sh /home/* | sort -hr | head -10
    
    1
  • 解释:du统计子目录大小(-sh人类读),sort降序(-hr),head前10。

  • 示例:100G /home/user150G /home/user2,直观Top用户。

  • 场景:用户投诉空间不够,快速定位谁在囤视频。

  • 我的教训:扫描根目录卡死半小时。绝招:指定路径如/var/www,专注Web目录。Tips:大盘用--max-depth=1限深。

# tar -czf + find:智能备份指定文件

  • find /etc -name "*.conf" -type f | tar -czf config_backup.tar.gz -T -
    
    1
  • 解释:find列配置,-T -从stdin读,tar打包gzip。

  • 示例:打包后ls -lhconfig_backup.tar.gz 2.5M,解压tar -xzf验证。

  • 场景:迁移前备份关键conf,防改动丢。

  • 故事:云迁移,用这个打包Nginx/Apache conf,救回一堆配置。绝招:加--exclude=*.bak跳过备份文件。Tips:远程传scp到备份机。

# grep -r + wc -l:全局搜索计数

  • grep -r "error" /var/log/app/ | wc -l
    
    1
  • 解释:grep递归搜error,wc计数行。

  • 示例:输出150,表示150处错误。

  • 场景:App崩溃,快速估严重度。

  • 坑:大目录慢,用--include="*.log"限文件型。绝招:加cut -d: -f1 | sort -u列独特文件。Tips:vim党用grep -n带行号。

  • 小Tips:文件组合练熟,运维从小时级变分钟。每天du一次,防爆盘。

# 第二类:进程与资源监控

# ps aux + grep + awk:Top CPU进程猎手

  • ps aux | grep [n]ginx | awk '{print $2, $3, $11}' | sort -nrk2 | head -5
    
    1
  • 解释:ps列进程,grep滤nginx,awk取PID(%CPU,命令),sort降序CPU,head前5。

  • 示例:1234 45.2 nginx: worker5678 30.1 nginx: master

  • 场景:负载飙升,查哪个worker吃CPU。

  • 故事:电商峰值,用这个杀掉内存泄漏进程,稳住双11。绝招:加top -p $(ps aux | grep nginx | awk '{print $2}' | head -1)深挖。Tips:Fedora用pgrep简化grep。

# top -b -n1 + sort:批处理资源Top

  • top -b -n1 | grep "Cpu(s)" -A 20 | sort -k9 -nr | head -10
    
    1
  • 解释:top批次跑一次(-b -n1),grep CPU后20行(进程),sort按%MEM降序。

  • 示例:内存Top如java 2.5g 80%

  • 场景:脚本监控,定时邮件Top进程。

  • 我的习惯:crontab每5分跑,预警高耗。坑:-A太多行,改-A 15。绝招:用htop交互版,手动sort。Tips:RHEL需yum装htop。

# free -h + awk:内存水位线

  • free -h | awk 'NR==2{printf "Used: %s/%s (%.1f%%)\n", $3,$2,$3*100/$2 }'
    
    1
  • 解释:free人类读,awk取第二行计算使用率。

  • 示例:Used: 7.8G/16G (48.8%)

  • 场景:OOM杀进程前,快速查内存剩多少。

  • 教训:swap满才知,用这个脚本警报。绝招:加watch -n1实时看。Tips:Debian free -m单位M。

# lsof + grep:端口占用侦探

  • lsof -i :80 | grep LISTEN | awk '{print $2, $9}'
    
    1
  • 解释:lsof列端口,grep滤监听,awk取PID和命令。

  • 示例:1234 nginx: master

  • 场景:Nginx起不来,查谁占80端口。

  • 故事:迁移时冲突,用这个杀掉旧进程。绝招:kill -9 PID一键终结。Tips:无lsof用netstat -tulpn

  • 小Tips:进程监控是预防针,crontab这些组合,服务器睡得香。

# 第三类:网络诊断与配置

# ping + mtr:路由追踪神器

  • ping -c 10 8.8.8.8 & mtr -r -c 10 8.8.8.8
    
    1
  • 解释:ping发10包测延迟,mtr报告路由跳数+丢包(-r报告 -c10次)。

  • 示例:mtr输出Hop 1: 192.168.1.1 1ms 0% lossHop 5: 114.114.114.114 20ms 5% loss

  • 场景:远程访问卡,定位哪跳丢包。

  • 坑:防火墙挡mtr,用ping先探。绝招:mtr --report-wide宽表看。Tips:Ubuntu apt install mtr。

# netstat -an + grep + wc:连接计数

  • netstat -an | grep :443 | wc -l
    
    1
  • 解释:netstat列连接(-an),grep HTTPS端口,wc计数。

  • 示例:5000,表示5000个443连接。

  • 场景:DDoS疑似,查高并发端口。

  • 故事:峰值时用,及时限流iptables。绝招:加awk '{print $5}' | sort | uniq -c | sort -nr看IP Top。Tips:ss命令更快ss -an | grep :443

# ifconfig + grep + awk:IP速查

  • ifconfig eth0 | grep "inet " | awk '{print $2}'
    
    1
  • 解释:ifconfig接口,grep inet行,awk取IP。

  • 示例:192.168.1.100

  • 场景:脚本配置,动态取本机IP。

  • 我的日常:Docker桥接,用这个调试。坑:ip addr show现代版。绝招:hostname -I全IP。Tips:CentOS7弃ifconfig,用ip。

# tcpdump + grep:包捕获滤镜

  • tcpdump -i eth0 -n port 80 -c 100 | grep "GET /"
    
    1
  • 解释:tcpdump捕100包80端口(-c100),grep HTTP GET。

  • 示例:IP 192.168.1.10.12345 > 192.168.1.1.80: GET /index.html

  • 场景:Web异常,抓包看请求。

  • 教训:忘-c,全抓卡死。绝招:tcpdump -w capture.pcap存文件wireshark析。Tips:sudo跑,权限要。

# 第四类:日志分析与调试

# tail -f + grep:实时错误追踪

  • tail -f /var/log/syslog | grep --line-buffered ERROR
    
    1
  • 解释:tail实时跟(-f),grep滤ERROR(--line-buffered缓冲)。

  • 示例:实时刷Sep 18 10:30: kernel ERROR: out of memory

  • 场景:服务重启后,盯crash日志。

  • 故事:数据库死锁,用这个捕获栈迹。绝招:多grep| grep -v INFO排杂。Tips:journalctl systemd版。

# awk + sort + uniq:日志Top事件

  • awk '{print $5}' /var/log/auth.log | sort | uniq -c | sort -nr | head -5
    
    1
  • 解释:awk取第五列(命令),sort uniq计数,降序Top5。

  • 示例:1000 sudo500 ssh

  • 场景:安全日志,查高频登录尝试。

  • 坑:列错,改$NF末列。绝招:加tail -10000限近期。Tips:Debian auth.log路径。

# sed + grep:日志清洗替换

  • grep "2025-09" /var/log/app.log | sed 's/IP=//g' | grep "blocked"
    
    1
  • 解释:grep日期,sed删IP=前缀,再grep blocked。

  • 示例:清洗后192.168.1.100 blockedblocked

  • 场景:报告生成,脱敏IP。

  • 我的习惯:ELK前预处理。绝招:sed -i原地改。Tips:正则sed 's/[0-9]\{3\}\.[0-9]\{3\}/XXX/g'模糊IP。

# zcat + grep:压缩日志搜

  • zcat /var/log/oldlogs/*.gz | grep "panic" | wc -l
    
    1
  • 解释:zcat解压不存,grep panic,wc计数。

  • 示例:25,旧log中25次panic。

  • 场景:历史故障溯源。

  • 教训:gz多,内存爆,用zgrep直接搜。绝招:zcat | head -100限量。Tips:bz2用bzcat。

  • 小Tips:日志组合是事后诸葛,配置rsyslog远程,统一管。

# 第五类:系统维护与安全

# yum update -y + grep:安全补丁速更

  • yum check-update | grep security | xargs yum update -y
    
    1
  • 解释:yum查更新,grep security包,xargs更新。

  • 示例:更新kernel-security 5.14.0-1

  • 场景:月巡检,防漏洞。

  • 故事:WannaCry时,用这个救服务器。绝招:yum history查变更。Tips:Ubuntu apt list --upgradable | grep security。

# chmod + find:权限批量修

  • find /var/www -type f -exec chmod 644 {} \; ; find /var/www -type d -exec chmod 755 {} \;
    
    1
  • 解释:find文件644,目录755。

  • 示例:无输出,但ls -la见权限变。

  • 场景:Web目录松散,安全加固。

  • 坑:递归深,慢;加-name "*.php"限。绝招:先find ... -ls`预览。Tips:SELinux用chcon。

# history + grep + awk:命令审计

  • history | grep rm | awk '{print $1, $2}' | sort -u
    
    1
  • 解释:history列命令,grep rm,awk取序号和命令,uniq去重。

  • 示例:500 rm -rf /tmp/*

  • 场景:查谁删文件,责任追踪。

  • 我的绝活:.bash_history备份,远程审计。绝招:lastcomm系统命令史。Tips:export HISTSIZE=10000多存。