软链接
使用指令ln-s被链接的文件生成的软链接文件便可以创建软联接文件,ln是link的缩写表明当前要创建链接文件,s是soft的缩写表明当前创建的链接文件为软链接文件,之后加上被链接的文件,最后写上生成的链接文件的文件名例如说下边的图片:
这儿生成了一个软链接文件,而且使用ls-l指令显示文件时会将这个文件所链接的文件也显示下来redhat linux 下载,使用指令ls-li指令可以查看每位文件对应的inode
通过前面的图片可以看见软链接文件有一个属于自己的inode,但是soft_mycode.link文件的属性也和源文件mycode不相同,例如说soft_mycode.link的权限为0777文件大小为6并且mycode文件的权限为0775大小为8360,这么这就说明当我们使用ln指令-s指令创建软联接文件时操作系统会给我们创建一个文件,这个文件有自己的属性和inode,尽管这个soft_mycode.link文件是新创建的,并且这个文件的执行结果却和源文件mycode是一样的诸如说下边的图片:
这么这就是创建软链接的方式以及软联接的部份属性。
硬链接
单独使用ln不加选项就可以创建硬链接文件:ln源文件生成的硬链接文件例如说下边的图片:
使用ls-li指令查看inode可以看见下边的现象:
我们发觉硬链接文件的inode和原文件是一样的,而且软链接创建下来的文件inode和源文件是不一样的,所以软硬链接最根本的区别是:是否具有独立额度inode。软链接具有独立的inode可以被当作独立的文件看待,硬联接没有独立的inode所以不能被当作独立的文件来看待,硬联接的文件的inode和各类属性都和源文件相同,往源文件上面输入内容时源文件的大小除了会发生改变并且硬链接文件的大小也会发生改变,例如说下边的操作:
一开始mycode.c文件大小为146,hard_mycode.link文件的大小也为146,我们使用vim工具往mycode.c文件上面写入数据然后mycode.c文件的大小弄成了263,然而hard_mycode.link文件的大小也弄成了263,而且上述操作对软联接执行一遍的话是不会发生改变,由于软联接链接的是生成的可执行程序,mycode可执行程序的大小为8360,soft_mycode.link文件的大小为6,使用make指令生成一个新的mycode程序再瞧瞧这儿的属性的话就可以看见mycode可执行程序的大小发生了变化,而且soft_mycode.link文件的大小却没有任何变化:
这么这就愈加说明了一点使用ln指令创建硬链接文件时根本没有创建新文件(由于没有分配独立的inode而且文件的性质还和源文件一摸一样),既然没有创建文件这么硬链接文件一定没有自己的属性集合和内容集合,所以他用的是源文件的inode和内容,之前我们讲过目录的数据块上面记录着文件名和inode的映射关系,而创建硬链接文件本质上就是在目录的数据块上面添加一个新文件名,并把该文件名指向的inode填入源文件的inodewps for linux,所以一个inode可能会被多个文件名指向,所以在inode上面有个计数器,假如有一个文件指向这个inode的话,这个计数器的值都会加1软连接 linux,我们把一个对象上面有一个变量,这个变量拿来表示有多少文件指向我的变量称为引用计数,也可以把他称为硬联接数,例如说当前的有两个文件名指向inode为1181179的文件
这么这个文件的计数器的值就为2,当我们吧mycode.c文件删掉再查看文件属性时可以发觉hard_mycode.link文件的链接数就弄成了1
然而硬联接文件的内容和大部份属性都和之前没有变化,说明之前删掉文件的时侯并没有真正删掉,只是删掉了指向inode的一个文件名,只有当一个文件的硬链接数弄成0时就会真正的删掉一个文件,上述的过程也可以看弄成给文件换了一个名子。删掉源文件硬联接文件可以正常使用,并且删掉软链接的源文件,软联接便难以正常使用诸如说下边的操作,给一个文件创建一个硬链接和软链接,之后删掉源文件就可以看见下边的现象:
硬链接可以正常使用,并且软链接早已发出警告未能正常使用了,而前面的删掉并不是真正的删掉,文件名其实不存在了并且文件的inode仍然是存在的,这么这就说明软联接在查找源文件时根本不是通过文件的inode查找文件而是通过文件名来查找的文件,而在树形结构中查找一个文件名的形式就是通过绝对路径或则相对路径的形式进行查找,软联接也是一个文件他也有对应的数据块,所以在软联接文件的数据块上面就只保存着原文件的路径,这就是为何删掉源文件的文件名并且不删掉inode软联接会失效的缘由。
软联接的作用
软链接的作用就是快速的执行另外一个路径的程序构建快捷方法。例如说当前的路径为:
我们可以创建一个mycode.c文件并往这个文件上面写入一些代码使其才能生成一个可执行程序,例如说下边的代码:
之后我们就可以抵达一个其他路径诸如说在当前路径下再创建一连串的目录,并抵达最深处的目录软连接 linux,例如说当前的路径如下:
我们可以在这个路径下创建一个软链接,这个链接指向的是里面生成的那种程序:
这么我们就可以在当前路径中执行其他路径的程序,执行的结果如下:
这就是软联接的作用:创建其他路径的快捷方法。
硬链接的问题
为何普通文件的硬联接的数是1?由于一个普通文件本身有一个文件名和自己的inode具有一个映射关系。那为何新创建的目录文件的硬联接数是2呢?例如说下边的图片:
由于目录上面有两个隐藏文件.和..其中.文件的inode和当前目录的inode是一样的都是1181184
而..文件的inode又和上级目录的inode也是一样的都是1181178
所以这也是为何.可以表示当前目录,而cd..可以回到上级目录的诱因。并且用户不能给目录创建软硬链接由于操作系统不相信用户。并且操作系统相信自己所以.和..就是给目录创建的硬联接。这么这就是本篇文章的全部内容希望你们就能理解。