zoukankan      html  css  js  c++  java
  • 【转】Linux 之 数据流重定向

    转自: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.   
    7. # run-parts  
    8. 01 * * * * root run-parts /etc/cron.hourly  
    9. 02 4 * * * root run-parts /etc/cron.daily  
    10. 22 4 * * 0 root run-parts /etc/cron.weekly  
    11. 42 4 1 * * root run-parts /etc/cron.monthly  
    12. cat: /etc/thinksay: 没有那个文件或目录  
    13. [root@localhost ~]# cat /etc/crontab /etc/thinksay > list_right 2> list_error  
    14. [root@localhost ~]# cat list_error  
    15. cat: /etc/thinksay: 没有那个文件或目录  
    16. [root@localhost ~]# cat list_right  
    17. SHELL=/bin/bash  
    18. PATH=/sbin:/bin:/usr/sbin:/usr/bin  
    19. MAILTO=root  
    20. HOME=/  
    21.   
    22. # run-parts  
    23. 01 * * * * root run-parts /etc/cron.hourly  
    24. 02 4 * * * root run-parts /etc/cron.daily  
    25. 22 4 * * 0 root run-parts /etc/cron.weekly  
    26. 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)错误信息与正确信息需要分别执行时

  • 相关阅读:
    数组——基础
    程序流程控制——循环结构
    程序流程控制——分支结构
    运算符
    进制
    变 量
    Java中的名称命名规范
    标识符(Identifier)
    保留字(reserved word)
    关键字
  • 原文地址:https://www.cnblogs.com/Andy-Lv/p/5311016.html
Copyright © 2011-2022 走看看