Linux File System (File operations)
Linux File System (File operations)
inode结构主要有以下成员:
// 必须有的
- mode:类型+权限
- 文件大小
- 引用计数
- 块地址
// 肯定没有的
- 文件名:一个文件可以有多个文件名,文件的文件名不存在inode里
// 可以有的
- 时间戳,一般不更新访问时间,维护设备寿命
inode number 在一个文件系统中是唯一的
- 硬链接不能跨文件系统
- 软链接可以跨文件系统
硬链接(Hard Link)
- 定义:硬链接是指多个文件名指向同一个 inode(索引节点)。
- 特点:
- 共用 inode:所有硬链接共享相同的 inode 号。
- 文件访问:无论通过哪个链接访问文件,都是访问同一个数据块。
- 限制:
- 不能链接目录,以防止形成循环结构。
- 不能跨文件系统,因为 inode 在不同文件系统中是独立的。
软链接(Symbolic Link 或 Symlink)
- 定义:软链接是一个独立的文件,内容是另一个文件的路径。
- 特点:
- 不同 inode:软链接有自己的 inode,指向目标文件的路径。
- 灵活性:可以链接目录和跨文件系统的文件。
- 依赖性:如果目标文件被删除或移动,软链接将失效(成为“断链”)。
Two files opened by a process
举一个例子:
假设web server正在写一个access.log
此时开发人员想看一下access.log,使用less access.log命令
因此打开俩次这个文件,生成俩个file table entries(打开一个文件就是一个file table entry)
但是只有一个inode entry,file size存在inode中,所以开发人员是可以看到access.log的变化的。
后面也会细说,其实文件操作主要涉及三个表结构,文件描述符表、文件表和inode表。
文件描述符
有三个层次:
- file descriptor table (每个进程一个的)
- file entry table, w.file offset (全局)
- indoe table, w/file size (全局)
文件状态通常在file table中,只有FD_CLOEXEC放在file descriptor table中.
图示一下:
1 |
|
open(2)twice vs. open(2) then dup(2)/fork(2)
Linux File System (File operations)
https://arcanus.red/2024/12/07/Linux-File-System-File-operations/