前言
在Windows 系统重新安装之前,你可能会事先考虑,到底系统盘C盘要有多大容量?而数据盘D盘又要给多大容量等,然后实际安装的时候,你会发现其实C盘之前会有个100MB的分区被独立出来,所以实际上你就会有三个分区,那Linux下面又该如何设计类似的东西呢?
1.目录树结构(directory tree)
我们前面有谈过Linux内的所有数据都是以文件的形式来呈现,所以,整个Linux系统最重要的地方就是在于目录树架构。
所谓的目录树架构(directory tree)就是以根目录为主,然后向下呈现为分支状的目录结构的一种文件架构。
所以,整个目录树架构最重要的就是那个根目录(root directory),这个根目录的表示方法为一条斜线“/”,所有的文件都与目录树有关。
目录树的呈现方式如图所示。
所有的文件都是由根目录(/)衍生来的,而子目录之下还能够有其他的数据存在。长方形为目录,波浪形则为文件。
那当我们想要取得mydata那个又件时,系统就得由根目录开始找,然后找到home接下来找到dmtsai,最终的文件名为:/home/dmtsai/mydata。
我们现在知道整个 Linux 系统使用的是目录树架构,但是我们的文件数据其实是放置在磁盘分区当中,现在的问题是“如何结合目录树的架构与磁盘内的数据”?
这个时候就牵扯到挂载(mount)的问题。
2.文件系统与目录树的关系(挂载)
我们说过, Linux 系统中“一切皆文件”,所有文件都放置在以根目录为树根的树形目录结构中。在 linux 看来,任何硬件设备也都是文件,它们各有自己的一套文件系统(文件目录结构)。
因此产生的问题是,当在 Linux 系统中使用这些硬件设备时,只有将Linux本身的文件目录与硬件设备的文件目录合二为一,硬件设备才能为我们所用。合二为一的过程称为“挂载”。
也就是说, 挂载指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录(最好是空目录),访问此目录就等同于访问设备文件。
如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。
并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录。
我们看个例子来理解挂载
举个例子,我们想通过命令行访问某个 U 盘中的数据,图 1 所示为 U 盘文件目录结构和 Linux 系统中的文件目录结构。
图 1 中可以看到,目前 U 盘和 Linux 系统文件分属两个文件系统,还无法使用命令行找到 U 盘文件,需要将两个文件系统进行挂载。
接下来,我们在根目录下新建一个目录 /sdb-u,通过挂载命令将 U 盘文件系统挂载到此目录,挂载效果如图 2 所示。可以看到,U 盘文件系统已经成为 Linux 文件系统目录的一部分,此时访问 /sdb-u/ 就等同于访问 U 盘。
前面讲过,根目录下的 /dev/ 目录文件负责所有的硬件设备文件,事实上,当 U 盘插入 Linux 后,系统也确实会给 U 盘分配一个目录文件(比如 sdb1),就位于 /dev/ 目录下(/dev/sdb1),但无法通过 /dev/sdb1/ 直接访问 U 盘数据,访问此目录只会提供给你此设备的一些基本信息(比如容量)。
由于整个Linux 系统最重要的是根目录,因此根目录一定需要挂载到某个分区,至于其他的目录则可依用户自己的需求挂载到不同的分区,我们以下图作为一个说明:
上图中假设我的硬盘分为两个分区,分区1是挂载到根目录,至于分区2则是挂载到/home这个目录。这也就是说,当我的数据放置在/home内的各层目录时,数据是放置到分区2中的,如果不是放在 /home下面的目录,那么数据就会被放置到partition1。
Windows也是用挂载的概念。鸟哥上课经常谈到的范例就是,当你拿U盘连接到你的Windows时,系统会检测到一个F盘,那你想要读取U盘的数据,要去哪里?当然就去F盘,同样的这个U盘,当你拿到学校的Windows时,却显示的是H盘好了,那你要读取U盘的数据还是去F盘吗?当然不是,你会去H盘。
这个“设备与磁盘分区对应的关系,就是Windows概念下的挂载”。这样说,有没有比较容易理解呢?
其实判断某个文件在哪个分区下面是很简单的,通过反向追踪即可。以上图来说,当我想要知道home/vbird/test这个文件在哪个分区时,由test-->vbird-->home-->/,看哪个“进入点”先被查到那就是使用的进入点。所以test 使用的是/home这个进入点而不是/。
例题
现在让我们来想一想,我的计算机系统如何读取光盘内的数据?
在Windows里面使用的是“光驱”的代号方式处理(假设为E盘时),但在Linux下面我们依旧使用目录树。在默认的情况下,Linux是将光驱的数据放置到/media/cdrom里面。
如果光盘里面有个文件名为“我的文件”的文件,那么这个文件是在哪里?
答:这个文件最终会在如下的完整文件名中:
- Windows:桌面\我的计算机\E:\我的文件
- Linux:/media/cdrom/我的文件
如果光驱并非被挂载到/media/cdrom,而是挂载到/mnt这个目录时,刚刚读取的这个文件的文件名会变成:
- /mnt/我的文件
如果你了解这个文件名,这表示你已经知道了挂载的意义。初次接触Linux时,这里最容易搞混
因为它与Windows的分区代号完全不一样。