文件管理
linux文件系统架构
参考:超专业解析|linux文件系统的底层架构及其工作原理_linux大本营的博客-CSDN博客_linux文件系统架构
这张图大体上描述了 Linux 系统上,应用程序对磁盘上的文件进行读写时,从上到下经历了哪些事情。
文件系统。本身是对存储设备上的文件,进行组织管理的机制。。组织方式不同,就会形成不同的文件系统。比如常见的Ext4、XFS、ZFS以及网络文件系统NFS等等。
但是不同类型的文件系统标准和接口可能各有差异,我们在做应用开发的时候却很少关心系统调用以下的具体实现,大部分时候都是直接系统调用 open, read, write, close 来实现应用程序的功能,不会再去关注我们具体用了什么文件系统(UFS、XFS、Ext4、ZFS),磁盘是什么接口(IDE、SCSI,SAS,SATA 等),磁盘是什么存储介质(HDD、SSD)
应用开发者之所以这么爽,各种复杂细节都不用管直接调接口,是因为内核为我们做了大量的有技术含量的脏活累活。开始的那张图看到 Linux 在各种不同的文件系统之上,虚拟了一个 VFS,目的就是统一各种不同文件系统的标准和接口,让开发者可以使用相同的系统调用来使用不同的文件系统。
Linux 系统下的文件
在Linux 中一切皆文件。不仅普通的文件和目录,就连块设备、套接字、管道等,也都要通过统一的文件系统来管理。
用 ls -l 命令看最前面的字符可以看到这个文件是什么类型 brw-r--r-- 1 root root 1, 2 4月 25 11:03 bnod // 块设备文件 crw-r--r-- 1 root root 1, 2 4月 25 11:04 cnod // 符号设备文件 drwxr-xr-x 2 wrn3552 wrn3552 6 4月 25 11:01 dir // 目录 -rw-r--r-- 1 wrn3552 wrn3552 0 4月 25 11:01 file // 普通文件 prw-r--r-- 1 root root 0 4月 25 11:04 pipeline // 有名管道 srwxr-xr-x 1 root root 0 4月 25 11:06 socket.sock // socket文件 lrwxrwxrwx 1 root root 4 4月 25 11:04 softlink -> file // 软连接 -rw-r--r-- 2 wrn3552 wrn3552 0 4月 25 11:07 hardlink // 硬链接(本质也是普通文件)
linux文件系统设计了两个数据结构来管理这些不同种类的文件:
inode(index node );索引节点
dentry(directory entry): 目录项
iNode
用来记录文件的metadata,所谓metadata 在wikipedia 上描述是data of data ,其实指的是文件的各种属性,比如inode编号、文件大小、访问权限、修改日期、数据位置等。
wrn3552@novadev:~/playground$ stat file 文件:file 大小:0 块:0 IO 块:4096 普通空文件 设备:fe21h/65057d Inode:32828 硬链接:2 权限:(0644/-rw-r--r--) Uid:( 3041/ wrn3552) Gid:( 3041/ wrn3552) 最近访问:2021-04-25 11:07:59.603745534 +0800 最近更改:2021-04-25 11:07:59.603745534 +0800 最近改动