Linux文件系统以及VFS

1. 什么是文件系统?

通俗的意思来讲,我们说文件系统是根目录,因为Linux中一切设备皆文件,按照功能的不同来划分到不同的文件夹下,但严格意义上来说,文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。注意文件系统是操作系统用于明确存储设备组织文件的方法也就是文件管理系统程序,简称文件系统。

2. 文件系统(文件管理系统的方法)的种类有哪些?

tips: 树莓派查看文件系统的命令为 df -T

Linux是一种兼容性很高的操作系统,支持的文件系统的格式很多,大体可以分为几类:
(1)磁盘文件系统
指本地主机中实际可以访问到文件系统,或者说可以驻留在磁盘上的文件系统,包括硬盘、CD-ROM、DVD、USB存储器、磁盘阵列等。常见文件系统格式有:EXT3、EXT4、VFAT、FAT、FAT16、FAT32、NTFS等。其中,Linux常用的是EXT系列的文件系统,NTFS是Windows目前主流的文件系统,作为电脑磁盘的主要文件系统格式。
(2)网络文件系统
指可以远程访问的文件系统,这种文件系统在服务器端仍是本地的磁盘文件系统,客户机通过网络远程访问数据。常见的文件系统格式有:NFS、Samda等。
(3)虚拟文件系统
指不驻留在磁盘上的文件系统,同时也是比较抽象难以理解的部分,虚拟文件系统(VFS)是物理文件系统(上述的文件系统都属于物理文件系统)与服务应用之间的一个接口层,它对Linux的每个文件系统的所有细节进行抽象,使得不同的文件系统在Linux核心以及系统中运行的其他进程看来,都是相同的。(VFS后面会讲到。。。)

在这里插入图片描述

在 Linux 下一切皆为文件,“/dev/root”就是我们的磁盘分区,可以看出这个磁盘分区类型是 ext4,它的挂载点是“/”,也就是根目录。

如图中所示,tmpfs是临时文件系统也叫作内存文件系统是基于内存的。vfat和ext4是基于磁盘的,也就是我们的SD卡,就是之前挂载到虚拟机的两个分区,fat分区存放boot(BootLoader,kernel)相关文件,ext4分区存放的是根目录文件。


3. 什么是分区?

对于windows来说,像是驱动器盘符,C盘是装系统的分区,D盘存放其他文件,但是C盘也可以放其他文件,比较随意,但是C盘、D盘的内存都是联连续的一大块。对于Linux来说,叫做文件系统结构,按照功能来分区,每个分区严格存放文件,内存不一定连续,也就是说我们在linux同一个路径下看到的文件不一定是来自同一分区

Windows操作系统中,是先将物理地址分开,再在分区上建立目录.在Windows操作系统中,所有路径都是从盘符开始,如C://program file。
Linux系统正好相反,是先有目录,再将物理地址映射到目录中。在Linux操作系统中,所有路径都是从根目录开始。Linux默认可分为3个分区,分别是boot分区、swap分区和根分区。
无论是Windows操作系统,还是Linux操作系统,每个分区均可以有不同的文件系统,如FAT32、NTFS、Yaffs2等。
(1)boot分区
该分区对应于/boot目录,约100MB.该分区存放Linux的Grub(bootloader)和内核源码。用户可通过访问/boot目录来访问该分区.换句话说,用户对/boot目录的操作就是操作该分区。
(2)swap分区
Linux下的swap分区即为虚拟内存.虚拟内存用于当系统内存空间不足时,先将临时数据存放在swap分区,等待一段时间后,然后再将数据调入到内存中执行.所以说,虚拟内存只是暂时存放数据,在该空间内并没有执行。
(3)根分区
在Linux操作系统中,除/boot目录外的其它所有目录都对应于该分区.因此,用户可通过访问除/boot目录外的其它所有目录来访问该分区。

嵌入式系统可以分为4个区,分别是bootloader、para、kernel、根分区等,与Windows、Linux分区不同 。
(1)在嵌入式系统中,没有swap分区,只有实际的物理空间。
(2)bootloader、para、kernel这三个分区的功能类似于Linux系统中的/boot分区,这三个分区分别存放嵌入式系统的启动代码和内核。
注:Linux系统中/boot分区内存放着linux启动代码和内核源码。

bootloader、 启动代码
para、 启动代码向内核传递参数的位置
kernel、 内核分区
根分区等 文件系统结构

(3)根分区(/)可以构造,其功能类似于Linux系统中的根分区.在这个分区中可以创建许多目录,比如/root、/home、/usr等,但不能创建/boot目录。
(4)分区bootloader、para、kernel只能由地址来区分,而根分区只能由目录来区分。
(5)嵌入式系统的驱动程序、上层软件都放在根分区.在嵌入式系统启动后,系统无法查看到bootloader、para、kernel这三个分区。


4. 什么是文件系统目录结构?

当在使用Linux的时候,通过ls –l / 就会发现,在/下包涵很多的目录,比如etc、usr、var、bin … … 等目录,而在这些目录中,我们进去看看,发现也有很多的目录或文件。文件系统在Linux下看上去就象树形结构,所以我们可以把文件系统的结构形象的称为树形结构

文件系统的是用来组织和排列文件存取的,所以它是可见的,在Linux中,我们可以通过ls等工具来查看其结构,在Linux系统中,我们见到的都是树形结构;比如操作系统安装在一个文件系统中,它表现为由/ 起始的树形结构。linux文件系统的最顶端是/,我们称/为Linux的root,也就是 Linux操作系统的文件系统。Linux的文件系统的入口就是/,所有的目录、文件、设备都在/之下,/就是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的预设放置也是在这里。

以上摘自:https://www.cnblogs.com/yihr/p/12954340.html


5. 什么虚拟文件系统Virtual File System ?

文件系统的种类有很多,除了Linux标准的文件系统Ext2/Ext3/Ext4外,还有很多种文件系统 。linux通过VFS的中间层对这些文件系统提供了完美的支持。在大部分情况下,用户通过libc和kernel的VFS交互,不需要关心底层文件系统的具体实现。

换句话说,vfs就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用的接口,类似于c++中虚基类的作用,而每一种具体的文件系统则将其物理组织结构转换为虚拟文件系统的通用模型。 在这里插入图片描述

在这里插入图片描述

6. 虚拟文件系统有什么作用?

vfs所隐含的思想是把表示很多不同种类文件系统的共同信息放入内核;其中有一个字段或函数来支持Linux所支持的所有实际文件系统所提供的任何操作。对所调用的每个读、写或其他函数,内核都能把它们替换成支持本地Linux文件系统、NTFS文件系统,或者文件所在的任何其他文件系统的实际函数。

有了vfs,就能很容易实现不同文件系统之间的数据读写,因为它们对外接口都是一样的,都是vfs导出的通用接口。

对于用户来说,我们不要去关心不同文件系统的具体操作过程,而只是对一个虚拟的文件操作界面来进行操作,这个操作界面就是 Linux 的虚拟文件系统(VFS ) ,由此一来,不管是什么文件类型,不管文件是磁盘还是设备,都只用open read write统一操作,可以简化应用程序员的开发

VFS存在的意义

  • 向上,对应用层提供一个标准的文件操作接口。
  • 对下,对文件系统提供一个标准的接口,以便其他操作系统的文件系统可以方便的移植到Linux上。
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石子君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值