- 文件系统概念
- 1、什么是文件系统?
- 2、文件系统的种类
- 3、什么是分区?
- 文件系统目录结构
- 1、什么是文件系统目录结构?
- 2、一些指令
- 3、/etc
- 虚拟文件系统
- 1、什么是虚拟文件系统?
- 2、虚拟文件系统作用:
常规认知就是根目录下那些文件,也可以这样笼统的讲,但具体来讲其实并不是那样。
- 文件系统是 *** 作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。 *** 作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。
也指用于存储文件的磁盘或分区,或文件系统种类。 因此,可以说"我有2个文件系统"意思是他有2个分区,一个存文件,或他用
“扩展文件系统”,意思是文件系统的种类。
比如在linux源码下文件下的文件系统代码存放在fs
文件夹(由此可知文件系统是一个程序):
-
文件系统(文件管理系统)的种类有哪些?
既然文件系统是管理磁盘文件的方法,那么肯定不止一种,比如说:FAT、vfat 、NTFS、EXT(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都表示为设备。硬盘分区一共有三种:
主分区,扩展分区 和 逻辑分区
。
硬盘的分区主要分为主分区和扩展分区两种,主分区 和 扩展分区 的数目之和不能大于四个。
主分区:可以马上被使用但不能再分区。
扩展分区:必须再进行分区后才能使用,也就是说它必须还要进行二次分区。
逻辑分区:由扩展分区建立起来的分区,逻辑分区没有数量上限制。
扩展分区只不过是逻辑分区的“容器”,实际上只有主分区和逻辑分区进行数据存储。嵌入式系统可以分为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 不同。
件系统是存储设备上组织文件的方法,那么常规认知的根目录是什么呢?
其实根目录就是文件系统目录结构。
在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的预设放置也是在这里。
-
可以在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时候,指令行是#,普通用户就是$
- 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,然后就可以 *** 作处于不同文件系统的文件。
简化应用程序员的开发,不管是什么文件类型,不管文件是磁盘还是设备,都只用open,read,write 统一 *** 作。
- VFS在用户和文件系统之间提供了一个交换层,在 VFS 上面,是对诸如open、close、read 和 write 之类的函数的一个通用API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50个)的插件,文件系统的源代码可以在
./linux/fs
中找到。文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。因此,用户和进程不需要知道文件所在的文件系统类型,而只需要象使用 Ext2 文件系统中的文件一样使用它们。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)