了解 Linux 中的 stdin、stderr 和 stdout
如果您使用过Linux操作系统,那么您很有可能遇到过三个著名的数据流,即stdin、stderr和stdout。所有这些在它们的功能上都有所不同,并且都有自己的用途,但它们三者之间的共同点是它们都是bash创建的数据流。
让我们更多地了解数据流的实际含义以及它们如何有益。在计算方面,数据流使我们能够将数据从源传输到流出,反之亦然。源和流出是数据流的两个端点。知道您在Linux终端中运行的任何命令都可能位于这些端点之一,这对您来说可能会很有趣。
现在我们对数据流有了一些了解,让我们更多地了解三个著名的数据流。
stdin-它代表标准输入,用于将文本作为输入。
stdout-它代表标准输出,用于您在终端中键入的任何命令的文本输出,然后该输出存储在stdout流中。
stderr-它代表标准错误。每当命令遇到错误时都会调用它,然后将该错误消息存储在此数据流中。
应该注意的是,在Linux中,所有这些流都被视为文件。此外,linux为这些数据流中的每一个分配唯一值。
0=标准输入
1=标准输出
2=标准错误
现在让我们考虑这三个数据流的几个示例。
下面显示的示例描述了一个典型的标准输入流。
命令
read输出结果
mmukul@192 Docs-Linux % read This is to stdin
在上面的命令中,我们为流提供了一个输入,而读取工具正在从stdin获取输入。
现在,标准输出的示例如下所示-
命令
ls -ltr输出结果
immukul@192 Downloads % ls -ltr total 1085456 drwxr-xr-x@ 13 immukul staff 416 Dec 7 2019 source-code-pro-release -rw-r--r--@ 1 immukul staff 350337 Dec 22 2019 messi.jpg -rw-r--r--@ 1 immukul staff 5953321 Dec 22 2019 927225.png -rw-r--r--@ 1 immukul staff 601852 Dec 22 2019 238870.jpg . . .
我们知道我们使用带有-ltr标志的ls命令以某种排序方式列出所有文件,最后更新的文件显示在底部。该列表被发送到标准输出数据流,然后终端简单地将其打印出来。
现在,标准错误的示例如下所示-
命令
ls -ltr printit
上面的命令无效,因为我没有任何名为printit的目录,它将生成一条错误消息,该消息将发送到stderr,然后终端将打印它。
输出结果
immukul@192 Downloads % ls -ltr printit ls: printit: No such file or directory