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)
> 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:将标准输出和标准错误输出重定向到文件
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会将其自动重定向到一个终端(包括显示控制台、远程登陆伪中断或者串口)。