本部分参考的内容来源于: [1]理解 Linux 的硬链接与软链接
[2]Windows中的硬链接和软链接(hard link 和 Symbolic link)
[2]软链接ln -s以及如何解决其产生“Too many levels of symbolic links ”的错误? 修改时间: 20190921,重新整理并增加了理解; 20191021,创建软连接出现Too many levels of symbolic links错误; 20200919,软连接要使用绝对路径以防止错误,增加了快速查看的小总结; 结论:Linux用inode来区分文件,硬链接和软连接都使用ln
指令来创建,不过软连接要加一个选项-s
。对链接文件的修改等效于对被链接文件的修改,硬链接和软连接都只占用一份硬盘空间。硬链接通过inode找到数据,软连接则通过路径找到数据,所以删除/移动被链接对象,软连接失效,而硬链接没事儿。对于频繁更改路径的被链接文件,软连接没法管理权限。
UNIX/Linux 系统中除进程之外的一切皆是文件。
Linux文件数据分为两部分:用户数据 (user data) 与元数据 (metadata),分别存放在不同的区域【1】。在 Linux 中,元数据中的 inode 号才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序是通过 inode 号寻找正确的文件数据块。
设备文件也是一个文件,如 /dev/input/event5 可使用 read() 以字符流的方式被读取。
二、创建一个链接 2.1 硬链接的创建硬链接(Hard link)是一个inode号相同的文件。创建可以使用link
或者ln
命令:
link oldfile newfile
ln oldfile newfile
oldfile和newfile可以是绝对路径或者相对路径,创建一个硬链接会使得文件属性的link_count++; 硬链接数据块的释放在计数减为0时才释放,仅仅删除链接或者文件本身并不会丢失数据。
2.2 软链接的创建软链接(Soft link,Symbolic link)是inode号不同的文件,其用户数据是一个指向。创建仅可使用ln
命令:
ln -s oldfile newfile # 没有link -s oldfile newfile
oldfile和newfile可以是绝对路径或者相对路径。link_count保持不变。软连接对链接对象敏感,删除原对象或者重命名、或者路径更改都会导致链接失败,即空悬链接。oldfile
最好使用绝对路径而不是相对路径,因为某些情况处出现Too many levels of symbolic links
。
优点:
- 同一个文件的硬链接的共享inode对系统资源占用少。
- 原文件改名、删除等不会丢失数据 缺点:
- 宿主文件必须存在
- 文件系统必须一致
- 文件不能是目录[3]
- 链接及宿主本身权限一样
优点:解决了硬链接的缺点 缺点:
- 占用inode资源
- 原文件改名、路径更改和删除等会成为死链接
链接需权限控制、文件是目录、文件系统不同采用软连接;路径经常更改且链接差异化属性[4]配置使用硬链接。
注释:【1】用户数据存放在文件数据块 (data block);文件信息[(也叫元数据)则存放在元数据块(meta block)。比如你编辑的txt内容就是用户数据,而文件大小、创建时间、所有者及唯一的inode号就是文件信息。 【2】如VMware共享文件 【3】硬链接不能对目录创建是受限于文件系统的设计 【4】比如说,这个链接我只配置与原文件不一样的权限