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

对软件工程师来说,Linux 实在是太常用了,互联网上用到的很多技术和产品背后都有 Linux 的身影。

在程序员漫长的职业生涯里,你几乎一定会遇到 Linux 的应用场景,如果你无法熟练的操作 Linux ,基本上等于少了一半的功力,也少了一半的机会……

我在 MacTalk 上也写过很多 Linux 相关的文章,有一篇趣谈个人建站中,用到了不少 Linux 相关的操作,今天给大家介绍一下 Linux 文件系统中的硬链接和软连接,五分钟,你看能明白不。

在 Linux 的世界里,大部分文件一旦被删除,文件相关的 inode 信息都会被抹掉,文件占用的磁盘空间也会被释放,这种情况下文件名和 inode 是一对一的,删了,就没了。为了满足更复杂的文件操作,Linux 系统的设计者提供了更为高级的服务,那就是硬链接和软链接的技术,这些技术让 Linux 世界里的文件和目录具备了副本和替身的能力。效果就是,你明明删除了某个文件,但是如果有人在你删除之前做了文件的硬链接,你会发现同样内容的文件依旧存在于系统中,而你刚刚做的修改还在那里冒着热气。

硬链接

基于 inode 技术,Linux 允许多个文件名同时指向一个 inode,好处就是,我们可以用不同的文件名去访问同一个文件,每次操作对文件内容的影响会波及到所有「副本」,删除掉一个「副本」,不会影响其他文件。增加一个硬链接文件,仅仅是inode 里的「Links」属性值加一,删除一个硬链接文件,属性值减一。只有「Links」的值为0时,文件才会被彻底删除,回收其占用的空间。

如何创建一个硬链接文件?非常简单:

ln sourcefile destfile

前者是源文件,后者是目标文件,创建完成后,使用 stat 命令查看其中之一,就会发现 Links 的值变为2了,用 ls -i 查看文件,你会发现这两个文件的 inode 号是相同的。

如果我们使用 Vim 在同一个缓冲区(buffer)中打开这两个文件:

vim sourcefile:newdestfile

以上命令会在 Vim 中打开两个窗口,你在操作其中一个文件时,会发现另一个窗口是同步联动的。

硬链接的应用场景比较广泛,比如多人修改同一个文件、重要文件备份、文件更新、节省磁盘空间等等。这些方便的特性都源于 inode 的设计思想。

注意:我们无法为目录创建硬链接,但是操作系统利用特权偷偷在每个目录下创建了两个硬链接,一个是「.」,另一个是「..」,使用 ls -ai 命令可以看到这两个硬链接目录和 inode 号,前者代表了当前目录,后者代表当前目录的父级目录。

硬链接不创建 inode,所以无法跨文件系统,这一点可以由软链接实现。

软连接

软链接理解起来比较容易,类似 Windows 系统中的快捷方式。

软链接会创建新的 inode,inode 里主要记录了源文件的路径,当访问软链接文件时,系统会帮你自动指向源文件,无论你操作的是源文件,还是软链接文件,其实你最终操作的都是源文件,源文件删除了,软连接文件就成了无本之木,也就毫无意义,强制访问的后果就是「No such file or directory」。

创建软链接的命令如下:

ln -s sourcefile destfile

大家可以尝试用 stat 命令查看这两个文件的 inode 信息。

软链接可以创建目录的软链接,也能跨文件系统存在,在Linux系统中被大量使用。一旦源文件/目录不存在了,软链接的使命也就完结了。

如果你看完这五分钟没懂,那可能是没弄清楚 inode 这个概念,我们可以后续再花五分钟把它讲清楚。


相关推荐:

Linux 的操作和服务,几乎是每个工程师的必知必会,无论你使用什么技术做研发,熟练使用 Linux 都是加分项,对于想成为后端和运维工程师的人来说,Linux 则是必备技能。但是用专栏来讲这些实战和服务就太繁琐了,于是我们推出了一门视频课《Linux 实战技能100讲》。这次的出品人还是我们的老朋友,《零基础学 Python》的作者尹会生老师。

尹会生老师是一名运维老兵,入行 15 年来几乎每天都在和 Linux 打交道。做过集群和内核调优的培训,也做过嵌入式 Linux 内核的裁剪,维护过日活超过 3 亿用户的用户私信平台,为中小企业搭建过私有云平台,也为大型游戏的运营构建过大数据分析工具。

在《Linux实战技能100讲》视频课中,尹会生老师将带你掌握 Linux 的常用命令、Vim、sed、awk 文本管理、Shell 编程以及 LNMP、FTP、SSH 等常用服务的搭建,这些已足够你应对工作中 85% 以上的 Linux 使用场景,同时也为你今后更深入地学习 Linux 高级功能打下坚实基础。

最后,老师还设计了一个有趣的动手环节,手把手教你搭建一个家用多媒体共享服务(NAS),你可以通过它远程下载喜欢的电影,同时它还支持家庭成员之间的资料备份、文件共享等功能,未来你甚至可以把它打造成一个家庭娱乐中心。

现在就进入 Linux 的世界吧,新的大门已经打开。

五分钟理解 Linux 中的硬链接和软链接_第1张图片

你可能感兴趣的:(五分钟理解 Linux 中的硬链接和软链接)