链接文件
Linux系统中的链接文件类似于windows中的快捷方式,windows中的快捷方式实际上就是一个存储路径的文件,使用快捷方式可以通过不同路径寻找同一个文件。在Linux系统中,链接文件分为两种:硬链接文件和软链接文件,这两种文件都能实现windows中快捷方式的功能,但它们的实现方式不同。
Linux系统中创建链接文件的命令是ln,其命令格式如下:
ln [选项] 源文件 目标文件
当ln命令的选项缺省时,系统会创建一个硬链接文件;若搭配-s选项,则会创建一个软链接文件。ln命令的第一个参数为被链接的文件,即源文件的路径名;第二个参数为链接文件的路径名,指定链接文件的存储位置。
(1)软链接文件
当使用“ln -s”命令创建一个软链接文件时,系统会创建出一个新文件,何为创建一个新文件?在讲解inode时提到,每当系统创建文件时,会在inode表中获得一个空闲的inode,分配给新文件,也就是说,只有文件被分配一个未被占用的inode时,这个文件才是新创建的文件。软链接文件就是一个新文件,执行“ln -s”时,目标文件会获取一个独享的inode。
以工作目录为当前目录,使用如下命令,在./czbk中创建./itheima/a.txt的软链接文件softlink。
$ ln –s ./itheima/a.txt ./czbk/softlink
到源文件与软链接文件所在目录中,使用ls –l命令查看它们的属性信息,打印的信息分别如下:
-rw-rw-r--. 1 itheima itheima 23 Nov 10 17:47 a.txt
lrwxrwxrwx. 1 itheima itheima 14 Nov 11 11:20 softlink -> /itheima/a.txt
观察以上信息,软链接文件的大小为14字节,而软链接文件名后的箭头“->”指向的源文件的路径名“/itheima/a.txt”长度恰好为14。文件的大小代表文件数据块中存储数据的大小,事实上,软链接文件中存储的数据,就是源文件的路径名。当访问软链接文件时,系统会从它的数据块中获取源文件的路径,再到这个路径中访问源文件。
(2)硬链接文件
创建硬链接文件时,系统并不会去查找inode表,而是在硬链接文件上级目录的dentry中添加一条记录。若在系统中执行以下命令:
$ ln /home/itheima/a.txt /home/itheima/hardlink
那么硬链接文件会显示在路径/home/itheima中,而系统只是将源文件a.txt的inumber和硬链接文件的文件名hardlink作为一条记录添加到目录itheima的dentry中,此时目录itheima的dentry中就会出现同一个inumber对应不同文件名的情况,这种情况是被允许的。
相对来说,软链接文件与windows系统中的快捷方式更为相似,无论被链接的文件有多大,软链接的数据都只是被链接文件的文件名;而硬链接文件虽然也是链接文件,但当使用ls命令查看该文件的属性信息时,除文件名外,该文件的属性信息与源文件信息完全相同。
经过以上讲解,相信读者对Linux系统中的链接文件有了初步了解,但在创建链接文件时,有以下几个要点需要注意:
(1)创建硬链接文件时,源路径中的对象不能是一个目录,因为硬链接文件与源文件inode相同,若创建的硬链接文件包含在源文件目录中时,会产生循环访问;软链接的inode与源文件不同,不受此限制。
(2)磁盘分区中的inode表是文件系统级别的,硬链接文件与源文件的inode相同,因此为文件创建硬链接时,硬链接文件可以在同一文件系统的不同目录中,但不能跨文件系统;而软链接文件与源文件inode不同,因此软链接文件可以跨文件系统。
(3)在创建硬链接文件时,文件的硬链接数会加一(可使用ls –l命令查看),若执行删除操作,只有在硬链接数为1时该文件才会真正被删除,其它时候只是删除文件路径名中目录项中的记录,并使文件硬链接数减1;创建软链接时不会增加被链接文件的链接次数。
(4)Linux系统中文件类型之一的符号链接文件只包含软链接文件,硬链接文件本质上是Linux系统中的普通文件。