46 关于Linux的I/O重定向

I/O重定向是一个过程,这个过程捕捉一个文件、或命令、或程序、或脚本、甚至代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外一个文件、或命令、或程序、或脚本。

1、I/O重定向符合包括了基本I/O重定向符号和高级I/O重定向符号两大类。

基本I/O重定向符号(需要注意的是可以使用FD文件描述符作为文件名称):
cmd1 | cmd2:管道符,将cmd1的标准输出作为cmd2的标准输入
> filename:将标准输出写到文件filename之中
< filename:将文件filename的内容读入到标准输入之中
>> filename:将标准输出写到文件filename之中,若filename文件已存在,则将标准输出追加到filename已有内容之后
>| filename:即使noclobber选项已开启,仍然强制将标准输出写到文件filename之中,即将filename文件覆盖掉
n>| filename :即使noclobber选项已开启,仍然强制将FD为n的输出写到文件filename之中,即将filename文件覆盖掉
n> filename:将FD为n的输出写到文件filename之中
n< filename :将文件filename的内容读入到FD n之中
n>> filename:将FD为n的输出写到文件filename之中,若filename文件已存在,则将FD为n的输出追加到filename已有内容之后
<<delimiter :此处文档(Here-document)

高级I/O重定向符号

n>&m:将FD为m的输出拷贝到FD为n的文件
n<&m:将FD为m的输入拷贝到FD为n的文件
n>&-:关闭FD为n的输出
n<&-:关闭FD为n的输入
&>file:将标准输出和标准错误输出重定向到文件

--------I/O重定向和管道的区别

首先需要注意的是管道|其实也是I/O重定向的一个操作部分

1、管道左边是一个可以送到标准输出(stdout)的命令,右边是一个从标准输入接受(stdin)的命令;如果I/O重定向符左边是有输出的命令,右边只能是文件,如果I/O重定向符左边是能接受输入的命令,右边只能是文件。

2、在管道执行的时候启动了两个进程,该进程分别执行左右两边的命令;而I/O重定向符值则在同一个进程中完成

---------在Linux中有两个重要的特殊文件:

/dev/null:这是一个空设备文件,被送到其中的所有的数据都会被丢弃,可以将标准输出和错误输出全部重定向到该文件中,此时既可以将错误信息全部丢弃。

标准写法是>/dev/null 2>&1

其中>/dev/null表示丢弃文件;
2>&1其中2和1分别表示标准输出stdout和标准出错stderr,>&表示等同于,也就是将标准出错输出2重定向于标注输出1,由于标准输出已经被重定位到了/dev/null,所以标准出错的输出也被扔掉了。

该写法也可以是1>/dev/null 2>/dev/null,区别在这种情况下标准输出和标准出错都被送到/dev/null,这个文件被打开了两遍;而>/dev/null 2 >& 1则是将标准输出送到/dev/null,而标准出错则是从管道送到/dev/null,/dev/null只被打开了一次,其中/dev/null可以换成其他任何文件。


/dev/tty:当该文件被打开的时候shell会将其自动重定向到一个终端(包括显示控制台、远程登陆伪中断或者串口)。





46 关于Linux的I/O重定向,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。