为解决文件的共享使用,Linux系统引入了两种链接:硬链接和软链接.在Linux中,元数据中的inode号才是文件的唯一标识而非文件名,文件内容要通过inode号来寻找,犹如交通指示牌一样,指示着数据找寻的方向.
硬链接(Hard Link)
A和B的硬链接,则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的.如果删除其中一个,对另外一个没有任何影响.每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收.
注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块只有在inode节点链接数减少为0的时候才会被系统回收.
软链接(Soft Link)
A是B的软链接,A的目录项中的inode节点号与B的目录项中的节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块.但是A的数据块中存放的只是B的路径名.A和B之间是主从关系,如果B被删除了,A依然存在,但指向的是一个无效的链接.
Linux中软链接和硬链接的区别和联系:
概念不同:
软链接可以理解成快捷方式,和原文件的inode号不一样,它和Windows下的快捷方式的作用是一样的,软链接数据块中记录的亦是相对路径指向.
硬链接和原文件对应一个inode,就是对应一个文件,可以理解成一个文件有几个别名.
用法不同:
软链接可以理解成快捷方式,也清楚知道原文件在哪里.它和Windows下的快捷方式的作用是一样的,和Windows一样,删除源文件,快捷方式也就无法使用了.
硬链接可以看成一个备份,但并没有增加空间,因为文件就一个,这种可以防止源文件删除后不能使用问题;同时也有局限性,不能对目录和跨文件系统使用.
语法格式(ln):
硬链接:ln 源文件 链接名
软链接:ln -s 源文件 链接名
注意:链接的源文件路径要写绝对路径,否则会报错.
① 先来了解一下Linux数据是如何保存和查询的
在 Linux 中,元数据中的 inode 号(inode 号即索引节点号)才是文件的唯一标识而非文件名.文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块.
linux查看文件对应的inode号
使用find查找一下:
查找结果如下:
/root/latest.tar.gz
linux根据inode号查找对应的文件
为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link).链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处.
查看一下文件latest.tar.gz
输出结果如下:
正常情况下,一个inode只有一个链接,如下例
输出结果:
请留意输出的结果中的数字1,表示该文件只存在1个硬链接,默认情况下,文件都是只有一个硬链接的.
再来看一个文件
linux查看软链接
我们发现,/dev/stdout实际上指向另一个文件/proc/self/fd/1,这就是软链接.类似于Windows系统上的快捷方式.
ln链接符原理如下:
Linux ln链接符原理图
Linux ln命令是一个非常重要而且常用命令,它用于为文件或者目录创建链接.
创建一个文件,用于演示软链接.
创建软链接示例:
检查结果:
输出文件属性
linux创建软链接
创建一个文件,用于演示硬链接.
创建硬链接,没有使用选项
输出文件属性:
linux创建硬链接
ln命令可以创建文件的副本,也可以创建软链接.
①.、首先有一个目录dir, 执行ln -s dir dir_link 创建目录的软链接.
ln
ln(link)
功能说明:连接文件或目录.
语法:ln [-bdfinsv][-S 字尾备份字符串][-V 备份方式][--help][--version][源文件或目录][目标文件或目录] 或 ln [-bdfinsv][-S 字尾备份字符串][-V 备份方式][--help][--version][源文件或目录...][目的目录]
补充说明:ln指令用在连接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中.若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息.
参数:
-b或--backup 删除,覆盖目标文件之前的备份.
-d或-F或--directory 建立目录的硬连接.
-f或--force 强行建立文件或目录的连接,不论文件或目录是否存在.
-i或--interactive 覆盖既有文件之前先询问用户.
-n或--no-dereference 把符号连接的目的目录视为一般文件.
-s或--symbolic 对源文件建立符号连接,而非硬连接.
-S字尾备份字符串或--suffix=字尾备份字符串 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的字尾备份字符串是符号"~",您可通过"-S"参数来改变它.
-v或--verbose 显示指令执行过程.
-V备份方式或--version-control=备份方式 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用"-S"参数变更,当使用"-V"参数备份方式指定不同备份方式时,也会产生不同字尾的备份字符串.
--help 在线帮助.
--version 显示版本信息.
这种问题网上的例子很多的,如果还有不明白,在网上自己多查查