上图的意思是,你可以透过 1 或 2 的目录之 inode 指定的 block 找到两个不同的档名,而不管使用哪个档名均可以指到 real 那个 inode 去读取到最终数据!那这样有什么好处呢?最大的好处就是『安全』!如同上图中, 如果你将任何一个『档名』删除,其实 inode 与 block 都还是存在的! 此时你可以透过另一个『档名』来读取到正确的文件数据喔!此外,不论你使用哪个『档名』来编辑, 最终的结果都会写入到相同的 inode 与 block 中,因此均能进行数据的修改哩!
[root@www ~]# ls -ld /tmp drwxrwxrwt 5 root root 4096 Oct 22 14:22 /tmp [root@www ~]# mkdir /tmp/testing1 [root@www ~]# ls -ld /tmp drwxrwxrwt 6 root root 4096 Oct 22 14:37 /tmp [root@www ~]# ls -ld /tmp/testing1 drwxr-xr-x 2 root root 4096 Oct 22 14:37 /tmp/testing1
每个文件都会占用一个 inode ,文件内容由 inode 的记录来指向;
Mounted on:就是磁盘挂载的目录所在啦!(挂载点啦!)
一般来说,使用 hard link 配置链接文件时,磁盘的空间与 inode 的数目都不会改变! 我们还是由图 2.2.1 来看,由图中可以知道, hard link 只是在某个目录下的 block 多写入一个关连数据而已,既不会添加 inode 也不会耗用 block 数量哩!
由于 df 主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在 Superblock 内的信息, 所以这个命令显示结果的速度非常的快速!在显示的结果中你需要特别留意的是那个根目录的剩余容量! 因为我们所有的数据都是由根目录衍生出来的,因此当根目录的剩余容量剩下 0 时,那你的 Linux 可能就问题很大了。
du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
那么如果你进入 /root/bin 这个目录下,『请注意呦!该目录其实是 /bin 这个目录,因为你做了连结档了!』所以,如果你进入 /root/bin 这个刚刚创建的链接目录, 并且将其中的数据杀掉时,嗯! /bin 里面的数据就通通不见了!这点请千万注意!所以赶紧利用『rm /root/bin 』 将这个连结档删除吧!
举例来说,我们先创建一个符号链接文件链接到 /etc/crontab 去看看:
与 df 不一样的是,du 这个命令其实会直接到文件系统内去搜寻所有的文件数据, 所以上述第三个范例命令的运行会运行一小段时间!此外,在默认的情况下,容量的输出是以 KB 来设计的, 如果你想要知道目录占了多少 MB ,那么就使用 -m 这个参数即可啰!而, 如果你只想要知道该目录占了多少容量的话,使用 -s 就可以啦!
此外,如果你做了底下这样的连结:
Tips:
要注意啰!使用 ln 如果不加任何参数的话,那么就是 Hard Link 啰!如同范例二的情况,添加了 hard link 之后,可以发现使用 ls -l 时,显示的 link 那一栏属性添加了!而如果这个时候砍掉 passwd 会发生什么事情呢?passwd-hd 的内容还是会跟原来 passwd 相同,但是 passwd-so 就会找不到该文件啦!
基本上, Symbolic link 的用途比较广,所以您要特别留意 symbolic link
的用法呢!未来一定还会常常用到的啦!
至于那个 /dev/shm/ 目录,其实是利用内存虚拟出来的磁盘空间!
由于是透过内存仿真出来的磁盘,因此你在这个目录底下创建任何数据文件时,访问速度是非常快速的!(在内存内工作)
不过,也由于他是内存仿真出来的,因此这个文件系统的大小在每部主机上都不一样,而且创建的东西在下次启动时就消失了!
因为是在内存中嘛!
或许您已经发现了,那就是,当我们以 hard link 进行『文件的连结』时,可以发现,在 ls -l 所显示的第二字段会添加一才对,那么请教,如果创建目录时,他默认的 link 数量会是多少? 让我们来想一想,一个『空目录』里面至少会存在些什么?呵呵!就是存在 . 与 .. 这两个目录啊! 那么,当我们创建一个新目录名称为 /tmp/testing 时,基本上会有三个东西,那就是:
磁盘与目录的容量:du
1k-blocks:说明底下的数字单位是 1KB 呦!可利用 -h 或 -m 来改变容量;
现在我们知道磁盘的整体数据是在 superblock 区块中,但是每个各别文件的容量则在 inode 当中记载的。 那在文字接口底下该如何叫出这几个数据呢?底下就让我们来谈一谈这两个命令:
由 1 号 inode 读取到连结档的内容仅有档名,根据档名链接到正确的目录去取得目标文件的 inode , 最终就能够读取到正确的数据了。你可以发现的是,如果目标文件(/etc/crontab)被删除了,那么整个环节就会无法继续进行下去, 所以就会发生无法透过连结档读取的问题了!
[root@www ~]# ln [-sf] 来源文件 目标文件 选项与参数: -s :如果不加任何参数就进行连结,那就是hard link,至于 -s 就是symbolic link -f :如果 目标文件 存在时,就主动的将目标文件直接移除后再创建! 范例一:将 /etc/passwd 复制到 /tmp 底下,并且观察 inode 与 block [root@www ~]# cd /tmp [root@www tmp]# cp -a /etc/passwd . [root@www tmp]# du -sb ; df -i . 18340 . <==先注意一下这里的容量是多少! Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hdc2 2560864 149738 2411126 6% / # 利用 du 与 df 来检查一下目前的参数~那个 du -sb # 是计算整个 /tmp 底下有多少 bytes 的容量啦! 范例二:将 /tmp/passwd 制作 hard link 成为 passwd-hd 文件,并观察文件与容量 [root@www tmp]# ln passwd passwd-hd [root@www tmp]# du -sb ; df -i . 18340 . Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hdc2 2560864 149738 2411126 6% / # 仔细看,即使多了一个文件在 /tmp 底下,整个 inode 与 block 的容量并没有改变! [root@www tmp]# ls -il passwd* 586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd 586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd-hd # 原来是指向同一个 inode 啊!这是个重点啊!另外,那个第二栏的连结数也会添加! 范例三:将 /tmp/passwd 创建一个符号链接 [root@www tmp]# ln -s passwd passwd-so [root@www tmp]# ls -li passwd* 586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd 586361 -rw-r--r-- 2 root root 1945 Sep 29 02:21 passwd-hd 586401 lrwxrwxrwx 1 root root 6 Oct 22 14:18 passwd-so -> passwd # passwd-so 指向的 inode number 不同了!这是一个新的文件~这个文件的内容是指向 # passwd 的。passwd-so 的大小是 6bytes ,因为 passwd 共有六个字符之故 [root@www tmp]# du -sb ; df -i . 18346 . Filesystem Inodes IUsed IFree IUse% Mounted on /dev/hdc2 2560864 149739 2411125 6% / # 呼呼!整个容量与 inode 使用数都改变啰~确实如此啊! 范例四:删除源文件 passwd ,其他两个文件是否能够开启? [root@www tmp]# rm passwd [root@www tmp]# cat passwd-hd ......正常显示完毕! [root@www tmp]# cat passwd-so cat: passwd-so: No such file or directory [root@www tmp]# ll passwd* -rw-r--r-- 1 root root 1945 Sep 29 02:21 passwd-hd lrwxrwxrwx 1 root root 6 Oct 22 14:18 passwd-so -> passwd # 怕了吧!符号链接果然无法开启!另外,如果符号链接的目标文件不存在, # 其实档名的部分就会有特殊的颜色显示喔!
想要读取该文件,必须要经过目录记录的文件名来指向到正确的 inode 号码才能读取。
(责任编辑:武汉三度艺术机构)