输入/输出重定向,管道
1、标准输入:/dev/stdin(键盘), 描述符号是0
2、标准输出:/dev/stdout(屏幕), 描述符号是1
3、错误输出:/dev/stderr(错误消息输出到屏幕上),描述符号是2
COMMAND_OUTPUT > OUTPUT_FILENAME
#重定向stdout到一个文件
#如果没有这个文件就创建一个,否则就覆盖原文件里面的内容
:> OUTPUTFILENAME
#如果文件没有,就创建一个0长度的文件(==touch)
#:是一个占位符,不产生任何输出
#>会把文件“FILENAME”截断为0长度
> FILENAME
#>会把文件“FILENAME”截断为0长度
#如果文件没有,就创建一个0长度的文件(==touch)
#(与上面的“:>”效果相同,但是在某些shell下可能不能工作)
如图所示
COMMAND [options] > file.list
#创建一个包含目录树列表的文件
如图所示:
COMMAND_OUTPUT >> OUTPUT_FILENAME
#重定向stdout到一个文件
#如果没有这个文件就创建一个,否则就追加到文件后边
如图所示:
1>filename
#重定向stdout到文件filename中
1>>filename
#重定向并且追加stadout到文件filename中
如图所示
2>filaname
#重定向stderr到文件filename中
2>>filename
#重定向并且追加staderr到文件filename中
如图所示
&>filename
#把stdout和stderr都重定向到文件filename中
如图所示
2>&1
#重定向stderr到stdout
#得到的错误的消息与stdout一样,发送到一个地方
如图所示:
i>&j
#重定向文件描述符i到j中
#指向i文件的所有的输出都发送到j中去
>&j
#默认的重定向文件描述符1
#所有传递到stdout的传输都送到j中去
0
>filename
#从文件中接受输入
#与“>”是成对命令
#eg:grep "mota" < filename
[j]<>filename
#为了读写filename,把文件filename打开,并分配文件描述符“j”给他
#如果文件filename不存在,就创建他
#如果文件描述符“j”没指定,默认是fd 0,stdin。
#这种应用通常是为了写到一个文件指定的地方
下面看一个脚本:
这个实验
就是在指定的字符串的指定位置添加一个指定的符号,实验结果如下图所示
关闭文件描述符
n
0
n>&- 关闭输出文件描述符n
1>&- 或>&- 关闭stdout
自定义输出重定向:
自定义重定向符号:>&
exec 3~9 filename #定义n为自定义的重定向文件
COMMAND >&3 #输出到自定义重定向文件中
exec 3>&- #撤销自定义
管道:用于连接多个命令,把前一个命令的输出结果当作第二个命令的输入结果
COMMAND1 | COMMAND2 | COMMAND3
eg: echo "123456" | passwd --stdin user