文件
Linux中一切皆文件
如目录、设备(包括字符设备(键盘和显示器)、块设备)、进程、线程、套接字、管道都是文件
用户和计算机交互的本质是输入和输出,用户通过输入命令告诉计算机要做的操作,计算机处理后会通过打印在屏幕或者输出文件的方式告知用户.
Linux命令处理可简化为:输入文件 -> 命令 -> 输出文件
如 ls命令,其默认输出文件是屏幕.
文件描述符
文件描述符fd(file descriptor),是指向某个文件的符号.
Linux命令处理形式可描述为:[fd]输入文件->命令->[fd]输出文件
fd | 缩写 | 描述 | 默认指向文件 |
---|---|---|---|
fd0 | stdin | 标准输入 |
键盘 |
fd1 | stdout | 标准输出 |
屏幕 |
fd2 | stderr | 标准错误输出 |
屏幕 |
重定向
重定向就是改变文件描述符(fd)所指向的文件
<
和 <<
为输入重定向.
>
和 >>
为输出重定向.
echo "666" > main.sh
正常情况下echo后字符会打印到屏幕上,但是现在这些字符跑到了main.sh中.
echo命令的输出本来是标准输出,即fd1(默认指向屏幕文件),后来经过重定向fd1就指向了main.sh文件.
fd1作为标准输出可以省略不写,即示例命令也可写为:
echo "666" 1> main.sh
&的作用
# fd3指向main.sh
exec 3<> main.sh
# fd1重定向到了fd3,最终fd1实际上指向了main.sh
echo "666" >&3
重定向符号左边数字表示的就是fd,可不加&
重定向符号右边若不加&
,数字会被识别为文件,而不是文件描述符