深入理解硬链接和软链接 plumpeach(原作)
UNIX和Linux都提供了链接命令ln。顾名思义,ln是将
两个文件名(此说法不大准确)彼此链接起来,使得用户无论使用哪一个文件名都可访问到同一文件。这是我们用ln命令所要达到的目的,但是从技术上讲,只有
软链接是链接两个文件名,硬链接不在此列之中。要透彻理解链接的含义,就必须要分清文件与文件名的区别。而要区分文件与文件名,我们就得知道文件系统如何
管理文件。看似很普通的命令,其技术背景却一点儿也不简单。
文件系统如何管理文件涉及范围太大,不可能也不必要在此全部
叙述,但我们只需知道以下技术要点即可。在Linux中,文件的外延很大,我们常识中的“文件”(例如一篇文档等)是文件,
目录、设备等也都是文件。这些文件种类繁多,数量巨大,万一重名怎么办,文件系统是如何区分并管理它们的呢?限制重名?这当然不行!我们来看看Linux
是如何做的。原来Linux的文件系统为每一个文件分配了一个我们称为索引节点(Inode)的数据结构,在这个索引节点内有一个全系统独一无二的索引节
点号,文件系统正是靠这个索引节点号来识别一个文件。另外文件系统用来管理文件的所有信息都包含在索引节点之中。
好了,
给每个文件分配一个唯一的number,文件系统就知道某个文件究竟是张三的文件还是李四的文件。但是文件的真正使用者——我们人类也要用该number
去识别文件吗?呵呵,若此为真,不知是人玩电脑还是电脑玩人罗。因此我们要用我们的方式去区分各个文件,给每一个文件起一好听易记的名字,同一地点(即同
一目录)不能有两个名字一样的文件。地点若不同,允许重名。至此,人类有人类识别文件的方法,电脑(文件系统)有电脑的做法,喔喔,问题又来了,二者是要
“水火不容”呢,还是“沟通无限”呢?这还用问,当然是后者啦。
OK,既然要“沟通”,“链接”自然而然就提出来了。绕
了个大圈,终于得以言归正传,有了上述的背景知识,不管是硬链接还是软链接对于我们来说已是板上鱼肉。所谓硬链接(hard link,
也称链接[1])就是一个文件的一个或多个文件名。再说白点,所谓链接无非是把我们人类使用的文件名和电脑(文件系统)使用的节点号链接起来。因此我们可
以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。一个文件有几个文件名(用ln命令实现多个文件名),我们就说该文件的链接数
为几。由定义可知,此链接数可以是1, 这表明该文件只有一个文件名。
需要特别指出的是,在info
ln的帮助信息中所说的硬链接与我的理解是有差别的,先看info是如何讲硬链接。“A "hard link" is another name
for an existing file; the link and the original are
indistinguishable.”(一个“硬链接”是一个现有文件的别名;链接文件与被链接文件是无法区别的。)哇喔,好象乱套了,谁对谁错?谁都
没错,二者角度不同。Info是就ln命令而论的“硬链接”,注意了,info中的硬链接也是打了双引号的,我估计此有特殊含义。“链接文件与被链接文件
是无法区别的”,没错,因为它们都指向同一个索引节点嘛。现在我与info主要差别在于,我认同而info不认同以下观点:对于一个拥有文件名的文件,在
没有用过ln命令的情况下,该文件仍存在硬链接,且链接数为1。理论需要实践来证明,在Linux中用ls
–l命令获得该目录下文件的详细信息,格式如下:
-rwxr-xr-x 1 root root 1024 Apr 30 17:06 filename
上述格式中黑体加下划线的“1”代表文件名filename的文件的链接数为1。做个实验,在同一目录(不同目录也行)使用ln命令:
ln filename filename2
然后再使用ls –l命令,会得到下面的信息:
-rwxr-xr-x 2 root root 1024 Apr 30 17:06 filename
-rwxr-xr-x 2 root root 1024 Apr 30 17:06 filename2
很
明显,原来文件名为filename的文件现在拥有了两个文件名,链接数变为2,
除此之外其它一切信息都没变,所以说“链接文件与被链接文件是无法区别的”。下面的事实让我怀疑有没有必要用ln产生新的硬链接:无论使用任一文件名对文
件的任何改动,该文件的所有直接或间接[2]链接文件都会随之而改变,最后所有信息都保持一致。
将文件名与索引节点分
开,然后采用硬链接的技术使得管理文件变得更方便,效率更高。例如重命名,进程并不需要打开该文件,只需改动某个目录项的内容即可。还有删除一个文件也是
如此,将相应的目录项删除,该文件的链接数减1,如果删除目录项后该文件的链接数为零,这时系统才把真正的文件从磁盘上删除。
认识了硬链接究竟是怎么一回事,理解硬链接的两个限制就容易多了。
1、不允许给目录创建硬链接;
2、只有在同一文件系统中的文件之间才能创建链接。
篇幅关系,不再赘述。
为
了克服以上限制,引入符号链接(symbolic
link,也称软链接)。符号链接实际上是一种特殊的文件类型,这种文件包含了另一个文件的任意一个路径名。这个路径名指向位于任意一个文件系统的任意文
件,甚至可以指向一个不存在的文件。系统会自动把对符号链接的大部分操作(如读、写等)变为对源文件的操作,但某些操作(如删除等)就会直接在符号链接上
完成。在ln中加选项-s便产生一个文件的符号链接。
总之:硬链接就是让多个不在或者同在一个目录下的文件,同时能够修改同一个文件,其中一个修改后,所有有与其有硬链接的文件都一起修改了。
软链接就是与window中的快捷键一样
分享到:
相关推荐
linux 硬链接和软链接深入理解.docx
Flink有一个非常重要的...课程内容包括了Flink安装部署,入门实战案例,Flink原理初探,流处理的教学,Flink高级API和Flink-Table-SQL-案例,Flink高级特性和新特性,Flink多语言开发,Flink监控与优化。 视频大小:4G
本套教程带你手写响应式数据系统底层、手写模板编译系统底层、手写虚拟DOM和diff算法底层……内容循序渐进,深入浅出,讲解图文并茂,鞭辟入里,用丰富的图示和例子做演示,注重编程思想讲解,真正让你提升编程底蕴...
Google Guava深入浅出课程是一门面向开发者的课程,旨在教授使用和理解Google Guava库的基本概念、功能和最佳实践。学生将学习如何利用Guava提供的丰富工具集,包括集合、并发、函数式编程等方面,以提升代码质量和...
Dubbo 由阿里开源,从 Apache 孵化毕业并成为顶级项目,这款高性能、轻量级的 RPC 框架,很快就...本专栏共 6 个模块,以结合实战的方式深度解读 Dubbo 源码,带你理解核心功能实现,更好地应对实战。 视频大小:6.1G
AlibabaCloud 全家桶和 Docker 课程需要一定的计算机知识和基础,但对于想要深入了解云计算和容器化技术的人来说,这是一门非常有用的课程。 首先,学习 AlibabaCloud 全家桶可以帮助我们了解阿里云提供的各种...
此次将长期的思考、感悟,多年的系统开发、设计和团队管理经验,以及深入分析众多项目实战的宝贵成果和盘托出,力求将编程思想与具体实践融为一体,提炼出适合于广大读者快速理解和彻底掌握.NET软件开发的最佳学习...
HCIE-Cloud Computing是华为云计算领域专家级知识和技能的考察和认证,HCIE-Cloud Computing认证课程强调对华为云计算领域产品和解决方案的已有使用经验,深入理解和优化设计;该认证包含3个主块内容:华为融合云...
框架源码的研究可以帮助开发人员深入了解框架的实现原理和机制,从而更好地利用框架的功能和特性。同时,深入研究框架源码也有助于开发人员更好地定位和解决框架的问题。综上所述,了解设计模式和框架源码对于IT技术...
④tar命令的高级用法,如排除特定文件或目录、处理软链接等;⑤tar命令与其他命令的配合使用,如与gzip、bzip2等压缩工具的结合使用。 阅读建议:在阅读本手册时,建议结合实际操作进行练习,以加深对tar命令的理解...
实战Java高并发程序设计课是一门针对Java开发者的培训课程,重点关注如何设计和优化高并发的程序。学员将学习到并发编程的基本概念、线程池的使用、锁机制、并发集合等技术,并通过实际案例进行实践操作。这门课程...
初级课程着重于基本技巧和情感释放,中级课程深入了解心理学原理,高级课程则注重个人创作和自我疗愈。无论你是初学者还是有经验的学员,这些课程都能帮助你发展你的艺术技能并促进内心的成长和治愈。 视频大小:4.7...
本门课程围绕电商项目大觅网的业务场景,基于微服务原则设计电商项目,使用多种诸如...本次课程以实战为基础,让同学们在实战过程中,独立完成网站的架构搭建和项目开发,掌握其中的实现方式与思路。 视频大小:13.4 G
本课程将带您深入了解数字摄影后期处理的核心原理,包括图像处理算法、色彩管理和调色技术。学员将学习如何利用各种工具(如Photoshop和Lightroom)进行高效后期处理,并掌握定制化效果的技巧。通过案例分析与实践,...
由业界资深人士王煜全先生主持,该课程致力于帮助学员深入了解人工智能创业的机遇和挑战,提供实用的创业指导,使学员能够在AI领域掌握创新的企业经营方式。 AI创业前景解析: 详细介绍人工智能领域的最新发展趋势 ...
课程介绍 今天我将这套系统的方法,总结为一套课程, 和你分享,如何在你的城市,进行...16如何帮助会员彼此深入了解新课.mp4 17如何打造个人IP(抖音)新课.mp4 18如何链接核心资源新课.mp4 19内容形式介绍新课.
”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过60多个实例逐渐深入Win32汇编语言的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是汇编编程网站http://asm.yeah.net和汇编编程论坛...
图灵Python算法二期视频课程是一门深入学习Python编程语言和算法设计的课程。通过本课程,你将学习到Python语言的基础知识和高级特性,并掌握常用的算法和数据结构。课程内容涵盖了排序算法、查找算法、图算法等多个...
通过本课程的学习,学生将能够掌握Keyshot的各项功能,提升产品渲染效果,并且深入了解产品渲染的整个工作流程。无论是设计师还是渲染师,都可以从这门课程中获得实用的知识和技能。 视频大小:4.7G