合法获取EDU邮箱全攻略:从社区学院申请到主流开发者福利绑定
2026/8/6 7:24:09
=
专栏:基础设施管理
难度:入门
标签:ShellBash脚本技巧速查
这篇文章收录了日常运维中高频使用的Shell技巧,不讲理论,全是干货。收藏好,用到查。
# 1. 删除文件空白行sed-i'/^$/d'file.txt# 2. 去除行首行尾空格sed-i's/^[[: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.txt>merged.txt# 7. 反转文件行(最后一行变第一行)tacfile.txt# 8. 只显示第5-10行sed-n'5,10p'file.txt# 9. 替换文件内容sed-i's/old_string/new_string/g'file.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/-size+100M-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"-mtime+30-execrm-f{}\;# 21. 后台运行脚本(关闭终端不中断)nohup./script.sh>/tmp/out.log2>&1&# 22. 查看进程打开的文件lsof-p<PID># 23. 查看端口占用ss-tlnp|grep:80# 或lsof-i:80# 24. 杀死所有匹配名称的进程pkill-9nginx# 或killall-9nginx# 25. 定时任务(每天凌晨2点执行)echo"0 2 * * * root /opt/scripts/backup.sh">>/etc/cron.d/mybackup# 26. 查看CPU核心数nproc# 或grep-c"processor"/proc/cpuinfo# 27. 查看内存使用(不含缓存的真实使用量)free-h|awk'NR==2{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-H"Content-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.lock"if[-f"$LOCK_FILE"];thenecho"Script already running";exit1fitrap"rm -f$LOCK_FILE"EXITtouch"$LOCK_FILE"# 43. 重试机制retry(){localn=0;localmax=3;localdelay=5until[$n-ge$max];do"$@"&&breakn=$((n+1))echo"Retry$n/$maxin${delay}s..."sleep$delaydone}retrycurl-fhttps://example.com# 44. 检查命令是否存在command-vdocker>/dev/null2>&1||{echo"docker not found";exit1;}# 45. 读取配置文件(key=value格式)whileIFS='='read-rkey value;doexport"$key=$value"done<config.env持续更新中…欢迎在评论区提交你常用的Shell技巧,好的会加入合集。