当我执行 'ls -l' 时,我可能会得到这样的信息:
-rw-r--r-- 1 root root 209 Mar 30 17:41 fname
第一个字段是-
,这意味着这是一个文件。
如果它是目录而不是文件,则第一个字段将是d
.
为什么 Unix 的创建者决定使用d
for 目录,清晰直观,但使用-
for 文件?为什么不f
用于文件?
编辑
非常有趣的回复。许多不同的想法,它们都有意义,即使有些想法看起来更像是无意中而不是出于这个原因实施的和/或被记录为这就是原因。
Ste*_*itt 12
从历史上看,Unix 中的一项重大设计决策是将所有内容都视为一个文件。¹ 这在早期版本ls
和stat
联机帮助页中有所体现;例如,在V3(1973年2月),该stat
手册页(其描述了通过使用的模式ls
)表示,
模式是一个六字符的字符串,其字符的含义如下:
s
:文件小(小于 4096 字节)
l
:文件大d
:文件是一个目录
x
:文件是可执行的
u
:在执行时设置用户ID
-
:以上都不是
等等。
在 V4(1973 年 10 月)中,该模式开始类似于我们今天所拥有的模式;手册ls
页说
-l
选项下打印的模式包含 10 个字符,解释如下:第一个字符是
d
条目是否为目录;
b
如果条目是块类型的特殊文件;
c
如果条目是字符类型的特殊文件;
-
如果条目是纯文件。接下来的 9 个字符被解释为三组,每组三位。
所以看起来 Unix 的创造者真的认为一个普通文件“只是”默认的,没有什么特别的,所以它不值得一个字符——一切都是一个文件,只有不是普通文件的文件需要额外的描述。人们可以认为这是一种-
缺乏“特殊性”的信号。
¹ 严格来说,设计决策是让所有内容都可以通过文件系统访问,而不是将所有内容都视为文件;但结果,一切都必须作为某种文件提供,这需要能够区分不同类型的文件。请参阅UNIX 分时系统的第 3 节。