了解Linux I / O(输入/输出)重定向的工作原理

了解Linux中I / O重定向的基本原理,使您能够重定向命令的输入/输出和/或文件,或者连接多个命令

Linux管理下最重要和最有趣的话题之一是I / O重定向。 命令行的此功能使您能够将命令的输入和/或输出从和/或重定向到文件,或使用管道将多个命令连接在一起以形成所谓的“ 命令管道 ”。 我们运行的所有命令基本上产生两种输出:
  1. 命令结果 - 程序设计产生的数据,和
  2. 程序状态和通知用户程序执行细节的错误消息。
在Linux和其他类Unix系统中,有三个默认文件,这些文件也由shell使用文件描述符号标识:
  1. stdin或0 - 它连接到键盘,大多数程序从此文件读取输入。
  2. stdout或1 - 它附加到屏幕,并且所有程序将其结果发送到此文件和
  3. stderr或2 - 程序将状态/错误消息发送到也附加到屏幕的文件。
因此,I / O重定向允许您更改命令的输入源以及其输出和错误消息发送到的地方。 这通过“<”“>”重定向运算符成为可能。

如何在Linux中将标准输出重定向到文件

您可以重定向标准输出,如下面的示例所示,这里,我们要存储top命令的输出用于以后检查:
$ top -bn 5 >top.log
其中标志:
  1. -b - 使顶部以批处理方式运行,以便您可以将其输出重定向到文件或其他命令。
  2. -n - 指定命令终止之前的迭代次数。
您可以使用cat命令查看top.log文件的内容,如下所示:
$ cat top.log
要附加命令的输出,请使用“>>”运算符。 例如,将top命令的输出附加到top.log文件中,特别是在脚本(或命令行)中,请输入以下行:
$ top -bn 5 >>top.log
注意 :使用文件描述符编号,上述输出redirect命令与以下命令相同:
$ top -bn 5 1>top.log

如何在Linux中将标准错误重定向到文件

要重定向命令的标准错误,您需要明确指定文件描述符号, 2为shell来理解您正在尝试做什么。 例如,下面的ls命令在没有root权限的普通系统用户执行时会产生错误:
$ ls -l /root/
您可以将标准错误重定向到以下文件:
$ ls -l /root/ 2>ls-error.log
$ cat ls-error.log 
将标准错误重定向到文件

将标准错误重定向到文件

为了附加标准错误,请使用以下命令:
$ ls -l /root/ 2>>ls-error.log

如何将标准输出/错误重定向到一个文件

还可以将命令的所有输出(标准输出和标准错误)捕获到单个文件中。这可以通过指定文件描述符号以两种可能的方式来完成: 第一种是相对较旧的方法,其工作方式如下:
$ ls -l /root/ >ls-error.log 2>&1
上面的命令意味着shell首先将ls命令的输出发送到文件ls-error.log (使用>ls-error.log ),然后将所有错误消息写入文件描述符2 (标准输出)被重定向到文件ls-error.log (使用2>&1 )。表示标准误差也被发送到与标准输出相同的文件。 第二种直接方法是:
$ ls -l /root/ &>ls-error.log
您也可以将标准输出和标准错误附加到单个文件,如:
$ ls -l /root/ &>>ls-error.log

如何将标准输入重定向到文件

大多数(如果不是全部)命令从标准输入获得其输入,并且默认标准输入附加到键盘。 要从键盘以外的文件重定向标准输入,请使用“<”运算符,如下所示:
$ cat <domains.list 
将标准输入重定向到文件

将标准输入重定向到文件

如何重定向标准输入/输出到文件

您可以使用排序命令同时执行标准输入,标准输出重定向,如下所示:
$ sort <domains.list >sort.output

如何使用管道进行I / O重定向

要将一个命令的输出重定向为另一个命令的输入,您可以使用管道,这是构建用于复杂操作的有用命令行的强大手段。 例如,以下命令将列出前5个最近修改的文件
$ ls -lt | head -n 5 
这里,选项:
  1. -l - 启用长列表格式
  2. -t - 按照修改时间排序,使用最新的文件
  3. -n - 指定要显示的标题行数

构建管道的重要命令

在这里,我们将简要回顾一下构建命令管道的两个重要命令,它们是: xargs用于从标准输入构建和执行命令行。 下面是使用xargs的管道示例,此命令用于将文件复制到Linux中的多个目录中
$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh
将文件复制到多个目录

将文件复制到多个目录

和选项:
  1. -n 1 - 指示xargs每个命令行最多使用一个参数,并发送到cp命令
  2. cp - 复制文件
  3. -v - 显示复制命令的进度
有关更多使用选项和信息,请阅读xargs手册页:
$ man xargs 
tee命令从标准输入读取,并写入标准输出和文件。 我们可以演示如何tee工作如下:
$ echo "Testing how tee command works" | tee file1 
tee命令示例

tee命令示例

文件或文本过滤器通常与管道一起使用,用于有效的Linux文件操作 ,以强大的方式处理信息,例如重组命令输出(这对于生成有用的Linux报告是至关重要的),修改文件中的文本以及其他几个Linux系统管理任务 。 要了解有关Linux过滤器和管道的更多信息,请阅读本文查找访问Apache服务器的前10个IP地址 ,显示了使用过滤器和管道的一个有用的示例。 在本文中,我们解释了Linux中I / O重定向的基本原理。请记住通过下面的反馈部分分享您的想法。