本文为学习笔记
,整合课程内容以及部分文章,参考的原文链接如下:
虚拟文件系统板块:
参考:原文链接。作者:uestc-leon
目录
师承陈立臣
文件系统初步认知
学术定义
文件系统是操作系统用于明确存储设备的文件和数据结构,即在存储设备上组织文件的方法。
文件系统种类
文件的格式又有FAT,HFS,…
常见的:
vfat
:boot (bootloader,kernel)
ext4
:根目录
tmpfs
:内存文件系统
比如,windows用的是NTFS。
树莓派的有
df -T
什么是分区
windows对于分区的管理较为“随意”,因为其面向普通PC用户。C,D盘随意存放文件。
而linux较为严格,按照功能来分区,大多面向开发者。
嵌入式系统可分为4个区:
bootloader
:启动代码
para
:启动代码向内核传递参数的位置
kernel
:l内核分区
根分区
:文件系统结构
简单理解windows和linux文件系统的区别
在windows下会有驱动器盘符(C,D,E等),某个文件确切的存在于某个盘符中。
在linux下没有盘符的概念,所有的文件都在根目录(/)(cd
或者cd ~
进入)下。可以理解为所有文件都分散到整个磁盘上。
文件系统目录结构
要求熟悉且记忆。
在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和/放置在一个分区下。
切换为root超级用户
如果我非要进去呢?(尝尝鲜看看就好),通常是没有权限去更改root密码。树莓派玩玩罢了。
- 强制创建一个新密码
sudo passwd root
- 获取root超级权限
su - root
用ls
可以发现/root下啥也看不到
删库跑路:直接干掉根目录(别尝试哈)
cd .. //回到上级目录 /
rm / -rf
切换回普通用户
su - pi
/media
:便携式移动设备挂载点目录.
/mnt
:临时文件系统挂载点.
/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
sys
: 用于输出当前系统上硬件设备相关的虚拟文件系统.
/selinux
:存放selinux相关的信息安全策略等信息.
绝对路径与相对路径
绝对路径 :以/
开始,表示该文件从根目录开始的完整位置路径,必须以根开始。
相对路径 :不以/
开始,指该文件相对于该目录的路径或某个目录的路径,不以根开始。可以作为一个简短的形式来指定一个文件名。
虚拟文件系统(Virtual File System)(VFS)
参考:原文链接。
作者:uestc-leon
是什么?
VFS是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用接口
有什么作用?
文件对应的分区可能不一样,有的来自ext4,或者tmps。即为文件系统的类型可能不一样,数据存储的方式不一样,访问方式也就不一样,没办法做到操作统一化,给编程开发带来困难。
而虚拟文件系统的存在正是解决了这个问题:简化上层应用程序员的开发,不管是什么文件类型,磁盘还是设备,通通都是用open,read,write统一操作。
EG1:cp
指令的实现
用户输入以下指令:
cp /floppy/TEST /tmp/test
其中/floppy是MS-DOS磁盘的一个安装点,而/tmp是一个标准的第二扩展文件系统(second Extended Filesystom, Ext2)的目录。正如图(a)所示,VFS是用户的应用程序与文件系统实现之间的抽象层。因此,cp程序并不需要知道/floppy/TEST 和 /tmp/test是什么文件系统类型。相反,cp程序直接与VFS交互,这是通过Unix程序设计人员都熟悉的普通系统调用来进行的。cp的执行代码如图(b)所示:
EG2:从系统编程,从上层到底层来看
如果从分区的角度,串口操作的就是/dev;普通文件如 .config在ext4上;共享内存 tmpfs dev/shm…
之前所学的Linux系统编程,各种应用层的知识,vfs都提供了帮助。