OS | 透过 inode 来理解硬链接和软链接
什么是inode?
每个文件都对应一个唯一的inode,inode用来存储文件的元信息,包括:
- 对应的文件
- 文件字节数
- 文件数据块的位置
- 文件的inode号码
- 文件的硬链接数
- 文件的读写权限
- 文件的时间戳
在Linux系统下,创建一个文件hello.txt
echo 'hello world' -> 'hello.txt'
接着使用stat命令查看hello.txt的inode信息:
stat hello.txt
文件:hello.txt
大小:14 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:34025713 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2022-08-18 15:44:56.158501724 +0800
最近更改:2022-08-18 15:44:56.158501724 +0800
最近改动:2022-08-18 15:44:56.158501724 +0800
创建时间:2022-08-18 15:44:56.158501724 +0800
inode和文件名
操作系统使用inode号码来识别文件,而人使用文件名来识别文件
人在打开文件的时候,实际上系统是先通过文件名找到对应的inode号码,然后根据inode号码找到文件inode信息,根据inode信息找到文件内容所在的数据块,最后读取数据。
硬链接
文件和inode的关系是一对一,而文件名和inode的关系则是一对多,系统允许多个文件名对应一个inode

inode信息中的硬链接(Links)数,就表示当前有几个文件名对应着该inode,换句话说,每个文件名就是文件的一个硬链接
增加硬链接
使用ln命令为hello.txt生成一个硬链接,格式:ln 源文件名 硬链接文件名
ln hello.txt hello-hard-link.txt
再用stat hello.txt查看源文件的硬链接数,值变为2
删除硬链接
rm -f hello-hard-link.txt
再次查看硬链接数,值为1
当一个文件的硬链接大于1时,删除一个硬链接(也就是文件名),不会影响源文件,只有当硬链接数等于 \(0\) ,系统才会删除源文件
修改源文件
修改源文件内容,会影响所有硬链接,因为硬链接都是指向同一个源文件的数据块
软链接
软链接也叫符号链接,很好理解,可以理解为window系统里的快捷方式
先创建一个硬链接:
ln hello.txt hello_hard_link.txt
然后,创建一个软链接:
ln -s hello.txt hello_s.txt
此时,文件hello.txt有2个硬链接,1个软链接,接下来,删除刚刚用来创建软链接的文件名:
rm -f hello.txt
这个时候,打开文件hello_s.txt就会报错“No such file or directory”。
刚才只是删除了一个文件名,并没有影响到源文件,但是通过软链接打开文件却报错了,并不是因为源文件不存在了,而是因为软链接指向的硬链接被删除了。
这就是软链接和硬链接的区别,软链接指向的是文件名(也就是硬链接),硬链接指向的是文件的inode号码。

OS | 透过 inode 来理解硬链接和软链接的更多相关文章
- 透过inode来理解硬链接和软链接
什么是inode? 每个文件都对应一个唯一的inode,inode用来存储文件的元信息,包括: 对应的文件 文件字节数 文件数据块的位置 文件的inode号码 文件的硬链接数 文件的读写权限 文件的时 ...
- 理解 Linux 的硬链接与软链接【转】
转自:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html 从 inode 了解 Linux 文件 ...
- 理解 Linux 的硬链接与软链接(待研究)
从 inode 了解 Linux 文件系统 硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux ...
- 转:理解 Linux 的硬链接与软链接
Linux 的文件与目录 现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程 创建信息的逻辑单元可被多个进程并发使用.在 UNIX 系统中,操作系统为磁盘上的文本与图像.鼠标与键 ...
- [svc]linux的inode和block-软硬链接
磁盘结构 容量 磁盘结构 磁盘容量 = 一个柱面大小柱面的总数 = 磁头数量每个磁道上的扇区数一个扇区大小柱面总数 存储容量=磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数 了解-什么是 ...
- 硬链接、软链接和inode
一.inode 在Linux中,“一切皆文件”. 唯一标识文件的是inode而非文件名,文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 寻找正确的文件数据块. 什么是数据块呢?文件储存 ...
- (转)Linux硬链接、软链接及inode详解
inode 文件储存在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读 ...
- 理解 Linux 的硬链接与软链接(转)
Linux 的文件与目录 现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用.在 UNIX 系统中,操作系统为磁盘上的文本与图像.鼠标与键盘 ...
- 理解 Linux 的硬链接与软链接
Linux 的文件与目录 现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用.在 UNIX 系统中,操作系统为磁盘上的文本与图像.鼠标与键盘 ...
- [转帖]详解Linux系统inode原理--硬链接、软链接、innodb大小和划分等
详解Linux系统inode原理--硬链接.软链接.innodb大小和划分等 原创 波波说运维 2019-07-17 00:03:00 https://www.toutiao.com/i6713116 ...
随机推荐
- 重写Nacos服务发现逻辑动态修改远程服务IP地址
背景 还是先说下做这个的背景,开发环境上了K8S,所有的微服务都注册在K8S内的Nacos,注册地址为K8S内部虚拟IP,K8S内的服务之间相互调用没有问题,但是本机开发联调调用其他微服务就访问不到. ...
- 【UniApp】-uni-app-CompositionAPI应用生命周期和页面生命周期
前言 好,经过上个章节的介绍完毕之后,了解了一下 uni-app-OptionAPI应用生命周期和页面生命周期 那么了解完了uni-app-OptionAPI应用生命周期和页面生命周期之后,这篇文章来 ...
- [ABC263D] Left Right Operation
Problem Statement You are given an integer sequence of length $N$: $A=(A_1,A_2,\ldots,A_N)$. You wil ...
- 【软件安装】vmware虚拟机安装完整教程(15.5版本)
目录 一.基础介绍 二.准备工作(注意:如果自己下载不下来翻到最下面获取下载地址) 三.VMware下载与安装 VMware Workstation15.5新功能 注意: 一.基础介绍 VMware ...
- CISC与RISC
- Scrapy如何在爬虫类中导入settings配置
假设我们在settings.py定义了一个IP地址池 ##### 自定义设置 IP_PROXY_POOL = ( "127.0.0.1:6789", "127.0.0.1 ...
- 中企网安信息科技:基于数据化大屏的BI数据分析管理系统概述
由华企网安总公司北京中企网安信息科技有限责任公司开发的<基于数据化大屏的BI数据分析管理系统>,获得国家版权局颁发的计算机软件著作权登记证书. 基于数据化大屏的BI数据分析管理系统利用大数 ...
- NC65获取Token以及相关信息
private static void setToken() { IPriviledgedGenerator tokenGenerator = (IPriviledgedGenerator) Busi ...
- 【fmjava】 面试题突击训练-Java基础语法篇01
JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称, Java 开发工具包, 提供了 Java 的开发环境和运行环境. JRE:Java Runtime Env ...
- 聊一聊 C# 的线程本地存储TLS到底是什么
一:背景 1. 讲故事 有朋友在后台留言让我说一下C#的 ThreadStatic 线程本地存储是怎么玩的?这么说吧,C#的ThreadStatic是假的,因为C#完全是由CLR(C++)承载的,言外 ...