文件系统
Linux文件系统是操作系统用于组织和管理存储设备上数据的结构。它定义了如何在磁盘上存储文件、如何访问文件以及文件之间的关系。 磁盘上的每一个分区,都可能拥有自己的文件系统。因此,磁盘上有多少个分区,就有多少个文件系统。
文件系统基本概念:
- 文件:文本文件、二进制文件、脚本文件等。(Linux下一切皆文件)
- 目录:文件的容器,可以包含文件和子目录。
- 挂载点(Mount Point):将文件系统挂载到这个目录,使其内容可以通过该目录访问。
常见文件系统类型:
- ext4
- XFS
- Btrfs
- FAT32/exFAT
- NTFS
文件系统结构:
- 引导块(Boot Block):存储引导加载器信息。
- 超级块(Superblock):包含文件系统的元数据。
- 索引节点(Inode):存储文件的元数据和指向数据块的指针。
- 数据块(Data Block):存储文件的实际数据。
文件系统管理命令:
命令 | 作用 |
---|---|
mkfs | 创建文件系统。 |
mount | 挂载文件系统。 |
umount | 卸载文件系统。 |
fsck | 检查和修复文件系统。 |
df | 显示磁盘使用情况。 |
du | 显示文件和目录的磁盘使用情况。 |
若想要对文件系统彻底了解,推荐: 一口气读懂文件系统。
inode(索引节点):是一个非常重要的概念。它存储了文件系统中每个文件的元数据信息,包括文件的类型、权限、所有者、大小、最后修改时间、创建时间、以及文件数据块的指针等。inode并不存储文件名,而是通过目录结构来将文件名与inode关联起来。(以比特位表示:0表示未占用,1表示已占用)
包含信息:
- 文件类型和权限:文件是普通文件、目录文件、链接文件等,以及文件的读、写、执行权限。
- 所有者和组:文件的所有者用户ID和组ID。
- 文件大小:以字节为单位。
- 时间戳:文件的创建时间、最后访问时间、最后修改时间。
- 链接数:指向该inode的硬链接数量。
- 数据块指针:指向存储文件数据的块的指针。包括直接指针、间接指针和双重、三重间接指针。
一个简化的inode结构:
struct inode {
mode_t mode; // 文件类型和权限
uid_t uid; // 所有者用户ID
gid_t gid; // 所有者组ID
off_t size; // 文件大小
time_t atime; // 最后访问时间
time_t mtime; // 最后修改时间
time_t ctime; // 创建时间
nlink_t nlink; // 链接数
blkcnt_t blocks; // 文件占用的块数
int block[15]; // 数据块指针
};
文件存储
- 创建文件:当创建一个新文件时,文件系统会分配一个空闲的inode来存储该文件的元数据信息(如文件类型、权限、所有者、时间戳等)。文件系统还会分配数据块来存储文件的实际数据。数据块的大小通常是文件系统固定的大小,如4KB。
- 写入数据:当向文件中写入数据时,文件系统会将数据分成块并写入数据块中。
inode会记录这些数据块的位置(通过直接指针、间接指针等)。 - 更新元数据:文件系统会更新inode中的元数据信息,如文件大小、最后修改时间等。
文件读取
- 查找文件:用户通过文件路径访问文件,文件系统会通过目录结构找到对应的inode编号。目录实际上是一个特殊的文件,其中存储了文件名和对应的inode编号的映射。
- 读取inode:文件系统读取对应inode,获取文件的元数据和数据块指针。
- 读取数据块:文件系统根据inode中的数据块指针,读取存储文件数据的数据块。
如果文件较大,可能需要通过间接指针来访问更多的数据块。
软链接与硬链接
软链接(符号链接)和硬链接是两种不同的文件链接方式。
软链接(Symbolic Link):ln -s targetfile linkfile
- 指向路径:软链接文件包含指向目标文件路径的引用,而不是指向实际数据。
- 可以跨文件系统:软链接可以指向不同文件系统中的文件。
- 可以指向目录:软链接可以指向目录。
- 链接失效:如果目标文件被删除,软链接将变为“悬挂”状态(即指向一个不存在的路径),访问软链接会失败。
硬链接(Hard Link):ln targetfile hardlinkfile
6. 指向相同inode:硬链接与目标文件共享相同的inode,即指向同一数据块。
7. 同一文件系统:硬链接只能在同一文件系统内创建。
8. 不能指向目录:硬链接不能指向目录。
9. 文件实质不变:删除其中一个硬链接,文件数据依然存在,只要还有其他硬链接指向它。只有当所有硬链接都被删除后,文件数据才会被释放。
查看软链接与硬链接方式:ls -l
对比:
硬链接文件 | 软链接文件 |
---|---|
删除硬链接,对于源文件无影响,链接数-1,源文件链接数为0时,源文件删除 | 删除源文件,软链接失效,不可访问文件 |
不可以跨分区建立 | 可以跨分区建立 |
不可针对目录创建 | 可针对目录创建 |
好了,欢迎大家前来评论,共同进步。