linux系统中的链接文件类似于windows中的快捷方式,windows下的快捷方式就是一个存储路径的文件。在linux系统,链接文件分为两种:软链接和硬链接。
linux中创建链接的命令ln
,格式如下:
ln [选项] 源文件 目标文件
当ln命令的选项是缺省的时候,系统会自动创建一个硬链接;选项是-s
时,则会创建软链接.上面的第一个参数是被链接的文件(也就是源文件的路径),第二个参数就是链接的文件(链接文件的路径).
在使用ln -s
进行软链接操作时,系统会自动创建一个新的文件.下面提到的inode
,也是就软链接和硬链接不同的地方所在.每当系统创建一个文件的时候,会从inode表中获取一个空闲的inode分配给新的文件.也就是说,只有文件被分配一个未被占用的inode时,这个文件才是新创建的文件.软链接文件就是一个新的文件,在执行ln -s
时,目标文件会获取一个独享的inode.
在Documents文件夹下创建文件test.txt
,通过ln -s
创建软链接文件test_link
.
lee@lee-pc:~/Documents$ ll
total 12
drwxr-xr-x 2 lee lee 4096 5月 19 11:18 ./
drwxr-xr-x 22 lee lee 4096 5月 19 11:17 ../
-rw-r--r-- 1 lee lee 45 5月 19 11:17 test.txt
lee@lee-pc:~/Documents$ ln -s test.txt ./test_link
lee@lee-pc:~/Documents$ ll
total 12
drwxr-xr-x 2 lee lee 4096 5月 19 11:19 ./
drwxr-xr-x 22 lee lee 4096 5月 19 11:17 ../
lrwxrwxrwx 1 lee lee 8 5月 19 11:19 test_link -> test.txt
-rw-r--r-- 1 lee lee 45 5月 19 11:17 test.txt
观察以上信息发现,软链接文件的大小为8字节,且软链接文件名后的新头->
指向的源文件的路径名test.txt
.文件的大小代表文件数据块中存储的数提的大小.事实上,软链接文件中存储的数据就是源文件的路径名.当访问软链接文件时,系统会从它的数据块中获取源文件的路径,再到这个路径中访间源文件。
创建硬链接文件时,系统并不会去查找inode表,而是在硬链接文件上级目录的dentry中添加一条记录。
lee@lee-pc:~/Documents$ ln -s test.txt ./test_link
lee@lee-pc:~/Documents$ ll
total 16
drwxr-xr-x 2 lee lee 4096 5月 19 12:44 ./
drwxr-xr-x 22 lee lee 4096 5月 19 12:44 ../
-rw-r--r-- 2 lee lee 46 5月 19 11:23 test
-rw-r--r-- 2 lee lee 46 5月 19 11:23 test.txt
相对来说,软链接文件与Windows系统中的快捷方式更为相似,无论被链接的文件有多大,软链接的数据都只是被链接文件的文件名;而硬链接文件虽然也是链接文件,但当使用ls命令查看该文件的属性信息时,除文件名外,该文件的属性信息与源文件信息完全相同。
创建链接文件是需要注意以往几点:
创建硬链接文件时,源路径中的对象不能是一个目录,因为硬链接文件与源文件的inode
相同,若创建的硬链接文件包含在源文件目录中,则会产生循环访问;软链接的inode
与源文件不同,不受此限制。
磁盘分区中的inode
表是文件系统级别的,硬链接文件与源文件的inode
相同,因此为文件创建硬链接时,硬链接文件可以在同一文件系统的不同目录中,但不能跨文件系统;而软链接文件与源文件的inode
不同,因此软链接文件可以跨文件系统。
在创建硬链接文件时,文件的硬链接数会加1(可使用ls -l
命令查看),若执行删除操作,只有在硬链接数为1时该文件才会真正被删除,其他时候只是删除文件路径目录项中的记录并使文件硬链接数减1;创建软链接时不会增加被链接文件的链接次数。
Linux系统中文件类型之一的符号链接文件只包含软链接文件,硬链接文件本质上是Linux系统中的普通文件。