Linux I/O 重定向基础
创始人
2024-03-01 18:41:49
0

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 中重定向标准错误到文件中

要重定向命令的标准错误,你需要明确指定文件描述符 2,以便让 shell 了解你正在尝试做什么。

例如,下面的 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)中。(LCTT 译注:此处原文有误,径改。)这表示标准错误也被发送到与标准输出相同的文件中。

2、 第二种并且更直接的方法是:

$ ls -l /root/ &>ls-error.log

你也可以这样将标准输出和标准错误附加到单个文件后:

$ ls -l /root/ &>>ls-error.log

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

大多数(如果不是全部)命令从标准输入获得其输入,并且标准输入默认连接到键盘。

要从键盘以外的文件重定向标准输入,请使用 < 操作符,如下所示:

$ cat 

Redirect Standard Input to File

重定向文件到标准输入中

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

你可以如下在 sort 命令中同时执行标准输入、标准输出的重定向:

$ sort sort.output

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

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

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

$ ls -lt | head -n 5 

选项的意思是:

构建管道的重要命令

在这里,我们将简要回顾一下构建命令管道的两个重要命令,它们是:

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

复制文件到多个目录

选项含义:

有关更多的使用选项和信息,请阅读 xargs 手册页:

$ man xargs 

tee 命令从标准输入读取,并写入到标准输出和文件中。我们可以演示 tee 如何工作:

$ echo "Testing how tee command works" | tee file1 

tee Command Example

tee 命令示例

文件或文本过滤器通常与管道一起用于有效地操作 Linux 文件,来以强大的方式来处理信息,例如命令的重组输出(这对于生成有用的 Linux 报告是必不可少的)、修改文件中的文本和其他的 Linux 系统管理任务。

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

在本文中,我们解释了 Linux 中 I/O 重定向的基本原理。请通过下面的反馈栏分享你的想法。


作者简介:

Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux SysAdmin、web 开发人员,目前是 TecMint 的内容创建者,他喜欢用电脑工作,并坚信分享知识。


via: http://www.tecmint.com/linux-io-input-output-redirection-operators/

作者:Aaron Kili 译者:geekpi 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

OpenAI 推出两款开源...
DoNews8月6日消息,OpenAI 宣布推出两款开源模型 GP...
2025-08-06 10:42:52
【Java I/O流 基本...
文章目录File类学习字节流与字符流缓冲流转换流对象流NIO Fi...
2025-05-31 09:37:50
谁火就蹭谁!顶级域名ai....
快科技2月10日消息,顶级域名ai.com被发现重定向到了中国AI...
2025-02-10 17:19:08
不重定向的情况下将HTML...
在Python中,你可以使用requests库来发送HTTP请求并...
2025-01-12 12:31:38
不重定向的URL重写
在不重定向的情况下实现URL重写,可以使用URL重写模块或者服务器...
2025-01-12 12:31:34
不重定向到所需页面
在处理重定向时,可以使用以下代码示例来解决“不重定向到所需页面”的...
2025-01-12 12:31:21

热门资讯

“Linux 中国” 开源社区... 这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个...
硬核观察 #1263 德国铁路... #1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员该职位要求了解...
人工智能教程(七):Sciki... 在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Kera...
关闭 WSL 中正在运行的 L... 以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。你使用 WSL 在...
MX Linux 23.2 “... 最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。MX Linux 推出了 ...
硬核观察 #1262 网络上最... #1 网络上最古老的软件存档库之一即将关闭美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024...
如何在 RHEL 上通过绑定配... 在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bondin...
Linux Matrix 消息... Matrix 用户可以升级 Fractal 6 了!Fractal 是目前 最好的 Matrix 客...
如何通过 VLC 使用字幕 使用 VLC 媒体播放器播放和管理字幕的新手指南。我是一个超级动漫迷,如果你想观看最新的剧集,那么你...
硬核观察 #1261 X 计划... #1 X 计划在奥斯汀建立内容审核总部据报道,该部门将招聘 100 名全职员工,将主要关注 CSE ...