初识linux软链接和硬链接
发布时间:2022-10-19 12:40:26 所属栏目:Linux 来源:
导读: 1.从文件开始到软硬链接
在认识软链接和硬链接之前,我们先来了解一下整个系统当中的文件存放特点,在linux当中,数据分为元数据和用户数据,元数据包括文件的一些属性,例如文件大小,创建时间等一些内
在认识软链接和硬链接之前,我们先来了解一下整个系统当中的文件存放特点,在linux当中,数据分为元数据和用户数据,元数据包括文件的一些属性,例如文件大小,创建时间等一些内
|
1.从文件开始到软硬链接 在认识软链接和硬链接之前,我们先来了解一下整个系统当中的文件存放特点,在linux当中,数据分为元数据和用户数据,元数据包括文件的一些属性,例如文件大小,创建时间等一些内容。元数据当中有一个叫做inode(它是元数据的一部分,可以叫做索引节点号),inode作为文件的唯一标识。而文件名,是为了方便记忆。linux系统通过inode来查找正确的数据块,获取对应的信息,而对于用户数据,就是存放真是数据的地方,我们可以理解为磁盘。 为了解决文件的共享使用,所以引入了两种链接,硬链接和软链接(符号链接)。 2.硬链接 若一个inode对应多个别名,我们就把这些别名叫做硬链接。 硬链接就是多个文件名对应相同的inode。 而且对于硬链接使用引用计数的方式进行维护。 硬链接创建命令: ln 文件名 目的链接文件名 我们在这里进行测试一番,我们首先建立一个文件,然后建立两个对应的硬链接linux软链接,我们查看他们的inode号,我们会发现,他们的inode号是是相同,另外,我们也可以看出来它们的引用计数,就是有多少个文件名指向inode就是这个计数就显示多少。 这里写图片描述 所以,因为它们指向的是相同的inode,所以当你修改这三个的任何一个,他们都会全部被修改。 硬链接的特点: 1)相同的硬链接有相同的inode和数据块 2)不能交叉系统创建 3)无法创建文件夹的硬链接 4)当删除一个硬链接的时候,对另外的一个硬链接是没有影响的。 5)硬链接的大小显示的就是你原来数据块的大小 硬链接就是采用引用计数的方式,一个磁盘文件被引用的此时共有几次。 硬链接只有在引用计数变为0的时候才会被删除。 3.软链接 关于软链接理解为一种windows当中常见的快捷方式,linux当中常常用它解决一些库版本的问题。将一些目录层次较深的文件链接到一个更加容易访问的目录当中。我们通常会使用到软链接。 软链接命令 ln -s 文件名 软链接文件名 当我们创建两个软链接后,我们可以发现它们的inode号是不一样的。它们有软链接对应独立的inode号。另外,软链接的文件也是和一般文件不一样,这个时候显示为链接文件。 另外我们通过stat命令来查看数据块,发现软链接和硬链接他们都在一个数据块,但是他们的inode有区别,而且还可以看到,硬链接的大小都是本身所存数据的大小,而软链接的大小就不一样了。 [yuzhe@bogon 12_22]$ stat test hard_link_1 soft_link_1 File: `test' Size: 16 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 931216 Links: 3 Access: (0664/-rw-rw-r--) Uid: ( 500/ yuzhe) Gid: ( 500/ yuzhe) Access: 2016-12-22 03:53:56.400946549 -0800 Modify: 2016-12-22 03:53:29.193946464 -0800 Change: 2016-12-22 03:53:29.193946464 -0800 File: `hard_link_1' Size: 16 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 931216 Links: 3 Access: (0664/-rw-rw-r--) Uid: ( 500/ yuzhe) Gid: ( 500/ yuzhe) Access: 2016-12-22 03:53:56.400946549 -0800 Modify: 2016-12-22 03:53:29.193946464 -0800 Change: 2016-12-22 03:53:29.193946464 -0800 File: `soft_link_1' -> `test' Size: 4 Blocks: 0 IO Block: 4096 symbolic link Device: 802h/2050d Inode: 931341 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 500/ yuzhe) Gid: ( 500/ yuzhe) Access: 2016-12-22 04:05:14.497945726 -0800 Modify: 2016-12-22 04:05:00.429945859 -0800 Change: 2016-12-22 04:05:00.429945859 -0800 [yuzhe@bogon 12_22]$ stat soft_link_2 File: `soft_link_2' -> `test' Size: 4 Blocks: 0 IO Block: 4096 symbolic link Device: 802h/2050d Inode: 931342 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 500/ yuzhe) Gid: ( 500/ yuzhe) Access: 2016-12-22 04:05:14.497945726 -0800 Modify: 2016-12-22 04:05:11.083945668 -0800 Change: 2016-12-22 04:05:11.083945668 -0800 另外,我们需要说一下我们删除软链接被指向的文件,当我们删除了这个文件时,软链接就会变成死链接。 死链接就好像是windows当中的没有了源文件的快捷方式。当你删除了链接的文件,就找不到了,软链接更接近一种快捷方式,这种快捷方式当它的源文件被删除以后,这个时候你这个快捷方式就无用了。 但是对于死链接,你是可以恢复的,我们可以尝试着想软链接当中进行输入信息。 我们可以看到test恢复了,但是当我们使用stat再次去查看信息的时候。 [yuzhe@bogon 12_22]$ stat test hard_link_1 hard_link_2 soft_link_1 soft_link_2 File: `test' Size: 4 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 931345 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 500/ yuzhe) Gid: ( 500/ yuzhe) Access: 2016-12-22 04:26:12.171945209 -0800 Modify: 2016-12-22 04:26:12.171945209 -0800 Change: 2016-12-22 04:26:12.171945209 -0800 File: `hard_link_1' Size: 16 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 931216 Links: 2 Access: (0664/-rw-rw-r--) Uid: ( 500/ yuzhe) Gid: ( 500/ yuzhe) Access: 2016-12-22 03:53:56.400946549 -0800 Modify: 2016-12-22 03:53:29.193946464 -0800 Change: 2016-12-22 04:22:13.793945047 -0800 File: `hard_link_2' Size: 16 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 931216 Links: 2 Access: (0664/-rw-rw-r--) Uid: ( 500/ yuzhe) Gid: ( 500/ yuzhe) Access: 2016-12-22 03:53:56.400946549 -0800 Modify: 2016-12-22 03:53:29.193946464 -0800 Change: 2016-12-22 04:22:13.793945047 -0800 File: `soft_link_1' -> `test' Size: 4 Blocks: 0 IO Block: 4096 symbolic link Device: 802h/2050d Inode: 931341 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 500/ yuzhe) Gid: ( 500/ yuzhe) Access: 2016-12-22 04:05:14.497945726 -0800 Modify: 2016-12-22 04:05:00.429945859 -0800 Change: 2016-12-22 04:05:00.429945859 -0800 File: `soft_link_2' -> `test' Size: 4 Blocks: 0 IO Block: 4096 symbolic link Device: 802h/2050d Inode: 931342 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 500/ yuzhe) Gid: ( 500/ yuzhe) Access: 2016-12-22 04:05:14.497945726 -0800 Modify: 2016-12-22 04:05:11.083945668 -0800 Change: 2016-12-22 04:05:11.083945668 -0800 我们发现test创建到了新的inode上了。 所以,软链接的特点有: 1)软链接邮资机的文件属性和权限 2)软链接可以对文件和目录进行创建 3)软链接可以对不存在的文件和目录进行创建软链接 4)软链接可以交叉文件系统 5)软链接的inode不一样,引用计数不会增加。 6)删除软链接不影响被指向的文件,但是被指向的文件被删除了,那么软链接就变成了一个死链接。 6.其他关于链接的命令 ls -i 用来查看文件的inode号 stat 文件 显示文件的属性,包括inode和IO Block以及大小等信息。 find 路径 -inum 123456 查找路径下inode号是123456的硬链接 find 路径 -samefile 文件 查看路径下与文件相同的inode的所有硬链接。 find 路径 -lname 文件 查看路径下该文件的软链接。 find 路径 -type l -ls 查看路径下所有软链接 5.总结 所以根据这些特性,我们可以绘制一张图来写出软链接和硬链接的关系。 当需要原文件移动后链接依然可用,这个时候使用硬链接。如果需要对文件夹创建链接或者跨文件系统,这个时候需要使用软链接。创建软链接,注意精良使用相对路径,还可以为不存在的文件创建软链接。只要链接到文件存在,这个链接就有效。 (编辑:PHP编程网 - 钦州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


浙公网安备 33038102330484号