管道(Pipe)是Linux/Unix系统中非常强大的特性,它允许将一个命令的输出直接作为另一个命令的输入。下面介绍一些管道命令的高级应用技巧。
# 查找当前目录下所有.txt文件,统计每个文件的行数,按行数排序
find . -name "*.txt" -type f | xargs wc -l | sort -n
# 监控网络连接变化
watch -n 1 "netstat -an | grep ESTABLISHED | awk '{print \$5}' | cut -d: -f1 | sort | uniq -c | sort -n"
# 将输出同时显示在屏幕和保存到文件
dmesg | tee dmesg.log | grep -i error
# 多级分流
command | tee file1 | process1 | tee file2 | process2 > final_output
# 创建命名管道
mkfifo mypipe
# 一个终端写入数据
ls -l > mypipe
# 另一个终端读取数据
cat < mypipe
# 提取特定列并计算
ps aux | awk '{sum += $3} END {print "CPU总使用率:", sum"%"}'
# 条件过滤和格式化输出
netstat -tuln | awk '/^tcp/ {print $4}' | awk -F: '{print $NF}' | sort -n | uniq
# 查找并删除所有.swp文件
find / -name "*.swp" -print0 | xargs -0 rm -f
# 并行处理(使用-P参数)
find . -type f -name "*.log" | xargs -P 4 -I {} gzip {}
# 替换文本并保留原始文件
cat config.ini | sed 's/DEBUG=True/DEBUG=False/' > config_prod.ini
# 多条件编辑
cat log.txt | sed -e 's/error/ERROR/g' -e '/debug/d' > cleaned_log.txt
# 统计访问日志中每个IP的访问次数
cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -20
# 分析磁盘空间使用情况
df -h | grep -v "tmpfs" | sort -k5 -nr | awk '{print $5,$6}'
# 比较两个命令的输出差异
diff <(ls /dir1) <(ls /dir2)
# 合并多个命令的输出
paste <(cut -f1 file1) <(cut -f2 file2) > combined.txt
# 递归搜索并显示匹配行前后内容
grep -rni -A 2 -B 2 "search_term" /path/
# 排除多个模式
ps aux | grep "[p]ython" | grep -vE "grep|vim|bash"
less
或head/tail
先检查pv
命令监控管道数据流速度掌握这些高级管道技巧可以极大提高Linux命令行下的工作效率,使您能够处理复杂的文本处理、系统监控和数据分析任务。