文件系统的简单操作

隐身守侯 提交于 2019-12-16 13:16:35

(整理自《鸟哥的Linux私房菜》书籍)

 

1.磁盘与目录的容量

•        df:列出文件系统的整体磁盘使用量;

•        du:评估文件系统的磁盘使用量(常用在推估目录所占容量)

 

2.实体链接与符号链接: ln

在 Linux 底下的链接文件有两种,一种是类似 Windows 的快捷方式功能的文件,可以让你快速的链接到目标文件(或目录); 另一种则是透过文件系统的 inode 连结来产生新档名,而不是产生新文件!这种称为实体链接 (hard link)。

 §   Hard Link (硬链接)

硬链接只是在某个目录下新增一个文件链接到某 inode 号码的关连记录而已。

举个例子来说,假设我系统有个 /root/crontab 他是 /etc/crontab 的实体链接,也就是说这两个档名连结到同一个 inode , 自然这两个文件名的所有相关信息都会一模一样(除了文件名之外)。实际的情况可以如下所示:

 

 

 你可以发现两个档名都连结到 34474855 这个 inode 号码,是否文件的权限/属性完全一样呢? 一样的,因为这两个文件名其实指向的是一模一样的文件。而且你也会发现第二个字段由原本的 1 变成 2 了! 那个字段称为链接,这个字段的意义为:『有多少个档名链接到这个 inode 号码』的意思。 如果将读取到正确数据的方式画成示意图,就类似如下画面:

 

 上图的意思是,你可以透过 1 或 2 的目录之 inode 指定的 block 找到两个不同的档名,而不管使用哪个档名均可以指到 real 那个 inode 去读取到最终数据。

那这样有什么好处呢?最大的好处就是安全!如同上图中, 如果你将任何一个文件名删除,其实 inode 与 block 都还是存在的! 此时你可以透过另一个文件名来读取到正确的文件数据。此外,不论你使用哪个文件名来编辑,最终的结果都会写入到相同的 inode 与 block 中,因此均能进行数据的修改。

一般来说,使用硬链接设定链接文件时,磁盘的空间与 inode 的数目都不会改变! 我们还是由图 7.2.1 来看,由图中可以知道, 硬链接只是在某个目录下的 block 多写入一个关连数据而已,既不会增加 inode 也不会耗用 block 数量。

事实上 硬链接是有限制的:

•        不能跨 Filesystem;

•        不能 link 目录。

不能跨 Filesystem 还好理解,那不能 hard link 到目录又是怎么回事呢?这是因为如果使用 hard link 链接到目录时, 链接的数据需要连同被链接目录底下的所有数据都建立链接,举例来说,如果你要将 /etc 使用实体链接建立一个 /etc_hd 的目录时,那么在 /etc_hd 底下的所有文件名同时都与 /etc 底下的文件名要建立 硬链接的,而不是仅连结到 /etc_hd 与 /etc 而已。 并且,未来如果需要在 /etc_hd 底下建立新文件时,连带/etc 底下的数据又得要建立一次硬链接 ,因此造成环境相当大的复杂度。

 

§  Symbolic Link (符号链接,又叫软链接)

符号链接就是在建立一个独立的文件,而这个文件会让数据的读取指向他链接的那个文件名!由于只是利用文件来做为指向的动作, 所以,当源文件被删除之后符号链接的文件会打开不了, 会一直说『无法开启某文件!』。实际上就是找不到源文件名而已。

举例来说,我们先建立一个符号链接文件链接到 /etc/crontab 去看看:

 

 

 由上表的结果我们可以知道两个文件指向不同的 inode 号码,当然就是两个独立的文件存在! 而且链接文件的重要内容就是他会写上目标文件的文件名, 为什么上表中链接文件的大小为 12 bytes 呢? 因为箭头(-->)右边的文件名『/etc/crontab』总共有 12 个英文,每个英文占用 1 个 bytes ,所以文件大小就是 12bytes 了。

关于上述的说明,我们以如下图示来解释:

 

 

 由 1 号 inode 读取到链接文件的内容仅有文件名,根据文件名链接到正确的目录去取得目标文件的 inode ,最终就能够读取到正确的数据了。如果目标文件(/etc/crontab)被删除了,那么整个环节就会无法继续进行下去, 所以就会发生无法通过链接文件读取的问题了!

这里还是得特别留意,这个符号链接与 Windows 的快捷方式可以给他划上等号,由 符号链接所建立的文件为一个独立的新的文件,所以会占用掉 inode 与 block !

 

由于硬链接的限制太多了,包括无法做目录的链接, 所以在用途上面是比较受限的!反而是 符号链接的使用方面较广,但是硬链接较符号链接安全。

 

§关于目录的 link 数量

当我们以硬链接进行文件的链接时,在 ls -l 所显示的第二字段会增加一才对,如果建立目录时,他默认的链接数量会是多少? 不妨举例,当我们建立一个新目录名称为 /tmp/testing 时,基本上会有三个东西,那就是:

•        /tmp/testing

•        /tmp/testing/.

•        /tmp/testing/..

而其中 /tmp/testing 与 /tmp/testing/. 其实是一样的,都代表该目录啊。而 /tmp/testing/.. 则代表 /tmp 这个目录,所以说,当我们建立一个新的目录时, 『新的目录的 link 数为 2 ,而上层目录的 link 数则会增加 1 』。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!