Linux管道

在 Linux 中,管道(pipe)是一种非常强大的工具,用于将一个命令的输出直接作为另一个命令的输入。管道通过符号 | 表示,能够让用户将多个命令组合起来,高效地处理数据。

基本概念

管道的工作原理是将左侧命令的标准输出(stdout)传递给右侧命令的标准输入(stdin)。这允许你以流式的方式处理数据,而无需创建临时文件

Linux管道示意图
cf829ac9c80bdd8406e398ed237c6b48.png

语法

1
命令1 | 命令2
  • 命令1 的输出会作为 命令2 的输入。

示例

  1. 查看当前目录下的文件并筛选包含 “txt” 的文件

    1
    ls -l | grep "txt"
    • ls -l 列出目录内容,grep "txt" 过滤出包含 “txt” 的行。
  2. 统计系统中正在运行的进程数量

    1
    ps aux | wc -l
    • ps aux 列出所有进程,wc -l 计算行数(即进程数)。
  3. 排序并去重文件内容

    1
    cat file.txt | sort | uniq
    • cat file.txt 输出文件内容,sort 排序,uniq 去重。

管道的优势

  • 链式操作:可以连续使用多个管道,例如 命令1 | 命令2 | 命令3
  • 实时处理:数据流无需存储到磁盘,直接在内存中传递。

注意事项

  • 管道只能传递标准输出(stdout),如果需要传递错误输出(stderr),可以用 2>&1 重定向。
    示例:
    1
    ls /不存在的目录 2>&1 | grep "错误"
  • 如果命令本身不接受标准输入,管道可能不起作用。