主要观点:
- 在 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 inode
、man 7 symlink
、man 7 path_resolution
。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。