转自:http://www.linuxidc.com/Linux/2012-09/69764.htm

linux在你登入时,便将默认的标准输入、标准输出、标准错误输出安排成你的终端。I/O重定向就是你通过与终端交互,或者在shell script里设置,重新安排从哪里输入或者输出到哪里。每个程序都应该有标准输入/输出(错误输出)。

重定向的方法大抵有:>、<、<<、管道等

先了解stdin、stdout、stderr。

标准输出(stdout):代码为1,使用>或者>>,是命令执行所回传的正确的信息。

1>:以覆盖的方法将正确的数据输出到指定的文件或者设备上

1>>:以追加的方法将正确的数据输出到指定的文件或者设备上

标准错误输出(stderr):代码为2,使用2>或2>>,是命令执行失败后,所回传的错误信息。

2>:以覆盖的方法将错误的数据输出到指定的文件或者设备上

2>>:以追加的方法将错误的数据输出到指定的文件或者设备上

  1. [root@localhost ~]# cat /etc/crontab /etc/thinksay
  2. SHELL=/bin/bash
  3. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  4. MAILTO=root
  5. HOME=/
  6. # run-parts
  7. 01 * * * * root run-parts /etc/cron.hourly
  8. 02 4 * * * root run-parts /etc/cron.daily
  9. 22 4 * * 0 root run-parts /etc/cron.weekly
  10. 42 4 1 * * root run-parts /etc/cron.monthly
  11. cat: /etc/thinksay: 没有那个文件或目录
  12. [root@localhost ~]# cat /etc/crontab /etc/thinksay > list_right 2> list_error
  13. [root@localhost ~]# cat list_error
  14. cat: /etc/thinksay: 没有那个文件或目录
  15. [root@localhost ~]# cat list_right
  16. SHELL=/bin/bash
  17. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  18. MAILTO=root
  19. HOME=/
  20. # run-parts
  21. 01 * * * * root run-parts /etc/cron.hourly
  22. 02 4 * * * root run-parts /etc/cron.daily
  23. 22 4 * * 0 root run-parts /etc/cron.weekly
  24. 42 4 1 * * root run-parts /etc/cron.monthly

标准输入(stdin):代码为0,使用<或<<,是将原本需要由键盘输入的数据改由文件内容来替代。注意,<<代表的是结束输入的意思。

  1. [root@localhost think]# cat > test <<"eof"
  2. > my name is think
  3. > hello world
  4. > eof
  5. [root@localhost think]# cat test
  6. my name is think
  7. hello world

可以把>、<、>>想象成漏斗:数据会从大的一端进入,由小的一端出来。

>重定向符在目的文件不存在时,会新建一个。然而,目的文件已存在,它就会被覆盖掉,原本的数据都会丢失。而>>在目的文件不存在时,会新建一个;存在时会追加到文件尾。

管道可以把两个以上执行中的程序链接在一起,第一个程序的标准输出可以变成第二个程序的标准输入。因为,>或者<使用的是临时文件,管道在速度上比临时文件快上10倍。从最原始的数据开始,然后构造一条条管道,一步步地,管道中的每个阶段都会让数据更接近要的结果。请记得,构造管道时,应该试着让每个阶段的数据量变得更少。

  1. [root@localhost think]# cat > test01 << "eof"
  2. > 1 2 5
  3. > eof
  4. [root@localhost think]# tr -d 2 < test01 | sort > test02
  5. [root@localhost think]# cat test02
  6. 1  5

有个特殊文件,便是大家耳熟能详的”位桶“--/dev/null。重定向到此文件的数据都会被系统丢掉。

最后介绍一下,什么时候重定向?

运用场景:

1)屏幕输出信息很重要,而且我们需要将其存下时

2)后台执行中的程序,不希望它打搅屏幕正常的输出结果时

3)一些系统的例行工作,希望它可以存下来时

4)一些执行命令的可能已知错误信息,想以“2> /dev/null"将其丢弃时

5)错误信息与正确信息需要分别执行时

【转】Linux 之 数据流重定向的更多相关文章

  1. 初窥Linux 之 数据流重定向

    一.什么是数据流重定向 在说数据流重定向之前,先来说说数据流的概念吧.数据流分为三种:标准输入(stdin),标准输出(stdout)和标准错误输出(stderr). 简单来说,标准输出指的是命令执行 ...

  2. 【linux】linux的数据流重定向

    首先说一下什么是数据流重定向,所谓数据流重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序,脚本,甚至脚本中的代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外 ...

  3. 【Linux】数据流重定向

    数据流重定向(redirect)就是将某个命令执行后应该要出现在屏幕上的数据,给它传输到其他的地方,例如文件或设备(打印机之类的).这玩意在Linux的命令行模式下很重要,尤其是想要将某些数据存储下来 ...

  4. linux——(8)数据流重定向、管道命令

    概念一:数据流重定向 数据流分输入流和输出流,还有一个标准错误流,负责管理出错信息,比如一般的命令的输出会输出到屏幕上,我们可以用重定向让他输入到某个文件内. 相关操作: 1,标准输入(stdin): ...

  5. Linux:数据流重定向

    1)垃圾桶黑洞 /dev/null command > /dev/null 2)stdout与stderr写入同一个文件 command > filename >& comm ...

  6. Linux 数据流重定向

    1.三种数据流重定向1)标准输入(stdin):代码为0,使用0<或0<<,其中代码0可以省略2)标准输出(stdout):代码为1,使用1>或1>>,其中代码1可 ...

  7. 十句话教你学会Linux数据流重定向

    1.看到重定向一下子就想起了web里面的redirect,没错,但是Linux数据流重定向的作用不是跳到另一个网页,而是用来存储重要的屏幕信息.将不必要的屏幕信息输出到文件里或者“黑洞”里.将错误信息 ...

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

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

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

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

随机推荐

  1. Hdu 4864(Task 贪心)(Java实现)

    Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...

  2. PAT 1123 Is It a Complete AVL Tree

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  3. 在eclipse中如何在大量项目中查找指定文件

    在eclipse中如果希望在大量的项目中寻找指定的文件可不是一件轻松的事,还好eclipse提供了强大的搜索功能. 我们可以通过通配符或正则表达式来设定查寻条件,下面是操作示例: ctrl+h 打开搜 ...

  4. UVA 12686 Trending Topic

    Trending Topic Time limit: 1.000 seconds Imagine you are in the hiring process for a company whose p ...

  5. 文件处理: read、readline、 readlines()

    假设a.txt的内容如下所示: Hello Welcome What is the fuck.. 1. read([size])方法 read([size])方法:从文件当前位置起读取size个字节, ...

  6. MEAN,从MONGO DB里弄出点东东来啦,以REST风格显示JSON

    最近一直在弄弄的... javascript的风格弄熟了,我觉得肯定很快,,但心中有种感觉,DJANGO和MEAN这种结构,搞大的不行. 因为MVC这种结构感觉不如SPRING这些严谨,是不是我有偏见 ...

  7. Spring——ClassPathXmlApplicationContext(配置文件路径解析 1)

    ClassPathXmlApplicationContext     在我的 BeanFactory 容器文章中主要提及了 BeanFactory 容器初始化(Spring 配置文件加载(还没解析)) ...

  8. MAPZONE GIS SDK接入Openlayers3之四——高级标注效果实现

    首先看实现效果: 实现要点: 1)树形标注实现 2)复杂标注样式定义 3)效率优化 1.树形标注实现 树形标注采用字体符号来实现,包括以下几个步骤 1)载入字体 2)设置标注值与字体对照关系 3)设置 ...

  9. ASPNET Razor 使用 @Ajax.BeginForm 需要注意到的细节

    创建空的web项目,通过Nuget引用mvc组件来搭建空的MVC项目时, 在视图页面中无法使用@Ajax.BegForm来进行异步提交数据, 而新建默认的MVC模板项目却能够正常使用@Ajax.Beg ...

  10. Android系统编译时遇到的几个.mk的疑惑。

    在Android4.2的源代码Build/prduct_config.mk里面遇到几个疑惑: # Convert a short name like "sooner" into t ...