文件系统
1.概念
文件系统是操作系统中用于管理和组织存储设备上的文件和目录的一种方法。它提供了一组规则和数据结构,用于存储和检索文件的信息,并决定文件如何被组织、命名和访问。文件系统通常由文件、目录和文件属性(例如权限、所有者等)组成。
文件系统通过在物理存储设备上创建一个逻辑结构来组织文件。这个逻辑结构包括超级块、索引节点(inode)表、数据区等。超级块包含了文件系统的整体信息和元数据,索引节点表用于存储每个文件和目录的元数据,而数据区则是实际存储文件内容的地方。
2.文件系统结构
Linux 文件系统由 4 层组成,分别是用户层、内核层、驱动层、硬件层,如下所示。
用户层,其包含一些应用程序和 GNU C 库(即glibc),为用户提供一些系统调用接口,比如文件的打开、读取、写和关闭等API。
内核层,它包含一些底层文件系统的主要接口,实现了各种文件系统。
JFFS文件系统:主要用于NOR型Flash存储器。其基于MTD驱动层。可读写、支持数据压缩、基于哈希表的日志型文件系统,并提供了崩溃掉电安全保护,提供“写平衡”支持。
YAFFS文件系统:专门为NAND Flash存储器设计的嵌入式文件系统。适用于大容量的存储设备。速度快,占用内存少,不支持压缩和只支持NAND Flash存储器。
驱动层,指的是块设备的驱动程序。
硬件层,指的是嵌入式系统使用的几种存储器。
跟文件系统
1.概念
根文件系统是文件系统的顶层,也是整个文件系统的起点。在Linux和类Unix操作系统中,根文件系统的路径被表示为"/"。根文件系统包含操作系统的核心文件、系统配置文件以及其他必要的系统文件。它是文件系统层次结构中所有其他文件和目录的父级目录。
在启动过程中,操作系统会加载根文件系统并将其挂载到特定的目录(例如"/")。一旦根文件系统成功挂载,用户便可以通过该根目录访问存储设备上的所有文件和目录。根文件系统的设计和组织对于操作系统的正常运行至关重要,因为它提供了操作系统所需的关键文件和配置信息。
此外,根文件系统还可以支持挂载其他文件系统。通过挂载其他文件系统,用户可以访问其他物理存储设备上的文件和目录,这使得操作系统能够扩展存储容量或访问其他存储介质。
总之,文件系统是操作系统用来管理和组织文件和目录的方式,而根文件系统是文件系统的顶层结构,包含操作系统核心文件和配置信息,也是整个文件系统层次结构的起点。
2.组成
Linux根文件系统中一般有如下的几个目录:
2.1 /bin目录
该目录下的命令可以被root与一般账号所使用,由于这些命令在挂接其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中。
/bin目录下常用的命令有:cat、chgrp、chmod、cp、ls、sh、kill、mount、umount、mkdir、[、test等。其中“[”命令就是test命令,我们在利用Busybox制作根文件系统时,在生成的bin目录下,可以看到一些可执行的文件,也就是可用的一些命令。
2.2/sbin 目录
该目录下存放系统命令,即只有系统管理员(俗称最高权限的root)能够使用的命令,系统命令还可以存放在/usr/sbin,/usr/local/sbin目录下,/sbin目录中存放的是基本的系统命令,它们用于启动系统和修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中。
/sbin目录下常用的命令有:shutdown、reboot、fdisk、fsck、init等,本地用户自己安装的系统命令放在/usr/local/sbin目录下。
2.3 /dev目录
该目录下存放的是设备与设备接口的文件,设备文件是Linux中特有的文件类型,在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。比如通过"dev/ttySAC0"文件可以操作串口0,通过"/dev/mtdblock1"可以访问MTD设备的第2个分区。比较重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*等。
2.4 /etc目录
该目录下存放着系统主要的配置文件,例如人员的账号密码文件、各种服务的其实文件等。一般来说,此目录的各文件属性是可以让一般用户查阅的,但是只有root有权限修改。对于PC上的Linux系统,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序,依赖于这些程序是否需要配置文件。在嵌入式系统中,这些内容可以大为精减。
2.5 /lib目录
该目录下存放共享库和可加载(驱动程序),共享库用于启动系统。运行根文件系统中的可执行程序,比如:/bin /sbin 目录下的程序。
2.6 /home目录
系统默认的用户文件夹,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件。
2.7 /root目录
系统管理员(root)的主文件夹,即是根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。
2.8 /usr目录
/usr目录的内容可以存在另一个分区中,在系统启动后再挂接到根文件系统中的/usr目录下。里面存放的是共享、只读的程序和数据,这表明/usr目录下的内容可以在多个主机间共享,这些主要也符合FHS标准的。/usr中的文件应该是只读的,其他主机相关的,可变的文件应该保存在其他目录下,比如/var。/usr目录在嵌入式中可以精减。
2.9 /var目录
与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。
2.10 /proc目录
这是一个空目录,常作为proc文件系统的挂接点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的目录,文件都是由内核
临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。
2.11 /mnt目录
用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一引起空的子目录,比如/mnt/cdram /mnt/hda1 。用来临时挂载光盘、移动存储设备等。
2.12 /tmp目录
用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。