【Linux文件系统开发】认知篇
文章目录
- 【Linux文件系统开发】认知篇
- 一、文件系统的概念
- 二、文件系统的种类(文件管理系统的方法)
- 三、分区
- 四、文件系统目录结构
- 五、虚拟文件系统(Virtual File System)
- 1.概念
- 2.原因
- 3.作用
- 4.总结
一、文件系统的概念
常规认知: 根目录
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法
方法的具体实施是由一个叫做文件管理系统的程序来做,这个系统就简称文件系统。
二、文件系统的种类(文件管理系统的方法)
文件系统有很多种类,每种都有其独特的特性和用途。
FAT VFAT NTFS EXT1/2/3/4 HFS 等等
常见的:
vfat
:boot (bootloader,kernel)
ext4
:根目录
tmpfs
:内存文件系统
比如,windows用的就是NTFS
树莓派查看文件系统的命令如下
df -T
上述命令显示的文件系统类型中,vfat通常用于启动分区(boot),而ext4用于根目录;tmpfs通常用于存储临时文件系统,对于需要快速访问的数据非常有用(是一种基于内存的文件系统,将文件存储在RAM中而不是磁盘上)。
虚拟机ubuntu下的文件系统类型:
以下是一些常见的文件系统类型:
-
FAT (File Allocation Table)
FAT是一种简单而古老的文件系统,最早用于MS-DOS和Windows操作系统。它具有广泛的兼容性,但是在处理大容量磁盘和文件时效率相对较低。
-
VFAT (Virtual FAT)
VFAT是对FAT的扩展,支持长文件名和其他改进。它主要用于支持Windows中的长文件名。
-
NTFS (New Technology File System)
NTFS是Windows操作系统中常见的文件系统,具有高级的安全性、恢复性和性能特性。它支持大文件和大容量硬盘。
-
ext (Extended File System)
ext是Linux操作系统系列中使用的文件系统。不同的版本有 ext1、ext2、ext3、ext4。每个版本都引入了新的特性,如日志文件系统(ext3和ext4),以提高稳定性和性能。
-
HFS (Hierarchical File System)
HFS是苹果公司早期Macintosh计算机上使用的文件系统,后来演变为HFS+和APFS。HFS+用于较老的Mac系统,而APFS是Apple File System,用于最新的macOS。
-
Btrfs (B-Tree File System)
Btrfs是Linux中的一种先进的文件系统,具有高级的快照、校验和、压缩等特性。
-
exFAT (Extended File Allocation Table)
exFAT是一种用于闪存存储设备和大容量存储设备的文件系统,它是FAT32的扩展。
-
ZFS (Zettabyte File System)
ZFS是一种先进的文件系统,最初由Sun Microsystems开发,用于Solaris操作系统。它具有强大的存储管理和数据完整性保护特性。
-
tmpfs
tmpfs是一种基于内存的文件系统,将文件存储在RAM中而不是磁盘上。它通常用于存储临时文件系统,对于需要快速访问的数据非常有用。
-
XFS
XFS是一种高性能的文件系统,最初由SGI(Silicon Graphics, Inc.)开发,用于UNIX系统
三、分区
windows:
- 对于分区的管理较为“随意”,因为其面向普通PC用户
- 目录即分区,C,D盘随意存放文件
linux:
- 按照功能来分区,每个分区严格存放文件,大多面向开发者
- (根)目录不是分区,和windows不同,同一文件夹下的文件也可能属于不同分区
嵌入式系统可分为4个区
- **Bootloader **: 存放引导加载程序(启动代码)的位置,这个分区通常比较小。
- parameter : 存放启动代码向内核传递参数的位置。这个分区存储一些启动时需要的配置信息。
- kernel : 存放操作系统内核的位置。内核是操作系统的核心部分,负责管理硬件和提供系统调用接口。
- root (根目录)分区: 根分区包含文件系统的根目录,也就是整个文件系统的起始点。在Linux中,根分区是文件系统的基础。
四、文件系统目录结构
文件系统目录结构是文件系统中用于组织和存储文件的一种层次化结构。在不同的操作系统中,文件系统目录结构可能有所不同。
cd / #进入根目录
cd ~ #进入工作目录,相当了C,D盘,随便操作
sudo su #进入超级用户目录
su - pi #返回普通用户目录
以下是常见的Linux文件系统目录结构:
下面只是Linux系统中的典型目录结构,不同的Linux发行版可能会有些许差异。目录结构的设计旨在使系统文件有条理地分布在不同的目录下,方便用户和系统进行管理。
- 根目录(/): 所有目录和文件的起始点。根目录包含了整个文件系统的基本结构。
- /bin: 存放**系统命令(二进制文件)**的目录。这里包含了许多用户和系统都需要使用的基本命令,如ls、cp、mv等。
- /boot: 存放系统启动所需的文件,包括内核文件和引导加载程序(Bootloader)。
- /dev: 包含设备文件,如硬件设备,字符设备等。
- /etc: 存放系统配置文件的目录。这里包含了许多系统的配置文件,如网络配置、用户配置等。(可对其下的文件,如rc.local,init目录下文件等等,进行配置,实现开机自启某些软件或程序)
- /home: 用户的主目录。每个用户在这个目录下都有一个独立的子目录,用于存放个人文件和配置。(该目录下两个子目录相当于windows系统的两个不同用户,互不干扰)
- /lib和/lib64: 存放系统和应用程序所需的共享库文件。
- /mnt: 用于挂载其他文件系统(如虚拟机Ubuntu与windows的共享文件夹)的临时挂载点。
- /opt: 用于存放第三方软件的安装目录。
- /proc: 虚拟文件系统,提供了内核和进程的信息,可以通过
cat
命令读取这里的文件获取系统状态。 - /root: **超级用户(root)**的主目录。
- /sbin: 存放系统命令(二进制文件),与/bin类似,不过这里的命令通常是供超级用户使用的。
- /tmp: 用于存放临时文件的目录。
- /usr: 存放系统用户和系统管理器命令的目录,也包含了一些共享的系统资源。
- /var: 存放经常变化的文件,如日志文件、缓存文件等。
五、虚拟文件系统(Virtual File System)
1.概念
VFS就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用的接口,使得用户和应用程序可以简便地访问各种不同类型的文件系统,而不用关心底层的实现细节。
2.原因
-
文件系统的种类有很多,除了Linux标准的文件系统Ext2/Ext3/Ext4外,还有很多种文件系统 。
-
文件对应文件系统的类型可能不一样,数据存储的方式不一样,访问方式也就不一样,没办法做到操作统一化,给编程开发带来困难。
3.作用
VFS(虚拟文件系统)的存在正是解决了上述问题,VFS 提供了一组标准的系统调用,如
open
、read
、write
、close
等,以及文件操作的标准接口,使得应用程序在不同的文件系统上能够保持一致的操作方式。这也为操作系统的可移植性提供了便利,因为应用程序不需要依赖于特定文件系统的实现细节。
VFS(虚拟文件系统)
- 简化上层应用程序员的开发,不管是什么文件类型,磁盘还是设备,通通都是用open,read,write统一操作。
例如,cp 指令的实现
cp /floppy/TEST /tmp/test
结合下图,其中/floppy是MS-DOS磁盘的一个安装点,而/tmp是一个标准的第二扩展文件系统(second Extended Filesystom, Ext2)的目录。
正如图(a)所示,VFS是用户的应用程序与文件系统实现之间的抽象层。因此,cp程序并不需要知道/floppy/TEST 和 /tmp/test是什么文件系统类型。相反,cp程序直接与VFS交互,这是通过Unix程序设计人员都熟悉的普通系统调用来进行的。cp的执行代码如图(b)所示:
从系统编程,从上层到底层来看
如果从分区的角度,串口操作的就是/dev;普通文件如 .config在ext4上;共享内存 tmpfs dev/shm…
之前所学的Linux系统编程,各种应用层的知识,vfs都提供了帮助。
4.总结
VFS(虚拟文件系统)就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用的接口;简化应用程序员的开发,不管是什么文件类型,不管文件是磁盘还是设备,都只用open read write统一操作。
小扩展:
绝对路径与相对路径
绝对路径 :以
/
开始,表示该文件从根目录开始的完整位置路径,必须以根开始。相对路径 :不以
/
开始,指该文件相对于该目录的路径或某个目录的路径,不以根开始;可以作为一个简短的形式来指定一个文件名。