命令重定向

上一篇 / 下一篇  2009-04-07 13:21:40 / 个人分类:Linux/Unix

什么是重定向?简单的说,就是将所得数据转到其它地方。例如,将当前屏幕输出数据转到文件中,可用 ls -l / > test,大于号“>”的作用就是将输出结果导向到test文件。需要注意:                                           

  • 当使用>导向到test文件时,屏幕不会显示任何信息,但是会将执行的结果输出到test文件中;
  • 若文件test不存在,系统会自动创建;
  • 若文件test存在,系统会先清空该文件原先的内容,然后将数据写入。也就是说,若以>将内容输出到一个已有文件中,该文件原有的内容就会被覆盖掉。

除了>符号,在bash命令执行过程中,还有3种输出输入情况,分别是:                              

  • 标准输入:代码为0,或称为stdin,使用方式为<;
  • 标准输出:代码为1,或成为stdout,使用方式为1>;
  • 错误输出:代码为2,或称为stderr,使用方式2>;                                           

    基本的指令书写方式为:

    指令                  >                设备或文件

                         2>

                         >>

                         <

    左边一定是指令,右边可能是设备或文件。注意:1>和2>之间没有空格符。例如:

  • ls -al > list.txt   将显示结果输出到list.txt文件中,若该文件已存在则予以取代;               
  • list -al >> list.txt   将显示结果输出到list.txt文件中,该文件内容累加,旧数据保留;           
  • ls al 1> list.txt 2> list.err   将正确的显示结果输出到list.txt文件中,错误的数据输出到list.err;
  • ls al 1> list.txt 2>&1  将显示数据不论正确或错误 均输出到list.txt中,注意:正确或错误的信息输出到同一个文件中,只能采用该方法,不能写成其它格式;                                             
  • ls al 1> list.txt 2> /dev/null   显示的数据,正确的输出到list.txt文件中,错误的数据予以丢弃(说明:/dev/null相当于一个类似垃圾桶的设备);

    命令重定向里常用的符号和设备:

  • < :由<的右边读入参数文件;
  • > :将原本由屏幕输出的正确数据输出到>右边的文件或设备中;
  • >>:将原本由屏幕输出的正确数据输出到>>右边,与>不同的是,该文件原有的内容不会被覆盖,新的数据以累加的方式添加到文件的最后面;
  • 2>:将原本应该由屏幕输出的错误数据输出到2>的右边;
  • /dev/null:可以视为垃圾设备。

    如果需要将正确的数据和错误的数据分别存入不同的文件,正确的写法是:1>和2>

  • 1>:将正确的数据输出到指定的地方(标准输出);
  • 2>:将错误的数据输出到指定的地方(标准错误输出);                                       

   例如:

  1. find / -name testing 1> list_right 2> list_error                              正确的数据输出到list_right文件中,错误的数据输出到list_error文件;                   
  2. find / -name testing 1> list_right 2> /dev/null                                    正确的数据输出到list_right文件中,错误的数据直接丢掉。                                  
  3. 如果要将数据写入同一个文件中,需要用到特殊的写法:                                  

      find / -name test 1> list 2>list   错误的写法                                  

      find / -name test 1> list2>&1  正确的写法

    下面来介绍<,最简单的说法,就是将原本由键盘输入的数据经由文件读入,最明显的例子就是mail这个东东。比如,以root身份寄信给root:

  2.有文件代替输入                                                             如:mail -s "test" root < /root/.bashrc   将.bashrc的内容寄给root 

  最后,总结一下,为什么要使用命令重定向?答案:

  • 屏幕输出的信息很重要,需要保存的时候;
  • 背景执行中的程序,不希望它干扰屏幕正常的输出结果时;
  • 一些系统的例行性命令(如:/etc/crontab中的文件)的执行结果,希望被保存时;
  • 一些执行命令,已经知道可能的错误信息,想通过2>/dev/null丢掉时;
  • 错误信息与正确信息需要分别输出时。

TAG:

 

评分:0

我来说两句

Open Toolbar