电脑技术学习

对话 UNIX: 掌握强大的命令行

dn001

  图 3. Unix 命令生成错误并输出到特殊通道,即标准错误设备

  如图 3 中所示,多数 UNIX 命令从终端读取输入,将结果发送到终端,并将错误打印到终端上。默认情况下,除非另行指定,您的终端既是 stdin 的数据源,也是 stdout 和 stderr 的输出目标。

  数据传输

  不过,您可更改 stdin 的源以及 stdout 和 stderr 的目标。您可强制 stdin 从文本文件、设备(比如连接到计算机的探头)或网络连接中进行读取。类似地,您可将输出结果发送到文件、设备或网络连接。在 UNIX 中,所有资源都被视作文件,因此某种源或目标很容易作为另外的源或目标而被接受或产生。

  更改进程数据的源和目标被称为重定向。您可重定向 stdin 以从文件或其他源读取数据,还可分别对 stdout 和 stderr 重定向以将数据写到终端窗口之外的其他位置。在许多情况下,如前面所列出的初始 find 命令中,您还可重定向实用工具以从其他工具接收和为它们产生所需的数据。这就是管道 (|) 的用途。您可在命令中通过管道来生成进程链路,即将某条命令的数据发送到下一条命令,这类似于通过铜管将水从热水器传输到洗手池中。

  图 4 所示为 find . -type f -print | sort | uniq 命令的示意图。

  图 4. 通过管道进行链接的三个实用工具的示意图

  find 命令的 stdout 成为 uniq stdin,然后 uniq 的 stdout 又成为 sort 的 stdin。最后,sort 将结果打印到其标准输出设备,即所连接的终端窗口上。这些命令的 stderr 未进行重定向,因此所有三个实用工具都会将错误消息打印到终端上。(来自三个实用工具的错误消息会混在一起,但保持正确的顺序。)

标签: