Linux入门笔记(文件系统)

Windows 98 以前的微软操作系统主要使用的文件系统是 FAT,windows 2000 以后的版本就使用 NTFS 文件系统,至于 Linux 的正统文件系统则为 ext2。
文件系统的运行与操作系统有关,较新的操作系统的文件除了文件实际内容外,还含有很多属性。例如 Linux 中的文件权限与文件属性。文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性设置到 inode 中,至于实际数据则放置到 数据区块 中,另外还有一个 超级区块,它会记录整个文件系统的整体信息。
即三个数据的意义可以简略的说明:

  • 超级区块:记录此文件系统的整体信息,包括 inode 与数据区块的总量、使用量、剩余量以及文件系统的格式与相关信息等
  • inode:记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的区块号码
  • 数据区块:实际记录文件的内容,若文件太大是,会占用多个区块

通过 inode 记录的区块号码读取实际数据,这样的数据存取方法称为 索引式文件系统,如 FAT 文件系统则是需要将一个一个区块读取出来,无法一次性地将所有区块读出,它要读取一个区块后才能知道下一个区块在何处,如下图就是二者的区别
在这里插入图片描述

需要碎片整理的原因就是文件写入的区块太过于离散,此时文件的读取性能会变得很差,通过碎片整理将统一文件所属的区块集合在一起,这样读取数据就会比较容易,相比之下,ext2 文件系统似乎就不太需要碎片整理了

文件系统要能够链接到目录树才能被我们使用,将文件系统与目录树结合的操作我们称为 挂载,挂载点一定是目录,该目录为进入该文件系统的入口,即没有该挂载点是无法使用该文件系统的。

1 Linux 的 ext2 文件系统

文件系统一开始就将 inode 与数据区块规划好了,除非重新格式化或利用 resize2fs 等命令修改其大小,否则 inode 与数据区块固定后就不在变动。在 ext2 文件系统中所支持的区块大小有 1K、2K 及 4K 三种,这在格式化的时候就已经固定了,每个区块都有编号,以方便 inode 的记录。同时 ext2 文件系统中一个区块只能容纳一个文件,则如果文件系统使用的是 4K 区块,而该文件系统中有 10000 个大小为 50B 的小文件,那么每个区块都会浪费 4096 - 50 = 4046 字节,一共就浪费了 4046 * 10000 = 38.6 MB 的空间,而且因为区块的大小而产生的 ext2 文件系统限制如下:

Block 大小1KB2KB4KB
最大单一文件限制16GB256GB2TB
最大文件系统总量2TB8TB16TB

1.2 inode 表

基本上 inode 记录的数据至少有下面这些:

  • 该文件的读写属性
  • 该文件的拥有者与用户组
  • 该文件的大小
  • 该文件建立或状态改变的时间
  • 最近一次的读取时间
  • 最近修改的时间
  • 定义文件特性的标识,如(SetUID)
  • 该文件真正内容的指向

除此之外,inode还有以下特色:

  • 每个 inode 大小均固定为 128B(新的 ext4 与 xfs 可设置到 256B)
  • 每个文件都仅会占用一个 inode 而已,因此文件系统能够建立的文件数量与 inode 的数量有关
  • 系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与用户是否符合,若符合才能读取区块的内容

在 Linux 系统下,每个文件都会占用一个 inode,且可依据文件内容的大小来分配多个区块给该文件使用,而目录的作用就是记录文件名,一般文件才是实际记录数据内容的地方。当在 Linux 下的文件系统建立一个目录时,文件系统会分配一个 inode 与至少一块区块给该目录。其中 inode 记录该目录的相关权限与属性,并可记录分配到那块区块号码,而区块则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据

2 文件系统的简单操作

2.1 磁盘与目录的容量

磁盘的整体数据是在超级区块中,但每个文件的容量则在 inode 当中记载,在命令行模式下可以使用 dfdu 显示这些数据:

2.1.2 df 命令

df 命令用于列出文件系统的整体磁盘使用量,语法为:

df [-ahikHTm] [目录或文件名]

其中选项与参数:

  • -a:列出所有的文件系统,包括系统特有的 /proc 等文件系统
  • -k:以 KBytes 的容量显示各文件系统
  • -m:以 MBytes 的容量显示各文件系统
  • -h:以容易阅读的 GBytesMBytesKBytes 等格式自行显示
  • -H:以 M=100K 替换 M=1024K 的进位方式
  • -T:连同该硬盘分区的文件系统名称也列出
  • -i:不用磁盘容量,而以 inode 的数量来显示

输出的结果如下图:
在这里插入图片描述
说明所输出的结果信息为:

  • Filesystem:代表该文件系统是在哪个硬盘分区
  • Size:大小
  • Used:使用掉的硬盘空间
  • Available:剩下的硬盘空间
  • Use%:空间使用率
  • Mounted on:磁盘的挂载点

显示结果中需要特别留意的是根目录 / 的剩余容量,因为所有的数据都是有根目录衍生出来。

2.1.3 du 命令

du 命令是用于显示文件或目录的容量,语法如下:

du [-ahskm] [文件或目录名称]

选项与参数:

  • -a:累出所有的文件或目录的容量,默认仅统计目录下面的文件量
  • -h:以较容易阅读的容量格式显示
  • -s:仅列出总量,不列出每个格别的目录占用容量
  • -S:不包括子目录下的总计
  • -k:以 KBytes 列出容量显示
  • -m:以 MBytes 列出容量显示

2.2 硬链接与符号链接

在 Linux 下面的链接文件由两种:

  • 一种是类似 Windows 的快捷方式功能的文件,可以让你快速地链接到目标文件或目录,这种称为 符号链接
  • 另一种就是通过文件系统的 inode 链接来产生新文件名,而不是产生新文件,这种称为 硬链接

2.2.1 硬链接

前面又说道,每个文件都会占有一个 inode,文件内容由 inode 的记录来指向,想要读取该文件,就必须要通过目录记录的文件名来指向到正确的 inode 号码才能读取。

而文件名只与目录有关,但文件内容则与 inode 有关,那么,能不能有多个文件名对应同一个 inode 号码?
这就是 硬链接 的由来,硬链接只是在某个目录下新增一条文件名链接到某个 inode 号码的关联记录。此时将其中一个文件名删除,由于 inode 与区块都是存在的,所以通过另一个文件名还是可以读取到正确的文件数据。
一般来讲,使用硬链接设置链接文件时,磁盘的空间与 inode 的数目都不会改变,但硬链接还是有限制的:

  • 不能跨文件系统
  • 不能链接目录,这是因为假如建立一个关于 /test 目录的硬链接 /test_hd 目录,那么 /test_hd 目录下的所有文件名都要对应 /test 目录下的所有文件名进行硬链接,未来修改 /test 目录下的文件也要同时修改 /test_hd,因此会造成相当大的环境复杂度
2.2.1.1 链接数

在上一篇博客 《Linux入门笔记(文件权限与目录配置)》 中介绍过的 ls 命令会输出的 链接数指的就是该文件有多少个文件名链接到这个 inode 号码
但建立目录的时候,它的默认链接数量会是多少?这时候就需要理解创建一个空目录的时候,它至少存在些什么?一个空目录基本上会有三个东西,比如创建一个 /test 目录,即它会有:

  • /test
  • /test/.
  • /test/..

其中 /test/test/. 其实是一样的,都表示该目录,而 /test/.. 表示其上层目录,所以得出的结论是:新的目录链接数为 2,而上层目录的链接数则加 1

2.2.2 符号链接

符号链接就是建立一个独立的文件,而这个文件 会让数据的读取方向指向他链接的那个文件的文件名。即链接文件的重要内容就是它会写上目标文件的文件名,所以此时将源文件删除后,符号链接的文件也会打不开了。
这里还要注意的是,这个符号链接与 Windows 的快捷方式可以划上等号,由 符号链接所建立的文件为一个独立的新的文件,所以会占用 inode 与区块

2.2.3 ln 命令

由于硬链接的限制太多,所以用途上还是符号链接的使用比较广,要制作链接文件就需要使用 ln 这个命令了,其语法:

ln [-sf] 源文件 目标文件

选项与参数:

  • -s:如果不加 -s 就进行链接,那就是硬链接,反之就是符号链接
  • -f:如果目标文件存在,就主动将目标文件直接删除后在建立
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值