转自: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)错误信息与正确信息需要分别执行时

最新文章

  1. Nginx在线服务状态下平滑升级或新增模块的详细操作
  2. css动画与js动画的区别
  3. 关于&lt;form&gt;标签
  4. Blackfin DSP(二):寄存器操作与GPIO
  5. DS_Store
  6. Binary Search Tree BST Template
  7. MSSQL-并发控制-1-Transaction
  8. 【Ubuntu】安装Java和Eclipse
  9. [Pipy]利用pip2pi搭建本地pypi源
  10. 『PyTorch』第十五弹_torch.nn.Module的属性设置&amp;查询
  11. django模板语言循环字典,及forloop
  12. React开发笔记
  13. 2016年总结 - Java程序员
  14. 如何设置font-family
  15. Received empty response from Zabbix Agent at[172.16.1.51]. Assuming that agent dropped connection because of access permissions
  16. JQuery 节点监听
  17. VS2013、VS2015中,新建项目没有看到解决方案的问题(已解决)
  18. C#_连接数据库实现 登录注册界面
  19. pygame模块参数汇总(python游戏编程)
  20. 利用expect和sshpass完美非交互性执行远端命令

热门文章

  1. 在此计算机中仅有部分visual studio2010产品已升级到SP1,只有全部升级,产品才能正常运行
  2. Eclipse 导出的jar包 , 使用后提示重复定义?
  3. Leetcode 79.单词搜索
  4. Leetcode 51.N后问题
  5. noip模拟赛 都市
  6. node.js 核心http模块,起一个服务器,返回一个页面
  7. 页面加载即执行JQuery的三种方法
  8. 武大OJ 622. Symmetrical
  9. Android 属性动画(Property Animation) 全然解析 (上)
  10. 从零单排入门机器学习:Octave/matlab的经常使用知识之矩阵和向量