在了解重定向之前,让我们看一下Linux的文件描述符。
Linux文件描述符:它可以理解为Linux跟踪打开文件,并且分配的数字与C语言操作文件时的句柄有些相似。手柄可以实现读写文件。用户可以自定义的文件描述符范围是:3 -num,最大数字,与用户的数字相关:ulimit -n定义号码,不能超过最大值。
Linux启动后,默认情况下将打开三个文件描述符:标准输入标准输入0,标准输出1,错误输出:错误输出2
打开文件后。可以按顺序添加新的文件绑定描述符。执行Shell命令时,它将继承父进程的文件描述符。因此,所有运行的shell命令都将具有默认的3个文件描述符。
对于任何Linux命令执行,它将是这样的过程:
执行命令:
首先有一个输入:可以从键盘或文件获得输入
命令执行已完成:如果成功,成功的结果将输出到屏幕:标准输出默认为屏幕
执行命令存在错误:错误将输出到屏幕:标准错误也默认情况下是指屏幕
文件输入和输出是通过跟踪给定过程的所有打开文件来完成的。这些数字值是文件描述符。最著名的文件描述符是stdin,stdout和stderr,文件描述符的数量分别为0、1和2。这些数字及其各自的设备被保留。在执行命令之前,将首先准备所有输入和输出,默认绑定将分别为(stdin,stdout,stderr)。如果此时发生错误,则该命令将被终止并且不会执行。对于命令解析,您可以参考:Linux Shell通配符,Metacharacters和Escape角色的简介。
这些默认输出的默认输出和输入都是由Linux系统设置的。在使用过程中,有时我们不希望将执行结果输出到屏幕上。我想输出到文件或其他设备。目前,我们需要执行输出重定向。
Linux Shell中的常见输入和输出操作员是:
1。标准输入(stdin):代码为0,使用<or/proc/proc/proc/self/fd/0 0代表:/dev/stdin
2。标准输出(Stdout):代码为1,使用>或>>; /dev/stdout->/proc/proc/self/fd/1 1代表:/dev/stdout
3。标准错误输出(STDERR):代码为2,使用2>或2 >>; /dev/stderr->/proc/proc/self/fd/2 2表示:/dev/stderr
格式:
command-line1 [1-n]>文件或文件操作员或设备
上面的命令是指命令的执行结果(标准输出或错误输出,最初是在屏幕上打印到屏幕上的),然后重定向到其他输出设备(文件,打开文件操作员或打印机等)1,2分别是标准输出和错误输出。
例子:
#显示当前目录文件test.sh test1.sh test1.sh实际上不存在
[chengmo@centos5 shell] $ ls test.sh test1.sh
LS:test1.sh:没有这样的文件和目录
test.sh
#正确的输出和错误的输出显示在屏幕上。现在,您需要将正确的输出写入Suc.txt
#1>可以省略,而不是书写,默认为标准输出
[chengmo@centos5 shell] $ ls test.sh test1.sh1> suc.txt
LS:test1.sh:没有这样的文件和目录
[Chengmo@centos5 shell] $ cat suc.txt
test.sh
#Output错误,而不是输出到屏幕,输出到err.txt
[chengmo@centos5 shell] $ ls test.sh test1.sh1> suc.txt2> err.txt
[chengmo@centos5 shell] $ cat suc.txt err.txt
test.sh
LS:test1.sh:没有这样的文件和目录
#continue将输出附加到suc.txt err.txt“ >>”附加操作员
[chengmo@centos5 shell] $ ls test.sh test1.sh1 >> suc.txt2 >> err.txt
#获取错误输出信息
[Chengmo@centos5 shell] $ LS test.sh test1.sh2>& -
test.sh
[chengmo@centos5 shell] $ ls test.sh test1.sh2>/dev/null
test.sh
#&[n]表示现有的文件描述符,&1表示输出&2表示错误输出& - 表示关闭与之绑定的描述符
#/dev/null此设备是Linux中的黑洞设备。输出到该设备的任何信息都将被食用。
#close所有输出
[Chengmo@centos5 shell] $ ls test.sh test1.sh1>&2>& -
#close 1,2文件描述符
[chengmo@centos5 shell] $ ls test.sh test1.sh2>/dev/null1>/dev/null
#将1,2输出到 /dev /null设备
[chengmo@centos5 shell] $ ls test.sh test1.sh>/dev/null2>&1
#将错误输出2键入正确的输出1,然后将正确的输出发送到 /dev /null设备。
[Chengmo@centos5 shell] $ LS test.sh test1.sh&>/dev/null
#&代表标准输出,错误输出输入所有标准输出和错误输出到 /dev /null文件
注意:
1。当外壳遇到“>”操作员时,它将确定右侧的文件是否存在。如果存在,请先删除它并创建一个新文件。直接创建不存在。不管左侧的命令是否成功执行。右边的文件将变为空。
2。“ >>”操作员确定正确的文件。如果不存在,请先创建它。以附加方式打开文件将分配给文件描述符[未具体指定,默认为1,2],然后绑定到左标准输出(1)或错误输出(2)。
3。当执行命令:执行时,绑定文件的描述符也将自动无效。 0,1,2将再次闲置。
4。启动命令,命令输入,正确的输出和错误输出分别键入0、1和2文件描述符默认情况下。
5。执行命令之前,它将首先检查输出是否正确。如果输出设备不正确,则不会执行命令。
格式:
命令行[N]
默认情况下将有从键盘获得的任何输入,以及文件的输入,或其他打开文件和设备。执行此命令以在标准中输入0并绑定到文件或设备。它将被输入。
例子:
[chengmo@centos5 shell]#cat> catfile
测试
猫文件测试
#press [ctrl]+D在这里离开
#来自标准输入[键盘]的数据,然后将其输出到catfile文件
[Chengmo@centos5 shell] $ cat> catfile catfile&6
#Restore标准输出
[Chengmo@centos5 shell] $ exec6>& -
#close fd 6描述符
[Chengmo@centos5〜] $ ls/proc/proc/self/fd/
0123
注意:使用前将标准输入保存到文件描述符6。在这里,默认情况下将打开文件描述符。您也可以使用自定义描述符。然后将标准输出绑定到文件,所有输出将发生在文件上。使用后,还原标准输出并关闭打开的文件描述符6。
有趣的事情:
一些朋友可以使用:exec 1> suc.txt,然后所有输出都绑定到suc.txt文件。那么如何恢复原始的呢?尝试一下,您会发现问题...
exec3Test.sh;
#open test.sh读写操作,并绑定到文件描述符3
何时线& -
exec3
本网站每日更新互联网创业教程,一年会员只需98,全站资源免费下载点击查看会员权益