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

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

文件系统
  • 文件系统概念
    • 1、什么是文件系统?
    • 2、文件系统的种类
    • 3、什么是分区?
  • 文件系统目录结构
    • 1、什么是文件系统目录结构?
    • 2、一些指令
    • 3、/etc
  • 虚拟文件系统
    • 1、什么是虚拟文件系统?
    • 2、虚拟文件系统作用:

文件系统概念 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 文件系统中的文件一样使用它们。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/733307.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存