文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux硬链接与软连接

linux硬链接与软连接

时间:2010-10-04  来源:wbwk2005

linux文件系统是一个以inode与block表示的文件系统,每建立一个文件及目录都会分配一个inode及一个或多个block给它。

当创建一个新文件时:系统分配一个inode及能够装载文件大小的blocks给它,其中blocks中记录了文件的真正内容,而inode中记录了:

  • 该文件的存取模式(read/write/excute);
  • 该文件的拥有者与群组(owner/group);
  • 该文件的容量;
  • 该文件建立或状态改变的时间(ctime);
  • 最近一次的读取时间(atime);
  • 最近修改的时间(mtime);
  • 定义文件特性的旗标(flag),如 SetUID…;
  • 该文件真正内容的指向 (pointer);

 

当创建一个目录时:会分配一个inode及一个block(最开始一定是一个的,当然若此目录下的文件数量过多的话,还会开辟新的block给它的)给它。其中inode中记录了1.该目录的存取模式;该目录的拥有者和群组等等,及该目录所分配的那块block;block中的内容比较有意思,记录了该目录下所存在的所有文件,子目录的及其对应的inode值,通过这个block记录的内容,我们就可以相应的找到其中某个文件的inode位置,进而可以得出文件的内容。

软硬链接其实就是基于上面的inode及block的关系的:情形:创建/etc/crontab的软硬链接/root/crontab_hard及/root/crontab_Soft

硬连接:在/root/目录所分配的block中添加一条记录,记录内容为crontab_hard所指向的inode号码,这个inode号码跟/etc/目录block中记录的crontab所指向的inode号码为一个数值。

所以简单的说:hard link 只是在某个目录下新增一笔文件名链接到某 inode 号码的关连记录而已。 举个例子来说,假设我系统有个 /root/crontab 他是 /etc/crontab 的实体链接,也就是说这两个文件名连结到同一个 inode , 自然这两个文件名的所有相关信息都会一模一样(除了文件名之外)。所以不需要占用新的inode及block,除非原来的block已经满啦,需要重新开辟新的block。

可以用下示意图表示:

软连接:相当于windows下的快捷方式

相对于 hard link , Symbolic link 可就好理解多了,基本上, Symbolic link 就是在建立一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的文件名!由于只是利用文件来做为指向的动作, 所以,当来源档被删除之后,symbolic link 的文件会『开不了』, 会一直说『无法开启某文件!』。实际上就是找不到原始『文件名』而已啦! 举例来说,我们先建立一个符号链接文件链接到 /etc/crontab 去看看:

[root@www ~]# ln -s /etc/crontab crontab2
[root@www ~]# ll -i /etc/crontab /root/crontab2
1912701 -rw-r--r-- 2 root root 255 Jan  6  2007 /etc/crontab
 654687 lrwxrwxrwx 1 root root  12 Oct 22 13:58 /root/crontab2 -> /etc/crontab

由上表的结果我们可以知道两个文件指向不同的 inode 号码,当然就是两个独立的文件存在! 而且连结档的重要内容就是他会写上目标文件的『文件名』, 你可以发现为什么上表中连结档的大小为 12 bytes 呢? 因为箭头(–>)右边的文件名『/etc/crontab』总共有 12 个英文,每个英文占用 1 个 byes ,所以文件大小就是 12bytes了! 关于上述的说明,我们以如下图示来解释:
图 2.2.2、符号链接的文件读取示意图
由 1 号 inode 读取到连结档的内容仅有文件名,根据文件名链接到正确的目录去取得目标文件的 inode , 最终就能够读取到正确的数据了。你可以发现的是,如果目标文件(/etc/crontab)被删除了,那么整个环节就会无法继续进行下去, 所以就会发生无法透过连结档读取的问题了! 这里还是得特别留意,这个 Symbolic Link 与 Windows 的快捷方式可以给他划上等号,由 Symbolic link 所建立的文件为一个独立的新的文件,所以会占用掉 inode 与 block 喔!

 

由上面的说明来看,似乎 hard link 比较安全,因为即使某一个目录下的关连数据被杀掉了, 也没有关系,只要有任何一个目录下存在着关连数据,那么该文件就不会不见!举上面的例子来说,我的 /etc/crontab 与 /root/crontab 指向同一个文件,如果我删除了 /etc/crontab 这个文件,该删除的动作其实只是将 /etc 目录下关于 crontab 的关连数据拿掉而已, crontab 所在的 inode 与 block 其实都没有被变动喔! 不过由于 Hard Link 的限制太多了,包括无法做『目录』的 link , 所以在用途上面是比较受限的!反而是 Symbolic Link 的使用方面较广喔!好了, 说的天花乱坠,看你也差不多快要昏倒了!没关系,实作一下就知道怎么回事了!要制作连结档就必须要使用 ln 这个指令呢!

相关阅读 更多 +
排行榜 更多 +
宇宙空舰战争安卓版

宇宙空舰战争安卓版

飞行射击 下载
魔塔100层

魔塔100层

休闲益智 下载
调色大师手机版

调色大师手机版

休闲益智 下载