文件描述符
有句经典的话是:Linux下一切皆文件。它最简单的总结了Linux的特点,Linux下文件被分为普通文件、目录文件、链接文件和设备文件。在Linux下显示器、键盘等都会被看成是一个文件、而所有的文件就是通过文件描述符来管理的。
举个栗子:一个Linux操作系统就相当于一本很厚很厚的书,书的每一页都是由文件构成的(包括我们的显示器键盘等,就有专门的页码,在那一页上查看就相当于显示器或者键盘),现在我们要显示一个被打开的文件A到显示器文件上,也就是把A页码上的内容输出到显示器文件上,那我们要先从一本书里找到A文件那一页,假如这本书很厚很厚,那么这个工作这对操作系统来说无疑是一种负担,所以它就想出了一个好办法,就是为A文件的那一页贴上一个书签用于指代被打开的文件A,有了这个索引,以后的所有I/O操作就可以直接通过书签翻到A的那一页,不用再一次一次的从开始翻了,大大提高了操作系统管理已打开文件的效率,这个索引书签就称作文件描述符。
总结一下:文件描述符就是操作系统为了高效管理已打开文件所创建的一个索引。
POSIX标准规定:
3个默认文件描述符:
每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号码,在网络通信中应注意防止串话,也就是说在默认情况下新打开一个文件的文件描述符应该是3
exec和echo
exec和echo都是bash(命令解释器)的两个内置命令
exec
exec有两种用法:
- exec 命令:不启动新的终端,用输入的命令代替当前的shell程序,命令结束后shell将直接退出。例如:exec ls,执行ls命令,结束后退出终端。(想要在当前终端执行应使用source或者“.”命令)
- exec 文件重定向:仅执行命令,不会替换shell程序。例如:exec 3>&0,将文件描述符3重定向到标准输入。
echo
用于字符串的输出:
echo "字符串":这里可以省略双引号,单引号为不对