linux输入输出重定向之前,看看什么是linux的文件描述符
在了解linux输入输出重定向之前,我们先来瞧瞧哪些是linux的文件描述符。
 linux文件描述符
 linux文件描述符可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时侯的句柄,通过句柄就可以实现文件的读写操作。用户可以自定义文件描述符范围是:3-num,这个最大数字,跟用户的:ulimit–n定义数字有关系,不能超过最大值。
 常用的文件描述符如下:
 文件描述符名称常用简写默认值
 
 0标准输入stdin按键
 1标准输出stdout屏幕
 2标准错误输出stderr屏幕
 linux启动后,会默认打开这3个文件描述符。一条shell命令执行,就会承继父进程的文件描述符。为此,所有运行的shell命令,就会有默认3个文件描述符。
 
 对于任何一条linux命令执行,它会是这样一个过程:
 命令执行时,先有一个输入,输入可以从按键,也可以从文件得到。当命令执行完成,若果成功了,这么会把成功结果输出到屏幕。假如命令执行错误linux输出重定向命令,这么会把错误也输出到屏幕。standardoutput和standarderror默认都是屏幕。
 这种默认的输出,输入都是linux系统内定的,我们在使用过程中,有时侯并不希望执行结果输出到屏幕。我想输出到文件或其它设备。这个时侯我们就须要进行输出重定向了。
 
 linux下常用输入输出操作符
 1.标准输入(stdin):代码为0,使用<或/proc/self/fd/00代表:/dev/stdin
 2.标准输出(stdout):代码为1,使用>或>>;/dev/stdout->/proc/self/fd/11代表:/dev/stdout
 3.标准错误输出(stderr):代码为2,使用2>或2>>;/dev/stderr->/proc/self/fd/22代表:/dev/stderr
 输入输出重定向举例说明输出重定向
#显示当前目录文件 test.sh test1.sh test1.sh实际不存在
 [zhangnq@centos5 shell]$ ls test.sh test1.sh
 ls: test1.sh: 没有这个文件和目录
 test.sh
#正确输出与错误输出都显示在屏幕了,现在需要把正确输出写入suc.txt
 # 1>可以省略,不写,默认所至标准输出
 [zhangnq@centos5 shell]$ ls test.sh test1.sh 1>suc.txt
 ls: test1.sh: 没有这个文件和目录
 [zhangnq@centos5 shell]$ cat suc.txt
 test.sh
#把错误输出,不输出到屏幕,输出到err.txt
 [zhangnq@centos5 shell]$ ls test.sh test1.sh 1>suc.txt 2>err.txt
 [zhangnq@centos5 shell]$ cat suc.txt err.txt
 test.sh
 ls: test1.sh: 没有这个文件和目录
 #继续追加把输出写入suc.txt err.txt “>>”追加操作符
 [zhangnq@centos5 shell]$ ls test.sh test1.sh 1>>suc.txt 2>>err.txt
#将错误输出信息关闭掉
 [zhangnq@centos5 shell]$ ls test.sh test1.sh 2>&-
 test.sh
 [zhangnq@centos5 shell]$ ls test.sh test1.sh 2>/dev/null
 test.sh
 #&[n] 代表是已经存在的文件描述符,&1 代表输出 &2代表错误输出 &-代表关闭与它绑定的描述符
 #/dev/null 这个设备,是linux 中黑洞设备,什么信息只要输出给这个设备,都会给吃掉
#关闭所有输出
 [zhangnq@centos5 shell]$ ls test.sh test1.sh 1>&- 2>&-
 #关闭 1 ,2 文件描述符
 [zhangnq@centos5 shell]$ ls test.sh test1.sh 2>/dev/null 1>/dev/null
 #将1,2 输出转发给/dev/null设备
 [zhangnq@centos5 shell]$ ls test.sh test1.sh >/dev/null 2>&1
 #将错误输出2 绑定给 正确输出 1,然后将 正确输出 发送给 /dev/null设备 这种常用
 [zhangnq@centos5 shell]$ ls test.sh test1.sh &>/dev/null
 #& 代表标准输出 ,错误输出 将所有标准输出与错误输出 输入到/dev/null文件
 
1、shell遇见”>”操作符,会判定一侧文件是否存在,假如存在就先删掉linux输出重定向命令,而且创建新文件。不存在直接创建。无论右侧命令执行是否成功。右侧文件就会变为空。
 2、“>>”操作符,判定右侧文件,假如不存在,先创建。以添加方法打开文件,会分配一个文件描述符[不非常指定,默认为1,2]之后,与右边的标准输出(1)或错误输出(2)绑定。
 
 3、当命令:执行完,绑定文件的描述符也手动失效。0,1,2又会空闲。
 4、一条命令启动,命令的输入,正确输出,错误输出手机linux操作系统,默认分别绑定0,1,2文件描述符。
 5、一条命令在执行前,先会检测输出是否正确linux shell,假如输出设备错误,将不会进行命令执行
 输入重定向
[zhangnq@centos5 shell]# cat > catfile
 testing
 cat file test
 #这里按下 [ctrl]+d 离开
 #从标准输入【键盘】获得数据,然后输出给catfile文件
[zhangnq@centos5 shell]$ cat>catfile catfile <
 test!
 eof
 
1、file2>&1这些写法用的最多。