一、概述

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)正确信息和错误信息需要分开输出

最新文章

  1. java大并发数据保存方案
  2. 模拟搭建Web项目的真实运行环境(五)
  3. Virtualbox虚拟机配置CentOS7.0静态网络
  4. Echarts的基本用法
  5. (实用篇)PHP实现队列及队列原理
  6. CentOS 7.0系统安装配置图解教程
  7. ImageIO.wtrie生成jpg图片质量损失方案:BufferedImage生成jpg图片文件流
  8. React-Native ListView加载图片淡入淡出效果的组件
  9. IOS学习之路五(SpriteKit 开发飞机大战小游戏一)
  10. [Scoi2010]游戏
  11. usaco 2002 月赛 Chores 题解
  12. Struts框架之 执行流程 struts.xml 配置详细
  13. php Yii2 报错unexpected &#39;}&#39;
  14. gcc/g++ 命令的经常使用选项
  15. 图解Java线程的生命周期,看完再也不怕面试官问了
  16. Markdown常用快捷键
  17. vue中的一些知识点--多看文档
  18. Java 容器源码分析之 Deque 与 ArrayDeque
  19. TensorFlow 学习资料
  20. char,wchar_t 长度

热门文章

  1. getElementsByName和getElementById
  2. ABAP术语-Customer Enhancement
  3. VMware ESXi-6.7——安装
  4. layDate 闪现 循环一个以上会闪现
  5. linux下的shadow文件解释
  6. 三角形div原理(小知识点)
  7. mongo数据库相关目录
  8. MySQL innodb表使用表空间物理文件复制或迁移表
  9. python练习笔记
  10. ruby 操作csv