例如在 中My Documents
,有以下文件夹:
.ssh
.subversion
这是我不知道的某种命名约定吗?
答案1
这种命名惯例来自类 Unix 操作系统(如 Linux 或 OS X),其中它表示“隐藏”文件或目录。它在任何地方都适用,但其基本的用途是隐藏主目录中的配置文件(例如~/.cache/
或~/.plan
- 它们通常被称为“点文件”)。
在某种程度上,dotfiles 可以称为传统 Unix 中相当于 Windows 上的“AppData”目录。(许多 Linux 程序正在被修改以遵循XDG 基础目录规范,将其配置移至~/.config/
并将其他数据移至~/.cache/
& ~/.local/share/
– 这使其与AppData\Roaming
和更相似AppData\Local
。)
你在 Windows 上拥有这些.ssh
和.subversion
目录,因为你使用了一些程序——具体来说,OpenSSH和颠覆– 已移植为使用 Windows 系统 API 而非 POSIX API,但尚未针对其他一些 Windows 约定进行调整。
有时,这种调整会被故意忽略,以便让在 Windows 系统上使用类 Unix 环境(如 Cygwin)的用户更轻松。例如,Cygwin 会安装一组标准的类 Unix 工具(如)ls
,它会忽略 Windows 的“隐藏”标志,只接受名称.dotfile
。此外,使用相同的位置(例如<home>/.ssh
)可以更轻松地在 Windows 和 Linux/BSD/OSX 计算机之间同步配置。
另外:通常这些文件位于用户的主目录例如在 Linux 或Windows 7+ 上。它们很少被放在“Documents”或“My Documents”子目录中。/home/name/.ssh
C:\Users\name\.ssh
罗布·派克在 Google+ 上撰写,这是一个偶然的特征:
很久以前,在设计 Unix 文件系统时,为了使导航更容易,出现了条目
.
和..
。我不确定,但我相信是..
在版本 2 重写期间加入的,当时文件系统变成了分层结构(早期的结构非常不同)。然而,当输入 ls 时,这些文件就会出现,所以 Ken 或 Dennis 为程序添加了一个简单的测试。当时它是汇编语言,但有问题的代码相当于这样的代码:
if (name[0] == '.') continue;
这句话比它应该的要短一点,
if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;
但嘿,这很容易。
由此产生了两件事。
首先,这开创了一个不好的先例。许多其他懒惰的程序员通过进行同样的简化引入了错误。以句点开头的实际文件经常被跳过,而这些文件应该被计算在内。
其次,更糟糕的是,“隐藏”或“点”文件的概念被创造出来。结果,更多懒惰的程序员开始将文件放入每个人的主目录中。我用来输入这些内容的机器上并没有安装那么多东西,但我的主目录中有大约一百个点文件,我甚至不知道其中大多数是什么,也不知道它们是否仍然需要。通过我的主目录进行的每个文件名评估都会因这些累积的污泥而变慢。