常见的Linux与命令行重定向

Linux的一个核心原则是,软件应用程序应该很小,只包含其完成工作所需的内容。与其在现有软件中构建新功能,不如创建一个新的应用程序。这些小应用程序的设计目的通常为协同工作,其中一个应用程序的输出用作另一个应用程序的输入。对于现代UNIX和Linux系统上的大多数命令行应用程序,这仍然适用。

输入/输出设备

命令行应用程序通常有三个输入/输出设备:

标准的输入(也称为STDIN)——通常是键盘。

标准输出(STDOUT)——通常是在屏幕上。

标准错误(STDERR)——同样,通常是屏幕。

在使用Linux或Unix命令行时,重定向是更改这三个输入和输出的位置的行为。当然,如果有站长对Windows也比较感兴趣,可以阅读 Windows与Linux虚拟主机应该怎样选择

管道

首先,也可能是最常见的,是管道,通过在命令中使用管道“|”字符来突出显示。管道字符用于获取应用程序的标准输出,并将其插入另一个应用程序的标准输入中。使用管道可以将许多应用程序放在一起,从而有效地创建更复杂的工具来完成工作。

输出重定向

接下来是特定的输出重定向。这是通过使用“>”字符来实现的。它放在应用程序的命令和参数之后。这意味着标准输出将被重定向到符号后给出的文件名,例如:

ls -l > filelist.txt

这将把“ls -l”命令的输出放入名为filelist.txt的文件中。如果文件不存在,文件将被创建,如果文件存在,那么其中的任何内容都将被删除和替换。当标准错误没有被重定向时,任何出现的错误仍然会呈现到屏幕上。

只有当文件存在并且已经包含要保存的数据,并且新数据将写入文件末尾时,符号加倍才能执行相同的任务。例如:

ls -l >> filelist.txt

还可以在前缀前面加上一个&符号,以将标准输出和标准错误重定向到提供的文件。

ls -l &> filelist.txt

现在,有一个更特殊的情况:除了名称之外,每个输入和输出都有一个数字,其中stdin值为0,stdout为1,stderr为2。使用这些数字,还可以将错误输出重定向到标准输出,反之亦然。因此,有时可能会看到前面的示例,将标准输出和标准错误同时写入编写成这样的文件:

ls -l > filelist.txt 2>&1

还可以使用不同的文件进行输出和错误,例如:

ls -l > filelist.txt 2> errors.txt

在这种情况下,正常的输出将转到filelist.txt,生成的任何错误都可以在errors.txt中看到。

输入重定向

除了输出重定向,还可以进行输入重定向。与输出重定向类似,输入重定向用于将文件的内容发送到应用程序的标准输入。请看以下例子:

iptables-restore < iptables.rules

“iptables – restore”命令将使用标准输入处给出的规则设置iptables防火墙规则。输入重定向允许使用iptables.rules文件的内容用作此输入,它通常与iptables-save命令结合使用,以保存和恢复防火墙规则。

Tee命令

最后,还有一个特殊命令:tee命令。此命令将其输入同时写入文件和标准输出。当编写一个长命令时,其中有许多命令通过管道连接在一起,这样可以方便地看到输出是通过链的一部分。因为这是一个普通的命令,所以在使用tee之前必须使用管道:

ls -l | tee filelist.txt

随后,将看到这个命令,可以在屏幕上查看输出,也可以将输出写入文件。这样,Linux命令行重定向概述就完成了。更多相关内容可以参考了解一下 如何在Linux服务器上使用IP命令

发表评论