linux命令输出重定向 linux 输入输出重定向( 二 )


(1) 、/dev/nul
过滤标准错误信息
意思就是不想显示结果就输出到这里面 。
(2) 、/dev/zero
创建指定长度的文件
案例1:
测试 and
案例2:
测试 and
测试
测试
案例3:
测试2 and 2
案例4:
测试重定向标准输出和重定向标准错误到同一个文件中
(1)、
(2)、
与上面的案例类似,不做解释
(3) 、21
案例5:
使用/dev/nul文件
有时候我们使用命令 , 不想将输出的信息显示到界面
这时我们可以使用/dev/nul[常用]
简单测试修改demo 用户密码
LINUX 标准错误输出重定向用途:不挂断地运行命令 。
语法:nohup Command [ Arg … ] []
无论是否将 nohup 命令的输出重定向到终端 , 输出都将附加到当前目录的 nohup.out 文件中 。
如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中 。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用 。
退出状态:该命令返回下列出口值:
126 可以查找但不能调用 Command 参数指定的命令 。
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令 。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态 。
用途:在后台运行
一般两个一起用
3.为什么呢 21 要写在后面?
首先是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 bash的重定向 关于linux bash的重定向
所谓I/O重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序,脚本,甚至脚本中的代码块(code block)的输出,然后把捕捉到的输出 , 作为输入发送给另外一个文件 , 命令,程序,或者脚本 。
如果谈到I/O重定向,就涉及到文件标识符(File Descriptor)的概念, 在Linux系统中 , 系统为每一个打开的文件指定一个文件标识符以便系统对文件进行跟踪,这里有些和C语言编程里的文件句柄相似 , 文件标识符是一个数字,不同数字代表不同的含义,默认情况下,系统占用了3个,分别是0标准输入(stdin),1标准输出(stdout), 2标准错误(stderr), 另外3-9是保留的标识符,可以把这些标识符指定成标准输入 , 输出或者错误作为临时连接 。通常这样可以解决很多复杂的重定向请求 。
标准输入通常指键盘的输入
标准输出通常指显示器的输出
标准错误通常也是定向到显示器
请看以下例子,来描述一下他们的关系
#ls /dev
这个命令列出/dev目录下的所有文件,在屏幕上输出结果 。
这里 /dev 就是作为命令ls的标准输入(从键盘输入),而打印在屏幕的结果就是标准输出(/dev目录中的内容)
还是回到标题,重定向就是把标准的`输入或者输出更改成其他的方式,请参看如下例子

推荐阅读