一、概述

1. 数据流

定义:以规定顺序被读取一次的数据序列。

分类:标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)。

  • 标准输出:指的是命令执行所回传的正确信息。
  • 标准错误输出:指的是命令执行失败后,所回传的错误信息。

2. 文件描述符

定义:在形式上是一个非负整数。实际上,它是一个索引值,所有打开的文件都通过文件描述符引用。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。按照惯例,unix系统shell把文件描述符0与进程的标准输入关联,文件描述符1与标准输出关联,文件描述符2与标准错误输出关联。

Linux 默认提供了三个特殊设备,用于终端的显示和输出。分别为:stdin(标准输入,对应于你在终端的输入),stdout(标准输出,对应于终端的输出),stderr(标准错误输出,对应于终端的输出)。

文件描述符 设备文件 说明
0 /dev/stdin 标准输入
1 /dev/stdout 标准输出
2 /dev/stderr 标准错误

3. 重定向

重定向:重新定个方向转到正确位置。即将标准输出导向一个文件或追加到一个文件中。

重定向描述符:&是一个描述符,若1或2前不加&,会被当成一个普通文件。常见用法如下:

表达式 含义
1>&2 把标准输出重定向到标准错误
2>&1 把标准错误输出重定向到标准输出
&>filename 把标准输出和标准错误输出都重定向到文件filename 中

二、正文

1. 三种数据流重定向

  • 标准输入(stdin):代码为0,使用0<或0<<,其中代码0可以省略
  • 标准输出(stdout):代码为1,使用1>或1>>,其中代码1可以省略
  • 标准错误输出(stderr):代码为2,使用2>或2>>

2. 标准输出(stdout)重定向
我们知道Linux中,cat命令可以将文件内容输出到屏幕。
如下所示:

我们可以使用>将输出重定向到其他文件,如下所示:

可以看到,使用>后,文件内容并没有输出到屏幕,而是输出到了mytxt文件。

  • >>与>的区别是:>>会把输出添加到文件的末尾;>会清空文件,然后将输出写入该文件。

3. 标准错误输出(stderr)重定向
与标准输出(stdout)重定向用法相同,只是将>和>>改为2>和2>>。
表示重定向的是错误信息。
一般用来将错误信息和正确信息分开。

4. 将标准输出(stdout)和标准错误输出(stderr)分别存入不同的文件中
用法:cat test.txt > stdout.txt 2> stderr.txt

评讲:执行此命令后,错误信息都会跑到stderr.txt这个文件中,而正确信息会跑到stdout.txt文件中。屏幕上不显示任何信息。

5. 标准输出和标准错误输出写入同一个文件
使用&>可将stdout和stderr输出到同一个文件,如下所示:

另一种用法:cat test.txt > mytxt 2>&1

6. 丢弃错误信息
有时我们希望将错误信息直接丢弃,而不保存到任一文件中。
此时,可将输出重定向到设备/dev/null。如下所示:

命令:cat mytxt 2> /dev/null

将错误信息吃掉,此时屏幕输出的只有正确信息了。

7. 标准输入(stdin)重定向
命令:cat > mytxt

评讲:加入>在cat后,mytxt会被主动创建,而其内容则可以从键盘输入。

如下所示:

使用<可以将其他文件内容输入到该文件(即将原本需要由键盘输入的数据改由文件内容来替代),如下所示:

使用<<,表示定义输入结束符,
从键盘输入时,输入Ctrl+D,可结束进程。
还可以使用<<自定义结束符,如下所示:

即:利用<<符号,我们可以终止一次输入,而不必输入[Ctrl]+D来结束,这对程序写作很有帮助。

7. 为什么要用数据流重定向
1)需要将屏幕信息保存下来的时候
2)不希望其他程序干扰到当前程序的屏幕输出
3)执行时一些已知的错误,我们可以用"2>/dev/null"丢掉
4)正确信息和错误信息需要分开输出

学习bash——数据流重定向的更多相关文章

  1. 第十一章、认识与学习 BASH 数据流重导向

    数据流重导向就是将某个命令运行后应该要出现在屏幕上的数据, 给它导向到其他的地方,例如文件或者是装置 (例如打印机之类的)! 什么是数据流重导向 命令运行过程如下: 图 5.1.1.命令运行过程的数据 ...

  2. (大数据工程师学习路径)第一步 Linux 基础入门----数据流重定向

    介绍 开始对重定向这个概念感到些许陌生,但通过前面的课程中多次见过>或>>操作了,并知道他们分别是将标准输出导向一个文件或追加到一个文件中.这其实就是重定向,将原本输出到标准输出的数 ...

  3. linux(4) vi编辑/删除、复制、粘贴 /bash shell 环境变量设置/数据流重定向 | 的用法

    一.vi文字处理器1.vi与vimvi:文字处理器vim:程序开发工具2.vi介绍三种模式:一般模式(vi刚进入的,不可编辑),编辑模式(按i后,左下方是insert)和命令行模式(按esc退出,:w ...

  4. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)

    第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...

  5. 第十一章、认识与学习BASH

    第十一章.认识与学习 BASH 最近升级日期:2009/08/25 1. 认识 BASH 这个 Shell 1.1 硬件.核心与 Shell 1.2 为何要学文字接口的 shell 1.3 系统的合法 ...

  6. Linux基本操作 9----- 认识与学习bash

    一 认识bash这个shell 1 管理整个计算机硬件的其实就是操作系统的内核,这个内核是需要被保护的,所以我们一般用户就只能通过shell来跟内核通信,以让内核达到我们所想打到的工作. 2 只要能够 ...

  7. L轻松学习inux教程5 知识与学习bash

    本系列文章由@超人爱因斯坦出品,转载请注明出处.          文章链接:          http://hpw123.net/a/Linux/Linuxjichu/2014/1031/101. ...

  8. 第十一章、认识与学习 BASH

    第十一章.认识与学习 BASH 1. 认识 BASH 这个 Shell 1.1 硬件.核心与 Shell 1.2 为何要学文字接口的 shell 1.3 系统的合法 shell 与 /etc/shel ...

  9. 第11章 认识和学习bash

    认识bash这个shell 硬件.内核和shell 用户操作计算机流程如下: 用户——>用户界面(shell,KDE,application)——>核心(kernel)——>硬件(h ...

随机推荐

  1. LeetCode16.最接近的三数之和 JavaScript

    给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案. 例如,给定数 ...

  2. 经验之谈—控制器的view的显示

    经验之谈—控制器的view的显示 开发中,我们经常需要将一个控制器的view添加到另一个控制器的view上,这种效果是我们期望看到的,但是里边隐藏着一些细节,不注意的话,可能会达不到我们想到的效果. ...

  3. 02-第一个iOS程序

    第一个iOS程序 第一个iOS程序简介 初学iOS开发,研究的程序不要过于复杂,应该从最基本的开始 大房子都是由小砖一块一块堆成的,而大型app是由无数个小程序段组成的 接下来实现一个简单的“加法计算 ...

  4. ssm整合实现注册与登录功能

    最简洁易懂的SSM整合源码都在这里了 激情提示: 1.本项目是用IDEA编写的,不管你是习惯何种ide工具,那也只是工具而已,源代码才是本质 2.本项目只拥有注册和登录功能,简易的功能和详细的注释,是 ...

  5. LeetCode 中级 - 翻转矩阵后的得分(861)

    有一个二维矩阵 A 其中每个元素的值为 0 或 1 . 移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0. 在做出任意次数的移动后,将该矩阵的每一 ...

  6. 爬虫——使用BeautifulSoup4的爬虫

    我们以腾讯社招页面来做示例:http://hr.tencent.com/position.php?&start=0#a 如上图,使用BeautifulSoup4解析器,将图1中229页,每页1 ...

  7. Linux系统磁盘管理

    1 Linux磁盘管理体系简介 Linux磁盘管理分为五个步骤:首先在服务器上添加相应的硬盘(如/dev/sda.sdb.sdc等),对全新的服务器(即没有操作系统)做硬RAID0.RAID1.RAI ...

  8. 操作BOM

    BOM的作用是将相关的元素组织包装起来,提供给程序设计人员使用,从而降低开发人员的劳动量,提高设计Web页面的能力. 整个window对象是整个BOM的核心. 通过BOM可实现的功能: 弹出新的浏览器 ...

  9. 【super vlan的配置】

    Super vlan的配置 一:根据项目需求搭建好拓扑图如下: 二:配置 1:由项目图进行理论分析:sw1属于三层交换,用于二层交换信息的转发;同时在sw1上可定义super vlan把sub vla ...

  10. 【vlan之四种方式链路认证组网]

    ---恢复内容开始--- 根据项目需求,搭建好如下拓扑图: 在[sysname]下配置给予协议的vlan vlan 1#vlan 10 protocol-vlan 0 ipv4#vlan 20 pro ...