Day 11:Shell工具库:从“刀耕火种“到“工业革命“的效率飞跃

目录

    • 一、jq:JSON处理的"瑞士军刀"
      • 1. 基础查询(比grep更精准)
      • 2. 高级转换技巧
      • 3. 实战:JSON日志分析
    • 二、curl:API调试的"特种部队"
      • 1. 诊断技巧(看到隐藏细节)
      • 2. 高级参数技巧
      • 3. 实战:API健康检查
    • 三、parallel:释放多核威力的"核按钮"
      • 1. 基础并行化
      • 2. 性能对比实验
      • 3. 实战:批量图片转换
    • 四、效率工具:打造你的"命令行智库"
      • 1. 自制备忘系统
      • 2. 终端工作流优化
    • 五、调试工具包:正则与性能分析
      • 1. 正则可视化工具
      • 2. Shell脚本性能分析
      • 终极实战:构建自动化监控面板
      • 避坑指南:工具使用的"黑暗森林法则"
    • 课后挑战:构建智能运维工具箱

开篇:当你的Shell技能遇到瓶颈

你是否经常:

  • 面对JSON配置文件像在读天书?
  • 调试API接口时疯狂复制粘贴curl命令?
  • 看着服务器日志分析任务想"要是能并行处理…"?

今天我要给你一套Shell效率工具包,让你的命令行体验从"石器时代"直接跃迁到"智能时代"!

一、jq:JSON处理的"瑞士军刀"

1. 基础查询(比grep更精准)

# 提取JSON字段值
echo '{"name":"Alice","age":25}' | jq '.name'  # 输出:"Alice"

# 过滤数组元素
curl -s https://api.github.com/repos/stedolan/jq/issues | \
jq '.[] | select(.state == "open") | .title'

2. 高级转换技巧

# 数组→CSV转换
jq -r '.users[] | [.name, .age] | @csv' data.json

# 多文件合并
jq -s '.[0].users + .[1].users' file1.json file2.json

# 动态键名处理
echo '{"user-1": {"name": "Bob"}}' | jq '.["user-1"].name'

3. 实战:JSON日志分析

# 统计各日志级别的数量
cat app.log | jq -r '.level' | sort | uniq -c | \
awk '{printf "%-8s %d次\n", $2, $1}'

二、curl:API调试的"特种部队"

1. 诊断技巧(看到隐藏细节)

# 显示完整请求过程(-v)
curl -v https://api.example.com

# 只显示响应头(-I)
curl -I https://example.com

# 输出耗时明细(--trace-time)
curl --trace-time -o /dev/null -s https://example.com

2. 高级参数技巧

# 伪装浏览器请求
curl -H "User-Agent: Mozilla/5.0" -H "Accept-Language: en-US" https://example.com

# 处理Cookie会话
curl -c cookies.txt -b cookies.txt -d "user=admin&pass=123" https://example.com/login

# 文件分段下载(断点续传)
curl -C - -O http://example.com/bigfile.zip

3. 实战:API健康检查

check_api() {
    local url=$1
    http_code=$(curl -s -o /dev/null -w "%{http_code}" "$url")
    [ "$http_code" -eq 200 ] && \
        echo "✅ $url 健康" || \
        echo "❌ $url 异常 (状态码: $http_code)"
}

三、parallel:释放多核威力的"核按钮"

1. 基础并行化

# 并行处理文件(替代for循环)
ls *.log | parallel -j 4 "grep 'ERROR' {} > {}.errors"

# 多参数并行(神奇的三冒号)
parallel -j 8 "curl -s http://example.com/api?q={1}&page={2}" ::: A B C ::: 1 2 3

2. 性能对比实验

# 串行处理
time for i in {1..10}; do sleep 1; done  # 真实时间≈10s

# 并行处理(4线程)
time parallel -j 4 "sleep 1" ::: {1..10}  # 真实时间≈3s

3. 实战:批量图片转换

# 将JPG转为PNG(使用所有CPU核心)
find . -name "*.jpg" | parallel --bar convert {} {.}.png

四、效率工具:打造你的"命令行智库"

1. 自制备忘系统

#!/bin/bash
# 保存到 ~/.bash_cheatsheet
cheat() {
    case $1 in
        network)
            cat <<EOF
# 查看监听端口
sudo lsof -i -P -n | grep LISTEN

# 测试带宽
iperf3 -c 192.168.1.1
EOF
            ;;
        *)
            echo "可用分类:"
            grep -oP '^\s+\w+\)' ~/.bash_cheatsheet | tr -d ')'
        ;;
    esac
}

2. 终端工作流优化

# 使用fzf交互选择历史命令
bind '"\C-r": "\C-x \C-u $(\history | fzf +s +m | sed \"s/ *[0-9]* *//\")\e\C-e\er\C-m"'

# 快速目录跳转(z.lua)
z() { _zlua "$@" && cd "$(pwd -P)"; }

五、调试工具包:正则与性能分析

1. 正则可视化工具

# 安装regex101命令行版(需npm)
npm install -g regex101-cli

# 解析正则表达式
regex101 explain '^(?[^@]+)@(?.+)$'

2. Shell脚本性能分析

# 使用time观察耗时
time ./your_script.sh

# 详细性能分析(bash自带)
set -x; PS4='+ $EPOCHREALTIME '; your_script.sh

终极实战:构建自动化监控面板

#!/bin/bash
# monitor.sh - 系统监控仪表盘

# 并行获取数据(使用临时文件避免竞态)
temp_dir=$(mktemp -d)
parallel ::: \
    "free -m > $temp_dir/mem" \
    "df -h > $temp_dir/disk" \
    "uptime > $temp_dir/cpu"

# 用jq生成JSON报告
{
    echo '{'
    echo '"memory": {'
    awk '/Mem:/ {printf "\"total\": %s, \"used\": %s", $2, $3}' $temp_dir/mem
    echo '},'
    echo '"disk": {'
    df -h / | awk 'NR==2 {printf "\"total\": \"%s\", \"used\": \"%s\"", $2, $3}'
    echo '}'
    echo '}'
} | jq . | tee report.json

# 清理临时文件
rm -rf "$temp_dir"

避坑指南:工具使用的"黑暗森林法则"

  • jq陷阱:处理大JSON时用–stream模式避免内存爆炸
  • curl风险:永远别在命令行直接写密码(用-K从文件读取)
  • parallel警告:并行写同一文件需用–semaphore同步

课后挑战:构建智能运维工具箱

需求:

  • ✅ 集成日志分析、性能监控、快速诊断
  • ✅ 支持插件化扩展(放在~/.toolbox/plugins/)
  • ✅ 生成HTML可视化报告

奖励功能:

  • ⚠️ 异常指标自动触发微信/钉钉告警
  • ⚠️ 记录历史数据生成趋势图

你可能感兴趣的:(Shell编程,linux)