在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号inode 。

1、软连接

软连接,其实就是新建立一个文件,这个文件专门用来指向别的文件,类似于 windows 下的快捷方式。

软链接产生的是一个新的文件,但这个文件的作用就是专门指向某个文件的,删了这个软连接文件,那就等于不需要这个连接,和原来的存在的实体原文件没有任何关系,但删除原来的文件,则相应的软连接不可用。cat那个软链接文件,则提示“没有该文件或目录”。

补充:软连接类似于pyvenv.cfg文件

学过Python的小朋友,应该见过虚拟环境中的pyvenv.cfg吧。Python虚拟环境可以为项目创建相互独立的开发环境。既然是虚拟环境的配置文件,那么必定包括主环境的存放地址,就是下面的 home 目录,还得包括是否从主目录拷贝第三方库文件等,其内容如下所示:

home = D:\Python37
include-system-site-packages = true
version = 3.7.1

2、硬连接

硬连接是不会建立inode的,它只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。相反,软连接会重新建立一个inode,当然inode的结构跟其他的不一样,它只是一个指明源文件的字符串信息。一旦删除源文件,那么软连接将变得毫无意义。而硬链接删除的时候,系统调用会检查inode link count的数值,如果大于等于1,那么inode不会被回收,因此文件的内容不会被删除。

硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软链接建立的是一个指向文件,即链接文件内的内容是指向原文件的指针,它们是两个文件。

3、软连接和硬连接的区别

(1)软链接可以跨文件系统,硬链接不可以;

(2)软链接可以对一个不存在的文件名(filename)进行链接(当然此时如果你vim这个软链接文件,linux会自动新建一个文件名为filename的文件),硬链接不可以(其文件必须存在,inode必须存在);

(3)软链接可以对目录进行连接,硬链接不可以。

(4)两种链接都可以通过命令 ln 来创建。ln 默认创建的是硬链接,使用 -s 开关可以创建软链接。

标签: none

添加新评论