Man*_*anu 36 directory history
看完这个问题为什么选择'~'来代表主目录?,我脑海中的下一个明显问题是为什么“。” '..' 用于表示当前目录和父目录。
现在看起来很直观,但有什么特别的原因吗?
gol*_*cks 17
我怀疑您是否会找到与波浪号问题一样有趣的答案!
我不在那里,但是 .. 就像一个省略号 (...),这在cd ../../../there
. 此外,尤其是从波浪号的情况下查看 ye olde 终端键盘,用于此目的的字符并不多。你也不需要换档.
。这是完美的。
点前缀用于隐藏文件的事实可能是另一个原因。默认情况下,隐藏文件不会被诸如 之类的工具列出ls
,因此本质上是多余的.
和..
. 从某种意义上说是冗余的,将它们与其他文件一起考虑是没有意义的——否则它们肯定很有用。
事实证明,我可能会倒退……来自维基百科:
文件名以“.”开头的概念 应该隐藏是 Unix 早期软件错误的结果。当特殊的'.' 和 '..' 目录条目已添加到文件系统中,因此决定 ls 命令不应显示它们。但是,ls 程序被错误地编写为排除名称以“.”开头的任何文件,而不仅仅是名为“.”的文件。或者 '..'。
这在编程时确实很有用。因为系统确实包括 . 和 .. 响应readdir()
类型命令(和 shell globs),可以用同样的方式忽略它们和隐藏文件。
一个不同的看法有关使用价值是在维基百科报价参考。当然,整个故事可能是杜撰的……有点难以相信,例如,丹尼斯·里奇(Dennis Ritchie)认为只检查第一个字符就可以了。
我不同意作者vis,最好将隐藏的配置文件放在他们自己的目录中,而不是给他们一个通用前缀。前缀更加灵活,允许像.gitignore
和这样的树内指令.htaccess
。可以看到,按字典顺序排序时,这种类型的文件也会一起出现——所以这可能毕竟是故意的。
与@Panos 在 stackoverflow 上的答案大致相同:
简而言之,它是由用户手工创建的d
和dd
(d
irectory 和d
irectory 的d
irectory)演变而来的。d
变成了dot,而那些.
和..
是由mkdir
实用程序首先创建的(链接目录后的 setuid 不再被单纯的用户允许),然后由mkdir
系统调用创建。
肯·汤普森( Ken Thompson )采访摘录(1989-09-06):
MSM:但对用户来说,它看起来与目录层次结构大致相同。
汤普森:不,第一个是 DG。事实上,它甚至不是非循环的。如果您了解 UNIX 文件系统,那就是……有 I-list,它是系统上所有文件的定义。然后其中一些文件是仅包含名称和 I 编号的目录。那里没有任何东西可以将它限制为一棵树。所以它实际上不是,根本没有等级。
MSM:我明白了。
汤普森:我们没有把它限制在树上。我们正在试验各种拓扑。我们最终做的是变成具体的并强制拓扑,这些拓扑实际上是来自该系统的约定拓扑。... 每次我们创建一个目录时,按照惯例我们将它放在另一个名为directory-directory 的目录中,即 dd。它的名字是 dd 并且所有用户目录和实际上大多数其他目录,用户维护自己的目录系统,有指向 dd 的指针,而 dd 被缩短为点点, dd 用于目录目录。这是您可以访问系统中所有其他目录来维护这个意大利面条碗的地方。所以,我的意思是各种形式的凝灰岩,这是在这个 DG 实现中严格的约定,只是随机的目录和文件集被迫进入我们维护的类型学。当我们开始编写诸如文件系统检查程序之类的东西、锁定意大利面条碗目录和查找不连贯的东西时,我的意思是你会分解某些东西并且永远不会找回它,因为你知道你已经丢失了它。这些问题变得几乎无法解决,因此在下一个实现中,我们强制使用比这更强大的类型学。