硬连接与软连接

1、文件的存储概述
文件一般存储在硬盘上,硬盘的最小存储单位叫做”扇区”(sector),每个扇区存储大小为512B。当操作系统读取硬盘的时候,为了提高速度,不是一个扇区一个扇区地读取,而是一次连续读取几个扇区,也就是一次读取一个”块”(block)。这种由多个扇区组成的”块”是文件存取的最小单位,一般常见的块的大小是4k。
文件内容存储在”块”上,而文件的基本信息则存储在inode索引结点上。

2、inode的信息
inode是unix/linux操作系统中的一种数据结构,本质上是一个结构体,里面定义了一些变量,这些变量用来记录与文件相关的信息。在操作系统创建文件系统的时候就会创建大量的inode。inode相当于是一个索引结点,用来存放文件的基本信息。
inode这个结构体的基本信息包括:
1)inode编号
2)用来识别文件类型,以及用于stat C函数的模式信息
3)文件的链接数
4)属主的UID
5)属主的组的ID(GID)
6)文件的大小
7)文件所使用的磁盘块的实际数目。
8)最近一次修改的时间
9)最近一次访问的时间
10)最近一次更改的时间

查看文件的inode信息:stat+文件名
【例】
硬连接与软连接

注意:inode里面是不存储文件名的,上图中虽打印出来文件名,但是实际在inode中是没有文件名的,因为对于unix/linux来说文件名不太重要的。我们重点关注以下几个信息:inode编号和Links(链接数)。

3、inode的存储
Inode的存储会消耗硬盘空间,在硬盘格式化的时候,操作系统会将硬盘自动分成两个区域:一个是数据区用来存储文件数据,另一个是inode(inode table)区域(存放inode所包含的所有信息)。inode的大小为128或256个字节,一般在Unix/Linux创建文件系统的时候就会同时创建大量的inode,通常将为inode表分配百分之一的文件系统磁盘空间,并且每次创建一个文件的时候都会为这个文件分配一个inode。一个inode可与一个或多个文件相连接(硬连接和软连接)。如果inode耗尽,即使数据区还有大量的空间,文件系统也不能再创建文件,所以监测文件系统的inode的使用情况是很重要的。
假如inode真的耗尽了,可有两种解决办法:
1)通过smitty chfs为文件系统添加更多的inode表空间。
2)创建较小的inode区段。

(1)列出文件系统的整体磁盘使用量:df
参数:
-a:列出所有的文件系统,包括系统特有的/proc文件系统;
-h:以GB、MB、KB等格式自行显示;
-i:不用硬盘容量,以inode的数量来显示;
-k:以KB的容量显示文件系统;
-T:连同该分区的文件系统也列出;
-m:以MB的容量显示文件系统。
【例1 】将系统内所有的文件列出来
硬连接与软连接
释:
1)Muntedon:磁盘挂载的目录所在。
2)Filesystem:文件系统所在分区。
3)1K-blocks:以1K为单位列出数据。
4)Used:已使用的磁盘空间。
5)Available:剩余的磁盘空间。
6)Used%:磁盘的使用率。当使用率高达90%时要注意,免得容量不足造成系统问题。

【例2】将系统内的所有特殊文件格式及名称都列出来
硬连接与软连接

【例3】将/etc下面的可用的磁盘容量以易读的方式显示
硬连接与软连接

【例4】将目前各个分区当中可用的inode数量列出
硬连接与软连接

4、inode编号
每一个inode都有编号,操作系统是用inode编码来识别不同的文件的。注意在Unix/Linux的内核中是不使用文件名的,而是使用inode编号来识别文件。对于操作系统来说,文件名只是inode编号的一个别名而已,操作系统通过文件名找到对应的inode之后,接下来就没文件名的事了。也就是说操作系统找到文件的这个过程分为三步:
1)通过文件名找到对应的inode编号。
2)通过inode获取文件信息。
3)根据inode信息找到文件数据所存储的位置。

查看文件的inode编号:ls -i 文件名
【例】
硬连接与软连接

(2)评估文件系统的使用量:du
1)参数
-a:列出所有文件与目录容量;
-h:以人们易读的方式显示;
-s:列出总量;
-S:不包括总目录下的总计。

【例1】列出文件容量
硬连接与软连接

【例2】检查根目录下每个目录占用的容量
硬连接与软连接

5、硬连接
在unix/linux文件系统中,保存在硬盘上的文件不管是什么类型都给他分配一个inode编号。一般情况下文件名与inode编号是一一对应的,但是在unix/linux中允许一个inode编号链接多个文件名,也就是对同一份数据有多个名字而已,这种机制采用的就是”引用计数”原理(同一块空间有多个对象)。如果通过某一个文件名修改这个inode编号所对应的内容的话会影响到所有的文件名。在inode中有一个links变量记录这个inode链接的文件名的个数,只有links的值为0的时候系统就回收这个inode的空间以及他所对应的数据块。

创建硬连接:ln 源文件 目标文件
【例】
硬连接与软连接

释:硬连接通过文件系统的inode连接来产生新的文件名,而不是新的文件。
创建目录时,会默认生成两个目录项”.”和”..”。所以一个目录的硬连接总数最小都是2。
硬连接的不足:
1)不能跨文件系统;
2)不能连接到目录。

6、软连接
软连接又称符号连接,它是执行另一个文件的特殊文件,这种文件的内容就是它所链接的文件名的路径名。软连接是为了克服硬链接的不足而提出的,它是通过文件路径名找到它所链接的文件名的。软连接的文件有自己的inode,并在硬盘上有一块小空间存放路径名。软连接能够跨文件系统,也能和目录进行链接,软连接也可以和一个不存在的文件名进行连接,但是必须在这个不存在的文件被创建后才能打开链接。
创建软连接:ln -s 源文件名 目标文件名
【例1】
硬连接与软连接

【例2】将/etc/passwd复制到/tmp下面,并且查看inode与block
硬连接与软连接
释:du -sb表计算/tmp下面有多少个bytes

【例3】将/etc/passwd制作hard link成为passwd-hd文件,并查看文件容量。
硬连接与软连接
释:即使多了一个文件在/tmp下面,整个inode与block的容量不变,连接数变为2。

【例4】将/etc/passwd创建一个符号连接
硬连接与软连接
释:passwd-so是新文件,文件的内容指向passwd,passwd-so的大小是6bytes,因为passwd共有6bytes。

【例5】删除源文件passwd,其他两个文件是否能够打开。
硬连接与软连接

7、inode编号的其他作用
1)有时候因为文件名中包含了一些特殊字符从而无法正常删除。这时候直接删除inode结点就可以删除文件了。
2)移动或重命名文件不改变文件的inode。
3)系统通过inode编号来操作文件。

8、目录的连接数量
【问题】一个空目录里至少会存在些什么?
答:存在“.”与“..”这两个目录。

当创建一个新的目录/tmp/testing/时,基本会有3个东西:
1)/tmp/testing/;
2)/tmp/testing/.;
3)/tmp/testing/..。
其中,“/tmp/testing/”与“/tmp/testing/.”是一样的,所以新的目录的连接数为2。
【例】
释:上层目录/tmp的连接数量由43增加到44,新目录/tmp/testing则为2。
硬连接与软连接