Linux基础 ——“文件系统” 走进一切皆文件的体系中(文件系统目录结构、磁盘分区、虚拟文件系统)

文件系统概念

1、什么是文件系统?

常规认知就是根目录下那些文件,也可以这样笼统的讲,但具体来讲其实并不是那样。

  • 文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。
    也指用于存储文件的磁盘或分区,或文件系统种类。 因此,可以说"我有2个文件系统"意思是他有2个分区,一个存文件,或他用
    “扩展文件系统”,意思是文件系统的种类。
    比如在linux源码下文件下的文件系统代码存放在fs文件夹(由此可知文件系统是一个程序):
    在这里插入图片描述

2、文件系统的种类

  • 文件系统(文件管理系统)的种类有哪些?
    既然文件系统是管理磁盘文件的方法,那么肯定不止一种,比如说:FAT、vfat 、NTFS、EXT(ext2、ext3、ext4)、HFS
    Linux常用的是EXT系列的文件系统,windows使用的文件系统是NTFS
    树莓派查看文件系统的命令是df-T,如下如所示,

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

    有图可以看出都是根目录下的文件但是可能来自不同的分区。
    在这里插入图片描述

3、什么是分区?

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

    Linux磁盘分区:
    linux分区不同于windows,硬盘和硬盘分区在Linux都表示为设备

    硬盘分区一共有三种主分区,扩展分区 和 逻辑分区
    硬盘的分区主要分为主分区和扩展分区两种,主分区扩展分区 的数目之和不能大于四个。
    主分区:可以马上被使用但不能再分区。
    扩展分区:必须再进行分区后才能使用,也就是说它必须还要进行二次分区。
    逻辑分区:由扩展分区建立起来的分区,逻辑分区没有数量上限制。
    扩展分区只不过是逻辑分区的“容器”,实际上只有主分区和逻辑分区进行数据存储。

    嵌入式系统可以分为4个区,分别是bootloader(启动代码)para(启动代码向内核传递参数的位置)kernel(内核分区)根分区(文件系统结构)等,与Windows、Linux分区不同。
    在嵌入式系统中,没有swap分区,只有实际的物理空间
    bootloader、para、kernel这三个分区的功能类似于Linux系统中的/boot分区,这三个分区分别存放嵌入式系统的启动代码和内核。
    :Linux系统中/boot分区内存放着linux启动代码和内核源码。
    根分区(/)可以构造,其功能类似于Linux系统中的根分区在这个分区中可以创建许多目录,比如/root、/home、/usr等,但不能创建/boot目录。
    分区bootloader、para、kernel只能由地址来区分,而根分区只能由目录来区分
    嵌入式系统的驱动程序、上层软件都放在根分区.在嵌入式系统启动后,系统无法查看到bootloader、para、kernel这三个分区

  • Windows、Linux分区d 不同。 在这里插入图片描述

文件系统目录结构

1、什么是文件系统目录结构?

件系统是存储设备上组织文件的方法,那么常规认知的根目录是什么呢?
其实根目录就是文件系统目录结构
在Linux系统中,目录被组织成一个:单根倒置树结构,文件系统目录结构从根目录开始,用/来表示
文件名称区分大小写( 大小写敏感还需要看具体的文件系统格式 ),以.开头的为隐藏文件,路径用/来进行分割(windows中使用\来分割),
文件有两个种类:元数据与数据本身.在操作linux系统时,通常会遵循以下的分层结构规则:
LSB (Linux Standard Base) / FHS(Filesystem Hierarchy Standard)。
在这里插入图片描述
除了分区需要按照功能来划分,文件系统的目录结构也是按照功能划分的:

/ 所有linux操作系统的顶点目录,不像windows,每个分区都有一个顶点目录

对于windows说,目录即分区
对于Linux说,根目录不算分区

/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反馈当前运行的进程的状态信息,还有提供给用户的一些信息,比如说cpu和内存。
/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的预设放置也是在这里。

2、一些指令

  • 可以在proc文件下查看CPU相关的情况cat /proc/cpuinfo从下面可以看出processor是从0到3,表示cpu是四核的,然后Hardware是cpu的型号BCM2835
    在这里插入图片描述

  • 使用指令:cat /proc/meminfo可以查看内存相关信息,由下图可以看出总内存是948280KB
    在这里插入图片描述

  • 使用指令:sudo cd root发现进不去root这个文件夹,可以使用指令sudo passwd root先为root设置密码然后:su - root再输入密码即可进入。
    退出使用指令:exit或者su - pi(是要进入普通用户,pi是用户名)
    进入root时候,指令行是#,普通用户就是$

3、/etc

  • etc下面是配置文件,若想要开机启动某个程序可以在/etc/init这个文件夹下去配置某些文件,使之开机自启。比如打开bootmisc.sh.conf:vi /etc/init/bootmisc.sh.conf然后将指令添加到脚本的最后即可。
    在这里插入图片描述
    但是一般不那么做,一般是在init文件夹下去模仿这个文件夹下面的文件自己去新建一个文件,然后再文件里面写入相关的指令,只需文件以.conf结尾即可。
    除此之外还可以修改etc下面的rc .local也是添加相关的指令即可。

比如智能家居,智能小车,就可以运用这个,总不能一上电,我们还要打开电脑配置一下。我们要一上电就自动配置了。
在这里插入图片描述

虚拟文件系统

1、什么是虚拟文件系统?

VFS(虚拟文件系统)就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用接口,由指令df -T可以看出不同的文件来源于不同分区,然而每个分区都有自己的文件系统,所以访问文件的方式因为文件系统的不同而不同,因为不同的文件系统文件、数据存储的方式不一样。
这样访问不同分区的文件就比较麻烦,而linux通过叫做VFS的中间层对这些文件系统提供了完美的支持。在大部分情况下,用户通过libckernelVFS 交互,不需要关心底层文件系统的具体实现。
这样就使我们使用open、read、write等函数对文件展开操作,不需要关心它底层的文件系统。虚拟文件系统的目的: 将接口暴露给用户,屏蔽底层文件系统的差异性,它是对所有不同文件系统的抽象。

  • 虚拟文件系统的分层结构:上层:虚拟文件系统,底层:特定文件系统模块,例如:网络文件系统(nfs、smb)等其他类型文件系统。虚拟文件系统存在于内核态,用户在用户态使用open、read等函数操作文件或驱动的时候,先到vfs,然后就可以操作处于不同文件系统的文件。
    在这里插入图片描述

2、虚拟文件系统作用:

简化应用程序员的开发,不管是什么文件类型,不管文件是磁盘还是设备,都只用open,read,write 统一操作。

  • VFS在用户和文件系统之间提供了一个交换层,在 VFS 上面,是对诸如open、close、read 和 write 之类的函数的一个通用API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50个)的插件,文件系统的源代码可以在 ./linux/fs中找到。文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。因此,用户和进程不需要知道文件所在的文件系统类型,而只需要象使用 Ext2 文件系统中的文件一样使用它们。
    在这里插入图片描述
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Linux系统虚拟文件系统(Virtual File System,VFS)是一个抽象层,用于统一管理不同文件系统的接口和操作。它提供了一种统一的文件系统访问方式,使得应用程序可以透明地处理不同类型的文件系统,而无需关心底层文件系统的差异。 虚拟文件系统的管理机制主要包括以下几个方面: 1. VFS数据结构:VFS维护了一些重要的数据结构,如超级块(superblock)、索引节点(inode)、文件描述符(file descriptor)等。这些数据结构用于表示文件系统的状态和属性,并提供了对文件目录的访问接口。 2. 文件系统注册:在Linux系统启动时,各个文件系统需要向VFS注册自己的操作函数和属性。这样,当用户程序请求访问某个文件系统时,VFS可以根据文件路径的前缀判断应该使用哪个文件系统的操作函数。 3. 文件路径解析:当用户程序提供一个文件路径时,VFS负责将路径解析为具体的文件系统和索引节点。它会逐级搜索路径目录,并调用相应文件系统的操作函数进行路径解析和权限检查。 4. 文件缓存管理:为了提高文件访问效率,VFS采用了文件缓存(Page Cache)机制。它将最近访问的文件块缓存在内存,避免频繁的磁盘访问。文件缓存使用了LRU(Least Recently Used)算法来管理缓存文件块。 5. 文件系统挂载:在Linux系统,可以通过挂载操作将一个文件系统关联到指定的挂载点上。VFS负责管理已挂载的文件系统,并提供了挂载、卸载和重新挂载等操作接口。挂载点形成了一个文件系统的树状结构,称为虚拟文件系统表(Virtual File System Table)。 通过这些机制,VFS实现了对不同文件系统的抽象和统一管理。它使得用户程序可以通过统一的文件系统接口进行文件操作,而无需关心底层文件系统的具体细节。这为Linux系统的灵活性和可扩展性提供了基础

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值