linux硬连接只能连接文件,不能连接目录;

【陇羽sec】LINUX的软/硬连接 在网络安全中linux的基本认识 阅读详情

 

1、硬连接

参考《鸟哥的Linux私房菜》,首先hard link只能在单一文件系统中进行(因为硬连接文件名关联的inode节点号是相对于文件系统的,不同文件系统|磁盘分区的inode号将会重复)。

图片示例:[root@study ~]# ln /etc/crontab ./

实体链接
实体链接(《鸟哥的Linux私房菜》第四版)

文件的硬连接,是在LINK_NAME硬连接文件所在目录的block中新建“硬连接文件名”并将对应inode节点号指定为TARGET目标文件的inode节点,只是新增了目录block中【"硬连接文件名"-inode号】这样一条记录;

手册里看到有选项允许超级用户尝试硬连接目录,但也提示说可能由于系统限制而失败,即使是对超级用户。

尝试:

如果要创建~/Files/temp1目录的硬连接~/Files/temp1_hd,我天真地猜测是在上层目录~/Files的文件名列表block中新建一个“硬连接目录”的记录,并将源目录的inode节点号赋给此“硬连接目录”,那样只要具有“硬连接目录”上层目录~/Files的rw权限,对“硬连接目录”的rwx与列表显示权限的操作就等同于对源目录的操作,即下图中红色式样。

但按照《鸟哥的Linux私房菜》的解读:“不能hard link到目录又是怎么回事呢?这是因为如果使用hard link链接到目录时,链接的数据需要连同被链接目录底下的所有数据都建立链接,举例来说,如果你要将~/Files/temp1使用实体链接建立一个~/Files/temp1_hd的目录时,那么在~/Files/temp1_hd底下的所有档名同时都与~/Files/temp1底下的档名要建立hard link的而不是仅连结到~/Files/temp_hd与~/Files/temp1而已。并且,未来如果需要在~/Files/temp1_hd底下建立新文件时,连带的~/Files/temp1底下的数据又得要建立一次hard link,因此造成环境相当大的复杂度。所以,目前hard link对于目录暂时还是不支持的啊!”说明centos的xfs、ext4文件系统尝试建立目录的硬连接时,是采用图中蓝色式样,相当于创建了一个新的目录,有实体的目录文件名列表block,目录中的文件(名)均作为源目录中文件的硬连接,而子目录应该也会对应创建子目录,有实体的目录文件名列表block,子目录中的文件又要作为源目录子目录中对应文件的硬连接,相当于recursive递归地创建源目录层级内所有文件的硬连接,这确实很复杂,并且要做到目录内硬连接文件与源文件的关联增、删、改,确实复杂。

再次参考骏马金龙《inode基础知识——硬链接》:

为什么文件系统自己创建好了目录的硬链接(目录data block中子目录名——子目录inode条目,以及目录data block中./自身目录名——自身inode条目,以及目录data block中../父目录名——父目录inode条目)就不允许人为创建呢?从"."和".."目录条目的用法上考虑,如果当前目录为/usr,我们可以使用"./local"来表示/usr/local,但是如果我们人为创建了/usr目录的硬链接/temp/usr_hd,难道我们也要使用"/temp/usr_hd/local"来表示"/usr/local"么?这其实已经是软链接的作用了(访问软链接就是按原文件的路径去访问原文件)。若要将其认为是硬链接的功能,这必将导致硬链接维护的混乱。

不过,通过mount工具的"--bind"选项,可以将一个目录挂载到另一个目录下,实现"伪硬链接",他们的内容和inode号是完全相同的:

可以看到,将/media/haypin/DefineLoadPoint目录挂载到/home/haypin/sda8_bind目录下后,二者的目录文件inode号是一样的,/media/haypin/DefineLoadPoint目录的硬链接数也2+1=3,相当于实现了"硬链接"。

总之,记住“只能创建文件的硬连接而不能创建目录的硬连接”就对了!

1.1硬链接源文件的删除

每创建一个文件的硬链接,实质上是多一个指向该inode记录的inode指针,并且硬链接数+1;

删除文件的实质是删除该文件所在目录data block中对应的inode行(不仅是删除硬链接,删除所有文件都是如此),所以也是减少硬链接次数,由于block指针是存储在inode中的,所以不是真的删除数据,如果仍有其他inode指针(实际上是由inode号计算出inode在inode table中的偏移量从而实现寻址)链接到该inode,那么该文件的block指针仍然是可用的。当硬链接次数为1时再删除文件就是真的删除文件了,出此时inode记录中的block指针也将被删除,inode号与block号都将回收到inode bitmap、block bitmap。这机制像极了C++中的共享指针shared_ptr<T> ptr(new T),当索引数为0时(相当于此处硬链接数删除至0个时),被索引的动态内存(文件inode项、inode号、block号)才被释放,只是资源被释放,在物理磁盘上,此时的原动态内存内容(block块内容)在被其他指针(文件inode)所指向前都还维持原状,没被祸祸呢,我想这也是磁盘文件误删恢复的前提条件,借助文件系统日志可以回朔到原来的状态。

2、符号连接(软连接)

选项为-s

图片示例:[root@study ~]# ln -s /etc/crontab crontab2

符号链接(软链接)《鸟哥的Linux私房菜》

(符号链接)软链接虽然是新建了一个软链接文件,但软链接文件数据块data block(if exists,when length of target path-string acceed 60 Bytes,filesystem will give a data-block to inode,;if not,only the inode itself can record the target path-string)中只存储了其链接到的文件的文件名而已("/etc/crontab"共12个一字节字符),然后根据软链接文件属性"l"+存储的链接文件名,链接到被链接文件所在目录的inode——文件名列表block块,接下来查找被链接文件名——inode,从而读取到被链接文件的数据块data block。

转载《符号链接存储方式》:

软连接之所以也被称为特殊文件的原因是:它一般情况下不占用data block,仅仅通过它对应的inode记录(软连接文件自己的inode table表项)就能将其信息描述完成;符号链接的大小是其指向目标路径占用的字符个数,例如某个符号链接的指向方式为“rmt--> ../sbin/rmt”,则其文件大小显示为11字节;只有当符号链接指向的目标的路径名较长(60个字节)时文件系统才会划分一个data block给它;它的权限如何也不重要,因它只是一个通过路径层层访问原文件的,最终决定是否能读写执行的权限由原文件决定,所以很可能ls -l查看到的符号链接权限为777(这不是原文件的权限,只是软链接文件的权限!)。

    注意。软链接本来存储block指针的地方当目标路径名少于60个字节时存储的是目标文件名。也就是说,链接文件的一切都依赖于其目标文件名。这就解释了为什么/mnt的软链接/tmp/mnt在/mnt挂载文件系统后,通过软链接就能进入/mnt所挂载的文件系统。究其原因,还是因为其目标文件名“/mnt”并没有改变。

需要留意的是,1、符号链接与Windows的快捷方式可以划上等号,由符号链接所建立的文件是一个独立的新文件,所以会占用inode与block;2、而文件硬链接则是在创建硬连接所在目录的文件名列表block中增加一条源文件名——源文件inode的记录,并不新建文件或消耗额外空间,只有当为了增加该条记录而给目录文件名列表block分配新的block时才会造成空间消费;3、可以为目录创建软链接,此时软链接文件将链接到源目录的上层目录的inode——文件名列表block;4、硬连接直接指向文件的inode——元数据data block,软连接指向源文件或源目录所在目录的inode——文件名列表block

 

Curve+ 5.0.2:新一代色彩校准工具如何革新印刷行业标准 Curve+ 5.0.2作为新一代色彩校准工具,通过G7+校准算法和SCTV技术革新了印刷行业的色彩管理标准。该工具显著提升色彩精准度,减少打样时间和材料浪费,支持专色处理,实现跨材质色彩一致性,为印刷企业带来效率与质量的全面提升。 阅读详情

相关推荐

从零开始搭建一个高性能电流镜:手把手教你设计Wide-Swing Cascode结构

本文详细解析了Wide-Swing Cascode电流镜的设计原理与实战流程。针对低压高性能模拟电路设计的核心挑战,文章手把手指导如何从理论分析、参数计算到仿真验证,搭建一个兼具高输出阻抗和低输出电压裕度的电流镜结构,并深入探讨了偏置电路生成、性能优化及版图匹配等关键要点。

weixin_29294975的博客 626

为什么目录不支持硬链接?

引言 在大概去年十二月中旬的时候刘裕基学弟问了我这个问题,很遗憾当时并没有给出一个令人信服的解释,实在是愧疚不已。在鸟哥那本书上给出的原因说实话是有些让人迷惑的,因为书在实验室,我依稀记着书上给出的原因是如果目录要创建硬连接的话就需要在目录中的每一项上进行硬链接(可能记错了,等到学校再作修改)。说实话在我大一时看到这个书上的这个解释的时候非常疑惑,因为如果我们创建了一个指向目录的硬连接,事实上这个时候它们指向的文件控制块(FCB),也就是我们所说的inode(其实也就是盘块号)是相同的,意味着目录下的修改肯

李兆龙的博客 3853

深入解析经典蓝牙连接:从HCI命令到LMP协议的完整流程

本文深入解析经典蓝牙连接的完整流程,从设备发现、寻呼建立物理链路,到安全配对与加密的每一步。通过对照HCI LOG与AIR LOG,详细拆解了HCI命令与LMP协议报文的对应关系,帮助开发者精准定位连接问题,掌握蓝牙调试的核心方法。

weixin_29260291的博客 457

Linux ln 命令教程:轻松理解软硬链接及使用(附软硬链接讲解及为什么不能链接目录还有-n选项详细解释)

Linux ln(英文全拼:link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。ln 是一个很神奇的命令,它可以创建一个文件的影子,也可以通过一个通道进入另一个地方。其实,所有的这些把戏都是通过软链接和硬链接来实现的。本文不会花太多篇幅来深入解释“硬链接”和“软链接”两个概念,而是更侧重在 ln 命令本身的功能和使用上。

yangchuang111213的博客 1750

国产数据库安装部署说明

国产数据库安装部署说明

weixin_38203586的博客 910

C#计算八字

private string[] jq = { "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };private string[] dz = { "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥", "子" };

m0_72939038的博客 828

Unix/Linux编程:目录、硬链接、软链接

目录和(硬)链接 在文件系统中,目录的存储方式类似于普通文件。目录与普通文件的区别有二: 在其i-node条目中,会将目录标记为一种不同的文件类型 目录是经过特殊组织而成的文件。本质来说是一个表格,包含文件名和i-node编号 在大多数原生Linux文件系统上,文件名长度可以达到255个字符。 下表针对/ect/passwd所维护的文件系统i-node表以及相关目录文件的部分内容,展示了目录与i-node之间的关系。 虽然一个进程能够打开一个目录,但却不能使用 read()去读取目录的内容。(在一

OceanStar的博客 935

Unity中实现HLS视频加密与流式播放的完整方案

本文详细介绍了在Unity中实现HLS视频加密与流式播放的完整方案。针对Unity原生VideoPlayer无法直接支持实时解密的问题,提出了基于HLS协议与AES-128加密的成熟解决方案,并重点阐述了如何利用AVPro Video插件进行集成。文章涵盖了从密钥生成、使用FFmpeg进行视频加密切片,到在Unity中动态加载密钥并播放加密流的全流程,为保护付费课程、独家动画等视频内容提供了安全且高效的实践路径。

weixin_29290963的博客 393

硬链接为什么不能跨文件系统/不能链接目录?

关于为什么不能跨文件系统?我是这样理解的。首先,不同的文件系统的文件管理方式不同,甚至有些文件系统不是索引文件系统,并不一定两个文件系统的inode有相同的含义。再者,即使有相同inode含义,硬链接的几个文件,具有相同的inode号码。不同文件系统中,也可能有使用该inode号的文件,这将产生矛盾。 那不能 hard link 到目录又是怎么回事呢?因为如果使用 hard link 链接到目录

nie19940803的博客 6546

DMA+Timer 生成 PWM 波形错位问题分析与解决

本文深入分析了DMA与Timer协同生成PWM波形时出现的错位问题,揭示了DMA传输启动时机与定时器溢出中断的微妙关系。通过占空比强制清零法和预装载值调校技巧,提供了有效的解决方案,并总结了PWM+DMA配置的最佳实践,帮助开发者避免类似问题。

weixin_29191081的博客 349

【Unity程序技巧】Unity中单例模式管理器

单例模式(Singleton Pattern)是 最简单的设计模式之一

秩沅 1658

多角度分析为什么 Linux 的硬连接不能指向目录

本文翻译自两篇文章,先深刻的剖析硬链接、软链接以及inode ,此后从多个角度分析为什么Linux下不能对目录创建硬链接。在文章小结处,给以总结,如果您对Linux的文件系统感兴趣,我敢说本文值得一读!

longerzone的专栏 1万+

【AUTOSAR-Nm】-2.2-通过CAN/Lin...信号报告Nm状态机的跳转

如何通过Can/Lin/Fr/Udp/J1939信号,获取每个通道对应状态机的跳转信息:“前一次状态”和“当前状态”。

「汽车电子助手」的博客 2465

软连接和硬连接【Linux操作系统】

灵活性:软链接提供了跨文件系统和目录链接的灵活性,这对于管理和访问文件系统非常有用。即使目录被移动或重命名,只要路径正确,软链接仍然可以指向正确的目标。如果软链接指向的路径是一个循环,文件系统在解析链接时能够发现并报错,而不是陷入无限循环。数据备份:创建硬链接,确保即使文件名被删除,文件内容仍然可以通过其他硬链接访问。用户创建的目录的名字五花八门,Linux也不可能针对性的进行处理。,包含指向目标文件的路径。因此,即使软链接指向的是一个目录,软链接出来的文件是一个独立的文件,它有自己的inode。

2301_80058734的博客 1053

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

在Linux系统上创建软连接和硬连接

硬连接和软连接是Linux系统中两种重要的文件引用方式,它们各有特点和应用场景。硬连接通过共享inode节点节省空间,但不能跨文件系统且不能链接到目录;软连接则通过存储路径名实现跨文件系统和目录的链接,但需要占用额外的inode节点空间。在实际应用中,用户应根据具体需求选择合适的连接类型。

gihigo1998的博客 1552

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

初窥Linux 之 区分硬连接和软连接

一、Linux下的两种连接文件及创建方式 在Linux下面的连接文件有两种——软连接和硬连接,虽然都是连接文件,但两者却有很大的区别。一种是类似于Windows的快捷方式功能的文件(或目录),这种连接称为软连接;另一种则是通过文件系统的inode连接来产生新文件名,而不是产生新文件,这种称为硬连接。 创建连接文件的方法非常简单,就是使用ln命令,ln file1 file2,则创建硬连

ljianhui的专栏 7711

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

「复制、拷贝、替身、软连接、硬连接」区别详解

在mac文件系统中可以对一个文件进行标题中的这5种操作,操作的结果都是生成一份副本,但是其中却有很大区别。首先操作上的区别很明显 生成 软连接、硬连接 是通过命令行操作的 生成 替身、复制、拷贝 一般是通过finder进行操作的,右键某个文件,菜单中选择(其实复制也可以用命令cp来实现,跟finder操作是一个效果) 然后其中的 复制和拷贝 跟另外三种方式本质上不同,它们之间的区别也很好理解 他们的

SaltedfishCaptain 1万+

linux 软连接、硬连接创建、删除,说明

具体用法: 创建 1.软连接命令: ln -s /目录/被连接的文件(源文件) /目录/连接文件(新建立的) 2.硬连接命令: ln /目录/被连接的文件(源文件) /目录/连接文件 (新建立的) 删除 无论是软连接还是硬连接,直接删除即可 命令:rm -rf /目录/连接文件 说明: 不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。 ln的参数: ...

一个坏坏的程序员 2万+

ln软连接和硬连接的区别

是两种不同的文件链接方式,核心区别在于它们的底层实现、功能限制以及应用场景。文件系统需支持硬链接(如 ext4、XFS 支持,FAT/exFAT 不支持)。根据实际需求选择合适的链接类型,可显著提升文件管理的灵活性与安全性。删除原文件或其他硬链接时,只要存在至少一个硬链接,文件数据仍保留。使用相对路径时,解析基于软链接所在目录(而非当前工作目录)。修改任一硬链接的内容,其他链接同步变化(同一数据块)。可跨文件系统、可链接目录,路径可以是相对或绝对。软连接是一个独立的文件,存储的是。,直接指向目标文件的。

sre救赎之路 1247

Linux软连接和硬连接

软连接   命令:  ln -s 原文件 目标文件   特征:     1.相当于windows的快捷方式     2.只是一个符号连接,所以软连接文件大小都很小     3.当运行软连接的时候,会根据连接指向找到真正的文件,然后执行     4.所有软连接文件的权限是777,而真正的权限是由指向的那个文件决定的     5.原文件丢失,软连接无法访问,会报找不到的错误     6.ls -al以...

专注于AI领域前沿技术学习与分享:目标检测、图像修复、超分重建、AI工程化 1026

软连接硬连接

软连接(符号链接)和硬连接是文件系统中的两种链接方式,总结来说,软连接和硬连接在实际应用中各有优劣,选择哪种方式取决于具体需求和使用场景。软连接更灵活,适用于跨文件系统和目录链接,而硬链接则更高效,适用于同一文件系统内的文件共享和管理。软连接:是一个独立的文件,包含指向目标文件路径的引用。相当于Windows系统中的快捷方式。硬连接:是目标文件的一个额外的目录项,指向同一个inode。多个硬链接指向同一个物理文件。

qq_43287763的博客 793

【浅学Java】Linux系统中的硬连接和软连接

Linux最强总结,内含机密,请肾重

qq_52276036的博客 1298

Linux初学之硬连接与软连接

前文我们提到过,操作系统读取文件数据是通过inode去读取文件块的数据,也就是说这些互为硬连接的文件只是文件名(文件路径)不同罢了,通过它们获取到的数据是一致的。一个块中包含多个连续的扇区,这里需要注意的是,扇区是物理层面实际存在的,而块是虚拟的概念,是文件系统的一个概念。如上图所示,我建立了2个软连接,当我查看或修改abc.txt.link2的内容时,会先根据自己的文件名找到文件的inode编号,进而找到文件块中保存的原文件abc.txt.link的地址。3、通过inode中信息找到用户数据所在的“块”

qq_54381110的博客 589

【Linux】软连接与硬连接

每个分区都可以理解为分成两部分,一小部分里边是存放文件的节点信息,大部分放的是文件块。节点号,时间,权限,保存位置。而块中保存的是文件中的数据。iBlock但是有一个问题,一个文件的文件名是存放哪里?我们就以在文件夹root中有一个文件abc为例。文件路径为/root/abc。在root目录中,所有的文件都有i节点名和对应的Block块,而root目录也有自己的i节点信息。有i节点信息,就有与之对应的Block块,root目录的Block块中存放的数据是root。

zclinux的博客 1637

Linux中硬连接与符号连接的区别

要弄清楚硬连接与符号连接的区别,首先要知道Linux的Ext2文件系统的基本原理: 每个文件(无论是一般文件还是目录文件)都会占用一个inode和至少一个block。 inode记录文件的权限、属性和该文件占用的block号码(注意inode没有记录该文件的文件名)。 block记录文件的实际内容(对于目录文件,它的block记录的是在该目录下的文件名和该文件名占用的inode号码)。 当

Warren_Hoo的专栏 1755

linux 中的软连接和硬连接(soft link & hard link)

linux 中的软连接和硬连接(soft link &amp; hard link) 类似如计算机中的传值调用和传址调用。 首先需要知道的是,在计算机中数据是一块块的数据块,为了提高搜索的效率,这些数据块是有一个元数据块的,也就是数据块的描述信息。其中有个叫做inode的描述信息作为文件的唯一id使用,他就是索引节点号。系统就是通过这个号码来寻找正确的文件数据块的。 下面介绍硬连接和软连接,...

有意思 3483
上一篇: Win10基础上安装Ubuntu18.04LTS双系统
下一篇: du命令与df命令统计的文件|目录大小不一致的解释
HayPinF
博客等级 码龄9年 175粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值