Linux 软硬链接:ln、inode 与区别一次讲清
什么是链接
在 Linux 里,一个文件可以有多个名字。链接就是给同一个文件起别名,有两种:硬链接和软链接。理解它们的区别,关键在 inode。
inode 是什么
每个文件在磁盘上都对应一个 inode,里面存着文件元数据:权限、属主、时间戳、数据块位置等。文件名只是目录里的一条记录,指向某个 inode。删除文件时,删的是这条记录;只有当指向该 inode 的记录数为 0,数据才真正释放。
硬链接:同一个 inode,多个名字
用 ln 源文件 硬链接名 创建硬链接。两个名字指向同一个 inode,改其中一个,另一个立刻同步,因为它们根本就是同一个文件。删除其中一个名字,数据还在,inode 引用计数减一,直到计数归零才释放空间。
硬链接有两个限制:不能跨文件系统(inode 只在同一文件系统内有效),也不能链接目录(防止目录环)。用 ls -i 可以看到硬链接的两个名字 inode 号完全相同。
软链接:一条指向路径的捷径
用 ln -s 目标 软链接名 创建软链接。它是一个独立的新文件,内容是目标的路径字符串,有自己的 inode。访问软链接时,系统按路径找到目标文件。目标被删,软链接就悬空,变成“断链”,用 ls -l 能看到它标红。
软链接可以跨文件系统,也可以指向目录。常见的 /bin/sh 指向 dash、/usr/bin/python3 指向具体版本,都是软链接。
怎么选
需要“两个名字、一个文件、删一个另一个还在”时用硬链接,比如给重要文件做个同目录备份名。需要跨分区、指向目录、或者做版本切换的快捷方式时用软链接。分不清就看需求:怕目标被删断链就用硬链接,需要灵活就用软链接。
常用命令
创建硬链接:ln file.txt file-hard.txt;创建软链接:ln -s /usr/local/bin/app ~/bin/app;查看链接关系:ls -li 看 inode 号,readlink 链接名 看软链接指向;删除链接只删名字本身:rm 链接名,不会删目标数据(硬链接删的是一个名字,软链接删的是捷径文件)。
- 点赞
- 收藏
- 关注作者
评论(0)