浅谈硬链接和软链接

这里写图片描述

硬链接和软链接是Linux系统中十分重要的概念。在我们了解硬链接和软链接之前,我们还要先了解一下inode这个概念。

inode(即索引节点号)是Linux系统识别文件的唯一标识。我们都知道Linux系统中文件数据分为两类:metadata(元数据)和data(普通数据)。元数据存放的是文件的附加属性,例如大小、时间戳、所有者等。普通数据才是真正的数据内容。而系统是通过inode来查找正确的文件数据块,并不是通过文件名。

硬链接和软链接

在Linux系统为了解决文件共享问题,使用两种方式:hard link(硬链接)和soft link(软链接),链接不仅仅可以共享文件,还有方便管理、隐藏路径、节省空间等好处。若是使用同一个inode对应多个文件,则使用的就是硬链接。

硬链接可以使用link和ln创建:
语法:ln filename [linkname ]

示例:

link data link
ln data link

硬链接的特性

  • 只能和已存在的文件建立硬链接
    图1
    我们在/app目录下进行实验,当硬链接的源文件不存在时,硬链接无法创建

  • 文件的inode相同和文件属性,只是文件名不同
    这里写图片描述
    我们在/app目录下创建一个data的源文件,并通过stat 命令查看文件属性,然后创建硬链接link,ll -i 查看两者的inode相同,从ctime的变化也能确定硬链接就是用一个文件

  • 不能跨文件系统建立硬链接
    图3
    在/dev目录下建立硬链接link,因为所在不同的文件系统,所以不能建立硬链接

  • 硬链接创建后链接数会增加
    图3
    我们通过对link和data建立新的硬链接link2和link3,发现链数都有增长,由此也能看出硬链接实质上就是同一个文件

  • 不能对目录创建硬链接
    图4
    在/app目录下创建dir1目录文件,尝试建立硬链接link4,创建失败。因为硬链接能针对目录创建

  • 删除一个硬链接文件并不影响其他有相同 inode 号的文件数据
    图5
    在删除源文件data的之前,查看源文件和链接文件的数据是一致的。在删除data之后,其他的硬链接文件的内容不受影响,只是链接数减少了


软链接的特性

软链接其实存放的就是源文件的路径,所以如果文件的内容数据是另一个文件的路径是,这个文件就是软链接。软链接有自己独立的inode和文件属性,这点和硬链接有本质的区别,也正是因为这样,所以软链接使用上少了许多限制,平时使用的更多。

语法:ln -s filename [linkname ]

示例:

link -s data link
ln -s data link
  • 软链接可对不存在文件建立链接
    图6
    在/app的空目录中,建立软链接,目录下没有文件,但链接依旧能建立,找不到目标文件会有报错提示

  • 软链接有自己的inode和属性
    图7
    在目录下建立文件soft,之后对soft设置软链接slink,通过stat 命令查看soft和slink的文件属性,可以看出和之前硬链接的本质区别,不论是权限、inode、时间戳、大小、数据块都不同

  • 软链接课跨文件系统建立
    图8
    在/dev目录下建立test文件目录用于实验,然后设置软链接testlink

  • 软链接可以对目录文件建立
    图9
    接着直接以/app/testdir为目标文件,和/dev/test目录文件,建立软链接

  • 软链接创建不会增加链接数
    这里写图片描述
    建立了软链接,而链接数还是1没有改变

  • 删除软链接并不影响源文件,但删除源文件软链接就会变成死链接,若链接指向的路径文件被重新建立,则链接恢复
    这里写图片描述
    这里写图片描述
    在/app目录下再创创建一个软链接slink2,在我们删除slink之后,源文件soft和slink2都没有受到影响,但当我们把soft文件删除后,slink2就变成了死链接,不再能显示数据


其他相关命令

使用find 命令可以查找链接文件

  • 查找目录文件下相同inode的文件
find /dirs inum inode

这里写图片描述
查到data文件的inode=67,使用命令find /app -inum 67 查到/app目录下的所有inode是67的硬链接文件

  • 查找目录下文件的软链接文件
find /dirs -lname filename

这里写图片描述
使用find /app -lname soft命令,找到/app目录下所有soft的软链接文件

  • 查找目录下所有目标文件的硬链接
find /dirs -samefile filename

这里写图片描述
在/app的目录和子目录下建立多个硬链接,使用find /app -samefile data 都可以找到

  • 查找目录文件下的所有软链接文件
 find /dirs -type l -ls

这里写图片描述
使用命令find /app -type l -ls,可以查找/app下的所有软链接文件

  • 查看磁盘分区的inode值(只能在ext的系统格式中使用)
dumpe2fs -h /dev/sda | grep "Inode size"

这里写图片描述

  • 查看软链接的源文件
readlink

这里写图片描述
readlink 命令在后面我们编写脚本中可以使用


总结:

了解了inode概念还有硬链接与软链接原理,硬链接本质上就是同一个文件的不同文件名。软链接就是独立的文件,不过文件中存放的是源文件的路径。并总结出了两者的区别:

硬链接
1. 只能和已存在的文件建立硬链接
2. 文件的inode相同和文件属性,只是文件名不同
3. 不能跨文件系统建立硬链接
4. 不能跨文件系统建立硬链接
5. 不能对目录创建硬链接
6. 删除一个硬链接文件并不影响其他有相同 inode 号的文件数据


软链接
1. 软链接可对不存在文件建立链接
2. 软链接有自己的inode和属性
3. 软链接课跨文件系统建立
4. 软链接可以对目录文件建立
5. 软链接创建不会增加链接数
6. 删除软链接并不影响源文件,但删除源文件软链接就会变成死 链接,若链接指向的路径文件被重新建立,则链接恢复

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值