输入输出重定向与管道

1. 什么是重定向与管道

2. 重定向命令符

答:

1. Linux 三种标准输入输出, STDIN, STDOUT, STDERR, 对应数字是0,1,2

对于任何linux命令的执行会有下面的过程:

一条命令的执行需要键盘等的标准输入,命令的执行和正确或错误,其中的每一个双向箭头就是一个通道,所以数据流可以流入到文件端(重定向或管道)

简单来讲,重定向就是把本来要显示在终端的命令结果,输送到别的地方,分成:

管道就是把两个命令连接起来使用,一个命令的输出作为另一个命令的输入

两者的区别在于:

2. 命令

重定向常见的命令符号有:

补充

补充:重定向(>、>>、<)和管道(|)是 Shell 把「数据流」在不同命令 / 文件之间搬运的核心机制。

补充要点:

  • 标准流:
    • stdin(标准输入,文件描述符 0)
    • stdout(标准输出,文件描述符 1)
    • stderr(标准错误,文件描述符 2)
  • 重定向符号:
    • cmd > file:stdout 写入 file(覆盖)。
    • cmd >> file:stdout 追加到 file。
    • cmd < file:从 file 读入 stdin。
    • cmd 2> file:stderr 写入 file。
    • cmd > file 2>&1:stdout 和 stderr 都写到同一个文件。
  • 管道:
    • cmd1 | cmd2:cmd1 的 stdout 作为 cmd2 的 stdin。
    • cmd1 |& cmd2:把 cmd1 的 stderr 也并入 stdout 传给 cmd2(Bash 4+)。

补充:常见组合 cat file | grep error | wc -l 统计文件中「error」出现的行数;nohup cmd > out.log 2>&1 & 后台启动并保留日志。