linux理解软硬链接

 软硬连接

在linux下面链接文件有两种,一种是类似window的快捷方式功能的文件,可以让你快速链接到目标文件(或目录),叫做软链接,另一种则是通过文件系统的inode链接来产生新的文件名,而不是产生新的文件,这种叫做硬链接。这是完全不一样的东西。

1.软链接(symbolic link也叫符号链接)

软链接是一个独立的链接文件,有自己的inode,也有自己的inode属性和内容,内部放的是自己所指向的文件的路径,当被链接的原文件出现问题后,该链接则不能使用。

创建命令 

ln -s 目标文件    新的链接文件名(自定义的)

示例: 

与文件建立软链接

与目录建立软链接

 

 软链接可运用的地方:将一个路径很深的程序,或者库,或者对应的头文件,建立到当前目录下,或者是很好找的路径下,让我们快速去访问到这个文件。

2.硬链接(hard link)

硬链接和目标文件共用一个inode,不会创建新文件,当我们添加一个硬链接时,只更改了当前目录的内容:在目录中增加了新的文件名,添加了原文件的inode和文件名的映射关系。而这个映射关系有一个计数,每多一个硬链接,这个链接数就会+1,这是创建的时候,当我们要删除文件的时候也是,只有等这个连接数为0时,这个文件才算真正意义上的被删除。在没完全删除之前我们都可以通过该文件的其他硬链接来进行访问。(我们其实可以将硬链接当做一个浅拷贝的过程,也就是多增加一个指针指向同一个文件)

 

                                                      红圈出来的数代表硬链接数 

创建命令

ln 目标文件     新的链接文件名(自定义的)

 与文件建立硬链接

 无法与目录建立硬链接

 3.解除软硬链接

unlink  软链接名/硬链接名

为什么新建的文件夹硬链接数是2呢?

因为文件夹名和inode构成一组映射关系,而文件夹里面的隐藏文件  .  其实是文件夹的硬链接 

4.不能给目录建立硬链接

但是我们上面也说了目录中的一个点(.)代表的其实是文件夹的硬链接,代表当前路径,这又是怎么回事呢?

原来操作系统只允许自己给目录建立硬链接,不允许用户创建,是为了避免环路问题。 

举个栗子(假设真的能给目录建立硬链接)

我们都知道目录文件(文件夹)实际上是一种多叉树结构,在目录中找到其他的文件夹名即可用cd 文件夹名进行访问(图中红箭头),也可以cd .. 返回到上级目录(图中蓝箭头),现在我们在d3目录下建立一个d2的硬链接,再创建一个test.c文件,现在要用find命令从d1目录下开始递归式查找test.c文件,但是当我们进入d3的时候遇到hard-link时,又会回到d2里重新找,这样循环往复就出不来了。

再举一个详细的栗子

如果使用hard link链接到目录时,链接的数据需要连同被连接目录下面的所有数据都建立链接,就是说如果你要将/etc使用硬链接来创建一个/etc_hd目录时,那么在/etc_hd目录下面的所有文件名同时都与/etc下面的文件名要创建硬链接,没那么简单,并且,未来如果在/etc_hd下面创建新文件时,连带的,/etc下面的数据又得要创建一次hard link,过于复杂,所以hard link目前对于目录来说暂时不支持。

 但是隐藏文件 . 和 .. 又这么解释呢?

它们不也会构成环路问题,这个其实是操作系统进行维护的,而且链接的路径不深。只需要操作系统进行特殊处理就行,但是如果也允许用户这样搞的话,有可能链接的路径很深,这样比如在执行查找或者路径切换的时候就会出问题。

5.总结:

硬链接

1.不能跨文件系统

2.不允许给目录创建硬链接

3.只有当硬链接数为0时,该文件才会完全删除。

4.创建只是在某个目录下添加文件名,以及inode和文件名的映射关系(链接数+1)

 软链接

1.可以跨文件系统

2.允许给文件创建软链接

3.是一个独立的文件,有自己的inode,会占用block

4.链接文件被删除,该链接也没有用了

补充: 

stat 文件名

显示文件的三个时间

access 最后访问时间

modify 文件内容最后修改时间

change 属性最后修改时间

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
链接和硬链接Linux中常用的两种链接方式。在Linux中,链接是一种特殊的文件类型,用于将一个文件引用到另一个文件。链接的目的是为了简化操作和节省存储空间。 链接,也称为符号链接,是一种特殊的文件类型,它包含指向另一个文件的路径。链接类似于Windows中的快捷方式,当你打开链接时,它会将你重定向到该文件的实际位置。链接可以跨越不同的文件系统,但是如果链接的文件被删除或移动了,链接将变得无效。 硬链接是通过在文件系统上创建一个与原始文件链接的新的指向相同文件的链接来实现的。硬链接是实际的文件,可以与原始文件同时存在于文件系统中,它们共享相同的inode和数据块。如果你改变了其中的一个文件,另一个文件也会被影响,因为它们共享相同的数据块。硬链接只能在同一文件系统上创建。 在理解硬链接之前,我们首先要理解inode的概念。 inode是存储在文件系统中的一个数据结构,它包含文件的元数据,如所有者,时间戳以及文件的权限等信息。当你创建一个新文件时,系统为该文件分配一个唯一的inode号码。硬链接和源文件具有相同的inode号码。每个目录项都包含一个inode编号,该编号指向该目录中的文件或目录,因此可以通过inode编号找到该文件。 当您创建一个硬链接时,您实际上只是将另一个目录项添加到现有文件的inode上。因此,该文件具有多个名称,但实际上只有一个副本。另一方面,链接只是在已有文件的路径上创建了一个新的文件,它不具有相同的inode号码。 总之,链接和硬链接都是用于将一个文件链接到另一个文件的方法。链接是指向另一个文件的路径,硬链接是实际的文件节点。理解它们之间的差异很重要,因为它们的用途、特性及其所涉及的工作方式都各不相同。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值