文件描述符
linux文件描述符:可以理解为Linux跟踪打开文件时,分配的一个数字,这个数字有点类似于C语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作。
当linux启动的时候会默认打开三个文件描述符,分别是:
- 标准输入:
standard input 0
(默认设备键盘) - 标准输出:
standard output 1
(默认设备显示器) - 错误输出:
error output 2
(默认设备显示器)
stdin 0 –> /dev/tty0
stdout 1 –> /dev/tty0
stderr 2 –> /dev/tty0
注意:
- 以后再打开文件,描述符可以依次增加
- 每一条shell命令,都会继承其父进程的文件描述符,因此所有的shell命令,都会默认有三个文件描述符。
文件所有输入输出都是由该进程所有打开的文件描述符控制的。(Linux一切皆文件,就连键盘显示器设备都是文件,因此他们的输入输出也是由文件描述符控制)
一条命令执行以前,先会按照默认的情况进行绑定(也就是上面所说的 0,1,2),如果我们有时候需要让输出不显示在显示器上,而是输出到文件或者其他设备,那我们就需要重定向。
重定向
重定向主要分为两种(其他复杂的情况都是由这两种情况衍生出来的)
- 输入重定向
< <<
- 输出重定向
> >>
重点:
- bash在执行一条指令的时候,首先会检查命令中存不存在重定向的符号,如果存在,那么首先将文件描述符重定向(之前说过,输入输出操作都是依赖文件描述符实现的,重定向输入输出本质上就是重定向文件描述符),然后再把重定向去掉,执行指令
- 如果指令中存在多个重定向,那么不要随便改变顺序,因为重定向是 从左向右 解析的,如果改变顺序,可能会带来完全不同的结果(这一点我们后面会展示)
<
是对标准输入 0 重定向,>
是对标准输出 1 重定向- 再强调一下,重定向就是针对文件描述符的操作
1. 输入重定向
格式: [n]< word
(注意 [n] 与 < 之间是没有空格的)
说明:将文件描述符 n 重定向到 word 指代的文件(以只读方式打开),如果 n 省略就是0(标准输入)