重定向命令linux 重定向命令使用( 三 )


127 nohup 命令发生错误或不能查找由 Command 参数指定的命令 。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态 。
用途:在后台运行
一般两个一起用
3.为什么呢 21 要写在后面重定向命令linux?
首先是commandfile将标准输出重定向到file中,21 是标准错误拷贝了标准输出的行为 , 也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中 。
21 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端 。file 后输出才被重定向到file,但标准错误仍然保持在终端 。
用strace可以看到:
这个命令中实现重定向的关键系统调用序列是:
open(file) == 3
dup2(3,1)
dup2(1,2)
这个命令中实现重定向的关键系统调用序列是:
dup2(1,2)
open(file) == 3
dup2(3,1)
注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR) 。
这里的2和之间不可以有空格,2是一体的时候才表示错误输出 。
Linux重定向输出重定向 :
我们使用或者对输出进行重定向 。符号的左边表示文件描述符,如果没有的话表示1,也就是标准输出,符号的右边可以是一个文件,也可以是一个输出设备(Linux中万物皆文件,即设备也是文件) 。当使用时,会判断右边的文件存不存在,如果存在的话就先删除,然后创建一个新的文件,不存在的话则直接创建 。但是当使用进行追加时,则不会删除原来已经存在的文件 。
格式 :
command-line[n] 文件
这条命令意思是:将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的)重定向其它输出设备(文件)1,2分别是标准输出,错误输出 。
实例 :
输入重定向
在理解了输出重定向之后,理解输入重定向就会容易得多 。对输入重定向的基本命令如下:
我们使用对输入做重定向, 如果符号左边没有写值,那么默认就是0 。
格式:
command-line [n] 文件
命令默认从键盘获得的输入,使用输入重定向改成从文件,或者其它打开文件以及设备输入 。执行这个命令,将标准输入0,与文件或设备绑定,将由它进行输入 。
实例:
文件描述符的复制表示复制文件描述符到另一个文件描述符中,也就是将该文件描述符重定向到另一个文件描述符所绑定的文件,使用””进行复制 。
想必很多人都知道 file 21 的作用,它等价于 file ,表示标准输出和标准错误都重定向到file中 。那它和 21 file 有什么区别呢?
首先解释 file 21。这里分两个过程:先打开file , 再将fd=1重定向到file文件上,这样file文件就成了标准输出的输出目标;之后再将fd=2复制于fd=1,而fd=1此时已经重定向到file文件上 , 因此fd=2也重定向到file上 。所以,最终的结果是标准输出重定向到file上,标准错误也重定向到file上 。
再解释 21 file。这里也分两个过程:先将fd=2复制于fd=1,而此时fd=1重定向的文件是默认的/dev/stdout,所以fd=2也重定向到/dev/stdout;之后再将fd=1重定向到file文件上 。也就是说,这里的标准错误和标准输出仍然是分开输出的 , 只不过是使用/dev/stdout替代了/dev/stderr,使用file替代了/dev/stdout 。所以,最终的结果是标准错误输出到/dev/stdout,即屏幕上,而标准输出将输出到file文件中 。
可以使用下面的命令来测试 21 file。第一个ls命令是正确的,结果输出到/tmp/fff.log中,第二个ls命令是错误的 , 结果将直接输出到屏幕上 。

推荐阅读