Linux文件系统,虚拟文件系统,linux内核结构

一、文件系统

1、文件系统概述

学术定义:文件系统是操作系统用于明确存储设备的文件和数据结构,即在存储设备上组织文件的方法。
常规认知:根目录 cd /

文件系统种类

文件的格式又有FAT,HFS,…
常见的:

vfat:boot (bootloader,kernel)
ext4:根目录
tmpfs:内存文件系统

比如,windows用的是NTFS。
在这里插入图片描述
树莓派的有:

df -T

在这里插入图片描述

什么是分区

windows对于分区的管理较为“随意”,因为其面向普通PC用户。C,D盘随意存放文件。
而linux较为严格,按照功能来分区,大多面向开发者。

bootloader:启动代码
para:启动代码向内核传递参数的位置
kernel:内核分区(前面内核编译时SD卡映射的data1)
根分区/根目录:文件系统结构(前面内核编译时SD卡映射的data2)

简单理解windows和linux文件系统的区别

在windows下会有驱动器盘符(C,D,E等),某个文件确切的存在于某个盘符中,占用一段连续的存储空间。

在linux下没有盘符的概念,所有的文件都在根目录(/),通过cd /指令进入。(cd或者cd ~ 进入的是工作目录home)下。可以理解为所有文件都分散到整个磁盘上,你看到的同一个文件夹下内容可能来自于不同的分区。

2、文件系统结构

要求熟悉且记忆。

在Linux系统中,目录被组织成一个单根倒置树结构,文件系统从根目录开始,用/来表示,是按照功能划分的。
在这里插入图片描述

/:根目录,位于Linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中。

/bin : 提供用户使用的基本命令, 存放二进制命令,不允许关联到独立分区,OS启动会用到里面的程序

/boot:用于存放引导文件,内核文件,引导加载器.

/sbin:管理类的基本命令,不能关联到独立分区,OS启动时会用到的程序(重要的命令通常处于bin,不重要的则安装在sbin)。

/lib:存放系统在启动时依赖的基本共享库文件以及内核模块文件. 系统使用的函数库的目录 也存放了大量的脚本库文件 ,程序在执行过程
中,需要调用时会用到

/lib64:存放64位系统上的辅助共享库文件.

/etc: 系统配置文件存放的目录,该目录存放系统的大部分配置文件和子目录,不建议在此目录下存放可执行文件。

/etc目录下可以设置开机启动程序

为什么KTV的点歌机开机就是点歌界面,而不是linux的启动界面,通过配置更改。

例如要设置智能家居的程序,当芯片上电后自动运行,而不是还去拿电脑去开始运行。
复制可执行文件的绝对路径,例如:

/home/pi/wiringPi/a.out

粘贴到etc目录下的rc.local的exit 0之前。
要加超级用户权限,否则只能进行只读操作

sudo vi /etc/rc.local

这里可以看到之前的开机自动配置ip地址的操作。
在这里插入图片描述

/home:普通用户主目录,当新建账户时,都会分配在此,建议单独分区,并分配额外空间用于存储数据。

/root: 系统管理员root的宿主目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。

/media:便携式移动设备挂载点目录.

/dev: 设备(device)文件目录,存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,存放连接到计算机上的设备(终端、磁盘驱动器、光驱及网卡等)的对应文件 (b 随机访问,c 线性访问)

/opt:第三方应用程序的安装位置.

/srv: 服务启动之后需要访问的数据目录,存放系统上运行的服务用到的数据,如www服务需要访问的网页数据存放在/srv/www内。

/tmp:存储临时文件, 任何人都可以访问,重要数据一定不要放在此目录下。

/usr: 应用程序存放目录,/usr/bin 存放保证系统拥有完整功能而提供的应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件,_/usr/local 存放软件升级包,第三方应用程序的安装位置,/usr/share/doc _系统说明文件存放目录

/var :放置系统中经常要发生变化的文件,如日志文件。/var/log 日志目录及文件./var/tmp:保存系统两次重启之间产生的临时数据.

/proc: 用于输出内核与进程信息相关的虚拟文件系统,目录中的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间

/proc目录举例

可以在这个目录下查看cpu的更详细的信息

cat /proc/cpuinfo

processor是核心,有n个就是n核cpu
在这里插入图片描述
也可以在这个目录下查看内存的相关信息

cat /proc/meminfo

在这里插入图片描述
绝对路径与相对路径:
绝对路径 :以/开始,表示该文件从根目录开始的完整位置路径,必须以根开始。

相对路径 :不以/开始,指该文件相对于该目录的路径或某个目录的路径,不以根开始。可以作为一个简短的形式来指定一个文件名。

二、虚拟文件系统

1、定义

VFS是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用接口

2、有什么作用?

文件对应的分区可能不一样,有的来自ext4,或者tmps。即为文件系统的类型可能不一样,数据存储的方式不一样,访问方式也就不一样,没办法做到操作统一化,给编程开发带来困难。
在这里插入图片描述
而虚拟文件系统的存在正是解决了这个问题:简化上层应用程序员的开发,不管是什么文件类型,磁盘还是设备,通通都是用open,read,write统一操作。

3、cp指令的实现

用户输入以下指令:

cp /floppy/TEST /tmp/test

在这里插入图片描述

4、从系统编程,从上层到底层来看

如果从分区的角度,串口操作的就是/dev;普通文件如 .config在ext4上;共享内存 tmpfs dev/shm…

之前所学的Linux系统编程,各种应用层的知识,vfs都提供了帮助
在这里插入图片描述

Linux内核结构

1、Linux内核结构框图

对内核结构框图有个总体的把握,有助于理解为什么驱动要这样写,为什么写的应用程序所用的C库接口能够产生这么多的事情。
在这里插入图片描述

函数库就像一个“黑匣子”,提供了一系列API支配内核运作,但你不知道内核发生了什么。
内核是一个很厉害的超级逻辑,把硬件底层的东西抽象化,对用户来说只需要调API就好了,根本不需要管寄存器,协议,总线…(单片机会去直接操作),这些全部由操作系统做好。动不动写个操作系统是不现实的。

2、图解linux系统架构

在这里插入图片描述

最内层是硬件,最外层是用户应用,比如浏览器等等。硬件是物质基础,而应用提供服务。

为了方便调用内核,Linux将内核的功能接口制作成系统调用(system call)。用户不需要了解内核的复杂结构,就可以使用内核。系统调用是操作系统的最小功能单位。一个操作系统,以及基于操作系统的应用,都不可能实现超越系统调用的功能。

系统调用提供的功能非常基础,所以使用起来很麻烦。一个简单的给变量分配内存空间的操作,就需要动用多个系统调用。Linux定义一些库函数(library routine)来将系统调用组合成某些常用的功能。上面的分配内存的操作,可以定义成一个库函数,比如常用的malloc。

3、shell

shell(壳)是一个特殊的应用,也经常被称为命令行 。可以理解为是一个命令解释器

例如:当我们输入“ls -l”的时候,它将此字符串解释为
1.在默认路径找到该文件(/bin/ls),
2.执行该文件,并附带参数"-l"。

一个shell对应一个终端 (terminal)。曾经来说,终端是一个硬件设备,用来输入并显示输出。如今,由于图形化界面的普及,终端往往就像下图一样,是一个图形化的窗口。
在这里插入图片描述
你可以通过这个窗口输入或者输出文本,这个文本直接传递给shell进行分析解释,然后执行,本质就是提供和内核交互的程序。

shell脚本

在没有图形界面之前,shell充当了用户的界面,当用户要运行某些应用时,通过shell输入命令,来运行程序。shell是可编程的,它可以执行符合shell语法的文本,这样的文本叫做shell脚本(script)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值