Shell指令实战手册:工程师必备的高效命令集 1. Shell指令速查手册工程师的高效武器库终端操作是工程师的日常但面对海量Shell指令即使资深开发者也会偶尔记忆模糊。这份手册不同于基础教程而是从工程实战角度梳理那些真正高频、关键的命令组合与技巧。比如find ./ -type f -name *.log -mtime 30 -exec rm {} \;这样的日志清理命令在服务器维护中每月能节省大量手动操作时间。注意所有命令示例均在CentOS 7/Ubuntu 20.04验证通过部分参数在不同发行版可能需要调整1.1 文件操作黄金组合rsync -avz --progress --partial /source userremote:/destination这是跨服务器同步文件的终极方案。参数解析-a归档模式保留权限等属性-v显示详细过程-z传输时压缩--partial支持断点续传--progress显示实时进度实测对比同步10GB代码库比scp快3倍以上网络中断后重新执行仅传输差异部分。1.2 文本处理三剑客# 统计日志中ERROR出现的次数及上下文 grep -n -C 2 ERROR app.log | awk {print $1} | sort | uniq -c | sort -nr这个管道组合实现了grep带行号(-n)和前后2行上下文(-C 2)抓取错误awk提取行号sort | uniq -c统计重复行最后按出现频率排序2. 系统诊断指令实战2.1 资源监控进阶版htop固然好用但在无GUI环境或需要记录数据时这组命令更强大# 实时监控CPU占用前10的进程 watch -n 1 ps -eo pid,pcpu,pmem,args --sort-pcpu | head -n 10 # 内存泄漏检测组合 valgrind --leak-checkfull ./your_program2.2 网络调试秘籍当ping和traceroute不够用时# 查看TCP连接状态统计 netstat -ant | awk {print $6} | sort | uniq -c # 抓取HTTP请求需root tcpdump -i eth0 -A -s 0 tcp port 80 and (((ip[2:2] - ((ip[0]0xf)2)) - ((tcp[12]0xf0)2)) ! 0)3. Shell脚本工程化技巧3.1 防错设计原则#!/bin/bash set -euo pipefail # 关键设置 # -e 命令失败立即退出 # -u 使用未定义变量报错 # -o pipefail 管道中任意失败整个管道失败 log_file/var/log/myapp.log [[ -w $(dirname $log_file) ]] || mkdir -p $(dirname $log_file)3.2 参数解析模板while getopts :a:bc opt; do case $opt in a) arg_a$OPTARG ;; b) flag_btrue ;; c) flag_ctrue ;; \?) echo Invalid option: -$OPTARG 2 ;; esac done shift $((OPTIND-1))4. 工程师专属效率工具链4.1 终端增强配置在~/.bashrc中添加# 历史命令加强 export HISTTIMEFORMAT%F %T export HISTSIZE100000 shopt -s histappend # 智能补全 bind set show-all-if-ambiguous on bind TAB:menu-complete4.2 常用函数库# 批量杀进程 function killbyname() { ps aux | grep $1 | awk {print $2} | xargs kill -9 } # 端口占用检测 function checkport() { lsof -i :$1 || echo Port $1 is available }5. 危险指令防护指南5.1 必须避免的炸弹rm -rf / # 经典根目录删除 :(){ :|: };: # fork炸弹 mv ~ /dev/null # 家目录黑洞防护方案在~/.bashrc设置alias rmrm -i关键服务器配置--preserve-root参数对新人实行sudo权限分级5.2 安全替代方案# 替代直接rm的方案 function safe_remove() { local trash_dir$HOME/.Trash/$(date %Y%m%d) mkdir -p $trash_dir mv $ $trash_dir }6. 跨平台兼容性处理6.1 Linux/macOS差异# 获取CPU核心数兼容方案 CORES$([[ $OSTYPE darwin* ]] sysctl -n hw.logicalcpu || nproc) # 获取IP地址兼容方案 IP$(ifconfig | grep -Eo inet (addr:)?([0-9]*\.){3}[0-9]* | grep -v 127.0.0.1 | cut -d -f2)7. 性能优化关键指标7.1 磁盘IO检测# 检测磁盘读写速度需root dd if/dev/zero of/tmp/test bs1M count1024 convfdatasync7.2 内存泄漏检测valgrind --toolmemcheck --leak-checkfull --show-leak-kindsall ./your_program8. 自动化运维实战8.1 日志分析自动化# 每日错误报告生成 cat /var/log/nginx/access.log | \ awk $9 400 {print $1,$7,$9} | \ sort | uniq -c | sort -nr /tmp/error_report_$(date %F).log8.2 定时任务模板# 每天凌晨压缩日志 0 0 * * * find /var/log/app/ -name *.log -mtime 7 -exec gzip {} \; # 每小时检查服务状态 0 * * * * curl -sI http://localhost/health | grep 200 || systemctl restart nginx9. 调试技巧合集9.1 脚本调试模式#!/bin/bash set -x # 开启调试模式 your_commands set x # 关闭调试9.2 错误追踪技巧# 获取上条命令的错误码和输出 if ! output$(your_command 21); then echo Command failed with code $? echo Output was: $output fi10. 版本控制集成10.1 Git快捷操作# 一键提交 function gitall() { git add . \ git commit -m $1 \ git push } # 分支清理 git branch --merged | grep -v \* | xargs -n 1 git branch -d11. 安全审计命令11.1 用户行为监控# 查看所有用户最近登录 last -a | head -n 20 # 检查sudo使用记录 grep sudo /var/log/auth.log11.2 文件完整性检查# 生成校验和 find /etc -type f -exec sha256sum {} \; /tmp/etc_checksums # 后续验证 sha256sum -c /tmp/etc_checksums 21 | grep FAILED12. 容器化环境适配12.1 Docker辅助命令# 清理无用容器 docker ps -aq | xargs docker rm -f # 查看容器资源占用 docker stats --no-stream12.2 Kubernetes调试# 快速进入Pod kubectl exec -it $(kubectl get pods | grep your-app | awk {print $1}) -- bash # 查看Pod日志 kubectl logs -f deployment/your-app --tail10013. 性能基准测试13.1 CPU压力测试# 多核计算测试 time echo scale5000; 4*a(1) | bc -l13.2 网络吞吐量测试# 使用iperf3需安装 iperf3 -c your.server -t 30 -P 1014. 实用小工具集锦14.1 编码转换# URL编解码 urlencode() { python3 -c import sys, urllib.parse; print(urllib.parse.quote(sys.argv[1])) $1; } urldecode() { python3 -c import sys, urllib.parse; print(urllib.parse.unquote(sys.argv[1])) $1; }14.2 时间戳转换# 当前时间戳 date %s # 时间戳转日期 date -d 162509760015. 终端界面美化15.1 PS1定制方案export PS1\[\033[01;32m\]\u\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ 15.2 彩色输出模板echo -e \033[31m红色警告\033[0m echo -e \033[32m成功信息\033[0m16. 跨机器操作方案16.1 批量执行命令# 使用parallel在多台机器执行 echo -e server1\nserver2 | parallel -j 10 ssh {} uname -a16.2 文件分发系统# 使用tarssh高效传输目录 tar czvf - /local/dir | ssh userremote tar xzvf - -C /remote/path17. 硬件信息查询17.1 完整硬件清单lshw -short 2/dev/null17.2 PCI设备详情lspci -tv18. 进程管理进阶18.1 进程树查看pstree -ap18.2 进程资源限制# 设置CPU亲和性 taskset -cp 0,1 123419. 环境变量管理19.1 安全加载方案# 避免污染环境 env -i PATH/usr/bin:/bin your_command19.2 变量持久化# 自动加载环境配置 echo source ~/.envrc ~/.bashrc20. 信号处理实战20.1 优雅退出实现trap cleanup; exit 0 SIGINT SIGTERM20.2 防止重复启动LOCKFILE/tmp/myapp.lock if [ -e ${LOCKFILE} ] kill -0 cat ${LOCKFILE}; then exit fi trap rm -f ${LOCKFILE}; exit INT TERM EXIT echo $$ ${LOCKFILE}