Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Linux软链接与硬链接实战解析

Linux软链接与硬链接实战解析

作者头像
公众号guangcity
发布于 2019-09-20 09:24:18
发布于 2019-09-20 09:24:18
6.2K0
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

1.硬链接

一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。

这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。

执行ln a.c a.c.bak后,硬链接数加1。

每创建一个硬链接,硬链接数加1,并不会增加额外的空间。软链接是原文件的快捷方式。

45360233表示inode值,类似于C语言中的指针,指向了物理硬盘的一个区块,文件系统会维护一个引用计数,只要有文件指向这个区块,它就不会从硬盘上消失。

两个inode值一样,都指向同一个区块。

inode学习

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。这是Linux文件系统管理文件的方式。在建立文件系统时,会建立一个索引节点表,里面包含一定数量的索引节点。每当建立一个文件时,就会为他分配一个索引节点号,相当于文件的地址。

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。

这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据

使用ls -i命令,可以看到文件名对应inode号码。

inode的特殊作用

由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

  1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
  2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
  3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

2.软链接

假设有个文件a.c与b.c,那么文件a.c和文件b.c的inode号码虽然不一样,但是文件b.c的内容是文件a.c的路径。读取文件b.c时,系统会自动将访问者导向文件a.c。因此,无论打开哪一个文件,最终读取的都是文件a.c。这时,文件b.c就称为文件a.c的"软链接"(soft link)或者"符号链接(symbolic link)。

创建一个软链接,加-s参数,ln -s a.c b.c

查看上述inode值,发现软链接文件的inode值不同。并且它的文件属性上也有一个 l的 flag,这就说明它与之前我们创建的两个文件根本不是一个类型。

当删除原文件a.c时候,查看硬链接文件不变,但是查看软链接的文件b.c,会发现报错。

之前的硬链接没有丝毫地影响,因为它 inode 所指向的区块由于有一个硬链接在指向它,所以这个区块仍然有效,并且可以访问到。

然而软链接的 inode 所指向的内容实际上是保存了一个绝对路径,当用户访问这个文件时,系统会自动将其替换成其所指的文件路径,然而这个文件已经被删除了,所以自然就会显示无法找到该文件了。

最后,我们复原a.c,再来看b.c。

发现,a.c与a.c.bak的inode不一样,因为此时是新文件,自然inode不一样,同样文件内容也不同。而当查看软链接的b.c文件的时候,此时没报错,说明复原了b.c。

文件夹软链接

文件夹硬链接

综上可以发现,凡是文件都可做软或硬链接,但是文件夹则是只能做软链接。

3.总结

1.硬链接是通过索引节点进行的链接。在Linux中,多个文件指向同一个索引节点是允许的,像这样的链接就是硬链接。硬链接只能在同一文件系统中的文件之间进行链接,不能对目录进行创建。如果删除硬链接对应的源文件,则硬链接文件仍然存在,而且保存了原有的内容,这样可以起到防止因为误操作而错误删除文件的作用。由于硬链接是有着相同 inode 号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同 inode 号的文件。

2.软链接(也叫符号链接)与硬链接不同,文件用户数据块中存放的内容是另一文件的路径名的指向。软链接就是一个普通文件,只是数据块内容有点特殊。软链接可对文件或目录创建。(快捷方式指的就是软链接)。

软链接主要应用于以下两个方面:一是方便管理,例如可以把一个复杂路径下的文件链接到一个简单路径下方便用户访问;另一方面就是解决文件系统磁盘空间不足的情况。例如某个文件文件系统空间已经用完了,但是现在必须在该文件系统下创建一个新的目录并存储大量的文件,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中,这样就可以很好的解决空间不足问题。删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接。

3.硬链接使用场景少。

You generally should not use hard links anyway

也就是不建议使用硬链接,确实应用场景不多,但存在即合理,有时用其拷贝文件防止误删。

参考资料:

1.https://www.linuxprobe.com/soft-hard-links-comments.html

2.inode理解

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux文件的软链接和硬链接
Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
恋喵大鲤鱼
2018/08/03
7.8K0
软链接 vs. 硬链接
要想理解硬链接和软链接的区别,首先要明白什么是 Inode。Inode 是 Index node,索引节点的意思。每个文件都有一个 inode,里边保存着文件的元数据(meta data),包括:inode 号、文件大小、文件所有者、文件权限、文件类型、创建时间、硬链接数等等,除了文件名以外的所有文件信息都存储在这里。它是文件或者目录在一个文件系统中的唯一标识。
Coding十日谈
2020/08/13
1.3K0
软链接 vs. 硬链接
Linux之硬链接与软链接
2、在Linux中,元数据中的inode号(inode是文件元数据的一部分但其并不包含文件名,inode号即索引节点号)才是文件的唯一标识而不是文件名。(例如对一个文件重命名(mv)但inode号仍相同)。
CoreDao
2021/04/13
7.6K0
Linux之硬链接与软链接
Linux硬链接与软链接
在Linux中,连接文件有两种,一种类似于Windows的快捷方式,可以让你快速地链接到目标文件(或目录),这种称为软链接(soft link),也叫作符号链接(symbolic link);另一种则是通过文件系统的 inode 连接来产生新文件名,而不是产生新文件。这种称为硬链接(hard link),也叫作实体链接。 软链接与硬链接是两种完全不一样的东西。
恋喵大鲤鱼
2019/03/04
23.5K1
Linux硬链接与软链接
Linux 软硬链接
inode是一组描述文件的数据,包括文件类型,权限,以及最重要的一点文件数据所在的数据池,inode在inode表中以数字形式表示。
Yif
2019/12/26
3.4K0
Linux硬链接,软链接
文件是存储在硬盘上的,硬盘最小单位叫扇区(sector),每个扇区存储512字节。操作系统读取硬盘的时候,如果一个一个读取那效率很低,因此一次性读取多个扇区,即一次性读取一个块(block)。这种多个扇区组成的块,就是文件存取的最小单位。block的大小最常见的是4KB,即连续8个sector组成一个block。
doper
2022/08/23
9.9K0
linux软链接和硬链接
硬链接相当于一个灾备系统,数据存放在两处,与复制不同的是两处之间存在同步机制,一处数据的改变会实时同步到另一处,另外一处数据如果被删除了,不会影响到另一处的数据.
阳光岛主
2019/02/19
8.7K0
详解 Linux 中的硬链接与软链接
在 Windows 中安装应用程序,通常安装向导会提示是否创建桌面快捷方式。如果选择同意创建,安装完成后会在桌面上看到对应应用程序的图标,如果想要使用这个应用程序只需要双击桌面上的快捷方式即可,这就是 Windows 中的快捷方式。Linux 链接文件类似于 Windows 中的快捷方式,Linux 链接文件分为硬链接和软链接,不过在具体介绍 Linux 中的硬链接和软链接之前,先来看看 Linux 文件系统中文件的具体结构。
触摸壹缕阳光
2020/09/01
12.6K2
理解inode 以及 软链接和硬链接概念区分
https://www.cnblogs.com/huxiao-tee/p/4657851.html 
西湖醋鱼
2020/12/30
4710
理解inode 以及 软链接和硬链接概念区分
【Linux探索学习】第二十四弹——软硬链接:Linux 中的软链接与硬链接详解
https://blog.csdn.net/2301_80220607/category_12805278.html?spm=1001.2014.3001.5482
GG Bond1
2024/12/28
1430
【Linux探索学习】第二十四弹——软硬链接:Linux 中的软链接与硬链接详解
LINUX软链接和硬链接
1.Linux链接概念 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。 【硬连接】 硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索 引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户 就可以建立硬连接到重要文件,以防止“
wangxl
2018/03/07
8.1K0
Operating System 10 - 硬链接与软链接
在Linux中文件被分为用户数据(user data)与元数据(metadata).
Reck Zhang
2021/08/11
5280
Operating System 10 - 硬链接与软链接
Linux中的软链接、硬链接:都用在哪些场合?
最近,看到很多文章都在介绍 Linux 中的文件系统,其中就包括:inode 节点、软链接、硬链接等重要的概念。
IOT物联网小镇
2021/06/22
4K0
Linux中的软链接、硬链接:都用在哪些场合?
软链接与硬链接的区别
由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:
233333
2018/12/24
1.7K0
软链接与硬链接的区别
软件测试|Linux基础教程:ln命令与软链接和硬链接
在Linux系统中,ln命令是一个非常有用的工具,用于创建链接(link),将一个文件或目录链接到另一个位置。链接允许一个文件或目录可以同时存在于多个位置,而不会占用额外的磁盘空间。ln命令支持创建硬链接和软链接两种类型的链接。本文将详细介绍Linux中ln命令的用法、语法以及两种链接类型的区别。
霍格沃兹测试开发Muller老师
2023/10/19
4620
Linux软连接和硬链接
1.Linux链接概念 一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。 注意:ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化; 索引节点(inode) 要了解链接,我们首先得了解一个概念,叫索引节点(inode)。在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),
汤高
2018/01/11
6.3K0
linuxNote2_软硬链接
Linux中链接分为两种,一种是硬链接 Hard link,一种是软链接 Symbolic link。默认情况下,ln命令产生硬链接。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。 Linux软硬链接 理解Linux的硬链接和软链接 ---- 硬链接 在 Linux 的文件系统中,保存在磁盘分区中的文件都被分配一个编号,称为索引节点号(Inode Index)。硬连接指通过索引节点来进行连接。 硬链接是有相同的inode,仅文件名不同的文
皮大大
2021/03/01
4320
深入理解“软链接”和“硬链接”的区别?
链接简单说实际上是一种文件共享的方式,是 POSIX 中的概念,主流文件系统都支持链接文件。
咻一咻
2020/05/29
2.1K0
文件特殊权限suid、sgid、stick_bit、软链接、硬链接
umask的数值0022中第一位代表的就是特殊权限,包括有suid、sgid、sticky_bit。
阿dai学长
2019/04/03
9280
软链接和硬链接
在操作系统级别看存储空间的话,是分为很多的block块,这些block块是分为很多种类的
mindtechnist
2024/08/08
1460
软链接和硬链接
相关推荐
Linux文件的软链接和硬链接
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文