inode与软硬链接
复习文件系统-导入软硬链接
一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。 除了硬链接以外,还有一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。 这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:“No such file or directory”。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。
软硬连接
在shell中,硬链接是通过inode引用另外一个文件,软链接是通过名字引用另外一个文件。
创建软链接ln -s 被链接的文件名 链接文件
上述命令是创建软链接的,ln表示link,-s表示soft
[yyq@VM-8-13-centos 2023_02_07_Hard-Soft_Link]$ touch ceshi.txt
[yyq@VM-8-13-centos 2023_02_07_Hard-Soft_Link]$ ln -s ceshi.txt CESHI_Soft.LINK//为ceshi.txt创建软链接,CESHI_Soft.LINK访问ceshi.txt
[yyq@VM-8-13-centos 2023_02_07_Hard-Soft_Link]$ ll
total 0
lrwxrwxrwx 1 yyq yyq 9 Feb 7 17:12 CESHI_Soft.LINK -> ceshi.txt//可以看出文件类型是l,叫做链接文件
-rw-rw-r-- 1 yyq yyq 0 Feb 7 17:11 ceshi.txt
再看看这两个文件的inode
[yyq@VM-8-13-centos 2023_02_07_Hard-Soft_Link]$ ls -i -l
total 0
922006 lrwxrwxrwx 1 yyq yyq 9 Feb 7 17:12 CESHI_Soft.LINK -> ceshi.txt//软连接也是一个独立的文件,有自己独立的inode
922005 -rw-rw-r-- 1 yyq yyq 0 Feb 7 17:11 ceshi.txt//文件权限后面的1表示链接数
创建硬链接ln 被链接的文件名 链接文件
[yyq@VM-8-13-centos 2023_02_07_Hard-Soft_Link]$ ln ceshi.txt CESHI_Hard.LINK
[yyq@VM-8-13-centos 2023_02_07_Hard-Soft_Link]$ ll
total 0
-rw-rw-r-- 2 yyq yyq 0 Feb 7 17:11 CESHI_Hard.LINK
lrwxrwxrwx 1 yyq yyq 9 Feb 7 17:18 CESHI_Soft.LINK -> ceshi.txt
-rw-rw-r-- 2 yyq yyq 0 Feb 7 17:11 ceshi.txt
-------------inode信息--------------
922005 -rw-rw-r-- 2 yyq yyq 0 Feb 7 17:11 CESHI_Hard.LINK//硬链接的inode与ceshi.txt一样,多个文件名指向同一个inode,该inode的链接数变为2(inode的引用计数-硬链接数)
922006 lrwxrwxrwx 1 yyq yyq 9 Feb 7 17:18 CESHI_Soft.LINK -> ceshi.txt
922005 -rw-rw-r-- 2 yyq yyq 0 Feb 7 17:11 ceshi.txt
删除链接文件
unlink 文件名
区别
1、软硬链接的区别是:是否具有独立的inode!软链接有独立的inode,可以被当作独立文件看待;硬链接没有独立的inode,与文件共用一个inode,硬连接是不会建立inode的,他只是在文件原来的inode link count域再增加1而已,也因此硬链接是不可以跨越文件系统的。
2、计数特征:硬链接会更改目标文件的引用计数(新增文件名,建立和inode的映射关系),软链接在文件内容中保存目标文件的路径(即通过路径,说白了就是文件名建立映射关系)。
3、硬链接删除后,不影响原文件;删除原文件,不影响硬链接。软链接删除后,不影响原文件;删除原文件,会影响软链接(提示“没有该文件或目录”)。
4、软链接可以对一个不存在的文件名(filename)进行链接,硬链接不可以(其文件必须存在,inode必须存在);软链接可以对目录进行连接,硬链接不可以。
硬链接
建立一个硬链接,OS做了什么?在指定的路径下(目录)创建硬链接,在目录的data block中新增硬链接的文件名和被链接文件的inode的映射关系。(告诉目录我就要和他建立链接关系)
通过观察,我们可以看到硬链接的属性、拥有者所属组、文件大小、时间等都是与被链接文件一样的。建立硬链接实际上什么都没做,没有创建新文件。因为没有给硬链接分配独立的inode。既然硬链接没有创建新文件,那么硬链接的属性集合和内容集合用的肯定是别的文件的。
inode的引用计数–就叫做硬链接数,我们在删除文件时干了两件事情:1.在目录中将对应的记录删除,2.将硬连接数-1,如果为0,则将对应的磁盘释放。
什么时候一个文件算被真正地删除呢?不单单是位图对应的比特位置0,而是其硬链接数变成0的时候才算被真正删除。
普通文件和目录的默认硬链接数
创建一个普通文件,其硬链接数为1;创建一个目录,其硬链接数为2。
为什么普通文件的默认硬链接数为1呢?因为一个普通文件就有其对应的inode,文件名与inode形成映射关系,所以算1个硬链接。
为什么目录的默认硬链接数为2呢?因为在目录中还有隐藏的.
和..
,.
表示当前路径,即.
是这个目录的一个硬链接。从下面的代码可以看到.
和empty
的inode编号922010相同。故第1个硬链接为文件名自己;第2个硬链接为.
所表示的当前路径。
[yyq@VM-8-13-centos 2023_02_07_Hard-Soft_Link]$ ll -i -n
922010 drwxrwxr-x 2 1001 1001 4096 Feb 8 13:55 empty
[yyq@VM-8-13-centos 2023_02_07_Hard-Soft_Link]$ cd empty
[yyq@VM-8-13-centos empty]$ ll -a -i -n
total 8
922010 drwxrwxr-x 2 1001 1001 4096 Feb 8 13:55 .//empty的硬链接
922001 drwxrwxr-x 3 1001 1001 4096 Feb 8 13:55 ..//上层目录的硬链接数会+1
普通用户不允许给目录创建硬链接,可以建立软链接。为什么?而.
和..
不就是给目录建立硬链接吗?
因为OS不允许普通用户创建,.
和..
是特殊情况,是由OS自己创建的。目录硬链接产生了很多回环依赖的关系,并且导致了很多歧义性。实际上Linux的目录结构虽然经常被称为目录树,是不带回环的图结构。
硬链接是与本体完全等价,无法单独处理,会导致递归;符号链与本体不等价,可以单独处理,不会导致递归。而文件不会导致递归,所以可以硬链接。
软连接/符号链接
是一个独立的文件,有独立的属性和内容。软链接标定/查找一个文件时,不是用inode去找到文件的,而是根据文件名来找文件的。软链接的数据块保存的是所指向的目标文件的路径(路径就是用文件名组成的)。
应用场景
动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。
静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库
ACM时间
Access
最后访问时间: 软硬链接、cat
命令(多次访问时间可能不变)等操作,
Modify
文件内容最后修改时间: echo重定向修改内容等操作
Change
属性最后修改时间: chmod
命令等操作,
modify和change这两个时间可能联动,因为modify可能会让文件的属性(大小等)发生改变。access时间,访问一定的次数到规定值时才会刷新,因为平时我们的操作就是访问文件,如果每次访问都要刷新访问时间,要把数据更新到磁盘,而磁盘io太慢了,故现在linux对access时间做了调整。
inode与软硬链接相关推荐
- Linux——文件系统inode与软硬链接
目录 一.inode (一).背景知识 (二).inode 二.软硬链接 (一).软链接 (二).硬链接 一.inode (一).背景知识 我们知道,磁盘是按磁道与扇区划分.Linux把一个磁盘进行了 ...
- Linux中的 inode以及 软硬链接分析
一. inode 是什么?(索引节点)理解inode 需要知道文件存储,文件是存储在硬盘上的,操作系统读取硬盘的时候会连续读取多个扇区(硬盘的最小存储单元),即一次性读取一个块(文件存取的最小单位). ...
- 【Linux】文件系统与inode、软硬链接
目录 一.磁盘结构 二.文件系统 2.1 文件系统的区域划分 2.2 文件系统分区介绍 2.3 文件名与inode 三.软硬链接 3.1 软链接 3.2 硬链接 一.磁盘结构 理解文件系统前首先我们要 ...
- Linux 文件系统与inode,软硬链接
目录 磁盘的结构 磁盘的抽象(虚拟,逻辑)结构 分区 Block Group 块组: 分析: 文件名 vs inode编号 创建/删除/查看 一个文件,操作系统做了什么? 软硬链接 软连接 硬链接 对 ...
- inode和软硬链接
文章目录: 一.理解文件系统 1.1 什么是inode 1.2 磁盘了解 1.2.1磁盘的硬件结构 1.2.2 磁盘的分区 1.2.3 EXT2文件系统 二.软硬链接 2.1 软链接 2.2 硬链接 ...
- 【Linux】文件系统/inode/软硬链接
目录 一.了解磁盘 1.磁盘的概念 2.磁盘的物理结构 3.磁盘的逻辑结构 4.磁盘区域的划分 二.linux文件系统 三.inode 四.软硬链接 1.软链接 2.硬链接 一.了解磁盘 前言: 一般 ...
- Linux系统编程23:基础IO之了解硬盘物理和逻辑结构及明白inode的本质和掌握软硬链接及其区别
文章目录 (1)硬盘的逻辑结构与物理结构 A:物理结构 B:逻辑结构 (2)inode A:inode是什么 B:块组 C:块中有什么 D:创建,删除文件的本质 E:目录的本质 (3)软硬链接 A:复 ...
- Linux inode、block、文件类型、软硬链接等相关文件的知识
1 Linux中的文件 1.1 文件属性概述 Linux系统中的文件或目录的属性主要包括:索引节点(inode).文件类型.权限属性.链接数.所归属的用户和用户组.最近修改时间等内容. [root@o ...
- linux中的inode文件编号和软硬链接
目录 inode编码 磁盘 扇区 目录下的data block inode 和 文件名的关系 软硬链接 硬链接 软连接 inode编码 一个文件,对应一个inode属性节点,inode编号,linux ...
最新文章
- 2017年智能家居将从概念走进现实
- java ADT生成带签名的apk
- POJ2669不错的最大流 竞赛问题(枚举King的个数)
- 用Matlab模拟一个缓冲区大小为10的随机排队系统
- 二维数组中的一些问题
- 有关identity的小技巧
- 爬虫 spider05——使用httpclient发送get请求、post请求
- 汇编语言程序设计,计算比赛成绩
- 解决虚拟机安装64位系统“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”的问题...
- 五、CPU详解、寄存器详解、标志寄存器详解
- 程序员们如何破局 5G?
- 万维网之父:Facebook、Google 等硅谷巨头必须被拆分!
- 数据结构上机实践第11周项目2 - 操作用邻接表存储的图
- win10系统安装提示带有gui的服务器,安装win10提示“由于技术员系统中无接入音频设备,要启动GUI”如何...
- 非极大值抑制(Non-max suppression)
- 晕晕沉沉的一天,ISAPI_Rewrite 2.9破解版竟然是假的
- error: invalid operands of types ‘QLabel*‘ and ‘void‘ to binary ‘operator>
- Android直接回复通知
- Android解析SRT字幕文件
- SHIMANO套件差别详解