linux理解软硬链接

news/2024/10/31 3:26:26/

 软硬连接

在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 属性最后修改时间

 


http://www.ppmy.cn/news/213256.html

相关文章

苹果键盘大小写键灯不亮

这个是苹果人性化设计的效果,并不是键盘出现问题了。主要防止不小心碰到大小写键。 解决:场景,切换到 简体输入 A,正常速度按一下,则切换成小写输入 B,正常速度再按一下,则切换成简体输入 C…

Linux安全之账户安全

账户安全 Linux用户账户概述: 用户账号 超级用户root系统用户普通用户组账号 基本组(私有组----每一个私有组里面只有一个用户)附加组(公共组----每一个用户都可以加入到这个组里面) UID和GID: UID&…

airpods pro 使用电脑无法充电的问题

据测试, airpods pro可以通过苹果电脑充电,但是使用其他win10系统的电脑充电时,充一会就会断掉;使用win11系统可以充电。 好奇怪的问题,不知道苹果是怎么设计的,还是加了某种特殊协议?

MacBook Pro冲不上电,指示灯不亮

12年终的 MacBook Pro已经遇到过几次这种情况了, 插上电源充电指示灯不亮也冲不上电; 以前几次莫名其妙的自己好了,我也没在意,今天同样的情况,我以为等等他自己就会好,可是等电池电用完了还没好&#xff…

台式电脑突然无法开机,鼠标键盘灯不亮

环境: 惠普/HP288G6主机 问题描述: 昨天正常,突然无法开机,鼠标键盘灯不亮,拆解散热风扇和cpu风扇正常转,拔了内存条,无报警声还是黑屏 解决方案: 1.尝试给主板放电(…

airpods pro无法使用Windows电脑充电的解决方法

连接airpods pro到windows电脑上 进入控制面板->设备和打印机 找到AirPod Case并双击->选择硬件->符合HID标准的供应商定义设备->属性 改变设置->驱动程序->禁用设备(之后也不用管设备的状态,不需要再点击启动设备) 直…

Macbook电池使用问题——电池充电管理

我的本本是17款的mbp,系统是11.7(big sur)为了保护电池,我下载了一款软件——AIDente Free,因为是免费版,它的功能很少,但却能很好的满足我的需求。 我最大的需求就是能让电池有一个充电限制&am…

Mac无故充不进电

mac用着用着,连接电源线充不进电,但能使用外置电源。 可以试试重置SMC: https://support.apple.com/zh-cn/HT201295