linux 文件描述符
linux系统启动后会默认生成3个文件描述符, 标准输入0, 正确输出1和错误输出2,另外3-9是保留的标识符,可以将这些指定成标准输入,输出或者错误.
➜ ~ ls /dev/std* -alt
lrwxrwxrwx 1 root root 15 5月 5 09:14 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 5月 5 09:14 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 5月 5 09:14 /dev/stdout -> /proc/self/fd/1
文件描述符可以理解成linux跟踪打开的文件,而数字类似于C 语言的句柄.
重定向
bash使用<和>实现输入输出的重定向. 其中: <相当于0<, > 相当于1>.
shell 在遇到">"操作符首先判断右边的文件是否存在,如果存在先删除再创建新文件. ">>"判断右边文件,若不存在则先创建, 以追加的方式打开文件并分配一个文件描述符(默认为1和2),然后与左边的标准输出和错误输出绑定.
使用文件描述符的重定向
- cmd >&n 输出重定向到文件描述符n
- cmd m>&n 输出到m文件的信息重定向到文件描述符n
- cmd >&- 关闭标准输出
- cmd <&- 关闭标准输入