加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 钦州站长网 (https://www.0777zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

五分钟理解 Linux 中的硬链接和软链接

发布时间:2022-10-14 10:51:33 所属栏目:Linux 来源:
导读:  对软件工程师来说,Linux 实在是太常用了,互联网上用到的很多技术和产品背后都有 Linux 的身影。

  在程序员漫长的职业生涯里,你几乎一定会遇到 Linux 的应用场景,如果你无法熟练的操作 Linux ,基本上
  对软件工程师来说,Linux 实在是太常用了,互联网上用到的很多技术和产品背后都有 Linux 的身影。
 
  在程序员漫长的职业生涯里,你几乎一定会遇到 Linux 的应用场景,如果你无法熟练的操作 Linux ,基本上等于少了一半的功力,也少了一半的机会……
 
  我在 MacTalk 上也写过很多 Linux 相关的文章,有一篇趣谈个人建站中,用到了不少 Linux 相关的操作,今天给大家介绍一下 Linux 文件系统中的硬链接和软连接,五分钟,你看能明白不。
 
  在 Linux 的世界里,大部分文件一旦被删除,文件相关的 inode 信息都会被抹掉linux软链接,文件占用的磁盘空间也会被释放,这种情况下文件名和 inode 是一对一的,删了,就没了。为了满足更复杂的文件操作,Linux 系统的设计者提供了更为高级的服务,那就是硬链接和软链接的技术,这些技术让 Linux 世界里的文件和目录具备了副本和替身的能力。效果就是,你明明删除了某个文件,但是如果有人在你删除之前做了文件的硬链接,你会发现同样内容的文件依旧存在于系统中,而你刚刚做的修改还在那里冒着热气。
 
  硬链接
 
  基于 inode 技术,Linux 允许多个文件名同时指向一个 inode,好处就是,我们可以用不同的文件名去访问同一个文件,每次操作对文件内容的影响会波及到所有「副本」,删除掉一个「副本」,不会影响其他文件。增加一个硬链接文件,仅仅是inode 里的「Links」属性值加一,删除一个硬链接文件,属性值减一。只有「Links」的值为0时,文件才会被彻底删除,回收其占用的空间。
 
  如何创建一个硬链接文件?非常简单:
 
  ln sourcefile destfile
  前者是源文件,后者是目标文件,创建完成后,使用 stat 命令查看其中之一,就会发现 Links 的值变为2了,用 ls -i 查看文件,你会发现这两个文件的 inode 号是相同的。
 
  如果我们使用 Vim 在同一个缓冲区(buffer)中打开这两个文件:
 
  vim sourcefile:new?destfile
  以上命令会在 Vim 中打开两个窗口,你在操作其中一个文件时,会发现另一个窗口是同步联动的。
 
  硬链接的应用场景比较广泛,比如多人修改同一个文件、重要文件备份、文件更新、节省磁盘空间等等。这些方便的特性都源于 inode 的设计思想。
 
  注意:我们无法为目录创建硬链接,但是操作系统利用特权偷偷在每个目录下创建了两个硬链接,一个是「.」,另一个是「..」,使用 ls -ai 命令可以看到这两个硬链接目录和 inode 号,前者代表了当前目录,后者代表当前目录的父级目录。
 
  硬链接不创建 inode,所以无法跨文件系统,这一点可以由软链接实现。
 
  软连接
 
  软链接理解起来比较容易,类似 Windows 系统中的快捷方式。
 
  软链接会创建新的 inode,inode 里主要记录了源文件的路径,当访问软链接文件时,系统会帮你自动指向源文件,无论你操作的是源文件,还是软链接文件,其实你最终操作的都是源文件,源文件删除了,软连接文件就成了无本之木,也就毫无意义,强制访问的后果就是「No such file or directory」。
 
  创建软链接的命令如下:
 
  ln -s sourcefile destfile
  大家可以尝试用 stat 命令查看这两个文件的 inode 信息。
 
  软链接可以创建目录的软链接,也能跨文件系统存在,在Linux系统中被大量使用。一旦源文件/目录不存在了,软链接的使命也就完结了。
 
  如果你看完这五分钟没懂,那可能是没弄清楚 inode 这个概念,我们可以后续再花五分钟把它讲清楚。
 

(编辑:PHP编程网 - 钦州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!