十年运维系列之基础篇 - Linux

作者:曾林

联系:1494445739@qq.com

网站:www.jplatformx.com

版权:文章未经同意请勿转载


一、引言

这里我们来讨论Linux中命令行一个很酷的功能,那就是I/O重定向。I/O是输入/输出的缩写。这个功能可以把命令行的输入重定向为从文件中获取内容,也可以把命令行的输出结果重定向到文件中。如果我们将多个命令行关联起来,将形成非常强大的功能——管道。

二、标准输入、标准输出和标准错误

到目前为止,我们使用过的很多程序生成了不同种类的输出。这些输出通常包含两种类型。一种是程序运行的结果,即该程序生成的数据;另一种是状态和错误信息,表示程序当前的运行情况。比如输入ls这样的命令,屏幕上将显示它的运行结果或者是它的相关错误信息。

与UNIX“一切都是文件”的思想一致,类似ls的程序实际上把它们的运行结果发送到了一个称为标准输出(standard output,通常表示为stdout)的特殊文件中,它们的状态信息则发送到了另一个称为标准错误(standard error,表示为stderr)的文件中。默认情况下,标准输出和标准错误都将被链接到屏幕上,并且不会被保存在磁盘文件中。

I/O重定向功能可以改变输出内容发送的目的地,也可以改变输入内容的来源地。通常来说,输出内容显示在屏幕上,输入内容来自于键盘。但是使用I/O重定向功能可以改变这一惯例。

三、标准输出重定向

I/O重定向功能可以重新定义标准输出内容发送到哪里。使用重定向操作符“>",后面接文件名,就可以把标准输出重定向到另一个文件中,而不是显示在屏幕上。比如使用命令“ls -l /usr/bin > ls-output.txt”,将原本输出到屏幕上的内容重定向到了文件ls-output.txt中。但是需要注意的是使用重定向操作符">"会重新改写文件的内容,比如上面的命令如果执行第二遍的话,首先会将ls-output.txt原始内容删除,然后再进行第二次输出。事实上,如果我们需要删除一个文件内容(或者创建一个新的空文件),可以采用这样的方式。例如:"> ls-output.txt"命令仅仅使用了重定向符,并在它之前不加任何命令,就可以删除一个已存在的文件内容或者创建一个新的空文件。

那么,我们如何能够不从文件的首位置开始覆盖文件,而是从文件的尾部开始添加输出内容呢?可以使用重定向符“>>”来实现。比如:

ls -l /usr/bin >> ls-output.txt

四、标准错误重定向

标准错误的重定向并不能简单地使用一个专用的重定向符来实现。要实现标准错误的重定向,不得不提到它的文件描述符(file descriptor)。一个程序可以把生成的输出内容发送到任意文件流。如果把这些文件流中的前三个分别对应标准输入文件、标准输出文件和标准错误文件,那么shell将在内部用文件描述符分别索引它们为0、1和2。shell提供了使用文件描述符编号来重定向文件的表示法。由于标准错误等同于文件描述符2,所以可用这种表示法来重定向标准错误。

ls -l /bin/usr 2>ls-err.txt

文件描述符“2”紧放在重定向符之前,将标准错误重定向到ls-err.txt文件中。

五、将标准输出和标准错误重定向到同一个文件

在许多情况下,我们会希望把一个命令的所有输出内容都放在同一个独立的文件中。为此,我们必须同时重定向标准输出和标准错误。有两种方法可以满足要求。第一种是传统的方法,在旧版本的shell中使用。

ls -l /bin/usr > ls-output.txt 2>&1

使用这个方法,将执行两个重定向操作。首先重定向标准输出到ls-output.txt文件中,然后使用标记符2>&1把文件描述符2(标准错误)重定向到文件描述符1(标准输出)中。

这些重定向操作的顺序是非常重要的。标准错误的重定向操作通常发生在标准输出重定向操作之后,否则它将不起作用。

最近的bash版本提供了效率更高的第二种方法来实现这一联合的重定向操作。

ls -l /bin/usr &> ls-output.txt

      在这个例子中,只使用一个标记符“&>”就把标准输出和标准错误都重定向到了ls-output.txt文件中。

六、处理不想要的输出

有时候“沉默是金”,命令执行后我们并不希望得到输出,而是想把这个输出丢弃,尤其是在输出错误和状态信息的情况下更为需要。系统提供了一种方法,即通过把输出重定向到一个称为/dev/null的特殊文件中来实现它。这个文件是一个称为位桶(bit bucket)的系统设备,它接受输入但是不对输入进行任何处理。以下命令可以用来抑制(即隐藏)一个命令的错误信息。

ls -l /bin/usr 2>/dev/null

UNIX文化中的/dev/null,位桶(bit bucket)是一个古老的unix概念,由于它的普适性,它出现在unix文化的很多地方。因此当某人说他正在把你的意见发送到"dev null"的时候,现在你知道他是什么意思了:-)。

转载于:https://www.cnblogs.com/jplatformx/p/4296717.html

(010) Linux之I/O重定向相关推荐

  1. 3分钟学会Linux管道符与重定向

    Linux管道符与重定向 管道符 相信大部分人都见到过这样的linux命令,当然没见到过也没关系,现在不是见到来了嘛! 中间那个竖线就是管道符,输入管道符只需要按下"shift + &quo ...

  2. 运维日记010 - Linux下的链接文件

    运维日记010 - Linux下的链接文件 几个基本概念 Linux下的链接文件可以分为硬链接(hard link)与软链接(soft link).要理解它们,必须先要理解几个基本概念. inode ...

  3. linux重定向stderr,在Bash和其他Linux Shell中将stderr重定向到stdout的方法

    本文介绍重定向输出及在Bash和其他Linux Shell中将stderr重定向到stdout的方法. 前言 将命令的输出重定向到文件或将其通过管道传递到另一个命令时,您可能会注意到错误消息被打印在屏 ...

  4. Linux/Unix中的重定向简单实例

    "重定向"是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变.令程序与文件一同工作的方式有两种:一种是明确地使用打开文件.关闭文件.读文件.写文件等专门的函数(比如f ...

  5. Linux中的数据流重定向

    本文目录 数据流重定向 本文目录(仅做浏览用,简书中的MarkDown暂时不支持页面内跳转) 数据流重定向 在之前的操作中,常会看到>或>>操作,它们分别是将标准输出导入到一个文件或 ...

  6. linux 重定向 2gt;gt;,编写我自己的linux shell I / O重定向’gt;’函数

    我正在编写重定向函数,将命令的输出写入给定的文件名. 例如: echo Hello World> hello.txt会将'Hello World'写入hello.txt. ls -al> ...

  7. 46 关于Linux的I/O重定向

    I/O重定向是一个过程,这个过程捕捉一个文件.或命令.或程序.或脚本.甚至代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外一个文件.或命令.或程序.或脚本. 1.I/O重定 ...

  8. linux脚本实现多重管道,制作Linux shell时流重定向和管道

    我有一个在C中创建Linux shell的任务.目前,我仍然坚持实现重定向和管道.我到目前为止的代码如下.main()解析用户的输入.如果内置命令,则执行该命令.否则,标记化的输入传递给execute ...

  9. linux grub 串口,grub重定向到串口 - Emmoblin Blog

    将GRUB输出重定向到串口(Edit /boot/grub/grub.conf) serial --unit=0 --speed=115200 --word=8 --parity=no --stop= ...

最新文章

  1. Android之获取指定目录下的所有特殊文件名字
  2. C# 使用printDocument1.Print打印时不显示 正在打印对话框(里面还有一个讨厌的取消按钮)...
  3. 【IntelliJ IDEA】添加一个新的tomcat,tomcat启动无法访问欢迎页面,空白页,404
  4. C#组成考题字符串【C#】
  5. 程序员谨防加班猝死之十大建议
  6. 将WindowsPhoneApp部署到HTC Surround,兄弟们支个招如何进行Debug
  7. 循环语句在c语言中的作用是什么,C语言中循环语句的使用
  8. 027——VUE中事件修饰符:stop prevent self capture
  9. 【软件测试】边界测试中所选择的输入测试数据一定是有效数据(错)
  10. SpringBoot中静态资源配置
  11. 软件开发技术文档编写规范_在软件开发中编写技术文档
  12. html5 加入收藏夹,设为首页、添加到收藏夹代码
  13. 最好用的进销存软件测评排名
  14. php实现按一下button显示的数字加1_24h只能加一次,javascript - 连续点击按钮后,数据如何不会累加显示?...
  15. lbw的spring超级资源
  16. 2021年教你增加拿到BAT等大厂offer几率,分享PDF高清版
  17. 英语四六级保命班笔记
  18. 如何做好SEO优化?
  19. 大数除法(超长整数运算除法器)详解
  20. 如何安装Jenkins

热门文章

  1. 使用DOTS制作一款第三人称僵尸射击游戏
  2. 王者荣耀赛季末上分很枯燥,可以找一个猎游陪练一起上分
  3. MySQL 请选择合适的列!
  4. Oracle顶级认证OCM考试实战总结
  5. 如何在大多数文字编辑器中(包括word和一些程序编辑器中)不要使用鼠标(即用快捷键)复制上一行到下一行
  6. 解决ios10以上H5页面手势、双击缩放问题
  7. 20162318 2018-2019-2《网络对抗技术》Exp1 PC平台逆向破解
  8. 微信小程序使用adb工具
  9. 数据库:case when then
  10. 类库dll引用不成功问题