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

Mon*_*eck 7 ls terminal

当我执行 'ls -l' 时,我可能会得到这样的信息:

-rw-r--r-- 1 root root 209 Mar 30 17:41 fname

第一个字段是-,这意味着这是一个文件。

如果它是目录而不是文件,则第一个字段将是d.

为什么 Unix 的创建者决定使用dfor 目录,清晰直观,但使用-for 文件?为什么不f用于文件?

编辑
非常有趣的回复。许多不同的想法,它们都有意义,即使有些想法看起来更像是无意中而不是出于这个原因实施的和/或被记录为这就是原因。

Ste*_*itt 12

从历史上看,Unix 中的一项重大设计决策是将所有内容都视为一个文件。¹ 这在早期版本lsstat联机帮助页中有所体现;例如,在V3(1973年2月),stat手册页(其描述了通过使用的模式ls)表示,

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

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

等等。

在 V4(1973 年 10 月)中,该模式开始类似于我们今天所拥有的模式;手册ls

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

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

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

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

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

  • @Sergiy 有点吹毛求疵,你的其余评论很好,但不,MIME 类型不是标题......([如果不是来自文件后缀,如何知道文件类型?](https://unix. stackexchange.com/q/207276/86440)) (4认同)
  • @Sergiy,不,没有标题。有尝试猜测文件类型的试探法,但没有保证的标头或幻数等。通过滥用这些猜测可以获得各种[乐趣和游戏](https://speakerdeck.com/ange)。 (2认同)
  • @Sergiy 我知道你想表达什么,但根据我的经验,它太简单了,最终会让用户感到困惑。`file` 和共享 MIME 数据库应用一系列检测测试,其中一些会查看文件的前几个字节。但是声称文件的前几个字节表示其类型会给读者带来错误的印象。没有确定文件类型的保证方法(与 Mac OS Classic 或 PalmOS 不同,其中每个文件都有一个类型和创建者代码)。 (2认同)