Linux文件系统、虚拟文件系统、分区、文件系统目录结构、Linux内核结构

目录

什么是文件系统

文件系统(文件管理系统)的种类有哪些?

什么是分区?

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

虚拟文件系统(Virtual File System,VFS)​​​​​​​

Linux内核结构​​​​​​​

 

什么是文件系统

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

Linux 最经典的一句话是:「一切皆文件」,不仅普通的文件和目录,就连块设备、管道、socket 等,也都是统一交给文件系统管理的。

文件系统(文件管理系统)的种类有哪些?

既然文件系统是管理磁盘文件的方法,那么肯定不止一种,比如说:FAT、vfat 、NTFS、EXT(ext2、ext3、ext4)、HFS,目前大多Linux发行版本默认使用的文件系统一般是ext4,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)):由扩展分区建立起来的分区,逻辑分区没有数量上限制。

扩展分区只不过是逻辑分区的“容器”,实际上只有主分区和逻辑分区进行数据存储。 Linux系统中/boot分区内存放着linux启动代码和内核源码。

嵌入式系统可以分为4个区,分别是bootloader(启动代码)、para(启动代码向内核传递参数的位置)、kernel(内核分区)、根分区(文件系统结构)。与Windows、Linux分区不同

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

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

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

树状目录结构:


 

 以下是对这些目录功能的解释:

 / :

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

/bin
bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。但仅普通用户能执行。

/boot:
这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

/dev :
dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

/etc:
etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

/home
用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

/lib
lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

/lost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

/media
linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

/mnt
系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

/opt
opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

/proc
proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

/proc/sys/net/ipv4/icmp_echo_ignore_all

/root
该目录为系统管理员,也称作超级权限者的用户主目录。

/sbin
s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

/selinux
这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

/srv
 该目录存放一些服务启动之后需要提取的数据。

/tmp
tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

/usr
 usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

/usr/bin:
系统用户使用的应用程序。

/usr/sbin:
超级用户使用的比较高级的管理程序和系统守护程序。

/usr/src:
内核源代码默认的放置目录。

/var
var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

/run
是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。

/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。

/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。

值得提出的是 /bin/usr/bin 是给系统用户使用的指令(除 root 外的通用用户),而/sbin, /usr/sbin 则是给 root 使用的指令。

/var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。

Linux下磁盘分区和目录的关系如下:

– 任何一个分区都必须挂载到某个目录上。

– 目录是逻辑上的区分。分区是物理上的区分。

– 磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。

– 根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。

对于树莓派可以在proc文件下查看CPU相关的情况cat /proc/cpuinfo从下面可以看出processor是从0到3,表示树莓派cpu是四核的,然后Hardware是cpu的型号BCM2835

 cat /proc/meminfo可以查看内存相关信息

sudo cd root   root文件夹是进不去的,使用指令sudo passwd root先为root设置密码然后:su root再输入密码即可进入。退出使用指令:exit或者su pi(是要进入普通用户,pi是用户名)

etc下面是配置文件,若想要开机启动某个程序可以在/etc/init这个文件夹下去配置某些文件,使之开机自启。比如 vi /etc/init/bootmisc.sh.conf  ,将要启动的程序添加到最后即可。

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

虚拟文件系统(Virtual File System,VFS

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

虚拟文件系统隐藏了各种硬件的具体细节,把文件系统操作和不同文件系统的具体实现细节分离了开来,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。

虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层。即VFS在用户和文件系统之间提供了一个交换层。

Linux下的文件系统结构

 因此,用户和进程不需要知道文件所在的文件系统类型,而只需要象使用 Ext2 文件系统中的文件一样使用它们。

Linux内核结构

内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。

用户级

函数库:提供了应用程序支配内核干活的接口

内核级:

  • 进程调度(Process Scheduler):控制多个进程对CPU的访问,使得多个进程能在CPU中微观串行运行,看起来却像是并行运行。驱动程序编程中,若没有获得资源则进入休眠,直到被唤醒。
  • 内存管理(Memory Manager) 允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存(为每个进程进行虚拟内存到物理内存的转换)即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。
  • 文件系统(File System):Linux 将新的文件系统通过一个称为“挂装”或“挂上”的操作将其挂装到某个目录上,从而让不同的文件系统结合成为一个整体。Linux 操作系统的一个重要特点是它支持许多不同类型的文件系统。Linux 中最普遍使用的文件系统是 Ext2。但 Linux 也能够支持 FAT、VFAT、FAT32、MINIX 等不同类型的文件系统,从而可以方便地和其它操作系统交换数据。由于 Linux 支持许多不同的文件系统,并且将它们组织成了一个统一的虚拟文件系统。
  • 网络接口(NET) 提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。
  • 进程间通讯(IPC) 支持进程间各种通信机制。 用于多进程,多资源的互斥访问,进程间同步和消息传递。主要有管道,信号,信号量,共享内存,FIFO,socket

硬件级

CPU,内存,磁盘,其他设备等

Linux体系结构

shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。

Shell是可编程的,它可以执行符合Shell语法的文本,这样的文本称为Shell脚本,通常短短的几行Shell脚本就可以实现一个非常大的功能,原因就是这些Shell语句通常都对系统调用做了一层封装。为了方便用户和系统交互,一般一个Shell对应一个终端,终端是一个硬件设备,呈现给用户的是一个图形化窗口。我们可以通过这个窗口输入或者输出文本。这个文本直接传递给shell进行分析解释,然后执行。

参考文章:带你真正认识Linux 系统结构 | 《Linux就该这么学》

                  Linux 系统目录结构 | 菜鸟教程

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

◣星河◢

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

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

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

打赏作者

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

抵扣说明:

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

余额充值