linux-链接文件-软链接和硬链接

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 519 11:18 ./
drwxr-xr-x 22 lee lee 4096 519 11:17 ../
-rw-r--r--  1 lee lee   45 519 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 519 11:19 ./
drwxr-xr-x 22 lee lee 4096 519 11:17 ../
lrwxrwxrwx  1 lee lee    8 519 11:19 test_link -> test.txt
-rw-r--r--  1 lee lee   45 519 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 519 12:44 ./
drwxr-xr-x 22 lee lee 4096 519 12:44 ../
-rw-r--r--  2 lee lee   46 519 11:23 test
-rw-r--r--  2 lee lee   46 519 11:23 test.txt

相对来说,软链接文件与Windows系统中的快捷方式更为相似,无论被链接的文件有多大,软链接的数据都只是被链接文件的文件名;而硬链接文件虽然也是链接文件,但当使用ls命令查看该文件的属性信息时,除文件名外,该文件的属性信息与源文件信息完全相同。

注意事项

创建链接文件是需要注意以往几点:

  • 创建硬链接文件时,源路径中的对象不能是一个目录,因为硬链接文件与源文件的inode相同,若创建的硬链接文件包含在源文件目录中,则会产生循环访问;软链接的inode与源文件不同,不受此限制。

  • 磁盘分区中的inode表是文件系统级别的,硬链接文件与源文件的inode相同,因此为文件创建硬链接时,硬链接文件可以在同一文件系统的不同目录中,但不能跨文件系统;而软链接文件与源文件的inode不同,因此软链接文件可以跨文件系统。

  • 在创建硬链接文件时,文件的硬链接数会加1(可使用ls -l命令查看),若执行删除操作,只有在硬链接数为1时该文件才会真正被删除,其他时候只是删除文件路径目录项中的记录并使文件硬链接数减1;创建软链接时不会增加被链接文件的链接次数。

  • Linux系统中文件类型之一的符号链接文件只包含软链接文件,硬链接文件本质上是Linux系统中的普通文件。

猜你喜欢

转载自blog.csdn.net/idealcitier/article/details/80373453