理解文件系统

一、ls -l

ls -l 除了显示文件名外,还会显示文件的元数据信息

$ ls -l
total 16
-rwxr-xr-x 1 mam mam 8432 Oct  2 09:42 a.out
-rw-r--r-- 1 mam mam   47 Oct  2 09:42 main.c
  • 模式
  • 硬链接数
  • 文件所有者
  • 大小
  • 最后修改时间
  • 文件名

ls -l 读取存储在磁盘上的文件信息,然后显示出来
在这里插入图片描述

二、stat

相较 ls -l,stat 会显示更多信息

$ stat main.c
  File: 'main.c'
  Size: 47              Blocks: 8          IO Block: 4096   regular file
Device: 811h/2065d      Inode: 2690188599  Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1005/  mam)   Gid: ( 1001/mam)
Access: 2025-10-02 09:42:47.669354710 +0800
Modify: 2025-10-02 09:42:45.270287181 +0800
Change: 2025-10-02 09:42:45.270287181 +0800
 Birth: -

1、Inode

我们知道,一个磁盘可以划分出多个分区(如 Windows 的 C、D 盘),但是,每个分区必须先用格式化工具格式化成某个文件系统,然后才能存储文件

在这里插入图片描述
上图为 Linux ext2 文件系统图,需要注意的是启动块(Boot Block)之后才是 ext2 文件系统的开始
在这里插入图片描述
磁盘是典型的块设备,其分区经过格式化后被划分为若干个大小固定的 block,其中,block 大小(扇区大小整数倍)是在格式化分区时确定的(mke2fs 的 -b 选项可以设置 block 大小为 1KB、2KB 或 4KB),且确定好后的 block 大小不能轻易修改

  • 启动块(Boot Block/Sector):启动块的大小是确定的,为 1KB,由 PC 标准规定,用来存储磁盘分区信息和启动信息,任何文件系统都不能修改启动块
  • 块组(Block Group):一个 ext2 文件系统至少有一个块组
  • 超级块(Super Block):存储文件系统自身的结构信息,如 block 和 inode 的总数及剩余可用数量等,这些信息描述了整个分区的文件系统状态
    • 超级块一旦损坏,将导致整个文件系统结构失效
  • 组描述符表(Group Descriptor Table):存储块组属性,如 inode 表的起始地址、Data Blocks 的起始地址等
  • 块位图(Block Bitmap):记录 Data Blocks 中哪些数据块已经被占用,哪些没有被占用
  • inode 位图(inode Bitmap):每个 bit 表示一个 inode 是否空闲可用
  • inode 表(inode Table):存储文件属性,如文件大小、所有者等
  • 数据块(Data blocks):存储文件内容

接下来,我们通过 touch 一个新文件来看看如何将属性和数据分开存储

$ touch abc
$ ls -i abc
263466 abc

在这里插入图片描述

如果想深入了解 ext2 文件系统,详见深入解析Ext2文件系统架构 - 指南

2、Links

Linux 中,真正用于定位磁盘文件的是 inode,而非文件名

2.1、硬链接

多个文件名对应同一个 inode

$ stat abc
...
...	Inode: 263466    Links: 1
...
$ ln abc def
$ stat def
...
...	Inode: 263466    Links: 2
...
$ stat abc
...
...	Inode: 263466    Links: 2
...

inode:263466 的链接数为 2,当我们删除文件时,内核实际上执行了以下两个操作:

  1. 在目录中将对应的记录删除
  2. 将链接数 -1,注意,只有当链接数为 0 时,内核才会真正释放该 inode 以及它所指向的数据块

2.2、软链接

类似 Windows 的快捷方式

$ stat abc
...
...	Inode: 263466    Links: 2
...
$ ln -s abc abc.s
$ ll
total 0
-rw-r--r-- 2 mam mam 0 Oct  4 09:34 abc
lrwxrwxrwx 1 mam mam 3 Oct  4 09:46 abc.s -> abc
-rw-r--r-- 2 mam mam 0 Oct  4 09:34 def
$ stat abc.s
...
...	Inode: 263467    Links: 1
...
$ stat abc
...
...	Inode: 263466    Links: 2
...

$ ln -s ./abc abc.s2
$ ll abc.s2
lrwxrwxrwx 1 mam mam 5 Oct  4 10:27 abc.s2 -> ./abc

在这里插入图片描述

注意

abc.s 文件的内容是 “路径”,所以其长度为 3

3、ACM

  • Access:最后访问时间
  • Modify:文件内容最后修改时间
  • Change:属性最后修改时间
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值