当前位置: 首页 > news >正文

linux 文件系统和软硬链接

我们使用ls -l的时候看到的除了看到文件名,还看到了文件元数据。
image.png

每行包含7列:

image.png
其实这个信息除了通过这种方式来读取,还有一个stat命令能够看到更多信息

image.png

上面的执行结果有几个信息需要解释清楚

在Linux文件系统中,inode(索引节点)是文件系统中用于存储文件元数据的数据结构。每个文件或目录在文件系统中都有一个唯一的inode与之对应。inode中包含了文件的元数据,如文件大小、文件权限、所有者信息、创建时间、修改时间、访问时间、文件类型以及指向文件数据块的指针等。

inode
为了能解释清楚inode我们先简单了解一下文件系统

image.png

Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs-b选项可以设定block大小为1024、2048或4096字节。而上图中启动块(Boot Block)的大小是确定的,

Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。
超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大 小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验 磁盘的时间等其他文件系统的相关信息。Super Block的信息被破 坏,可以说整个文件系统结构就被破坏了
GDT: Group Descriptor Table:块组描述符,描述块组属性信息
块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用, 哪个数据块没有被占用
inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
i节点表(inode table): 存放文件属性 如 文件大小,所有者,最近修改时间等
数据区(data block): 存放文件内容

通过上面的信息:inode table : 存放文件的属性。 data block : 存放文件的内容。我们可以知道,在这里面:文件的内容和属性是分开存储的。

image.png

这些多出来的数字就是该文件的inode 编号,一般情况一个文件有一个inode编号,基本上每个文件都要有inode编号,这个inode 是一个数字,在整个分区具有唯一性,在Linux 内核当中,识别文件和文件的名字无关只和inode有关,通过上面的截图,我们知道目录也有自己的inode ,linux 下一切皆文件,所以目录也是文件,目录内部直接保存文件的文件名和inode映射关系。

问题❓,如果我想在一个目录下,新建,删除,修改一个文件,对于这个目录我需要什么权限?

W 权限,我们需要的事 权限,不是 X 权限,我们要进入一个目录才是x 权限,但是如果我们要修改这个目录的内容,我们需要的是写的权限。

还有一件事:在Linux 中,文件名不属于文件的属性。所以inode 里面没有文件名,文件名只在目录里存着的。

软硬链接

软链接

假设,我们有一个叫:log.txt 的文件,现在我们给他创建一个软连接

创建一个软连接:ln -s (目标文件) (给这个软连接取个名字)
比如这里:
ln -s log.txt log_soft_link.txt

image.png

image.png

软连接其实可以看作是 windows 操作系统下的那个快捷方式,比如这种,
image.png|200
z
image.png|300

软连接有自己的 inode ,它是是一个独立的文件,文件的内容是:指向目标文件的路劲

硬链接是通过inode引用另外一个文件,软链接是通过名字引用另外一个文件,在shell中的做法

硬链接

我们看到,真正找到磁盘上文件的并不是文件名,而是inode。 其实在linux中可以让多个文件名对应于同一个 inode,

创建硬链接:ln (目标文件) (创建的链接的名字)

比如这里,我们想要链接的目标文件是log
我们想给这个硬链接取的名字是log_hard_link.txt
我们输入的命令是:ln log log_hard_link.txt

image.png

image.png

image.png

由此我们可以得出一个结论软连接是一个独立的文件,但是硬链接不是一个独立的文件,因为硬链接没有独立的 inode 编号

image.png

观察现象

image.png

为什么会出现这样的现象呢?

首先,一个新的文件的硬链接数 是1 很好理解,因为我们创建的这个新文件只有他自己,只有一个文件名。

但是为什么,创建一个新的目录,这个新的目录的硬链接数是 2呢?

那我们进入这个新的目录,看看里面有什么吧。

image.png

我们发现,这个新的目录有2个隐藏文件... ,这是老早以前我们就知道的知识,但是你有没有好奇过 这些隐藏文件的作用是啥呢?

在Linux 系统中,我们知道,. 表示的是当前目录,.. 表示的上级目录,这些隐藏文件的作用就是用来表示当前目录和上级目录的。

所以为什么,一个新的目录的硬链接数 是 2?

因为:1. 这个目录本身的文件名要占一个硬链接数 2. 这个目录中的隐藏文件:. ,表示的当前目录,相当于给当前目录取了个名字叫. 的硬链接,也是要占一个硬链接数的。所以加起来有2个硬链接数

你可以看下,当前目录的 inode 编号 和 当前目录的隐藏文件. 的 inode 编号是不是一样的。

image.png

看,inode 编号都是一样的。

相关文章:

  • 【数据结构】B树家族详解:B树、B+树、B*
  • 【NLP 38、激活函数 ④ GELU激活函数】
  • Week1_250217~250223_OI日志(待完善)
  • 2025 银行业科技金融创新与发展报告
  • vLLM专题(十二)-推理输出(Reasoning Outputs)
  • 回合制游戏文字版(升级)
  • 【GreenHills】GHS合并库文件
  • 2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(一)
  • ROS ur10机械臂添加140夹爪全流程记录
  • Android Studio超级详细讲解下载、安装配置教程(建议收藏)
  • 第二章:辅助功能
  • FFmpeg进化论:从av_register_all手动注册到编译期自动加载的技术跃迁
  • 高中数学基础-平面向量
  • JMeter性能问题
  • 5 分钟用满血 DeepSeek R1 搭建个人 AI 知识库(含本地部署)
  • Linux提权之提权脚本应用(十二)
  • halcon三维点云数据处理(二十五)moments_object_model_3d
  • 【qt链接mysql】
  • Android 轻量级双向 IPC 通信 Messenger
  • 前端项目打包过滤指定icon文件
  • 从采购到销售!市场监管总局指导行业协会防控肉品风险
  • 港股持续拉升:恒生科技指数盘中涨幅扩大至6%,恒生指数涨3.3%
  • 国内大模型人才大战打响!大厂各出奇招
  • 成就彼此,照亮世界:“中欧建交50周年论坛”在沪成功举行
  • 中国金茂新任命三名副总裁,撤销区域公司
  • 中日有关部门就日本水产品输华问进行第三次谈判,外交部回应