一. 文件系统

文件系统将文件的权限与属性保存在inode中,一个文件占用一个inode,实际的数据保存在data block块中。inode会记录文件所占有用的block的号码。每个block只能放置一个文件的数据,而一个文件可以占用多个block。每个文件系统还会有一个超级块(super block)用于记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量、以及文件系统的格式与相关信息。可以使用命令dumpe2fs来查看super block的信息

    Linux文件系统管理_Linux

    Linux文件系统管理_系统管理_02

inode中并不保存文件的文件名,文件名放置在目录的block中。根目录的inode号为2。

    Linux文件系统管理_文件_03

二.文件系统相关操作

1.链接文件

在Linux下有两种链接文件:硬链接和符号链接(软链接)。

硬链接:不同文件指向同一个inode,所有硬链接到同一个inode的文件,它们的内容是共享的,即修改其中一个文件的内容,其它硬链接的文件内容也会更改。硬链接有以下特性:

1)只能对文件创建,不能应用于目录;

如果对目录创建硬链接,那么对于目录下的所有文件都要创建对应的硬链接,在文件较多的情况下则会使得情况变得相当复杂,所以不充许对目录进行硬链接。

2)不能跨文件系统;

inode号码是在文件系统中的super block中维护的,不同的文件系统不保证提供相同的inode号码,所以不同文件系统之间无法创硬链接。

3)创建硬链接会增加被硬链接的次数;

在文件属性中会看到链接次数被增加。 

   Linux文件系统管理_Linux_04   

4)增加inode引用计数;

同一个inode被链接了新的文件,引用计数会增加。符号链接:类似于window中的快捷方式。符号链接文件会占用新的inode,所以被符号链接的文件移动或删除的话,符号链接文件也即失效。理解了硬链接的特性后,就不难理解符号链接的特性了:

            1、可以应用于目录;

            2、可以跨文件系统;

            3、不会增加被链接文件的链接次数;

            4、其大小为指定的路径所包含的字符个数;

            5、不会增加inode引用计数。

创建链接文件

        格式:ln [-sf] 源文件 目标文件

            -s:创建符号链接,如果不加任何参数则是创建硬链接;

            -f:如果目标文件存在,就将目标文件删除后再创建;

创建硬链接

        创建前我们先来看下inode的占用情况,df -i可以查看文件系统的inode使用情况;

            Linux文件系统管理_系统管理_05

创建硬链接后,两个文件的硬链接数都是2;

            Linux文件系统管理_Linux_06 

输入内容到文件hard_link中,可以看到两个文件同时增加了大小;

            Linux文件系统管理_文件_07

将link文件改名后,hard_link文件依然可以访问;

            Linux文件系统管理_系统管理_08

再来查看一下inode占用情况,并没有发生变化。

            Linux文件系统管理_系统管理_09

创建软链接,创建软链接后文件link的链接数并没有增加

            Linux文件系统管理_系统管理_10

访问symbol_link文件可以看到link文件的内容。

            Linux文件系统管理_Linux_11        

使用ls命令的-i参数可以看到文件所占用的inode号码;可以看到硬链接与原文件的inode号码相同,而符号链接则使用了新的inode号码。下面的输出中符号链接的大小为4,其实它表示符号链接所指向的文件名的字符数,link为4个字符,所以它的大小为4。

            Linux文件系统管理_系统管理_12

看下inode的使用情况,在上面创建硬链接时inode使用数量为125630,创建符号链接后变成了125631,可见符号链接会占用inode。

            Linux文件系统管理_Linux_13

                

将文件link改名后,符号链接已经找不到原文件而出错了。

            Linux文件系统管理_系统管理_14

            Linux文件系统管理_文件_15

另外,一个inode可以被引用多次,其有计数器;在引用次数降为0之前,不会被标记为未占用inode.

文件被删除,inode被标记为空闲,此inode指向的磁盘地块被标记为空闲。

如果inode被引用多次,且此次删除未使得其引用计数降低为0的话,这意味着文件未被删除,仅删除了一个访问路径。

文件复制:创建一个新文件,是原文件中数据在新文件指向磁盘块中写一次的过程。

文件移动:

在同一分区移动: 移动文件仅是改变了文件访问路径。

跨分区移动:在新分区创建文件,把数据复制过去,删除原分区数据。

2.du和df命令

        du命令:用于显示文件和目录的容量。

            -a:列出所有的文件与目录容量;

            -s:列出整个目录的容量;

            -h:以人类易读的方式显示;

            -k:以KB显示容量;

            -m:以MB显示容量。

        下面举例来说明: 

显示/etc目录的容量;

        Linux文件系统管理_文件_16

以易读方式显示;

        Linux文件系统管理_Linux_17

显示/etc目录中每一个文件的大小;

        Linux文件系统管理_文件_18

df命令:列出文件系统的使用情况。

            -a:列出所有的文件系统;

            -k:以KB显示容量;

            -m:以MB显示容量;

            -h:以人类易读方式显示容量;

            -H:以M=1000K替代M=1024的进位方式;

            -T:显示文件系统的分区格式;

            -i:显示inode数量。

下面举例说明:

列出所有文件系统;

         Linux文件系统管理_文件_19

以易读方式显示容量;

        Linux文件系统管理_文件_20

显示文件系统的格式;

        Linux文件系统管理_系统管理_21

以易读方式显示inode数量;

         Linux文件系统管理_Linux_22