命令重定向
上一篇 /
下一篇 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>:将错误的数据输出到指定的地方(标准错误输出);
例如:
- find / -name testing 1> list_right 2> list_error 正确的数据输出到list_right文件中,错误的数据输出到list_error文件;
- find / -name testing 1> list_right 2> /dev/null 正确的数据输出到list_right文件中,错误的数据直接丢掉。
- 如果要将数据写入同一个文件中,需要用到特殊的写法:
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: