1. Shell指令速查手册:工程师的高效武器库
终端操作是工程师的日常,但面对海量Shell指令,即使资深开发者也会偶尔记忆模糊。这份手册不同于基础教程,而是从工程实战角度梳理那些真正高频、关键的命令组合与技巧。比如find ./ -type f -name "*.log" -mtime +30 -exec rm {} \;这样的日志清理命令,在服务器维护中每月能节省大量手动操作时间。
注意:所有命令示例均在CentOS 7/Ubuntu 20.04验证通过,部分参数在不同发行版可能需要调整
1.1 文件操作黄金组合
rsync -avz --progress --partial /source user@remote:/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-check=full ./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_b=true ;; c) flag_c=true ;; \?) echo "Invalid option: -$OPTARG" >&2 ;; esac done shift $((OPTIND-1))4. 工程师专属效率工具链
4.1 终端增强配置
在~/.bashrc中添加:
# 历史命令加强 export HISTTIMEFORMAT="%F %T " export HISTSIZE=100000 shopt -s histappend # 智能补全 bind 'set show-all-if-ambiguous on' bind 'TAB:menu-complete'4.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 rm='rm -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 bs=1M count=1024 conv=fdatasync7.2 内存泄漏检测
valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all ./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 2>&1); 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 2>&1 | 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 --tail=10013. 性能基准测试
13.1 CPU压力测试
# 多核计算测试 time echo "scale=5000; 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[0m"16. 跨机器操作方案
16.1 批量执行命令
# 使用parallel在多台机器执行 echo -e "server1\nserver2" | parallel -j 10 ssh {} "uname -a"16.2 文件分发系统
# 使用tar+ssh高效传输目录 tar czvf - /local/dir | ssh user@remote "tar xzvf - -C /remote/path"17. 硬件信息查询
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}