linux文件存储之inode,硬链接,软链接详解

news2025/2/26 9:42:49

1.什么是inode

        首先linux一切皆文件,一切皆文本流

        inode ,中文译名“索引节点”,也叫“i节点”

         文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。

        操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。        

        Linux系统中文件的文件名和文件数据是分开存储的,而文件数据又分为实际数据与元信息。
元信息类似于文件属性,包括文件的创建者、创建日期、文件大小、文件权限等信息,实际信息存储在块block中,而存储文件元信息的区域就叫做inode,因此一个文件必须占用一个 inode, 并且至少占用一个block。
        Linux内部使用 inode号来识别文件,而非文件名,对于系统来说,文件名是 inode号的别称,是便于用户识别文件的,文件名和 inode号是一一对应的关系,每个 inode号对应一个文件名。
 

2.查看文件inode信息

        命令:stat 文件名 

[test@test ~]$ stat 1.sh 
  File: ‘1.sh’  
  Size: 48        	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 67308180    Links: 2
Access: (0777/-rwxrwxrwx)  Uid: ( 1000/    test)   Gid: ( 1000/    test)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2023-10-20 10:24:37.122033787 +0800
Modify: 2023-10-16 11:21:29.118521587 +0800
Change: 2023-10-20 10:58:12.815119852 +0800
 Birth: -

--显示信息包括
--文件,大小,块,io块,文件类型,设备,inode号,链接,权限,用户,组
--最近访问信息,最近修改,最近改变信息,创建信息

        总之,除了文件名以外的所有文件信息,都存在inode之中Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

        inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
       查看每个硬盘分区的inode总数和已经使用的数量 命令: df -i 

        由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。

3.打开文件发生了什么

--如果是新建文件,那么文件会为文件分配一个唯一的inode号,并将inode号和文件名关联

1.系统找到这个文件名对应的inode号码;

2.通过inode号码,获取inode信息;

3.根据inode信息,找到文件数据所在的block,读出数据。

4. 硬链接软连接

        ln(英文全拼:link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。

ln [参数][源文件或目录][目标文件或目录]

        常用的参数 软连接参数-s ,不加是硬链接,其余参数我不常用

  • --backup[=CONTROL] 备份已存在的目标文件
  • -b 类似 --backup ,但不接受参数
  • -d 允许超级用户制作目录的硬链接
  • -f 强制执行
  • -i 交互模式,文件存在则提示用户是否覆盖
  • -n 把符号链接视为一般目录
  • -s 软链接(符号链接)
  • -v 显示详细的处理过程

5.硬链接和软连接的区别 

        有一个文件1.sh,对他分别创建一个软连接和硬链接

[test@test ~]$ ll
-rwxrwxrwx. 1 test test 48 Oct 16 11:21 1.sh
[test@test ~]$ cat 1.sh 
#! /bin/bash
echo 111
echo $SHLVL
echo $BASHPID
----创建软连接 -s
[test@test ~]$ ln -s 1.sh 1
----硬链接
[test@test ~]$ ln -v 1.sh 2
‘2’ => ‘1.sh’

        分别查看他们的inode号 ll -i

        可以看到,硬链接 2 的inode号和源文件1.sh 的inode号一样软连接 1 产生了个新的inode号

       区别1:

        硬链接:在文件系统了建了个文件名2,和原始文件1.sh共享相同的inode块和数据块,因此他们的文件大小和修改时间也是相同的

        软链接:产生了一个新的文件1,可以理解成快捷方式,指向原始文件1.sh或者目录的路径,不共享inode块和数据块,因此他们的大小和修改时间不同

        

        区别2:

         软连接可以 跨文件系统 ,硬链接只有在同一个文件系统中才能创建;软链接可以对一个不存在的文件名wwwwww进行链接;软链接可以对目录进行链接,硬链接不允许对目录进行链接

        硬链接,以文件副本的形式存在。但不占用实际空间不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

       区别3:删除原始文件1.sh,软连接会失效(指向的文件没了),硬链接不会。

        yeah!求赞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1126656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java的校园餐厅订餐管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

塔望3W消费战略全案丨轻食植物基,突围侧翼战

植鲜生 客户:民强(昆山)食品科技有限公司 品牌:植鲜生 时间:2021年起 项目部分内容保密期 突破传统植物基禁锢 破局轻食新赛道 民强(昆山)食品科技有限公司是一家集研发、生产、销售为一体…

详细讲解MySQL中的数据类型

详细讲解MySQL中的数据类型 一,整数类型 MySQL中常用的整数类型包括: TINYINT:占用1字节,表示范围为-128到127的有符号整数或0到255的无符号整数。 SMALLINT:占用2字节,表示范围为-32768到32767的有符号整…

众佰诚:开抖音小店需要交保证金吗

随着互联网的发展,越来越多的人选择通过开设网店来创业。抖音作为一款短视频平台,也提供了开店的功能。那么,开抖音小店需要交保证金吗?这是许多创业者关心的问题。 首先,我们需要明确的是,开设抖音小店是需要交纳保证…

【TensorFlow1.X】系列学习笔记【入门四】

【TensorFlow1.X】系列学习笔记【入门四】 大量经典论文的算法均采用 TF 1.x 实现, 为了阅读方便, 同时加深对实现细节的理解, 需要 TF 1.x 的知识 【TensorFlow1.X】系列学习文章目录 文章目录 【TensorFlow1.X】系列学习笔记【入门四】前言损失函数作用均方误差(MSE)交叉熵(C…

智能医疗:互联网医院开发的挑战与机会

随着技术的不断进步,互联网医院的发展为医疗保健带来了巨大的机遇,但同时也带来了一系列挑战。本文将探讨互联网医院开发中的一些关键挑战和机会,以及如何应对这些挑战。 挑战一:数据隐私和安全性 在互联网医院开发中&#xff…

Kubernetes技术与架构-网络 2

Kubernetes集群支持IP地址以及DNS访问Pod或者Service。 Service域名解析 Service域名解析包括A/AAAA记录以及SRV记录 A/AAAA记录 域名:my-svc.my-namespace.svc.cluster-domain.example 该域名对应的service名称是my-svc、service的命名空间是my-namespace、servic…

Qt之自定义model读写CSV文件

一.效果 本文基于QAbstractTableModel实现了一个支持读写CSV文件的TableModel。CSV数据格式虽然很简单,但是网上大多数读写方式其实都是有bug的,没考虑到字段里包含逗号或换行符这种复杂数据的情况。 二.原理 CSV(Comma-Separated Values)文件是一种简单类型的纯文本文件…

GoLong的学习之路(三)语法之运算符

书接上回,我们进展到了GoLong的基本数据类型,接下来说运算符(其实和常见的编程语言的逻辑规则一样) 运算符 运算符用于在程序运行时执行数学或逻辑运算。(不可谓不重要) Go 语言内置的运算符有&#xff…

python基础语法(4)

基础语法 前言文件文件是什么文件路径文件操作1.打开文件2. 关闭文件3.写文件4. 读文件5.上下文管理器 库使用库标准库第三方库 前言 本文基于pycharm编译器,也可以使用Anaconda 里的编译器,将讲解一些python的一些基础语法知识,是对上篇文章…

element-ui的日历组件el-calendar高度咋调小

最近项目首页有个空余 不知道放啥 打算放个日历card 充充位置, el-calendar日历组件的整体宽度可以用el-row el-col :gutter :span来控制自适应 但是官网文档没说高度咋缩小 细长一条好难看 自己尝试改了改element的样式没整出来 最后照着这位博主的方法改是好使滴…

STM32 HAL库串口使用printf

STM32 HAL库串口使用printf 背景配置说明在usart.h中添加在usart.c中添加在工程中选中微库: 测试 背景 在我们使用CubeMX生成好STM32 HAL库工程之后,我们想使用printf函数来打印一些信息,配置如下: 配置说明 在usart.h中添加 …

postgresql|数据库迁移|ora2pg工具的web界面介绍

前言: ora2pg是一个比较强大的数据库迁移工具,那根据名字来说,也可以看出来,这个工具主要是用来配置去O化,将在运行的oracle数据库迁移到postgresql数据库内的 当然了,我们使用此工具主要还是用命令行&am…

WeTab谷歌浏览器的AI助手,附WeTab下载地址

点击进入WeTab新标签页的,获取WeTab https://microsoftedge.microsoft.com/addons/detail/wetabai%E6%96%B0%E6%A0%87%E7%AD%BE%E9%A1%B5/bpelnogcookhocnaokfpoeinibimbeff?utm_sourceSteamDB 注:可能谷歌浏览器打开get按钮是灰色的,那就换…

Unity Hub报错:No valid Unity Editor license found. Please activate your license.

最近 遇到一个问题,打开高版本时Hub抛出异常:No valid Unity Editor license found. Please activate your license. 首先你必须排除是否登录Unity Hub,并且激活许可证。 方法一:禁用网络(这个可能无效) …

算法进阶——数组中的逆序对

题目 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P mod 1000000007 数据范围:对于 50% 的数据, size≤104 对…

Linux系统CH347应用—SPI功能

Linux/安卓系统使用CH347转接SPI功能有三种应用方式: 1. 使用CH34X_MPHSI_Master总线驱动为系统扩展原生SPI Master,此方式无需进行单独的应用层编程; 2. 使用CH341PAR_LINUX字符设备驱动,此方式需要配合使用厂商提供的库文件&a…

js创建 ajax 过程

目录 前言:AJAX 技术的重要性 详解:创建 AJAX 请求的步骤 1. 创建 XMLHttpRequest 对象 2. 配置请求 3. 处理响应 4. 发送请求 5. 处理异步请求 解析:AJAX 请求的重要性和限制 总结: 前言:AJAX 技术的重要性 …

2019年亚太杯APMCM数学建模大赛B题区域经济活力及其影响因素的分析与决策求解全过程文档及程序

2019年亚太杯APMCM数学建模大赛 B题 区域经济活力及其影响因素的分析与决策 原题再现 区域(或城市或省级)经济活力是区域综合竞争力的重要组成部分。近年来,为了提高经济活力,一些地区推出了许多刺激经济活力的优惠政策&#xf…

分布式锁的基本原理和实现以及synchronized底层原理

1.1Synchronized Synchronized的重点级锁,底层是基于锁监督器(Monitor)来实现,简单来说就是锁对象头会指向一个锁监督器,而在监督器中则会记录一些信息,比如: _owner:持有锁的线程_recursion…