1、文件描述符
当执行 shell 命令时,会默认打开 3 个文件:标准输入、标准输出、错误输出,对应的文件描述符是 0、1、2。标准输入默认是从键盘获得输入,标准输出和错误输出默认是输出到屏幕。
可以通过更改文件描述符的默认指向,从而实现输入、输出的重定向。
2、输出重定向
使用“>”或“>>”对输出进行重定向。符号左边表示文件描述符,默认为 1,也就是标准输出。符号右边可以是一个文件,也可以是一个输出设备。
当使用“>”时,会判断右边的文件是否存在,如果存在,就先删除,再创建一个新的文件。如果不存在,则直接创建。如果使用“>>”,则不会删除已经存在的文件,而是进行追加。
3、输入重定向
使用“<”对输入进行重定向。符号左边表示文件描述符,默认为 0,也就是标准输入。符号右边如果没有跟文件名,则表示是一个标准输入(例如:键盘)。
如果使用“<<”对输入进行重定向,则符号右边表示一个结束符(例如:EOF,表示从标准输入中读入,直到遇到 EOF 结束)。
4、/dev/null
/dev/null 是 linux 系统的空设备文件,所有往这个文件中写入的内容都会被丢弃。
5、常见的组合命令
>/dev/null 表示不显示也不保存标准输出,即标准输出会被丢弃。
2>&1 使用 & 符号进行了重定向绑定,表示错误输出重用了标准输出的描述符。
>/dev/null 2>&1 表示不显示也不保存标准输出,而错误输出重用了标准输出的描述符,也就是说错误输出同样会被丢弃。
2>&1 >/dev/null 由于错误输出重用了标准输出的描述符,而此时的标准输出是屏幕,因此,错误输出被输出到了屏幕。而之后,标准输出被丢弃了。
不能使用 >out 2>out 的写法(out 表示一个文件或者一个输出设备,例如:/dev/null),如果不使用重定向绑定,标准输出和错误输出会抢占往 out 输出内容,整体 IO 效率不如重定向绑定高效。如果 out 是一个文件,可能会导致输出到 out 的内容出现缺失、覆盖等情况,从而显示为乱码。
Copyright © 2005-2023 by www.ricensoftwares.com.cn All Rights Reserved.