Hard Link:
举个例子来说,我的 /home/vbird/crontab 为一个 hard link 的档案,他连结到 /etc/crontab 这个档案,也就是说,其实 /home/vbird/crontab 与 /etc/crontab 是同一个档案,只是有两个目录( /etc 与 /home/vbird )记录了 crontab 这个档案的关连数据罢了!也就是说,我由 /etc 的 Block 所记录的关连数据可知道 crontab 的 inode 放置在 A 处,而由 /home/vbird 这个目录下的关连数据, contab 同样也指到 A 处的 inode !所以啰, crontab 这个档案的 inode 与 block 都没有改变,有的只是有两个目录记录了关连数据。
一般来说,使用 hard link 设定连结文件时,磁盘的空间与 inode 的数目都不会改变!由上面的说明来看,我们可以知道, hard link 只是在某个目录下的 block 多写入一个关连数据,所以当然不会用掉 inode 与磁盘空间啰!(注:其实可能会改变的,那就是当目录的 Block 被用完时,就可能会新加一个 block 来记录,而导致磁盘空间的变化!不过,一般 hard link 所用掉的关连数据量很小,所以通常不会改变 inode 与磁盘空间的大小喔! )
由于 hard link 是在同一个 partition 上面进行数据关连的建立,所以 hard link 是有限制的:
- 不能跨 Filesystem;
- 不能 link 目录。
相对于 hard link , Symbolic link 可就好理解多了,基本上,他就是在建立一个独立的档案,而这个档案会让数据的读取指向他 link 的那个档案内容!由于只是利用档案来做为指向的动作,所以,当来源档被删除之后,symbolic link 的档案会『开不了』,会一直说『无法开启某档案!』。这里还是得特别留意,这个 Symbolic Link 与 Windows 的快捷方式可以给他划上等号,由 Symbolic link 所建立的档案为一个独立的新的档案,所以会占用掉 inode 与 block 喔!由上面的说明来看,似乎 hard link 比较安全,因为即使某一个目录下的关连数据被杀掉了,也没有关系,只要有任何一个目录下存在着关连数据,那么该档案就不会不见!举上面的例子来说,我的 /etc/crontab 与 /home/vbird/crontab 指向同一个档案,如果我删除了 /etc/crontab 这个档案,该删除的动作其实只是将 /etc 目录下关于 crontab 的关连数据拿掉而已, crontab 所在的 inode 与 block 其实都没有被变动喔!不过,不幸的是,由于 Hard Link 的限制太多了,包括无法做『目录』的 link ,所以在用途上面是比较受限的!反而是 Symbolic Link 的使用方面较广喔!好了,说的天花乱坠,看您也差不多快要昏倒了!没关系,实作一下就知道怎么回事了!要制作连结档就必须要使用 ln 这个指令呢!
ln
特别留意,底下的案例中,我们是将系统的设定文件 copy 到 /root/test 底下进行测试用的,请不要在 /etc/ 底下做,未来我们的工作目录都会在 /root/test 底下进行,这有个好处,是可以让您清楚的知道,这是用来 test 用的啦! 语法:
| [root @test /root ]# ln [-s] [来源档] [目的档] 参数说明: -s :提供 symbolic line 的连结! 如果直接以 ln 不加任何参数的话,那么就属于 hard link 啰! 范例: [root @test /root]# mkdir test [root @test /root]# cd test [root @test test]# cp /usr/bin/passwd . 0. 原本的信息: [root @test /test]# ll -rw-r--r-- 1 root root 13476 Jun 26 11:31 passwd [root @test /test]# du -k <==查看该目录下的占用硬盘空间 20 1. Hard Link 信息: [root @test /test]# ln passwd passwd-hard [root @test /test]# ll total 32 -rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd -rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd-hard 注意看,上面那 个数字变成 2 啰!这里说的是关连资料有两处! [root @test /test]# du -k 20 <==注意看,容量并没有变大!因为是 link 档案呀! 2. Symbolic Link 信息: [root @test /test]# ln -s passwd passwd-soft; ll -rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd -rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd-hard lrwxrwxrwx 1 root root 6 Jun 26 11:37 passwd-sofe -> passwd 注意啰!该 Symbolic Link 的档案是有容量的呦! 注意啰, passwd-soft 会指到另外一个档案去,而且,最前面属性显示 l , 此外,他是一个 独立的档案!先杀掉 passwd 后,我们分别 more 一下内容: 3. 用 more 来试试看是怎样?! [root @test test]# rm passwd rm: remove regular file `passwd'? y [root @test test]# more passwd-hard ………(正常显 示) [root @test test]# more passwd-soft passwd-soft: No such file or directory |
要注意啰!使用 ln 如果不加任何参数的话,那么就是 Hard Link 啰!如同上面的情况,增加了 hard link 之后,可以发现 link 那一栏属性增加了!而如果这个时候砍掉 passwd 会发生什么事情呢?呵呵! passwd-hard 的内容还是会跟原来 passwd 相同,但是 passwd-soft 就会找不到该档案啦!就是这样!了解了吗?!还有,跟 cp 也不一样呦!因为虽然 Hard Link 的档案看起来是有容量的,但是基本上还是指向原来的档案,所以啰,整体容量是没有增大的啦!
而如果 ln 使用 -s 的参数时,就做成差不多是 Windows 底下的『快捷方式』的意思( Symbolic Link,较常用! )不过,需要特别注意的是, Linux 的 link 与 Windows 的快捷方式是不一样的东西!举个例子说,当你在 Windows 建立一个快捷方式时,你可以在这个快捷方式内修改任何数据,而你的原始数据并不会跟着变!不过,当你修改 Linux 下的 link 档案时,则更动的其实是『原始档』,呵呵,所以不论你的这个原始档被连结到哪里去,只要你修改了连结档,呵呵!原始档就跟着变啰!以上面为例,由于你使用 -s 的参数建立一个名为 passwd-soft 的档案,则你修改 passwd-soft 时,其内容与 passwd 完全相同,并且,当你按下储存之后,被改变的将是 passwd 这个档案!
此外,如果你做了底下这样的连结:
ln –s /bin /root/bin那么如果你进入 /root/bin 这个目录下,『请注意呦!该目录其实是 /bin 这个目录,因为你做了连结档了!』所以,如果你进入 /root/bin 这个刚刚建立的连结目录,并且将其中的数据杀掉时,嗯! /bin 里面的数据就通通不见了!这点请千万注意!并不是 /root 底下的资料都是 root 的!还需要注意一下该属性才行!
基本上, Symbolic link 的用途比较广,所以您要特别留意 symbolic link 的用法呢!未来一定还会常常用到的啦!
Copy from linux-vbird
No comments:
Post a Comment