在Linux中,管道符(|
)是一个强大的命令行工具,用于将前一个命令的标准输出(stdout)作为下一个命令的标准输入(stdin)。它实现了多个命令的串联操作,形成“管道”(Pipeline),是Linux Shell(如Bash)的核心功能之一。
|
cat file.txt | wc -l
cat
输出文件内容 → wc -l
统计行数。grep "error" /var/log/syslog | less
grep
筛选包含"error"的行 → less
分页查看结果。ps aux | grep nginx | awk '{print $2}' | xargs kill -9
ps aux
列出所有进程 →grep nginx
筛选Nginx相关进程 →awk
提取第二列(PID)→xargs
将PID传递给 kill -9
终止进程。grep -i "warning" /var/log/messages | sort | uniq -c
仅传递标准输出
默认情况下,管道不传递标准错误(stderr)。若需同时传递错误输出,需重定向:
command1 2>&1 | command2
右侧命令需接受输入
不是所有命令都支持管道输入(如ls
、cd
等)。右侧命令需能从stdin读取数据(如grep
、awk
、xargs
等)。
性能优化
对于大文件处理,避免不必要的中间步骤。例如:
# 低效:cat会先读取整个文件
cat bigfile.txt | grep "pattern"
# 高效:直接使用grep
grep "pattern" bigfile.txt
管道与重定向的区别
|
连接命令,传递输出。>
或 >>
将输出重定向到文件(不涉及命令传递)。mkfifo
创建持久化管道,允许不同进程通信。tee
命令:在管道中同时输出到文件和屏幕:bash
ls -l | tee filelist.txt | grep ".txt"
通过灵活使用管道符,可以高效组合简单命令完成复杂任务,体现Linux“小而美”的哲学。