文件系统(文件系统目录结构、磁盘分区、虚拟文件系统)、linux内核结构框图

什么是文件系统?

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

  • 文件系统(文件管理系统)的种类有哪些? 既然文件系统是管理磁盘文件的方法,那么肯定不止一种,比如说:FATvfatNTFSEXT(ext2、ext3、ext4)、HFS,Linux常用的是EXT系列的文件系统,windows使用的文件系统是NTFS,树莓派查看文件系统的命令是:df -T,如下如所示,type就是文件系统类型。tmpfs:是临时文件系统也叫作内存文件系统是基于内存的。vfat和ext4是基于磁盘的,也就是我们的SD卡,就是之前挂载到虚拟机的两个分区,fat分区存放boot(BootLoader)相关文件,ext4分区存放的是根目录文件。有图可以看出都是根目录下的文件但是可能来自不同的分区。
    在这里插入图片描述

  • 什么是分区? 对于windows来说,像是驱动器盘符,C盘是装系统的分区,D盘存放其他文件,但是C盘也可以放其他文件,比较随意,但是C盘、D盘的内存都是联连续的一大块。对于Linux来说,叫做文件系统结构,按照功能来分区,每个分区严格存放文件,内存不一定连续,也就是说我们在linux同一个路径下看到的文件不一定是来自同一分区。Linux磁盘分区: linux分区不同于windows,硬盘和硬盘分区在Linux都表示为设备。硬盘分区一共有三种:主分区,扩展分区和逻辑分区。 硬盘的分区主要分为主分区(Primary Partion)和扩展分区(Extension Partion)两种,主分区和扩展分区的数目之和不能大于四个。主分区(Primary Partion):可以马上被使用但不能再分区。扩展分区(Extension Partion):必须再进行分区后才能使用,也就是说它必须还要进行二次分区。逻辑分区((Logical Partion)):由扩展分区建立起来的分区,逻辑分区没有数量上限制。扩展分区只不过是逻辑分区的“容器”,实际上只有主分区和逻辑分区进行数据存储。嵌入式系统可以分为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这三个分区。

  • 什么是文件系统目录结构? 文件系统是存储设备上组织文件的方法,那么常规认知的根目录是什么呢?其实根目录就是文件系统目录结构。在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 反馈当前运行的进程的状态信息,还有提供给用户的一些信息,比如说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的预设放置也是在这里。

  • 可以在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是用户名)

  • etc下面是配置文件,若想要开机启动某个程序可以在/etc/init这个文件夹下去配置某些文件,使之开机自启。比如打开bootmisc.sh.conf:vi /etc/init/bootmisc.sh.conf然后将指令添加到脚本的最后即可。
    在这里插入图片描述

  • 但是一般不那么做,一般是在init文件夹下去模仿这个文件夹下面的文件自己去新建一个文件,然后再文件里面写入相关的指令,只需文件以.conf结尾即可。除此之外还可以修改etc下面的rc .local也是添加相关的指令即可。
    在这里插入图片描述

什么是虚拟文件系统?

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

  • 虚拟文件系统的分层结构:上层:虚拟文件系统,底层:特定文件系统模块,例如:网络文件系统(nfs、smb)等其他类型文件系统。虚拟文件系统存在于内核态,用户在用户态使用open、read等函数操作文件或驱动的时候,先到vfs,然后就可以操作处于不同文件系统的文件。
    在这里插入图片描述
  • VFS在用户和文件系统之间提供了一个交换层,在 VFS 上面,是对诸如open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50 个)的插件,文件系统的源代码可以在 ./linux/fs 中找到。文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。因此,用户和进程不需要知道文件所在的文件系统类型,而只需要象使用 Ext2 文件系统中的文件一样使用它们。

linux内核结构框图:

  • Unix和Linux系统内核都采用的都是如下图所示的结构,其中可以看到三个层次:硬件级、内核级和用户级。用户程序通过陷入完成由用户态到内核态的转换。系统调用作为用户级与内核级交互方式,分为2部分:与文件子系统的交互和与进程控制子系统的交互。文件子系统管理文件。包括:分配文件空间、管理空闲空间、控制对文件的存取以及为用户检索数据。进程控制子系统负责进程同步、进程间通信、进程调度和存储管理。其中用户应用程序由基础C和程序库组成,程序库提供应用程序支配内核干活的接口,程序库通过系统调用接口然后操控底层各种东西,比如:程序里面调用open、read、write函数,通过程序库到达系统调用,然后会在系统调用那里会调用sys_open、sys_read、sys_write等函数,然后sys_open、sys_read、sys_write等函数会根据程序里面函数的参数判断你要打开什么类型的文件会产生不一样的指令信息,然后系统调用那里的函数会去分析打开文件的类型(磁盘上的文或者串口等设备文件),然后进行操作。
    在这里插入图片描述

  • 还有一种结构图如下图所示:
    在这里插入图片描述

  • shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。目前主要有下列版本的shell: Bourne Shell:是贝尔实验室开发的。 BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,大部分linux的发行套件使用的都是这种shell。 Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。 C Shell:是SUN公司Shell的BSD版本。

  • Linux内核主要包括5个模块:进程调度模块、内存管理模块、文件系统模块、进程间通信模块和网络接口模块。

  • 进程调度模块用来负责控制进程对CPU资源的使用。

  • 内存管理模块用于确保所有进程能够安全地共享机器主内存区。

  • 文件系统模块用于支持对外部设备的驱动和存储。(一些皆文件)

  • 进程间通信模块用于支持多种进程间的信息交换方式。通过系统调用实现进程间的信息交换。

  • 网络接口模块提供多种网络通信标准的访问并提供对多种网络硬件的支持。所有的模块都要通过进程调度来运行。

Linux 系统结构:

Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。linux内核:内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。系统调用接口:SCI 层提供了某些机制执行从用户空间到内核的函数调用。这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。如图:

在这里插入图片描述

  • 内存管理: 对任何一台计算机而言,其内存以及其它资源都是有限的。为了让有限的物理内存满足应用程序对内存的大需求量,Linux 采用了称为“虚拟内存”的内存管理方式。Linux 将内存划分为容易处理的“内存页”(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。
  • 进程管理: 进程实际是某特定应用程序的一个运行实体。在 Linux 系统中,能够同时运行多个进程,Linux 通过在短的时间间隔内轮流运行这些进程而实现“多任务”。这一短的时间间隔称为“时间片”,让进程轮流运行的方法称为“进程调度” ,完成调度的程序称为调度程序。进程调度控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。通过多任务机制,每个进程可认为只有自己独占计算机,从而简化程序的编写。每个进程有自己单独的地址空间,并且只能由这一进程访问,这样,操作系统避免了进程之间的互相干扰以及“坏”程序对系统可能造成的危害。 为了完成某特定任务,有时需要综合两个程序的功能,例如一个程序输出文本,而另一个程序对文本进行排序。为此,操作系统还提供进程间的通讯机制来帮助完成这样的任务。Linux 中常见的进程间通讯机制有信号、管道、共享内存、信号量和套接字等。内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSⅨ] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSⅨ 机制)。
  • 设备驱动程序: 设备驱动程序是 Linux 内核的主要部分。和操作系统的其它部分类似,设备驱动程序运行在高特权级的处理器环境中,从而可以直接对硬件进行操作,但正因为如此,任何一个设备驱动程序的错误都可能导致操作系统的崩溃。设备驱动程序实际控制操作系统和硬件设备之间的交互。设备驱动程序提供一组操作系统可理解的抽象接口完成和操作系统之间的交互,而与硬件相关的具体操作细节由设备驱动程序完成。一般而言,设备驱动程序和设备的控制芯片有关,例如,如果计算机硬盘是 SCSI 硬盘,则需要使用 SCSI 驱动程序,而不是 IDE 驱动程序。
  • 网络接口(NET): 提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。众所周知,TCP/IP 协议是 Internet 的标准协议,同时也是事实上的工业标准。Linux 的网络实现支持 BSD 套接字,支持全部的TCP/IP协议。Linux内核的网络部分由BSD套接字、网络协议层和网络设备驱动程序组成。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。

参考博文:Linux文件系统目录结构、虚拟文件系统、虚拟文件系统、linux框图、Linux 系统结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux进程终止命令kill或kill all​笔记

在linux命令下,如果需要终止某个进程,可以使用kill或者killall等命令来实现。终止命令的原理都是向linux内核发送一个系统操作的信号以及某个进程的ID,然后系统内核会根据指定的进程ID进行相应的处理。 kill命令典型的用法:首先使…

linux驱动(驱动编译、字符设备驱动框架、交叉编译树莓派驱动、树莓派驱动本地编译)

什么是驱动: 驱动就是对底层硬件设备的操作进行封装,并向上层提供函数接口。 设备分类: linux系统将设备分为3类:字符设备、块设备、网络设备。 字符设备:指只能一个字节一个字节读写的设备,不能随机读取…

docker启动报错  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9876 -j DNAT --

docker启动报错 : (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9876 -j DNAT --to-destination 172.17.0.2:9876 ! -i docker0: iptables: No chain/target/match by that name. 解决方案: systemctl restart docker

最详细的docker安装rocketMQ教程来了

RocketMQ是一款分布式、队列模型的消息中间件,是由阿里巴巴设计的,具有以下特点: 支持严格的消息顺序 支持Topic与Queue两种模式 亿级消息堆积能力 比较友好的分布式特性 同时支持Push与Pull方式消费消息 历经多次天猫双十一海量消息考验…

树莓派IO口驱动代码的编写、微机总线地址、物理地址、虚拟地址、BCM2835芯片手册

地址总线: 百度百科解释: 地址总线 (Address Bus;又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入&#xff…

夺命雷公狗---DEDECMS----26dedecms面包屑导航的实现

我们在很多项目里面都会用到面包屑导航,而dedecms里面也是给我们封装好面包屑导航的了,如下图所示: 在dede里面实现面包屑导航主要用到{dede:field.position/}标签,我们首先来修改下article_movie.htm内容页的模版文件: 我们修改成…

rust油桶用什么打_草莓用什么膨大素好?草莓膨大剂什么时间打?草莓用什么肥料膨大...

农资365公众号,了解更多生根、根腐、重茬、土传、枯黄萎、根烂病、防治根结线虫、微生物菌肥、膨大坐果、抗病增产的防治方法!草莓含有丰富的营养,并且种植效益较高,其种植范围也比较广。草莓种植期间有很多因素影响草莓果实膨大&…

docker安装kafka,超级简单的

简介 kafka是一个分布式消息队列。具有高性能、持久化、多副本备份、横向扩展能力。生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。一般在架构设计中起到解耦、削峰、异步处理的作用。 kafka对外使用topic的概念,生产者往topic里写消息&…

Linux中常见的环境变量笔记

1、变量:BASHBash Shell的全路径比如:echo $BASH2、变量:BASH_VERSIONBash Shell的版本号3、变量:EUID记录当前用户的UID。root用户值为0。4、FUNCNAME在用户函数体内部,记录当前函数体的函数名。5、变量:H…

消防信号二总线有没电压_春晓161#地块人防工程消防电源监控系统的设计与应用...

涂志燕安科瑞电气股份有限公司,上海 嘉定 201801;摘要:本文简述了消防设备电源的组成原理,分析了消防设备电源监控系统在应用中的设计依据和相关规范。通过安科瑞消防设备电源监控系统在春晓161#地块项目的实例介绍,阐…

大学慕课数据结构单元测试——华中科技大学

第一章绪论单元测试 一、单选(2分) 1、​___C__ 是数据的最小单位。 A.信息项 B.数据元素 C.数据项 D.表元素 2、​以下说法不正确的是 ___B___。 A.数据元素是数据的基本单位 B.数据项可由若干个数据元素构成 C.数据可由若干个数据元素构成 D.数据项是不可分割的最小…

RocketMQ同步刷盘和异步刷盘

刷盘机制 同步刷盘和异步刷盘 在broker配置文件里修改参数配置是同步还是异步

vim模式下报错E37: No write since last change No write since last change for buffer “ “

报错如下图所示: 网上的解决方法: 文件为只读文件,无法修改。使用命令:w!强制存盘即可在vim模式下,键入以下命令::w!存盘后在使用vim命令检查是否保存,如未保存,编辑后重复以上操作…

Linux中Shell中取消变量和特殊变量的笔记

1、取消变量取消变量也就是将变量从内存中释放出去,可以使用unset 后面加变量名即可,当然函数的释放同样可以采用该方式处理。比如:name"123"echo ${name}输出:123unset nameecho ${name}输出:#取消函数示例…

光华科技光刻胶_【收藏】6天5板!21只光刻胶概念(名单)“出炉”!

连板数量21家中迪投资5板,宁波联合 神驰机电 神马电力4板,汉缆股份 华盛昌 浙江鼎力3板,海航投资世联行 飞龙股份 安洁科技 京威股份 三丰智能 容大感光 晶瑞股份 奥飞数据 光大嘉宝 电子城博天环境 兆易创新 聚辰股份2板二、科技股&#xff…

20159302 《网络攻击与防范》第四周学习总结

本节学习内容为网络攻击环境的配置。在此过程中,我们至少需要一台靶机,一台攻击机。在此选用windows server 2000为靶机,kali系统为攻击机。 一、系统的安装 根据之前发布的kali系统的安装过程,依据此流程进行windows server的安装…

智能家居项目开发准备工作

智能家居功能细节拆分: 控制端支持语音设备的输入(用到之前所学习的LD3320语音识别模块)或者是socket客户端(这个客户端可以是ftp项目的客户端也可以是Android的app),主控芯片是树莓派,既接收语…

catia曲面扫掠命令详解_Mastercam快捷键命令,附中英文功能讲解!值得收藏!

组合键式快捷键功能快 捷 键功能Alt 0设置Z向控制深度Alt 1设置绘制图形的颜色Alt 2设置当前层Alt 3与Alt 2功能相同Alt 4设置刀具面(Tplane)Alt 5设置绘图面(Cplane)Alt 6设置视图面(Gview)Alt A进入自动存文件对话框快 捷 键功能Alt B工具条的显示/关闭Alt C选择执…

RocketMQ中主从复制

生产者把消息发送到master,不会发送到slave 消费者可以从maste也可以从slave消费消息 如果master挂了,那就从slave消费数据,那么slave怎么拿到master中的数据 这就要用到主从复制