首先,来看一下文件的各个属性。
图1  ls li查看文件属性
输入命令是ls -li
第一行:inode(下面会将述inode)
第二行:文件的种类和权限
第三行:硬链接的个数
第四行:属组
第五行:所归属的组
第六行:文件的大小
第七行:文件最后修改的时间
第八行:文件或者目录的名称
其次,让我们来看一下inode。
inode 译成中文就是索引节点。每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘 ... ... )被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的打找到相应的文件。
inode相同的文件是硬链接文件。
创建硬链接的文件的过程和视图如下:
图2  创建硬链接
如图2所示,给b.cpp创建了一个硬链接,他们的inode是相同的,都是5722389。为什么会出现这种情况呢?
原因很简单,inode值相同的文件,他们的关系是互为硬链接的关系。当我们修改其中一个文件的内容时,互为硬链接的文件的内容也会跟着变化。如果我们删除互为硬链接关系的某个文件时,其它的文件并不受影响。假如,我们修改了alex.cpp这个文件,则b.cpp也会跟着变化。简单来说就是,硬链接是一个指针,它指向相同的inode,然后再去找文件块。
创建软连接的视图和过程如下图:
图3  创建软链接
其中,decimal.cpp就是alex.cpp的软链接文件。软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
软链接的话,是 不同inode,可以为目录创建,可以在不同文件系统创建。
注意:当我们修改链接文件的内容时,就意味着我们在修改源文件的内容。当然源文件的属性也会发生改变,但软链接文件的属性并不会发生变化。当我们把源文件删除后,软链接文件只存在一个文件名,因为失去了源文件,所以软链接所指文件也就不存在了。