在 Linux 下面的链接文件有两种,一种是符号链接(Symbolic Link),类似 Windows 的捷径功能的文件,可以让你快速的 链接到目标文件(或目录); 另一种是实体链接(hard link),通过文件系统的 inode 链接来产生新文件名,而不是产生新文件!
文件结构
一个文件包括他的实际内容(数据)和属性,文件数据会放在block块中,属性会放在inode中,inode中会记录真正内容的指向,即该文件的block块。
hard link,实体链接
什么是hard link
每个文件都有一个inode,inode中会记录该文件具体内容所处的block标号,每个文件属于它所在目录的具体内容,
目录的block中会指出该目录中的文件的inode编号。
实体链接就是将多个文件名对应到同一inode,所以hard link 只是在某个目录下新增一个文件名文件名的inode编号于源文件inode编号相同。
在文件属性中第二栏的代表有多少文件名链接连接到此inode,在创建实体链接后,会改变此处内容。
hard link的限制:
(1)不能跨文件系统,因为每个文件系统有自己的inode和block
(2)不能link目录
符号链接
什么是符号链接
符号链接会创建一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的文件名!当来源文件被删除之后,symbolic link 的文件会“开不了”, 会 一直说“无法打开某文件!”。实际上是因为找不到原始“文件名”。符号链接产生的链接文件和源文件的inode编号不同且有各自对应的data block,而且链接文件data block中的内容为源文件的文件名。
通过链接文件打开源文件的过程:
首先通过链接文件的inode找到链接文件的block,并读取其中的文件名,根据文件名找到源文件所对应的目录,在该目录的block中找到源文件的inode编号,接着找到源文件的block,并读取内容。
制作链接文件使用ln。
目录的link数量
创建实体链接会改变文件属性中第二栏的内容,但是不能为目录创建实体链接,那么目录第二栏为多少呢,又会怎么变化呢?
首先创建一个新目录时,会有三个东西出现,例如创建一个新目录名称为 /tmp/testing 时,基本上会有三个东西,那就是:
(1)/tmp/testing
(2)/tmp/testing/.
(3)/tmp/testing/..
第二个代表该目录,第三个代表上级目录。
所以创建一个新目录后,新目录的link数为2,上级目录的link数会增加1。