鸟哥的Linux私房菜 基础学习篇读书笔记(9):Linux磁盘与文件系统管理(2)

时间:2021-10-27 05:14:04

上一篇文章主要从理论上分析了Linux的Ext2文件系统。这一篇主要解说怎样查看Linux的文件系统的容量以及解说Linux文件系统中的连接文件。

能够通过df和du命令来查看磁盘与文件夹的容量。df命令用来列出文件系统的总体磁盘容量,df命令的使用方法是 df  [-ahikHTm]  文件夹或文件名称。假设df命令不加不论什么參数,则默认将系统内全部的文件系统的容量以及使用情况都列出来。关于df命令还须要说明的是 df命令是查看文件系统的总体使用情况,因此是从Super block(见前一篇文章)中读取信息,因此df命令的运行速度很快。

下面是df命令的使用举例:

鸟哥的Linux私房菜 基础学习篇读书笔记(9):Linux磁盘与文件系统管理(2)

鸟哥的Linux私房菜 基础学习篇读书笔记(9):Linux磁盘与文件系统管理(2)

从图中可以看到,尽管用df命令查看/etc文件夹的使用情况,可是df命令会自己主动分析该文件夹所在的分区,然后将该分区的使用情况列举出来。这里不要犯迷糊,仅仅要不进行磁盘限额,那么/etc文件夹可以使用的容量就是该文件夹所在文件系统的容量。

那假设我就是要看当前/etc文件夹已占用的文件系统容量,那就得通过 du命令。du命令主要用来查看文件夹所占的容量。

不同于df命令,du命令是直接到文件系统内去查看全部的文件系统数据,因此运行时间可能会久一点。关于du命令还是多讲一点。可能鸟哥书上讲的不是非常清楚,du命令默认会显示该文件夹下各个子文件夹的容量,而显示的总文件夹容量是已经将该文件夹下各个子文件夹的容量加和的。

举个样例,如图所看到的:

鸟哥的Linux私房菜 基础学习篇读书笔记(9):Linux磁盘与文件系统管理(2)

鸟哥的Linux私房菜 基础学习篇读书笔记(9):Linux磁盘与文件系统管理(2)

/home文件夹下总共同拥有三个子文件夹: /home/hw , /home/test_one ,/home/fuchencong ,它们的容量(已经算上子文件夹)各自是4k。52k,240k,并且能够查看到 /home 文件夹自己本身(不算子文件夹的容量)是4k。所以终于显示的/home文件夹的容量是 4k + 52k + 240k + 4k= 300k。

另外在使用du命令时。假设加上-S參数,则显示的文件夹容量就不会加上子文件夹的容量,此时仅仅是显示该文件夹本身占用的容量(当然还包含该文件夹下的直接文件),例如以下图所看到的: /home文件夹显示的占用容量为4k,这就是/home文件夹本身所占用的容量,而不包含其子文件夹所占用的容量。

鸟哥的Linux私房菜 基础学习篇读书笔记(9):Linux磁盘与文件系统管理(2)

接下来解说Linux中的连接文件,假设已经理解了Linux的Ext2文件系统,那么理解连接文件就很easy了。

在Linux操作系统中,连接文件分为两种,硬连接(实际连接)和 符号连接。能够使用ln命令创建连接文件,ln命令的用法为 ln [-sf] 源文件 目标文件,假设不加不论什么參数制作连接文件,就是默认创建硬连接,假设加上-s參数。就是代表创建符号连接文件。那硬连接和符号连接有什么差别呢?

上一篇文章已经讲过,Linux读取一个文件时。首先要从文件夹block里找出该文件名称相应的inode号码。那假设同一时候有多个文件名称同一时候相应一个inode号码,那么不管通过哪个文件名称实际上都訪问到同一个文件,事实上这就是硬连接。

简单的说。硬链接仅仅是在某个文件夹下新建一条文件名称关联到某个inode号码的关联记录而已。

当有多个文件名称关联到同一个inode号码。就能够通过当中的随意一个文件名称来訪问该文件的数据,并且不管通过哪个文件名称来改动数据,终于都会改动到实际的文件数据。

类似的。当删除一个文件时,事实上仅仅是将相应的inode里的引用计数-1。并不会真的删除文件数据,仅仅有当该文件inode里的引用计数减为0,该文件数据才会真的被删除。

可是硬连接也是有限制的,由于每一个文件系统都有自己的inode编号。所以文件夹项里文件名称相应的inode号码仅仅能是同一文件系统里的inode号码。因此硬连接仅仅能针对同一文件系统创建。不能跨文件系统建立。并且硬连接也不能连接到文件夹。一方面对文件夹创建硬连接会添加系统环境的复杂度,还有一方面对文件夹创建硬连接easy造成循环。因此不支持硬连接到文件夹。

Linux中另一类连接。称为符号连接。

不同于硬连接。符号连接是创建了一个独立的文件,仅仅只是对这个文件的数据读取会被转向为对它指向文件的数据读取。因此当源文件被删除时。符号连接就会“开不了”。并且对于一个符号连接,它的文件长度就是它所引用文件的文件名称长度,由于在连接文件里,它的内容就是目标文件的“文件名称”。

下面是硬连接和符号连接的一个实例:

鸟哥的Linux私房菜 基础学习篇读书笔记(9):Linux磁盘与文件系统管理(2)

图中能够清晰的观察到hard_link 和 test.file关联到同一个inode号码,因此这两个文件代表的是同一个文件,并且引用计数为2。而symbol_link文件的inode不同于test.file,由于symbol_link是一个独立的文件,仅仅只是它是一个指向test.file的连接文件。并且能够观察到symbol_link的文件长度为9字节。事实上就是test.file这个文件的文件名称长度。

最后解说一下关于文件夹的连接数量。每当新建一个空文件夹时,该新文件夹的连接数量为2。

为什么呢?首先文件夹本身占领一个连接,然后该文件夹里另一个特殊文件夹“.”,它也是代表该文件夹。因此该文件夹的连接数量为2。 假设在该新的文件夹里创建一个子文件夹,该文件夹的连接数又将+1。由于新建的子文件夹里有一个特殊文件夹“..”。代表上级文件夹,它也指向该文件夹,因此该文件夹的连接数+1。


本章Linux命令总结:

df, du, ln。