一、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,注意,只有当链接数为 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:属性最后修改时间
1232

被折叠的 条评论
为什么被折叠?



