1.什么是文件系统
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的 方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件 进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存 取,当用户不再使用时撤销文件等。
文件系统是操作系统用于明确存储组织文件的方法。文件管理系统(程序)
2.文件系统(文件管理系统)的种类有哪些?
- 1.FAT
- 2.NTFS
- 3.EXT 1/2/3/4:根目录分区
- 4.HFS
- 5.Vfat:boot(bootloader、kernel)
- 6.fmpfs:内存文件系统。
- 等等...
树莓派查看文件系统命令:df -T
3.什么是分区?
windows:随意(面相普通用户)
- C盘(操作系统)、D盘(用户随意)
Linux: 按照功能分区,每个分区严格存放文件(开发者)
- bootloade:启动代码
- para:启动代码向内核传递参数的位置
- kernel:内核分区
- 根分区:文件系统结构
4.什么是文件系统目录结构?
在Linux系统中,目录被组织成一个:单根倒置树结构,文件系统从根目录开始,用/来表示。文件名称区分大小写( 大小写敏感还需要看具体的文件系统格式 ),以.开头的为隐藏文件,路径用/来进行分割(windows中使用\来分割),文件有两个种类:元数据与数据本身.在操作linux系统时,通常会遵循以下的分层结构规则:
LSB (Linux Standard Base) / FHS(Filesystem Hierarchy Standard)
- / 所有linux操作系统的顶点目录,不像windows,每个分区都有一个顶点目录
- /boot 存放系统启动时相关的文件,比如kernel内核,grub引导菜单.(不要删除.)
- /bin 存放的都是命令,但仅普通用户能执行
- /sbin 超级管理员能执行的命令.
- /home 存放普通用户的家目录
- /root 超级管理员的家目录,普通用户是无法进入
- /etc 存放配置文件的目录,
- /etc/hostname 主机名
- /etc/hosts 本地解析域名一种方式
- /etc/sysconfig/network-script/ifcfg-* 网卡的配置文件
- /dev 设备目录,硬盘\硬盘的分区\光盘.....
- /dev/null 黑洞,接收所有的东西,只进不出
- /dev/zero 摇钱树,可以生产源源不断的数据
- /dev/random 产生随机数的一个设备
- /dev/pts/0 虚拟的Bash Shell终端,提供给远程用户使用 0,代表一个终端 1代表2个终端 以此类推
- /usr 类似于windows的C盘下面的windows目录
- /usr/lib 共享库文件,后缀都是so结尾, share object
- /usr/lib64 共享库文件64位,后缀都是so结尾, share object
- /usr/local 早起大家都把软件放在这个目录下,和windows C:\ProgramFile
- /usr/bin
- /usr/sbin
- /var 存放一些可变化的内容,比如/var/log日志,可以人为让其发生变化,也或者是随着时间推移产生变化
- /tmp 存放临时文件,无论哪个用户都可以放
- /proc 反馈当前运行的进程的状态信息.
- /run 存放程序运行后所产生的pid文件
- /media
- /mnt 提供挂载的一个目录
- /opt 早期第三方厂商的软件存放的目录.
- /srv 物理设备产生的一些文件
在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc: 这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。
值得提出的是,/bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给root使用的指令。
/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。
5.什么是虚拟文件系统
VFS(Virtual File System)
文件系统种类很多,除了linux的标准文件系统Exit2/Exit3/Exit4 以外,还有很多种文件系统,linux通过VFS 中间层对这些文件系统提供了完美的支持。大部分情况下,用户通过libc和kernel的VFS交互,不需要关心底 层文件系统的具体实现,vfs就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用的接口。
简化应用程序员的开发,不管文件类型是磁盘还是设备,都只用open、read、write统一操作。
vfs的作用
vfs所隐藏的思想是表示很多不同种类文件系统的共同信息放入内核,其中有一个字段或函数来支持linux所支持的 所有实际文件系统所提供的任何操作。对所调用的每个读写或其他函数,内核都能把它们替换成支持本地linux文件 系统,NTFS文件系统,或者文件所在的任何文件系统的实际函数。
有了vfs,就能很容易实现不同文件系统之间的数据读写,因为它们对外接口都是一样的,都是vfs导出的通用接口
例如:
假设一个用户输入以下shell命令: $ cp /floppy/TEST /tmp/test 其中/floppy是MS‐DOS磁盘的一个安装点,而/tmp是一个标准的第二扩展文件系统(second Extended Filesystom, Ext2)的目录。正如图(a)所示,VFS是用户的应用程序与文件系统实现之间的抽象层。因此,cp程序并不需要知 道/floppy/TEST 和 /tmp/test是什么文件系统类型。相反,cp程序直接与VFS交互,这是通过Unix程序设计人员都熟 悉的普通系统调用来进行的。cp的执行代码如下图
6.内核结构框图