为什么查看文件时“ls - l”中的第一个字段不是“f”?

为什么查看文件时“ls - l”中的第一个字段不是“f”?

当我执行“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)说

模式是一个六字符的字符串,其字符含义如下:

  1. s: 文件很小(小于 4096 字节)
    l: 文件很大
  2. d: 文件是一个目录
    x: 文件是可执行的
    u: 在执行时设置用户 ID
    -: 以上都不是

ETC。

在 V4(1973 年 10 月)中,该模式开始类似于我们今天的模式;联机ls帮助页

该选项下打印的模式-l包含 10 个字符,解释如下:

第一个字符表示
d 条目是否为目录;
b 如果该条目是块类型的特殊文件;
c 如果该条目是字符类型的特殊文件;
- 如果条目是普通文件。

接下来的 9 个字符被解释为三组,每组三位。

所以看来 Unix 的创建者确实认为普通文件“只是”默认的,没有什么特别的,所以它不值得一个字符——一切都是文件,只有不是普通文件的文件才需要额外的描述。人们可以认为-这是缺乏“特殊性”的信号。

严格来说,设计决策是让所有内容都可以通过文件系统访问,而不是将所有内容视为文件;但结果是,所有内容都必须以某种文件的形式提供,这需要能够区分不同类型的文件。看第3节UNIX 分时系统

相关内容