1. 操作系统的基本功能之一就是文件管理,而文件的管理是由文件系统来完成的。Linux支持多种文件系统,本节我们就来讲解Linux下的文件系统、文件系统类型、文件系统结构和文件系统相关Shell命令。

1.1 Linux 文件系统简介以及类型

(1)Linux 文件系统简介

  1. 操作系统就是处理各种数据的,这些数据在硬盘上就是二进制,我们肯定不能直接看懂这些二进制数据,要有一个翻译器,将这些二进制的数据还原为我们能看懂的文件形式,这个工作就是由文件系统来完成的,文件系统的目的就是实现数据的查询和存储,由于使用场合、使用环境的不同,Linux有多种文件系统,不同的文件系统支持不同的体系。文件系统是管理数据的,而可以存储数据的物理设备有硬盘、U盘、SD卡、NAND FLASHNOR FLASH、网络存储设备等。不同的存储设备其物理结构不同,不同的物理结构就需要不同的文件系统去管理,比如管理NAND FLASH的话使用YAFFS文件系统,管理硬盘、SD卡的话就是ext文件系统等等。 <br /> 我们在使用Windows的时候新买一个硬盘回来一般肯定是将这个硬盘分为好几个盘,比如C盘、D盘等等。这个叫磁盘的分割,Linux下也支持磁盘分割,Linux下常用的磁盘分割工具为:fdiskfdisk这个工具我们后面会详细讲解怎么用,因为我们移植Linux的时候需要将SD卡分为三个分区来存储不同的东西。在Windows下我们创建一个新的盘符以后都要做格式化处理,格式化其实就是给这个盘符创建文件系统的过程,我们在Windows格式化某个盘的时候都会让你选择文件系统,如图所示:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12927549/1617162350318-139f36bf-f23e-4fac-b7e3-f44d3d518d7f.png#align=left&display=inline&height=262&margin=%5Bobject%20Object%5D&name=image.png&originHeight=262&originWidth=295&size=15853&status=done&style=none&width=295)<br /> 上图就是格式化磁盘的时候选择文件系统,Windows下一般有FAT、NTFS和exFAT这些文件系统。同样的,在Linux下我们使用fdisk创建好分区以后也是要先在创建好的分区上面创建文件系统,也就是格式化。 <br /> 在Windows下有磁盘分区的概念,比如C,D,E盘等,在Linux下没有这个概念,因此Linux下你找不到像C、D、E盘这样的东西。前面我们说了Linux下可以给磁盘分割,但是没有C、D、E盘那怎么访问这些分区呢?在 Linux下创建一个分区并且格式化好以后我们要将其“挂载”到一个目录下才能访问这个分区。Windows的文件系统挂载过程是其内部完成的,用户是看不到的,Linux下我们使用mount命令来挂载磁盘。挂载磁盘的时候是需要确定挂载点的,也就是你的这个磁盘要挂载到哪个目录下。

(2)Linux 文件系统类型

  1. 前面我们说了,在Windows下有 FATNTFSexFAT这样的文件系统,在Linux下又有哪些文件系统呢,Linux下的文件系统主要有ext2ext3ext4等文件系统。Linux还支持其他的UNIX文件系统,比如XFSJFSUFS等,也支持WindowsFAT文件系统和网络文件系统NFS等。这里我们主要讲一下Linux自带的ext2ext3ext4文件系统。 <br />**ext2 文件系统: **<br /> ext2Linux早期的文件系统,但是随着技术的发展ext2文件系统已经不推荐使用了,ext2是一个非日志文件系统,大多数的Linux发行版都不支持ext2文件系统了。 <br />**ext3 文件系统:** <br /> ext3是在ext2的基础上发展起来的文件系统,完全兼容ext2文件系统,ext3是一个日志文件系统,ext3支持大文件,ext3文件系统的特点有如下: <br /> 高可靠性:使用ext3文件系统的话,即使系统非正常关机、发生死机等情况,恢复ext3文件系统也只需要数十秒。 <br /> 数据完整性:ext3提高了文件系统的完整性,避免意外死机或者关机对文件系统的伤害。 <br /> 文件系统速度:ext3的日志功能对磁盘驱动器读写头进行了优化,文件系统速度相对与ext2来说没有降低。 <br /> 数据转换:从ext2转换到ext3非常容易,只需要两条指令就可以完成转换。用户不需要花时间去备份、恢复、格式化分区等,用ext3文件系统提供的工具tune2fs即可轻松的将ext2文件系统转换为ext3日志文件系统。ext3文件系统不需要经过任何修改,可以直接挂载成ext2文件系统。 <br />**ext4 文件系统:** <br /> ext4文件系统是在ext3上发展起来的,ext4相比与ext3提供了更佳的性能和可靠性,并且功能更丰富,ext4向下兼容ext3ext2,因此可以将ext2ext3挂载为ext4。那么我们安装的Ubuntu使用的哪个版本的文件系统呢?在终端中输入如下命令来查询当前磁盘挂载的什么文件系统: <br /> df -T h <br />结果如图所示:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12927549/1617172408915-6bbfdcd4-9d27-475c-a596-90a6f3344631.png#align=left&display=inline&height=343&margin=%5Bobject%20Object%5D&name=image.png&originHeight=343&originWidth=557&size=175886&status=done&style=none&width=557)<br /> 在图中,框起来的就是我们安装Ubuntu的这个磁盘,在Linux下一切皆为文件,“/dev/sda1”就是我们的磁盘分区,可以看出这个磁盘分区类型是 ext4,它的挂载点是“/”,也就是根目录。

(3)Linux 文件系统结构

  1. Windows下直接打开C盘,我们进入的就是C盘的根目录,打开D盘进入的就是D盘的根目录,比如C盘根目录如下:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12927549/1617172477541-0990462b-6736-4485-bcd0-e48232082dc3.png#align=left&display=inline&height=229&margin=%5Bobject%20Object%5D&name=image.png&originHeight=229&originWidth=432&size=23944&status=done&style=none&width=432)<br /> 在Linux下因为没有C、D盘之说,因此Linux只有一个根目录,没有C盘根目录、D盘根目录之类的。其实如果你的Windows只有一个C盘的话那么整个系统也就只有一个根目录。Windows下的C盘根目录就是“C:”,在 Linux下的根目录就是“/”,打开Ubuntu的文件浏览器,文件浏览器在左侧的导航栏,图标如图所示: <br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12927549/1617172496451-e0ac5231-da7e-483f-994c-8c5bd725e9ed.png#align=left&display=inline&height=155&margin=%5Bobject%20Object%5D&name=image.png&originHeight=155&originWidth=187&size=28302&status=done&style=none&width=187)<br />打开后的文件浏览器:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12927549/1617172510532-3a8852a9-c69f-4a5e-acba-5871778b869a.png#align=left&display=inline&height=231&margin=%5Bobject%20Object%5D&name=image.png&originHeight=231&originWidth=512&size=50379&status=done&style=none&width=512)<br /> 直接打开文件浏览器以后,我们默认不是处于根目录中的,不像Windows,我们直接打开C盘就处于C盘根目录下。Ubuntu是支持多用户的,Ubuntu为每个用户创建了一个根目录,比如我电脑现在登陆的是“xinluyao”这个用户,因此默认进入的是“xinluyao”这个用户的根目录。我们点击图中“其他位置-计算机”,如图所示:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12927549/1617172534519-82b3f283-3535-4cd3-bd56-efa1ee1994d9.png#align=left&display=inline&height=335&margin=%5Bobject%20Object%5D&name=image.png&originHeight=335&originWidth=505&size=39207&status=done&style=none&width=505)<br />打开后如图所示:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12927549/1617172553470-c8a1ed1c-d598-470b-a9c7-2ec25d7105f3.png#align=left&display=inline&height=413&margin=%5Bobject%20Object%5D&name=image.png&originHeight=413&originWidth=557&size=110125&status=done&style=none&width=557)<br /> 图中就是Ubuntu的根目录“/”,这时候肯定就有人有疑问,刚刚说Ubuntu会给每个用户创建一个根目录,那这些用户的根目录在哪里?是不是和根目录“/”是一个地位的?其实所谓的给每个用户创建一个根目录只是方便说而已,这个所谓的用户根目录其实就是“/”下的一个文件夹,以我的“xinuyao”这个用户为例,其用户根目录就是:/home/xinluyao。只要你创建了一个用户,那么系统就会在/home这个目录下创建一个以这个用户名命名的文件夹,这个文件夹就是这个用户的根目录。用户可以对自己的用户根目录下的文件进行随意的读写操作,但是如果要修改根目录“/”下的文件就会提示没有权限。打开终端以后默认进入的是当前用户根目录,比如我们打开终端以后输入“ls”命令查看当前目录下有什么文件,结果如图所示: <br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12927549/1617172580454-24c1e66f-5842-42ef-a2bb-3e4ef4e081b3.png#align=left&display=inline&height=60&margin=%5Bobject%20Object%5D&name=image.png&originHeight=60&originWidth=523&size=15698&status=done&style=none&width=523)<br />可以看出和上图中的一模一样,都是“xinluyao”这个账户的根目录。我们来看一下根目录“/”下都有哪些文件,在终端中输入如下命令: <br /> cd / //进入到根目录“/ <br /> ls //查看根目录“/”下的文件以及文件夹 <br />执行上述两行命令以后,终端如图所示:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12927549/1617172628904-c1053167-c443-4c2c-893c-4f1e933f69b2.png#align=left&display=inline&height=101&margin=%5Bobject%20Object%5D&name=image.png&originHeight=101&originWidth=557&size=33124&status=done&style=none&width=557)<br /> 图中列举出了根目录“/”下面的所有文件夹,这里我们仔细观察一下,当我们进入到根目录“/”里面以后终端提示符“$”前面的符号“~”变成了“/”,这是因为当我们在终端中切换了目录以后“$”前面就会显示切换以后的目录路径。我们来看一下根目录“/”中的一些重要的文件夹: <br />**/bin** 存储一些二进制可执行命令文件,/usr/bin也存放了一些基于用户的命令文件。 <br />**/sbin ** 存储了很多系统命令,/usr/sbin也存储了许多系统命令。 <br />**/root ** 超级用户root的根目录文件。 <br />**/home** 普通用户默认目录,在该目录下,每个用户都有一个以本用户名命名的文件夹。 <br />**/boot ** 存放Ubuntu系统内核和系统启动文件。 <br />**/mnt** 通常包括系统引导后被挂载的文件系统的挂载点。 <br />**/dev** 存放设备文件,我们后面学习Linux驱动主要是跟这个文件夹打交道的。 <br />**/etc ** 保存系统管理所需的配置文件和目录。 <br />**/lib ** 保存系统程序运行所需的库文件,/usr/lib下存放了一些用于普通用户的库文件。 <br />**/lost+found** 一般为空,当系统非正常关机以后,此文件夹会保存一些零散文件。 <br />**/var** 存储一些不断变化的文件,比如日志文件 <br />**/usr** 包括与系统用户直接有关的文件和目录,比如应用程序和所需的库文件。 <br />**/media ** 存放Ubuntu系统自动挂载的设备文件。 <br />**/proc ** 虚拟目录,不实际存储在磁盘上,通常用来保存系统信息和进程信息。 <br />**/tmp ** 存储系统和用户的临时文件,该文件夹对所有的用户都提供读写权限。 <br />**/opt ** 可选文件和程序的存放目录。 <br />**/sys** 系统设备和文件层次结构,并向用户程序提供详细的内核数据信息。