Linux管道(|
)是一种强大的进程间通信机制,它允许将一个命令的输出直接作为另一个命令的输入。管道是Unix/Linux哲学"做一件事并做好"和"组合小程序完成复杂任务"的典型体现。
command1 | command2 [| command3 ...]
组合简单命令:
ls -l | grep ".txt" # 列出当前目录下所有txt文件
数据处理:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr # 统计日志中最频繁的IP
实时监控:
tail -f /var/log/syslog | grep "error" # 实时监控系统日志中的错误
命名管道(FIFO):
mkfifo mypipe # 创建命名管道
command1 > mypipe & # 在后台向管道写入
command2 < mypipe # 从管道读取
管道与重定向结合:
command1 | tee output.txt | command2 # 同时输出到文件和下一个命令
错误输出重定向:
command1 2>&1 | command2 # 将标准错误也通过管道传递
sort
可能需要使用-T
选项指定临时目录PIPESTATUS
数组(bash中)pv
命令监控管道数据流:
bash
cat bigfile | pv | gzip > bigfile.gz
管道是Linux命令行强大功能的核心之一,熟练掌握管道可以极大提高工作效率。