AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 889679
Accepted
BEWARB
BEWARB
Asked: 2017-03-05 20:05:36 +0800 CST2017-03-05 20:05:36 +0800 CST 2017-03-05 20:05:36 +0800 CST

为什么是 。当我们执行 ls -a 时,和 .. 会作为隐藏文件输出?[复制]

  • 772
这个问题在这里已经有了答案:
做什么 ”。” 和“..”是指在文件夹中? (4 个回答)
5年前关闭。

是不是默认情况下会将它们添加到为便于在外部移动而创建的每个目录中?

command-line
  • 3 3 个回答
  • 1178 Views

3 个回答

  • Voted
  1. Best Answer
    Sergiy Kolodyazhnyy
    2017-03-05T20:10:39+08:002017-03-05T20:10:39+08:00

    前导点文件名

    简单的答案是因为这些文件名以点开头。任何以点开头的文件名都被认为是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 5i 可以上 5 个目录,其中每个目录..指的是父级的父级的父级。

    如果.有必要,脚本可以使用它来确定它们的当前位置。

    在其他语言中,实用程序

    贝壳是显而易见的。它们的行为与 of 相同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
  2. WinEunuuchs2Unix
    2017-03-05T20:18:43+08:002017-03-05T20:18:43+08:00

    在 MS-DOS 和 Windows 中也有.和..。很简单.的代表当前目录和..代表父目录。

    MS-DOS 诞生于 CPM 操作系统,当时比尔盖茨以 80,000 美元的价格购买了权利,并以 PC-DOS 的身份授权给 IBM,PC-DOS 变成了 MS-DOS,然后变成了 Windows,预计最终会给他带来万亿美元的收入。

    Linux 还使用基于 IBM PC-AT 硬件的第一个文件系统版本.。..

    正如 Serg 在 Linux 中回答的那样,.并且..不会出现在ls命令中,因为任何以开头.的文件都是隐藏文件。不过,您可以使用ll别名来查看这些文件。

    在 MS-DOS 和 Linux 中,您都可以使用cd ..命令切换到父目录。在 Linux 中,当您想在当前目录(而不是路径)中调用命令时,您需要在命令前加上./. 但是在 MS-DOS 中,它会在搜索 PATH 之前自动在当前目录中查找命令。

    Apple Mac 和 Google Android 是基于 Linux 操作系统的,但我不知道他们的文件系统是否也使用.和...

    • 2
  3. L. D. James
    2017-03-05T20:17:43+08:002017-03-05T20:17:43+08:00

    以 a 开头的文件.是隐藏文件。隐藏部分便于为用户提供他可能正在查看的内容的更清晰的输出。

    在正常情况下,用户正在寻找他将使用的文件的输出,例如文字处理器文件、图片和系统上的其他数据。

    该-a选项是显示所有文件的参数。这包括隐藏文件。

    隐藏文件通常是特殊文件,如配置文件和辅助文件。您可以通过在输出中包含所有文件或隐藏文件来查看它们。GUI 文件浏览器有一个显示隐藏文件选项。

    在这种情况下,文件是.和..。它们是您的目录的规范。单点是您的当前目录。双点是父目录。您可以通过键入以下内容备份到您所在的父目录:

    $  cd ..
    

    就像其他以点开头的文件一样,它们是隐藏的。如果一个人想要查看那些目录规范,他们将指定全部显示以显示隐藏文件。

    • 1

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve