用于 Linux 文件、硬链接和软链接的思维模型

主要观点:

  • 在 Linux 中,文件由数据块、索引节点(inode)和路径名组成,inode 存储底层数据块的元数据,路径名使人类可访问和使用文件。
  • 硬链接通过不同路径名指向同一 inode,删除硬链接只会删除指定路径名与 inode 的连接,所有硬链接都删除时文件及其内容从文件系统中删除。
  • 软链接是指向目标文件的文件,其内容为目标文件的路径名,通过不同 inode 与目标文件关联。对软链接的 I/O 操作通常作用于目标文件,移动软链接会创建新路径名并删除旧路径名,移动目标文件会使软链接成为悬空链接。

关键信息:

  • 硬链接:ln命令创建,多个路径名指向同一 inode,删除硬链接不影响其他指向同一 inode 的路径名。
  • 软链接:ln -s命令创建,通过自身 inode 和数据块指向目标文件,内容为目标文件路径名,对其 I/O 操作通常作用于目标文件。

重要细节:

  • 可以通过ls -i命令查看路径名关联的 inode 号,硬链接文件 inode 号相同,软链接文件和目标文件 inode 号不同。
  • readlink命令可查看软链接内容,stat --format="%s"命令可查看文件大小。
  • cp命令默认复制目标文件而非软链接文件,cp -P可复制软链接本身,mv命令移动软链接时操作软链接文件本身。
  • 移动或删除目标文件会使软链接成为悬空链接。

进一步阅读:Pádraig Brady 的优秀文章、man 7 inodeman 7 symlinkman 7 path_resolution

阅读 14
0 条评论