Linux中什么是软链接和硬链接?

一、ln 命令

ln 命令的基本信息:

  • 命令名称:ln。
  • 英文原意:make links between file。
  • 所在路径:/bin/ln。
  • 执行权限:所有用户。
  • 功能描述:在文件之间建立链接。

1、ln 命令的基本格式如下:
[[email protected] ~]# ln [选项] 源文件 目标文件
选项:
-s:建立软链接文件。如果不加“-s”选项,则默认建立硬链接文件
-f:强制。如果目标文件已经存在,则删除目标文件后再建立链接文件

如何创建硬链接?
[[email protected] ~]# touch cangls
[[email protected] ~]# ln /root/cangls /tmp/

分析:创建一个硬链接文件(cangls),使用 In 命令把/root/cangls文件硬连接到/tmp/cangls,/tmp/目录下没有写文件名,则目标文件名跟源文件名一致,也就是/root/cangls 和/tmp/cangls 是硬链接文件。

如何创建软链接?
[[email protected] ~]# touch bols
[[email protected] ~]# ln -s /root/bols /tmp/

分析:创建软链接时需要在选项中添加 “-s” 参数,不加是默认硬链接的,/root/bols 和/tmp/bols 是软链接文件。

2、硬链接与软连接的特征

硬链接特征:

  • 源文件和硬链接文件使用相同的 Inode 和 Block
  • 修改任意一个文件,另一个都改变
  • 删除任意一个文件,另一个都能使用
  • 硬链接标记不清,很难确认硬链接文件位置,不建议使用
  • 硬链接不能链接目录
  • 硬链接不能跨分区

特征分析:

在上一节中讲过,Inode中存放的是Inode号、时间、权限、位置,并没有存放文件名,文件本身的block块也没有存放文件名。文件名是存放在上一级目录的block块中,按照这样的存放规则,根目录的Inode号是固定的(Inode==2),因为不固定的话是找不到源头的,并且根目录的文件名也是存放在自己的block块中。

用一个例子来说明硬链接原理和过程,放一张自己画的丑图:
Linux中什么是软链接和硬链接? 左边是主目录,中间是源文件,右边是目标文件。正常情况下是找到A目录的Ionde号进入A,在A中找到123这个文件的Inode号进入,就可以看到文件的内容。当源文件和目标文件建立硬连接后,目标文件就获得了原文件的Inode号,这个时候就可以获取到源文件的内容。

如果把Inode号比喻成教室的前后门。无论你把哪一个门给堵了,还是有一个门可以进来。这就是为什么删除任意一个文件,另一个文件都能使用。目录下可能会存在许多子目录和文件,如果给目录创建硬链接,那就要给所有文件创建硬链接,对系统负荷太大,linux就干脆禁止了。


软链接特征:

  • 软链接和源文件使用不同的 Inode 和 Block
  • 两个文件修改任意一个,另一个都改变
  • 删除软链接,源文件不受影响;删除源文件,软链接不能使用
  • 软链接没有实际数据,只保存源文件的 Inode,不论源文件多大,软链接大小不变
  • 软链接的权限是最大权限 lrwxrwxrwx.,但是由于没有实际数据,最终访问时需要参考源文件权限
  • 软链接可以链接目录
  • 软链接可以跨分区
  • 软链接特征明显,建议使用软连接

特征分析:
软链接完全可以把它理解为windows系统的快捷方式,删除快捷方式,源文件还能用,但是删除了源文件,快捷方式就不能用了。

Linux中什么是软链接和硬链接?
由于使用了不同的Inode号和block块,没办法直接获取源文件的内容,所以这时就在软链接的block中存放源文件的Inode号,软链接就相当于起了中转的作用(指示牌),告诉源文件的方向在哪里。

软链接中不存放数据,只存放Inode号,源文件增大了,软链接的大小不会变,就像windows的快捷方式也不会变大。

好了,今天就分享到这里,如果你喜欢这篇文章的话,请转发出去。如果你不喜欢这篇文章的话,请你先喜欢上这篇文章再转发出去,然后顺手点一个赞。谢谢!

如今是资源泛滥的互联网的时代,如果你不想花时间去收集和整理你需要的一些资料,那就进来我的知识星球吧,星球中已经收录了很多csdn下载的资料、****、源代码、工程文件、资料手册、课程设计等等,总会有适合你哒。

关注我公众号【物联网技术猿】!