了解 Linux 上的标准 I/O
通过使用标准 I/O 将多个命令连接在一起,改进 Linux 命令行工作流程。
当您使用 Linux 时,您可能会遇到“标准 I/O”或“标准输入”、“标准输出”和“标准错误”的引用。这些术语是什么意思?
标准输入
标准输入是基于命令的程序接收的输入的术语。在交互式使用中,它通常来自键盘,但正如您稍后将看到的,它也可以来自文件。
虽然现在的键盘通常直接插入机器,但当文本终端更常见时,标准输入是从连接到中央小型计算机或大型机的终端键盘获取的。现代 Linux 系统使用终端仿真器或系统控制台作为标准输入。
标准输出
标准输出与标准输入一样,是程序发送其文本输出的位置。同样,这通常是现代系统上的终端仿真器,但在过去也可以在物理终端上使用,要么带有 CRT 屏幕,要么使用电传打字机打印在纸上。
20 世纪 60 年代末和 1970 年代初,当贝尔实验室正在开发 Linux 的前身 Unix 时,电传打字机终端更为常见。
与标准输入一样,您也可以将标准输出重定向到文件。
标准误
标准错误通常用于程序可能生成的任何错误消息。与标准输出一样,它通常显示在屏幕上,但也可以重定向到文件或块设备,例如 /dev/null。
如何在 Linux 上重定向输入和输出
Linux 和 Unix 系统最强大的功能之一是能够将输入和输出重定向到文件和其他程序。
最广泛使用的方法是将一个命令的输出发送到另一个命令或“管道”。例如,要查看有多少 Linux 命令的名称中包含“sh”,您可以使用 grep 通过管道传输 ls 命令的输出。
ls /bin | grep 'sh'
要将命令的输出重定向到文件,请使用 > 运算符。例如,要将 ls 命令的输出发送到文件名 filelist 中:
ls > filelist
>> 运算符将输出附加到现有文件,如果不存在则创建它。为了防止意外覆盖文件,您可以在 Bash 中设置“noclobber”选项:
set noclobber
您还可以让程序使用 < 运算符从文件中获取输入。 cat 程序可以通过从文件获取输入并将输出发送到标准输出来打印文件的内容。
cat < file
当然,您可以只使用 cat 并指定文件路径作为参数,但这只是一个示例。
您可以使用文件描述符或代表标准 I/0 形式之一的数字来重定向标准错误。对于文件描述符,0 是标准输入,1 是标准输出,2 是标准错误。 Bash 中的语法是[文件描述符]>。将标准错误重定向到 /dev/null 以消除错误非常有用:
linux_command 2> /dev/null
您可以使用 &> 同时重定向标准输出和输入,如果您需要发送电子邮件或论坛帖子来描述程序遇到的问题,这会很有用:
linux_command &> file
标准 I/O 无处不在
即使有了当今可用的图形环境,标准 I/O 仍然很重要,因为它仍然是基于 ASCII 文本的通用接口,从桌面到服务器再到移动设备。