stackinator Asked: 2018-09-06 05:32:39 +0800 CST2018-09-06 05:32:39 +0800 CST 2018-09-06 05:32:39 +0800 CST 终端命令中文件名开头的句点 (.) 是什么意思? 772 in ,在inchmod -R 421 .gimp之前的句号是什么意思?这类似于通配符吗?ggimp* command-line hidden-files 5 个回答 Voted Best Answer Videonauth 2018-09-06T05:36:27+08:002018-09-06T05:36:27+08:00 这种情况下的点是文件名的一部分,在 Linux/Unix 上下文中意味着文件或目录是隐藏的,你无法在文件资源管理器中看到它(Nautilus,这是香草 Ubuntu 上的默认设置),除非你按CTRL+ H。 而且,如果您只在终端中使用,除非您使用or标志(即or或or )ls,否则您也不会看到它。-a-Als -als -Als --allls --almost-all 但是,点 ( .) 在不同的上下文中具有不同的含义: 例如,在路径 ( ./file) 中,它描述了您所在的当前目录,而在父目录中../file引用。file 甚至还有一个命令.可以获取(运行) bash 脚本文件。因此. ./file(注意间距)将file获取当前目录中命名的脚本。 在 REGEX 上下文中,点表示“任何字符”。 guiverc 2018-09-06T05:37:08+08:002018-09-06T05:37:08+08:00 .gimp在你的例子中是一个文件名,“。” 是第一个字符。 它的意义是正常的ls(ls=list files)不会显示带有“.”的文件。作为第一个字符,它仅使用 ls -a 列出(或列出文件 --all) Sergiy Kolodyazhnyy 2018-09-10T19:09:10+08:002018-09-10T19:09:10+08:00 就 Linux 本身而言,文件或目录名称中的前导点没有任何特殊意义。但是,某些实用程序(例如lsNautilus 文件管理器)将此类文件名视为“隐藏”,即它们会在输出中忽略它们,并且仅在您提供特定选项时才会显示它们。 实际上,这源于技术上可以被视为错误的东西。Rob Pike是最初在 UNIX 团队工作的人之一,他讲述了(来源): 很久以前,随着 Unix 文件系统的设计正在制定,条目 . 和 .. 出现,使导航更容易。我不确定,但我相信 .. 在版本 2 重写期间进入,当时文件系统变得分层(早期它具有非常不同的结构)。然而,当键入 ls 时,这些文件就会出现,因此 Ken 或 Dennis 都在程序中添加了一个简单的测试。那时它在汇编程序中,但有问题的代码相当于这样的东西: if (name[0] == '.') continue; 这个声明比它应该的要短一点,即 if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue; 但是,嘿,这很容易。 结果有两件事。 首先,开创了一个不好的先例。许多其他懒惰的程序员通过同样的简化引入了错误。以句点开头的实际文件在应该计算时通常会被跳过。 其次,更糟糕的是,创建了“隐藏”或“点”文件的想法。结果,更多懒惰的程序员开始将文件放到每个人的主目录中。我没有在我用来打字的机器上安装那么多东西,但是我的主目录有大约一百个点文件,我什至不知道它们中的大多数是什么,或者它们是否仍然需要. 通过我的主目录进行的每个文件名评估都会被这种积累的污泥减慢。 我很确定隐藏文件的概念是一个意想不到的结果。这当然是一个错误。 如今,尽管它们的内容根本没有隐藏,但这种称它们为“隐藏”的习惯已经成为一种惯例。真正的隐藏或匿名文件/匿名 inode将通过打开文件并保持其文件描述符打开,但将其与目录取消链接来实现,这使得数据本身只能由持有该文件的程序访问,并且它的子进程(最好在取消链接文件后分叉),因为子进程继承文件描述符。事实上,这就是 bash 实现 here-docs 的方式。 完全不同的故事是当文件名本身是一个点.或..时,它们背后实际上有一些历史,我建议你阅读为什么 ls 命令中的当前目录被识别为链接到它自己? Lightness Races in Orbit 2018-09-06T09:35:38+08:002018-09-06T09:35:38+08:00 没有什么。它是文件名的一部分。 您似乎有一个名为.gimp. 时期。(哈哈) 关于它的任何其他讨论都属于关于人们为什么选择某些文件名的问题。 allo 2018-09-07T07:18:59+08:002018-09-07T07:18:59+08:00 文件名开头的点将文件隐藏在常用文件管理器和常用 shell 程序中。 原因是历史性的,当ls隐藏特殊目录.并..隐藏以句点开头的所有内容时。然后人们使用以句点开头的文件名来隐藏文件,因此它们仅以 列出ls -a,例如使配置文件不可见,这些文件通常在 ls 输出中不需要。 所以点 inchmod -R 421 .gimp不是命令的修饰符,而是实际目录名的一部分。
这种情况下的点是文件名的一部分,在 Linux/Unix 上下文中意味着文件或目录是隐藏的,你无法在文件资源管理器中看到它(Nautilus,这是香草 Ubuntu 上的默认设置),除非你按CTRL+ H。
而且,如果您只在终端中使用,除非您使用or标志(即or或or )
ls
,否则您也不会看到它。-a
-A
ls -a
ls -A
ls --all
ls --almost-all
但是,点 (
.
) 在不同的上下文中具有不同的含义:./file
) 中,它描述了您所在的当前目录,而在父目录中../file
引用。file
.
可以获取(运行) bash 脚本文件。因此. ./file
(注意间距)将file
获取当前目录中命名的脚本。.gimp
在你的例子中是一个文件名,“。” 是第一个字符。它的意义是正常的
ls
(ls=list files)不会显示带有“.”的文件。作为第一个字符,它仅使用 ls -a 列出(或列出文件 --all)就 Linux 本身而言,文件或目录名称中的前导点没有任何特殊意义。但是,某些实用程序(例如
ls
Nautilus 文件管理器)将此类文件名视为“隐藏”,即它们会在输出中忽略它们,并且仅在您提供特定选项时才会显示它们。实际上,这源于技术上可以被视为错误的东西。Rob Pike是最初在 UNIX 团队工作的人之一,他讲述了(来源):
如今,尽管它们的内容根本没有隐藏,但这种称它们为“隐藏”的习惯已经成为一种惯例。真正的隐藏或匿名文件/匿名 inode将通过打开文件并保持其文件描述符打开,但将其与目录取消链接来实现,这使得数据本身只能由持有该文件的程序访问,并且它的子进程(最好在取消链接文件后分叉),因为子进程继承文件描述符。事实上,这就是 bash 实现 here-docs 的方式。
完全不同的故事是当文件名本身是一个点
.
或..
时,它们背后实际上有一些历史,我建议你阅读为什么 ls 命令中的当前目录被识别为链接到它自己?没有什么。它是文件名的一部分。
您似乎有一个名为
.gimp
.时期。(哈哈)
关于它的任何其他讨论都属于关于人们为什么选择某些文件名的问题。
文件名开头的点将文件隐藏在常用文件管理器和常用 shell 程序中。
原因是历史性的,当
ls
隐藏特殊目录.
并..
隐藏以句点开头的所有内容时。然后人们使用以句点开头的文件名来隐藏文件,因此它们仅以 列出ls -a
,例如使配置文件不可见,这些文件通常在 ls 输出中不需要。所以点 in
chmod -R 421 .gimp
不是命令的修饰符,而是实际目录名的一部分。