Linux文件系统基础
文件和目录
文件是以单个名称在计算机上存储的信息集合.
Linux文件的分类
ls -l 列表开头字符代表当行文件类型
列表如下
| 文件类型 | 类型符号 | 描述 |
|---|---|---|
| 普通文件 | - | 指ASCII文本文件,二进制可执行文件,以及硬链接文件 |
| 块设备文件 | b | 块输入/输出设备文件 |
| 字符设备文件 | c | 原始输入输出设备文件,每次IO操作仅送一个字符 |
| 目录文件 | d | 包含若干文件或子目录 |
| 符号链接文件 | l | 只保留了所指向文件的地址,而不是文件本身 |
| 管道文件 | p | 用于进程间通信的管道文件 |
| 套接字文件 | s | 套接字是方便进程之间通信的特殊文件.与管道文件不同的是,套接字能通过网络连接使不同的计算机的进程之间进行通信 |
Linux 目录结构
目录是一类特殊的文件,利用它可以构成文件系统的分层树型结构.如同普通文件那样,目录
/={binbootdevetchome libmntrootusrproc.... /=\left\{ \begin{matrix} bin \\ boot \\ dev \\ etc \\ home \\\ lib \\ mnt \\ root \\ usr \\ proc \\ .... \\ \end{matrix} \right. /=⎩ ⎨ ⎧binbootdevetchome libmntrootusrproc....
| 目 录 | 功能说明 |
|---|---|
| /etc | 存放系统配置文件 |
| /bin | 常用命令存放目录 |
| /sbin | 存放指令文件(root) |
| /home | 用户主目录 |
| /boot | 包含内核和启动文件 |
| /dev | 设备文件存放目录 |
| /usr | 应用程序放置目录 |
| /mnt | 挂载目录 |
| root | root账号主目录 |
| proc | process缩写,主要描述系统进程详细信息 |
| lib | 常用库文件的目录 |
| lost+found | 在该目录中可找到一些误删除的文件,并恢复它们 |
文件系统
1)磁盘文件系统
2)网络文件系统
3)专用/虚拟文件系统
文件系统体系结构
|--------------User Applications
|--------------GNU C Library
-----------------------------------------------------------------------------以上是User space 以下Kernel space
|--------------system call interface
|Inode------| -------Virutal file system------|--------Directory cache
|--------------Individual file system
|--------------Buffer cache
|--------------Device Drivers
用户空间包含一些应用程序和GNU C 库 glibc 它们为文件系统调用提供了用户接口.系统调用接口的作用就像是交换器,它将系统谳用从用户空间发送到内核空间中适当端点.
VFS(Virtual File Systemc)是底层文件系统的主要接口,这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大.有两个针对文件系统对象的缓存(inode和dentry).它们会缓存最近使用过的文件系统对象
每个文件系统实现导出一组通用接口,供VFS使用,缓冲区缓存会缓存文件系统和相关设备之间的请求.例如,对底层设备驱动程序的读写请求会通缓冲区缓存来传递.这就允许在其中缓存请求,从而减少访问物理设备的次数,加快访问速度.
Linux 系统允许众多不同种类的文件系统共存,通过使用一套文件I/0系统调用,即可对Linux中的任意文件进行操作,而无需考虑其所在的文件系统具体格式.此外,Linux还支跨文件系统的文件操作,即对文件的操作可以跨文件系统进行.
LInux文件系统分为三个部分,第一部分Virtual File System(VFS,虚拟文件系统),它是Linux文件系统对外的接口,任何要使用文件系统的程序都必须经由这层接口来使用它.另外两部分属于文件系统的内部实现,分别Cahce和真正的文件系统.
虚拟文件系统是Linux内核中的一个软件抽象层,它一方面用于给用户空间的程序提供文件系统接口,另一方面还提供了内核中的一个抽象功能,它通过一些数据结构及其方法向实际的文件系统提供接口,实现不同文件系统在Linux中共存.系统中所有文件系统不但依赖于VFS共存,同时也要依靠VFS协同工作.
为了能支持各种文件系统,VFS定义了所有文件系统都必须支技基本的,概念上的接口和数据结构,如超级块,节点,文件操作函数入口等.换句话说,一个实际的文件系统要想被 LInux支持,就必须提供一个符合VFS标准接口,这样才能与VFS协同工作.VFS不是实际的操作系统,它只是一种专换机制,仅存在于内存中,不存在于任何外存空间.
制作根文件系统
有BusyBox,buildroot.