了解 Linux 命令行的管道和重定向

Linux 命令行 shell 的两个强大功能是重定向和管道,它们允许将程序的输出(甚至输入)发送到文件或另一个程序。 您可能已经在不知不觉中使用了此功能。 每当您使用“>” 登录命令或“|” 那么您分别使用了重定向或管道。

在所有类 Unix 操作系统上,如 Linux 和 FreeBSD,命令行程序的输出会自动转到一个称为标准输出 (stdout) 的地方。 默认情况下,标准输出是屏幕(控制台),但可以使用管道和重定向进行更改。 同样,键盘被视为标准输入 (stdin),与标准输出一样,它可以更改。

管道

管道允许您将一个命令的输出汇集到另一个将用作输入的命令。 换句话说,一个程序的标准输出成为另一个程序的标准输入。

这 ”more” 命令获取标准输入并在标准输出(屏幕)上对其进行分页。 这意味着,如果命令显示的信息多于一个屏幕上无法显示的信息,则“more” 程序会在第一个屏幕满(页)后暂停,等待用户按 SPACE 键查看下一页或按 RETURN 键查看下一行。

这是一个 example 这将列出所有文件以及详细信息(-la) 在里面 /dev 目录并将输出通过管道传输到 more. 这 /dev 目录应该有几十个文件,因此确保 more 需要分页。

注意 --More-- 屏幕底部的提示。 按 SPACE 查看下一页并按住 SPACE 直到输出完成。

这是另一个管道 example,这次使用“wc”(字数统计)工具。

wc 计算标准输入中的行数、单词数和字符数。 如果您使用 -l 参数它将仅显示行数,这是查看目录中有多少文件的好方法!

In Depth Look at Linux’s Archiving and Compression Commands 教程有一个 example 使用 tar 和 7-Zip 一起使用:

在这种情况下,后面的连字符 f 选项告诉 tar 将其输出发送到标准输出而不是文件。 从输出 tar 由于 -si 选项,将通过管道送入 7zr,它正在等待来自标准输入的输入。

重定向

重定向类似于管道,除了使用文件而不是另一个程序。 程序的标准输出是屏幕。 使用 > (大于)符号可以将程序的输出发送到文件中。 这是一个目录列表 /dev 再次但这次重定向到一个名为 listing.txt

由于所有内容都已发送到文件,因此终端上不会显示任何内容。 您可以使用 cat 命令(可以通过管道输入 more) 或为方便起见,您可以使用 more command 在其自己的:

如果 listing.txt 已经存在,将被覆盖。 但是您可以使用附加到现有文件 >> 像这样:

第一次重定向将覆盖文件 listing.txt 而第二个将附加到它。

cat 命令可用于使用重定向创建文件,例如 example:

现在您输入的任何文本都将发送到文件 atextfile.txt 直到您按下 Control-D,此时文件将被关闭,您将返回到命令提示符。 如果要向文件添加更多文本,请使用相同的命令,但带有两个大于号 (>>)。

结论

许多 Linux 命令行程序旨在使用重定向和管道,尝试使用它们进行试验,看看它们是如何交互的。 为了 example 的输出 ps 列出当前进程的命令可以通过管道输入 grep. 看看你是否能弄清楚如何列出 root 拥有的进程。

订阅我们的新闻!

我们最新的教程直接发送到您的收件箱

注册所有时事通讯。 注册即表示您同意我们的隐私政策并且欧洲用户同意数据传输政策。 我们不会共享您的数据,您可以随时取消订阅。 订阅