了解 Linux 上的标准 I/O

当您使用 Linux 时,您可能会遇到对“标准 I/O”或“标准输入”、“标准输出”和“标准错误”的引用。 这些术语是什么意思?

标准输入

标准输入是基于命令的程序接收的输入的术语。 在交互使用中,它通常来自键盘,但正如您稍后将看到的,它也可以来自文件。

虽然现在键盘通常直接插入机器,但当文本终端更为普遍时,标准输入是从连接到中央小型计算机或大型机的终端键盘获取的。 现代 Linux 系统使用终端仿真器或系统控制台进行标准输入。

标准输出

标准输出和标准输入一样,是程序发送文本输出的地方。 同样,这通常是现代系统上的终端仿真器,但过去也在物理终端上,要么带有 CRT 屏幕,要么使用电传打字机打印在纸上。

当 1960 年代末和 1970 年代初在贝尔实验室开发 Linux 的前身 Unix 时,电传打字终端更为常见。

与标准输入一样,您也可以将标准输出重定向到文件。

标准误差

标准错误通常用于程序可能生成的任何错误消息。 与标准输出一样,它通常显示在屏幕上,但也可以重定向到文件或块设备,如 /dev/null.

如何在 Linux 上重定向输入和输出

Linux 和 Unix 系统最强大的功能之一是将输入和输出重定向到文件和其他程序的能力。

最广泛使用的方法是将一个命令的输出发送到另一个命令或“管道”。 为了 example,要查看有多少 Linux 命令的名称中有“sh”,您可以使用 grep 管道输出 ls 命令的输出。

ls /bin | grep 'sh'

要将命令的输出重定向到文件,请使用 > 操作员。 为了 example将 ls 命令的输出发送到文件名中 文件列表

ls > filelist

>> 运算符将输出附加到现有文件,如果不存在则创建它。 为防止意外覆盖文件,您可以在 Bash 中设置“noclobber”选项:

set noclobber

您还可以让程序从文件中获取输入 < 操作员。 cat 程序可以通过从文件中获取输入并将输出发送到标准输出来打印文件的内容。

cat < file

当然,您可以只使用 cat 并将文件路径指定为参数,但这只是一个 example.

您可以使用文件描述符或代表标准 I/0 形式之一的数字来重定向标准错误。 对于文件描述符,0 是标准输入,1 是标准输出,2 是标准错误。 Bash 中的语法是 [file descriptor]>. 将标准错误重定向到 /dev/null 摆脱错误:

linux_command 2> /dev/null

您可以同时重定向标准输出和输入 &>,如果您需要发送电子邮件或论坛帖子来描述您在程序中遇到的问题,这很有用:

linux_command &> file

标准 I/O 无处不在

即使现在有可用的图形环境,标准 I/O 仍然很重要,因为它仍然是基于 ASCII 文本的通用接口,从桌面到服务器再到移动设备。