在Linux管理中,最重要且有趣的话题之一是I/O重定向。命令行的这一特性使您能够将命令的输入和/或输出从文件重定向到文件,或者使用管道将多个命令连接在一起,形成所谓的“命令管道”。
我们运行的所有命令基本上产生两种输出:
- 命令结果 – 程序设计的数据,以及
- 程序状态和错误消息,通知用户程序执行的详细信息。
在Linux和其他类Unix系统中,有三个默认文件如下命名,也由shell使用文件描述符号码标识:
- stdin或0 – 它连接到键盘,大多数程序从此文件读取输入。
- stdout或1 – 它连接到屏幕,所有程序将结果发送到此文件
- stderr或2 – 程序将状态/错误消息发送到此文件,该文件也连接到屏幕。
因此,I/O重定向允许您更改命令的输入源以及其输出和错误消息的发送位置。这是通过“<”
和“>”
重定向运算符实现的。
如何在Linux中将标准输出重定向到文件
您可以像下面的例子一样重定向标准输出,这里我们想要存储top命令的输出以便稍后查看:
$ top -bn 5 >top.log
其中标志如下:
-b
– 使top以批处理模式运行,这样您可以将其输出重定向到一个文件或另一个命令。-n
– 指定命令终止前的迭代次数。
您可以使用cat命令查看top.log
文件的内容,如下所示:
$ cat top.log
要追加一个命令的输出,请使用“>>”
运算符。
例如,要在脚本(或在命令行上)追加上述top命令的输出到top.log文件中,请输入以下行:
$ top -bn 5 >>top.log
注意:使用文件描述符号,上述输出重定向命令等同于:
$ top -bn 5 1>top.log
如何在Linux中将标准错误重定向到文件
要重定向命令的标准错误,您需要明确指定文件描述符号,对于shell来说,2
就是您要做什么的信号。
例如,下面的ls 命令在普通系统用户没有 root 权限的情况下执行会产生错误:
$ ls -l /root/
您可以将标准错误重定向到文件,如下所示:
$ ls -l /root/ 2>ls-error.log $ cat ls-error.log

为了追加标准错误,使用以下命令:
$ ls -l /root/ 2>>ls-error.log
如何将标准输出/错误重定向到一个文件
还可以将命令的所有输出(标准输出和标准错误)捕获到单个文件中。有两种可能的方法,可以通过指定文件描述符编号来完成:
1. 第一种是一个相对较旧的方法,其工作方式如下:
$ ls -l /root/ >ls-error.log 2>&1
上面的命令意味着 shell 首先会将ls 命令的输出发送到文件ls-error.log(使用>ls-error.log
),然后将所有错误消息写入文件描述符2(标准输出),该文件描述符已重定向到文件ls-error.log(使用2>&1
)。这意味着标准错误也被发送到与标准输出相同的文件中。
2. 第二种直接的方法是:
$ ls -l /root/ &>ls-error.log
您也可以将标准输出和标准错误追加到单个文件中,如下所示:
$ ls -l /root/ &>>ls-error.log
如何将标准输入重定向到文件
大多数情况下,命令会从标准输入获取输入,默认情况下标准输入连接到键盘。
要将标准输入重定向到键盘以外的文件,请使用以下方法:
$ cat <domains.list

如何将标准输入/输出重定向到文件
您可以使用sort命令同时执行标准输入和标准输出重定向,如下所示:
$ sort <domains.list >sort.output
如何使用管道进行I/O重定向
要将一个命令的输出重定向为另一个命令的输入,您可以使用管道,这是构建复杂操作的有用命令行的有力手段。
例如,以下命令将列出最近修改的五个文件。
$ ls -lt | head -n 5
此处,选项:
-l
– 启用长格式列表-t
– 按最新文件首先显示的修改时间排序-n
– 指定要显示的标题行数
构建管道的重要命令
在这里,我们将简要介绍构建命令管道的两个重要命令,它们是:
xargs 用于从标准输入构建和执行命令行。下面是使用 xargs 的管道的示例,该命令用于在 Linux 中将文件复制到多个目录中:
$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh

和选项:
要了解更多使用选项和信息,请阅读 xargs man 页面:
$ man xargs
A tee command reads from standard input and writes to standard output and files. We can demonstrate how tee works as follows:
$ echo "Testing how tee command works" | tee file1

文件或文本过滤器通常与管道一起使用,用于有效的Linux文件操作,以强大的方式处理信息,例如重新构造命令的输出(这对于生成有用的Linux报告至关重要),修改文件中的文本以及其他几个Linux系统管理任务。
要了解更多关于Linux过滤器和管道的信息,请阅读本文查找访问Apache服务器的前10个IP地址,展示了使用过滤器和管道的一个有用示例。
在本文中,我们解释了Linux中I/O重定向的基础知识。请通过下面的反馈部分分享您的想法。
Source:
https://www.tecmint.com/linux-io-input-output-redirection-operators/