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