【问题标题】:Are the period commands "." and ".." actually referencing a file?句号命令是“。”和“..”实际上引用了一个文件?
【发布时间】:2017-04-05 08:55:37
【问题描述】:

由于 Unix 中的一切都是文件,所以当我们调用“cd”时。我们真的进入目录了吗? ?它是对每个目录的父目录的受保护符号引用吗?

【问题讨论】:

  • ... 都是目录中的实际文件名条目(inode 号加上文件名),分别指向当前目录和父目录。它们不是符号链接;它们是硬链接。每个进程都有一个由内核记录的当前目录。这会在目录 inode 上保留一个引用计数,这样事情就不会发生太可怕的错误。
  • 请阅读 stackoverflow.com/help/how-to-ask , stackoverflow.com/help/dont-ask , stackoverflow.com/help/mcve 并在此处发布更多问题之前使用 tour。祝你好运。

标签: unix filesystems inode


【解决方案1】:

是的,Unix 中的一切都是文件。像任何目录、任何类型的文件、任何设备(扬声器、键盘等)甚至文件系统本身,都像操作系统的文件一样。在 Unix 中,每个文件都附有一个 inode,其中包含文件元数据,例如有关权限、大小、时间戳的信息以及最重要的文件数据块指针,这些指针指向包含实际文件数据的数据块。

因此每个目录(作为一个文件)也有一个 inode。目录的内容是记录的序列。每条记录至少有两个字段,分别是文件名和索引节点号。

file1name  file1_inode_number

记录的确切结构取决于文件系统的实现。所以基本上目录文件包含一个对应于每个文件的(记录)条目和其中的直接子目录。除此之外,目录文件还包含另外 2 个条目,分别是

.    :  mapped with self inode 
and 
..   :  mapped with parent's inode

所以整个目录结构看起来像

.          inode_number_of_self
..         inode_number_of_parent_dir
file1name  inode_number_of_file1
file2name  inode_number_of_file2
.
.
so on

因此,每当您 cd ./cd ../ 时,操作系统分别指的是相对于您当前目录的当前目录或父目录。

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多