说起输出重定向,先了解一下什么是标准的输入输出设备:
设备 文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/sdout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出
虽然在现代输入设备还有什么鼠标,游戏手柄什么的,输出设备还有什么投影仪了打印机了,但是在最早期就是一个键盘一个显示器走天下。
输出重定向
> 大于号,把本来应该输出到屏幕上的内容显示在文件中,相当于保留了日志(就是这么一个意思)
例如: ls > test.log 把当前目录下的内容保存在test.log之中。但是这种方式只能是覆盖,只能看到最后一次重定向的内容。
>> 双大于号,同样是把本来应该输出到屏幕上的内容显示在文件中,但是,这种方式是以追加的方式写入,之前的日志内容还保留,很显然,这种方式要比覆盖好的多。
但是,有个问题,在命令执行成功的时候,它确实能把内容重定向到test.log,但是当命令不存在或者命令出错的时候,重定向就失效了,怎么把命令出错的信息重定向下来呢?
2> 可以将错误信息重定向到日志文件,同样的,一个大于号是覆盖的意思。
例如: sldfo(随便写的一个命令) 2>test.log 注意:错误信息重定向的时候大于号前后不要加空格。
2>> 同上,但是两个大于号是追加的意思。
例如: sldjfs 2>>test.log 同样的,大于号前后不要加空格
其实,这两种写法都有一个弊端,不带2的重定向只能执行成功的命令,而带着2的重定向只能执行失败的命令,这使用起来就显得很纠结了,很不爽 (??)nnn 要想爽一下,推荐使用以下命令:
&> 不管命令是否能够正确执行,都会把输出的信息重定向到同一个文件中,当然,老惯例,这是覆盖。
例如: ls &> test.log
&>> 同样的,这是追加。这样使用起来就爽快多了,正确的有正确的信息,错误的有错误的信息,多省心 ╰( ̄▽ ̄)╭
以上两种方法是推荐的写法,其实还有两个方法跟上面两个方法是一样的效果,有点啰嗦,知道就行:
命令 > 文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件中去。功能上完全等于 &>。
命令 >> 文件 2>&1 以追加的方式…… 功能上完全等同于 &>>
注意的一点:无论哪一个错误输出命令,大于号前后都必要加空格。
对了,还有一个使用方法
命令 >> 文件1 2>>文件2 把正确的输出追加到文件1中,把错误的输出追加到文件2中,这个感觉就更加清晰明了了。
输入重定向
和 > 正好相反,输入重定向用的是小于号 < 。可以使用wc命令测试一下。
wc 【选项】 【文件名】
选项 -c 统计字节数 -w 统计单词数 -l 统计行数
例如: wc < test.log 就回显示出字节数、单词数、行数。
输入重定向不常用,了解一下。
学PHP的小蚂蚁 原创博客 http://my.oschina.net/woshixiaomayi/blog