Administrator
发布于 2025-09-11 / 15 阅读
0
0

软链接和硬链接

硬链接(Hard Link):

概念

定义:

硬链接是指向文件系统中某个索引节点(inode)的直接引用。每个文件在文件系统中都有一个对应的 inode,它包含了文件的元数据(如权限、所有者信息、时间戳等)和指向实际数据块的指针。

特点:

1,共享内容:多个硬链接共享同一个 inode 和文件数据。因此,修改任何一个硬链接的内容都会反映在其他所有硬链接上。

2,删除不影响:删除任意一个硬链接不会影响文件数据,除非所有硬链接都被删除。只有当最后一个硬链接被删除时,文件数据才会真正从磁盘上移除。

3,限制在同一文件系统内:硬链接只能在同一文件系统内部创建,因为不同文件系统的 inode 表是独立的。

不能对目录创建硬链接:除了少数特殊情况外,Linux 不允许为目录创建硬链接,主要是为了避免产生循环引用和其他复杂性问题。

创建方法

ln source_file hard_link_name

通俗讲解:

硬链接可以理解为,在linux中所有的文件名是代表着同一文件系统(同一磁盘)中的某个索引节点(inode),硬链接是在同一文件系统中用另一个文件名备份了这个索引节点(inode),不管你删除原始文件还是硬链接指向的文件,这个数据都可以访问,只有两个文件同时删除,才会彻底删除这个文件,不管你更改哪个文件的内容,另一个都会同步,但是需要注意,硬链接只能是同一文件系统中的文件

软连接(符号链接, Symbolic Link)

概念:

定义:

软链接是一个特殊的文件,它包含了一个路径,指向另一个文件或目录。换句话说,软链接就像是一个快捷方式或指针,保存了目标文件或目录的路径。

特点:

1,独立存在:软链接只是保存了目标文件或目录的路径,如果目标文件被移动或删除,软链接会变成无效链接(即“悬空链接”),因为它只是存储了一个路径。

2,跨文件系统工作:软链接可以跨越不同的文件系统甚至不同物理设备上的文件或目录。

灵活性高:可以为文件和目录创建软链接。

3,依赖于目标文件的具体路径:如果目标文件的路径改变,软链接需要更新以指向新的路径。

创建方法:

ln -s source_file_or_directory symbolic_link_name

通俗讲解

软链接可以理解为,软链接只是在其他任何地方做了一个索引文件指向了原文件,这个索引文件并不包含文件的数据,如果你删除了源文件,则索引文件报错,如果删除了索引文件,源文件不受影响,如果修改了原文件的内容,索引文件不会有影响,因为所以我呢见只是索引了原文件的路径,且索引文件不支持修改,但是软链接可以跨文件系统甚至是跨主机

软硬链接的区分

对于单个目录:

ls -l /path/to/file_or_directory

普通文件:

-rw-r--r-- 1 user group 4096 Jan 1 12:34 file.txt

软链接(符号链接):

lrwxrwxrwx 1 user group 10 Jan 1 12:34 symlink -> /path/to/target

注意:第一列以 l 开头,表示这是一个符号链接(soft link),并且在最后一列会显示目标路径。

硬链接:

-rw-r--r-- 2 user group 4096 Jan 1 12:34 hardlink

注意:第一列以 - 开头,表示这是一个普通文件或硬链接,但 2 表示有两个链接指向同一个 inode(即原始文件和硬链接)。

查找特定目录下的所有链接

1,ls -l

ls -l /path/to/directory | grep ^l # 只显示软链接

ls -l /path/to/directory | grep ^- # 显示普通文件,包括硬链接

2,使用 find 命令:

查找软链接:

find /path/to/search -type l

查找硬链接

find /path/to/search -type f -links +1

3.,使用 stat 或 ls -i 命令

stat:

stat /path/to/file

#输出中的 Inode 字段显示了文件的 inode 号。如果两个文件有相同的 inode 号,则它们是硬链接。

ls -i

ls -i /path/to/directory

#这将列出每个文件的 inode 号。比较不同文件的 inode 号,如果相同则它们是硬链接


评论