1. Linux命令组合的创意玩法
作为一名Linux老用户,我经常发现那些看似简单的命令行工具,通过巧妙组合能产生令人惊喜的效果。就像乐高积木一样,单个命令功能有限,但组合起来就能构建出强大的自动化工作流。今天分享的这些命令组合,都是我在实际工作中反复验证过的实用技巧。
提示:所有命令示例均在Ubuntu 22.04 LTS和CentOS 7环境下测试通过,部分命令可能需要安装额外软件包
1.1 文件处理的瑞士军刀
find和xargs这对黄金搭档能解决90%的批量文件操作需求。比如要批量修改当前目录及子目录下所有.txt文件的权限:
bash复制find . -name "*.txt" -type f -print0 | xargs -0 chmod 644
这里有几个关键点:
-print0和-0参数是为了正确处理含空格的文件名- 管道符
|将find的输出作为xargs的输入 - 实际执行的是
chmod 644 文件名1 文件名2...
更复杂的例子:找出7天前修改过的日志文件并打包备份:
bash复制find /var/log -name "*.log" -mtime +7 -print0 | xargs -0 tar -czvf old_logs.tar.gz
1.2 文本处理的魔法组合
grep、awk、sed这三个文本处理神器组合起来威力无穷。比如要统计Nginx日志中每个IP的访问次数并排序:
bash复制awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
这个命令链的运作流程:
- awk提取每行第一个字段(IP地址)
- sort对IP进行排序(uniq的前提)
- uniq -c统计每个IP出现次数
- sort -nr按访问量倒序排列
再比如批量替换项目代码中的字符串(将旧域名换为新域名):
bash复制find /path/to/project -type f -name "*.js" -exec sed -i 's/old\.domain/new\.domain/g' {} +
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统监控的创意命令组合
2.1 实时资源监控仪表盘
不用安装任何额外工具,用内置命令就能打造实时监控面板:
bash复制watch -n 1 "echo 'CPU: '; mpstat 1 1 | grep -i average; echo 'Memory: '; free -h; echo 'Disk: '; df -h /; echo 'Top Processes: '; ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 5"
这个命令会每秒刷新显示:
- CPU使用率(通过mpstat)
- 内存使用情况(free)
- 根分区磁盘空间(df)
- 最耗资源的5个进程(ps)
2.2 网络连接分析
快速查看哪些进程在监听端口:
bash复制netstat -tulnp | awk 'NR<=2 || /LISTEN/{print}' | column -t
更直观的版本(需要安装lsof):
bash复制lsof -i -P -n | grep LISTEN | awk '{printf "%-10s %-8s %-15s\n", $1,$2,$9}' | column -t
3. 数据处理的流水线
3.1 CSV文件处理
假设有个data.csv文件,要计算第二列数值的平均值:
bash复制awk -F',' 'NR>1 {sum+=$2; count++} END {print "Average:", sum/count}' data.csv
如果想看每列的基本统计信息:
bash复制awk -F',' 'NR==1 {print "Column Stats for:", $0; next} {for(i=1;i<=NF;i++) {sum[i]+=$i; sumsq[i]+=($i)^2}} END {for(i=1;i<=NF;i++) {printf "Col %d: Avg=%.2f, StdDev=%.2f\n", i, sum[i]/(NR-1), sqrt((sumsq[i]-sum[i]^2/(NR-1))/(NR-1))}}' data.csv
3.2 日志分析实战
分析Apache日志,找出请求时间最长的前10个请求:
bash复制awk '{print $NF,$7}' /var/log/apache2/access.log | sort -nr | head -10
如果要同时显示IP和响应时间:
bash复制awk '{print $1,$NF,$7}' /var/log/apache2/access.log | sort -k2 -nr | head -10 | column -t
4. 自动化运维的创意组合
4.1 批量服务器管理
通过SSH在多台服务器上执行命令(需要提前配置SSH免密登录):
bash复制for server in $(cat server_list.txt); do ssh $server "uname -a; uptime"; done
更安全的版本(避免密码泄露):
bash复制while read -r server; do ssh -n $server "echo -n '$server: '; df -h / | awk 'NR==2{print \$5}'" < /dev/null; done < server_list.txt
4.2 自动化备份方案
创建带时间戳的增量备份:
bash复制tar -czvf "backup_$(date +%Y%m%d_%H%M%S).tar.gz" --newer-mtime="1 week ago" /path/to/data
配合find实现保留最近7天备份的自动清理:
bash复制find /backups -name "*.tar.gz" -mtime +7 -exec rm {} \;
5. 开发辅助工具链
5.1 代码统计
统计项目中的代码行数(排除空行和注释):
bash复制find src/ -name "*.py" -exec grep -vE '^\s*$|^\s*#' {} + | wc -l
按文件类型统计:
bash复制find . -name "*.py" -exec wc -l {} + | sort -nr
5.2 Git仓库批量操作
找出所有包含TODO注释的文件:
bash复制git grep -l "TODO" | xargs -n1 basename
或者统计每个贡献者的代码行数:
bash复制git ls-files | xargs -n1 git blame --line-porcelain | sed -n 's/^author //p' | sort | uniq -c | sort -nr
6. 安全相关的实用组合
6.1 可疑进程检测
查找所有监听非本地IP的进程:
bash复制netstat -tulnp | awk '$4 !~ /127.0.0.1|::1/ && /LISTEN/'
6.2 用户活动审计
查看所有用户的最近登录记录:
bash复制last -a | awk '{print $1,$3,$4,$5,$6,$7,$8,$9}' | sort | uniq -c | sort -nr
或者找出所有具有sudo权限的用户:
bash复制getent group sudo | cut -d: -f4 | tr ',' '\n'
7. 多媒体处理流水线
7.1 批量图片处理
使用ImageMagick批量调整图片大小:
bash复制find . -name "*.jpg" -exec mogrify -resize 1024x768\> {} \;
或者转换为WebP格式:
bash复制find . -name "*.png" -exec sh -c 'convert "$1" "${1%.*}.webp"' _ {} \;
7.2 音频视频处理
提取视频中的音频:
bash复制ffmpeg -i input.mp4 -vn -acodec copy output.aac
批量剪切视频前10秒:
bash复制for f in *.mp4; do ffmpeg -i "$f" -ss 00:00:10 -c copy "${f%.*}_trimmed.mp4"; done
8. 终端使用技巧组合
8.1 历史命令优化
快速执行上一个以特定字符串开头的命令:
bash复制!ssh
或者搜索历史命令:
bash复制history | grep "apt install"
更高效的方式是设置Ctrl+R反向搜索:
bash复制bind '"\C-r": reverse-search-history'
8.2 目录导航增强
快速返回上一个工作目录:
bash复制cd -
或者创建并立即进入新目录:
bash复制mkcd() { mkdir -p "$1" && cd "$1"; }
9. 数据可视化技巧
9.1 终端图表
用命令行生成简单的条形图:
bash复制ps -eo pcpu,pid,args --sort=-pcpu | head -10 | awk '{print $1,$3}' | gnuplot -p -e 'plot "/dev/stdin" using 1:xtic(2) with boxes'
9.2 ASCII艺术
将图片转换为ASCII艺术:
bash复制jp2a --colors input.jpg
或者实时显示系统负载的艺术图:
bash复制while true; clear; do uptime | figlet -f slant; sleep 1; done
10. 实用小工具组合
10.1 天气查询
直接从终端获取天气:
bash复制curl wttr.in/Beijing?format=3
或者更详细的预报:
bash复制curl -s "https://wttr.in?format=%l:+%c+%t+%h+%w+%p" | sed 's/+//g'
10.2 汇率转换
简单的货币换算:
bash复制curl -s "https://api.exchangerate-api.com/v4/latest/USD" | jq '.rates.CNY'
或者更完整的工具:
bash复制exchange() { curl -s "https://api.exchangerate-api.com/v4/latest/$1" | jq ".rates.$2"; }
这些命令组合只是冰山一角,Linux的强大之处就在于这种可组合性。我个人的经验是,每当遇到重复性任务时,先思考如何用命令组合自动化,而不是手动操作。久而久之,你会积累出一套属于自己的高效工作流。
