浅谈硬链接和软链接

这里写图片描述

硬链接和软链接是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. 删除软链接并不影响源文件,但删除源文件软链接就会变成死 链接,若链接指向的路径文件被重新建立,则链接恢复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值