它们是否被默认添加到每个为方便外部移动而创建的目录中?
答案1
前导点文件名
简单的答案是因为这些文件名以点开头。任何以点开头的文件名都被视为Linux 上的隐藏文件(即使在这种情况下文件名本身只有一个字符长)并且基本上是可以追溯到第一个 Unix OS 的“传统”。您可以使用 查看它们ls -a
。
如果你想知道为什么在代码级别上它在 coreutils 包中ls.c
的文件中被设置为默认src/ls.c
:
638 static enum
639 {
640 /* Ignore files whose names start with '.', and files specified by
641 --hide and --ignore. */
642 IGNORE_DEFAULT,
643
644 /* Ignore '.', '..', and files specified by --ignore. */
645 IGNORE_DOT_AND_DOTDOT,
646
647 /* Ignore only files specified by --ignore. */
648 IGNORE_MINIMAL
649 } ignore_mode;
简单的应用
你问:
它们是否被默认添加到每个为方便外部移动而创建的目录中?
是的,因为.
指的是目录本身,..
指的是父目录。例外情况是/
作为文件系统树的根目录。在这种情况下,..
指的是/
自身,因为没有比它更高的目录。不用记住每个路径,方便之处在于您可以使用 向上一级cd ..
。很简单,对吧?现在想象一下你有一个很长的路径。输入父目录的完整路径很不方便,而 则..
简单得多。它还允许简单的脚本,例如我通过 保留的这个函数.bashrc
:
goup() {
num=$1
while [ $num -ne 0 ]
do
cd ..
num=$(expr $num - 1 )
done
}
通过指定goup 5
i,可以向上转到 5 个目录,其中每个目录..
都引用父目录的父目录的父目录。
如果.
有必要的话,它可以被脚本用来判断它们当前的位置。
在其他语言中,实用程序
Shell 显然值得关注。它们的行为与 相同ls
,默认情况下,当使用 glob 时会忽略文件名
$ echo *
LICENSE README.md ayatana-indicator ayatana-indicator.desktop debian
star:
如果我们添加包含隐藏文件,我们就可以模仿ls -a
shell glob 。.*
$ echo * .*
LICENSE README.md debian indicator-bulletin indicator-bulletin.desktop .git .gitignore
相比之下,其他一些程序/实用程序和编程语言不会隐藏这些项目(或至少不会隐藏.
)。然而,它们的用途远不止列出目录,它们更适合解析文件(请阅读为什么不应该解析 ls(1) 的输出)。
$ find -maxdepth 1
.
./.git
./README.md
./LICENSE
./debian
./indicator-bulletin.desktop
./.gitignore
./indicator-bulletin
$ perl -le 'opendir(dh,$ARGV[0]);while( $file = readdir(dh) ){ print $file; }; closedir(dh);' "."
.git
..
README.md
LICENSE
debian
.
indicator-bulletin.desktop
.gitignore
indicator-bulletin
Pythonos.listdir()
有一个显著的例外 - 它不显示.
也不显示..
。glob
模块可用于显示与 shell 中相同的行为。
$ python -c 'import os;print(os.listdir("."))'
['.git', 'README.md', 'LICENSE', 'debian', 'indicator-bulletin.desktop', '.gitignore', 'indicator-bulletin']
$ python -c 'import glob;print(glob.glob(".*"),glob.glob("*"))'
(['.git', '.gitignore'], ['README.md', 'LICENSE', 'debian', 'indicator-bulletin.desktop', 'indicator-bulletin'])
答案2
在 MS-DOS 和 Windows 中也有.
和..
。很简单,.
代表当前目录,..
代表父目录。
MS-DOS 诞生于 CPM 操作系统,当时比尔盖茨以 80,000 美元的价格购买了版权并将其授权给 IBM 作为 PC-DOS,后来演变为 MS-DOS,再演变为 Windows,据预测,Windows 最终将为比尔盖茨带来一万亿美元的收入。
Linux 也使用.
并且..
作为第一个文件系统版本基于 IBM PC-AT 硬件。
正如 Serg 在 Linux 中回答的那样.
,..
不会出现在ls
命令中,因为任何以 开头的文件.
都是隐藏文件。ll
不过,您可以使用别名来查看这些文件。
在 MS-DOS 和 Linux 中,您都可以使用cd ..
命令更改到父目录。在 Linux 中,当您想要调用当前目录(而不是路径)中的命令时,您需要在命令前加上前缀./
。但是在 MS-DOS 中,它会在搜索 PATH 之前自动在当前目录中查找命令。
Apple Mac 和 Google Android 基于 Linux 操作系统,但我不知道他们的文件系统是否也使用.
和..
。
答案3
以 开头的文件.
是隐藏文件。隐藏部分是为了方便用户提供他们可能想要看到的更清晰的输出。
在正常情况下,用户正在寻找他将要使用的文件的输出,例如文字处理器文件、图片和系统上的其他数据。
该-a
选项是显示的参数全部文件。其中包括隐藏文件。
隐藏文件通常是一些特殊文件,例如配置和辅助文件。您可以通过包含来查看它们全部文件,或隐输出中的文件。GUI 文件浏览器具有显示隐藏文件选项。
在这种情况下,文件是.
和..
。它们是您的目录的规范。单点是您的当前目录。双点是父目录。您可以通过键入以下内容从您所在的位置备份到父目录:
$ cd ..
就像其他以点开头的文件一样,它们是隐藏的。一个人将指定显示所有如果他们想查看这些目录规范,则显示隐藏文件。