【基础设施管理】08-Shell脚本100个实用技巧合集
专栏基础设施管理难度入门标签ShellBash脚本技巧速查前言这篇文章收录了日常运维中高频使用的Shell技巧不讲理论全是干货。收藏好用到查。一、文本处理# 1. 删除文件空白行sed-i/^$/dfile.txt# 2. 去除行首行尾空格sed-is/^[[:space:]]*//;s/[[:space:]]*$//file.txt# 3. 统计文件行数/字数/字节数wc-lfile.txtwc-wfile.txtwc-cfile.txt# 4. 提取第N列以冒号为分隔符awk-F:{print $3}/etc/passwd# 5. 去重并计数排序sortfile.txt|uniq-c|sort-rn# 6. 多文件合并去重sort-ufile1.txt file2.txtmerged.txt# 7. 反转文件行最后一行变第一行tacfile.txt# 8. 只显示第5-10行sed-n5,10pfile.txt# 9. 替换文件内容sed-is/old_string/new_string/gfile.txt# 10. 提取IP地址grep-oE[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}file.txt二、文件操作# 11. 找出7天内修改的文件find/path-mtime-7-typef# 12. 找出大于100MB的文件find/-size100M-typef# 13. 批量重命名forfin*.log;domv$f${f/.log/.bak};done# 14. 统计目录大小du-sh/var/log/*# 15. 快速清空文件不删除file.txt# 16. 创建多级目录mkdir-p/opt/app/{logs,data,conf}# 17. 计算文件MD5md5sum file.txt# 18. 同步目录增量rsync-avz--progresssource/ dest/# 19. 安全删除移到/tmp避免误删mv/critical/file /tmp/backup_$(date%Y%m%d_%H%M%S)# 20. 查找并删除30天前的日志find/var/log-name*.log-mtime30-execrm-f{}\;三、进程与系统# 21. 后台运行脚本关闭终端不中断nohup./script.sh/tmp/out.log21# 22. 查看进程打开的文件lsof-pPID# 23. 查看端口占用ss-tlnp|grep:80# 或lsof-i:80# 24. 杀死所有匹配名称的进程pkill-9nginx# 或killall-9nginx# 25. 定时任务每天凌晨2点执行echo0 2 * * * root /opt/scripts/backup.sh/etc/cron.d/mybackup# 26. 查看CPU核心数nproc# 或grep-cprocessor/proc/cpuinfo# 27. 查看内存使用不含缓存的真实使用量free-h|awkNR2{print $3}# 28. 查看磁盘I/Oiostat-xz1# 29. 监控某个文件的变化inotifywait-m-emodify,create,delete /etc/nginx/# 30. 系统当前登录用户whow四、网络相关# 31. 测试端口连通性nc-zv10.0.0.180# 或telnet10.0.0.180# 32. 持续ping并记录时间戳ping-i110.0.0.1|whilereadline;doecho$(date):$line;done# 33. 抓包并保存tcpdump-ieth0 port80-w/tmp/capture.pcap# 34. 查看路由表iproute show# 或netstat-rn# 35. 临时添加路由iprouteadd192.168.2.0/24 via10.0.0.1 dev eth0# 36. 查看网卡流量实时sar-nDEV1# 37. 测试HTTP接口curl-XPOST-HContent-Type: application/json\-d{key:value}http://api.example.com/endpoint# 38. 下载文件断点续传wget-chttps://example.com/file.tar.gz# 39. 扫描内网存活主机nmap-sn192.168.1.0/24# 40. 查看当前建立的连接数ss-s|grepestab五、实用脚本片段# 41. 函数带颜色的日志输出log_info(){echo-e\033[32m[INFO]$(date%F %T)$*\033[0m;}log_warn(){echo-e\033[33m[WARN]$(date%F %T)$*\033[0m;}log_error(){echo-e\033[31m[ERROR]$(date%F %T)$*\033[0m;}# 42. 脚本加锁防止并发执行LOCK_FILE/tmp/myscript.lockif[-f$LOCK_FILE];thenechoScript already running;exit1fitraprm -f$LOCK_FILEEXITtouch$LOCK_FILE# 43. 重试机制retry(){localn0;localmax3;localdelay5until[$n-ge$max];do$breakn$((n1))echoRetry$n/$maxin${delay}s...sleep$delaydone}retrycurl-fhttps://example.com# 44. 检查命令是否存在command-vdocker/dev/null21||{echodocker not found;exit1;}# 45. 读取配置文件keyvalue格式whileIFSread-rkey value;doexport$key$valuedoneconfig.env持续更新中…欢迎在评论区提交你常用的Shell技巧好的会加入合集。