学习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 – 使top以批处理模式运行,这样您可以将其输出重定向到一个文件或另一个命令。
  2. -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 
Redirect Standard Error to File

为了追加标准错误,使用以下命令:

$ 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 
Redirect Standard Input to File

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

您可以使用sort命令同时执行标准输入和标准输出重定向,如下所示:

$ sort <domains.list >sort.output

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

要将一个命令的输出重定向为另一个命令的输入,您可以使用管道,这是构建复杂操作的有用命令行的有力手段。

例如,以下命令将列出最近修改的五个文件

$ 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
Copy Files to Multiple Directories

和选项:

  1. -n 1 – 指示 xargs 最多使用一个参数 per 命令行,并发送到 cp 命令
  2. cp – 复制文件
  3. -v显示复制命令的进度

要了解更多使用选项和信息,请阅读 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 
tee Command Example

文件或文本过滤器通常与管道一起使用,用于有效的Linux文件操作,以强大的方式处理信息,例如重新构造命令的输出(这对于生成有用的Linux报告至关重要),修改文件中的文本以及其他几个Linux系统管理任务

要了解更多关于Linux过滤器和管道的信息,请阅读本文查找访问Apache服务器的前10个IP地址,展示了使用过滤器和管道的一个有用示例。

在本文中,我们解释了Linux中I/O重定向的基础知识。请通过下面的反馈部分分享您的想法。

Source:
https://www.tecmint.com/linux-io-input-output-redirection-operators/