管道(Pipe)是Linux/Unix系统中非常强大的功能,它允许将一个命令的输出直接作为另一个命令的输入。以下是一些提高管道使用效率的技巧:
command1 | command2 | command3
# 查找并统计包含"error"的行数
grep "error" logfile.txt | wc -l
# 查看当前目录下最大的5个文件
du -ah | sort -rh | head -5
# 查找所有.txt文件并删除
find . -name "*.txt" | xargs rm
# 并行处理(GNU xargs)
find . -type f -print0 | xargs -0 -P 4 -n 1 gzip
# 将输出同时显示在屏幕和保存到文件
command | tee output.log
mkfifo mypipe
command1 > mypipe &
command2 < mypipe
# 提取特定列并计算总和
ps aux | awk '{sum += $3} END {print sum}'
# 替换文本
cat file.txt | sed 's/old/new/g'
# 比较两个命令的输出
diff <(command1) <(command2)
# 只传递成功的输出
command1 || echo "失败" | command2
# 减少管道数量(合并awk操作)
cat file | grep "pattern" | awk '{print $1}' # 不好
awk '/pattern/ {print $1}' file # 更好
# 使用缓冲命令(如果处理大量数据)
command1 | buffer | command2
# 分析Apache访问日志,找出访问最多的10个IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
# 监控目录变化并实时处理
inotifywait -m -r -e modify /path | while read path action file; do
echo "文件 $file 在 $path 被 $action"
done
2>&1
重定向掌握这些技巧可以大幅提高在Linux命令行下的工作效率!