例如,在中My Documents
,有以下文件夹:
.ssh
.subversion
我不知道这种命名约定吗?
例如,在中My Documents
,有以下文件夹:
.ssh
.subversion
我不知道这种命名约定吗?
Answers:
此命名约定来自类似Unix的操作系统(例如Linux或OS X),在这里它表示“隐藏”的文件或目录。它可以在任何地方使用,但其主要用途是将配置文件隐藏在您的主目录中(例如,~/.cache/
或~/.plan
–通常被称为“ dotfiles”)。
点文件在某种程度上可以称为传统Unix,相当于Windows上的“ AppData”目录。(许多Linux程序都进行了更改,以遵循XDG基本目录规范,将其配置~/.config/
移至~/.cache/
&并将其他数据移至&~/.local/share/
–使其与AppData\Roaming
and 更加相似AppData\Local
。)
您在Windows上拥有这些.ssh
和.subversion
目录,因为您已经使用了某些程序(特别是OpenSSH和Subversion),这些程序已移植为使用Windows系统API而不是POSIX,但尚未针对其他Windows约定进行调整。
有时会故意跳过这种修改,以使在Windows系统上使用类似Unix的环境(例如Cygwin)的人们的生活更加轻松。例如,Cygwin安装了标准的类似Unix的工具集,例如ls
,它会忽略Windows的“ hidden”标志,而只会使用.dotfile
名称。同样,使用相同的位置(例如<home>/.ssh
)可以使在Windows和Linux / BSD / OSX计算机之间的配置同步更加容易。
另外:通常,这些文件位于用户的主目录中,例如,在Linux或Windows 7+上。很少将它们放在“文档”或“我的文档”子目录中。/home/name/.ssh
C:\Users\name\.ssh
正如Rob Pike 在Google+上所写的那样,这是一个偶然的功能:
很久以前,随着Unix文件系统设计的制定,条目
.
和..
出现使导航变得更加容易。我不确定,但是我相信..
在版本2重写期间,文件系统变成了分层结构(早期它的结构非常不同)。但是,当键入ls时,这些文件就会出现,因此Ken或Dennis都对该程序添加了一个简单的测试。当时是在汇编程序中,但是有问题的代码等效于以下内容:
if (name[0] == '.') continue;
该语句比应有的语句短一些,即
if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;
但是,这很容易。
结果有两件事。
首先,建立了一个错误的先例。许多其他懒惰的程序员也通过同样的简化来引入错误。以句点开头的实际文件在应计数时通常会被跳过。
其次,更糟糕的是,创建了“隐藏”或“点”文件的想法。结果,更多懒惰的程序员开始将文件拖放到每个人的主目录中。我用来键入此内容的机器上没有安装太多东西,但是我的主目录中有大约一百个点文件,我什至不知道其中大多数是什么还是是否仍需要它们。累积的污泥会减慢通过我的主目录进行的每个文件名评估的速度。
ls
可以-a
选择列出所有文件。
LOGIN.COM
或者DECW$MAIL.DAT
在你的home目录。(我不确定当时还流行哪些其他系统。)Unix是最近才创建的。它根本没有任何约定。