文件

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,可不加&

重定向符号右边若不加&,数字会被识别为文件,而不是文件描述符