Linux文件系统以及VFS
Linux文件系统以及VFS
- 1. 什么是文件系统?
- 2. 文件系统(文件管理系统的方法)的种类有哪些?
- 3. 什么是分区?
- 4. 什么是文件系统目录结构?
- 5. 什么虚拟文件系统Virtual File System ?
- 6. 虚拟文件系统有什么作用?
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上。
Linux文件系统以及VFS相关推荐
- Linux 文件系统(VFS、EXT、proc)
主要参考了<深入linux内核>和<Linux内核深度解析>,另外简单浅析了一下相关内容 文章目录 通用文件模型及VfS文件结构 基础知识 文件系统种类 常见的文件系统 VFS ...
- 深入理解Linux文件系统之VFS
1. VFS介绍 "一切皆文件",文件系统是linux系统的基础,Linux内核通过虚拟文件系统(Virtual File System, VFS)管理文件系统 ,VFS为所有的文 ...
- linux文件系统基础--VFS中的file、dentry和inode--讲得非常透的一篇文章
毕业以来,我花了很多时间阅读内核的代码,深入Linux内核架构,深入理解Linux内核,Robert Love的Linux内核设计与实现,Linux的虚拟文件系统对应章节,也读了很多遍,每一次读,都有 ...
- Linux 文件系统原理 / 虚拟文件系统VFS
Linux 文件系统原理 / 虚拟文件系统VFS 虚拟文件系统 VFS VFS 定义 VFS 的对象演绎 超级块 super_block 索引节点 inode 目录项 dentry 文件 file 文 ...
- linux 文件系统 vfs,linux虚拟文件系统vfs
<操作系统>课程设计报告课程设计题目:操作系统课程设计 设计时间:2016/1/10一. 课程设计目的与要求需要完成的内容:(1) 安装虚拟机:Vmware.Vmware palyer ( ...
- linux文件系统体系结构 和 虚拟文件系统(VFS)
图 1. Linux 文件系统组件的体系结构 用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开.读取.写和关闭)提供用户接口.系统调用接口的 ...
- 解析 Linux 中的 VFS 文件系统机制
简介: 本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核.总体上说 Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 V ...
- 解析linux中的vfs文件系统机制,解析Linux中的VFS文件系统机制
解析Linux中的VFS文件系统机制 本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核.总体上说Linux下的文件系统主要可分为三大块:一是上层的文件系统的系统 ...
- 全面详细介绍Linux 虚拟文件系统(VFS)原理
一. 通用文件模型 Linux内核支持装载不同的文件系统类型,不同的文件系统有各自管理文件的方式.Linux中标准的文件系统为Ext文件系统族,当然,开发者不能为他们使用的每种文件系统采用不同的文件存 ...
最新文章
- golang 开发笔记
- Matlab R2016a 如何设置自己称心的工作区域
- iOS用户设计指南 - 平台特征
- Java 8 Optional 类
- 如何找出SAP Fiori launchpad URL start_up请求发起的具体位置
- Lua 学习笔记(一)
- 通过投影增强数据模型
- cf 621E. Wet Shark and Blocks
- pyqt5 给按钮设置css样式和界面背景设置
- shared_ptr实现copy_on_write
- 【图像处理】canny和sobel边缘检测__python-opencv
- Atitit 项目常见问题 总结 prj prblm sumup 目录 第一章 提升可读性 复杂度简化	2 第二章 结构扁平化	2 第一节 缩短com.xxx.xxx名称	2 第二节 mod转
- 计算机内存不足应该换什么,电脑内存不够用了怎么办
- java中十六进制数_Java中的十六进制到整数
- 量化投资中常用python代码分析(一)
- 用C++实现魔方并输出步骤
- 育碧遭黑客攻击:用户账号被窃
- PHP随机生成英文大小写
- 景联文科技—专业数据采集公司和智能数据管理执行一体化平台
- 最优化方法1——各类拓扑空间与强弱紧集、下半收敛问题
热门文章
- 自己用maven打的包在别的项目中调用时找不到类,报“程序包不存在”的错误
- 服务器软硬件安装和配置,服务器硬件配置方案
- Lake Shore 8400 系列霍尔效应测试系统
- 院士谈量子计算机,孙昌璞院士做客大家讲坛谈量子技术
- 32、STM8 无源蜂鸣器实验
- html5 小红点,大面积起“小红点”,这样该怎么办?或留意下“肝脏”
- 首发Yolov8涨点神器:华为诺亚2023极简的神经网络模型 VanillaNet---VanillaBlock助力检测,实现暴力涨点
- Vue slot 建议用法
- Python简单多人聊天室
- 将现实问题转换为编程问题