这次说一下ln的相关原理和用法
在开始介绍连接( Link ) 之前,我们得先来了解一下什么是inode 这个东西?
说实在的,这个东西真的很重要,不了解它的时候,很容易搞错很多的东西
什么是inodes ?
要提到inode 之前,我们得先来了解一下硬盘的整体构造才行!硬盘里面有多个硬盘盘片组合在一起
而一个硬盘盘片为圆形的,其中,每一个硬盘盘片上面都有个可以读写的磁头( Head ),
而当这个磁头固定住,让硬盘盘片转一圈,那么那一个圆形的就是磁道( Track ),而在硬盘内的几个
硬盘盘片同半径的那一圈的磁道总和称为磁柱( Cylinder ),而由圆心向外画出直线,那就是硬盘的
最小储存物理量,我们称为扇区( setctor ),一个扇区的物理量大约是512 bytes ( 约0.5K )。
磁头( Head ) :可擦写的金属磁盘;
磁道( Track ) :读写头转一圈( 同心圆的一圈) 的量;
扇区( Sector ) :最小的物理储存量。
知道了大体的硬盘构造之后,再来谈一谈怎么硬盘分割( partition ) 我们在进行硬盘分割的时候,
最小都是以磁柱为单位进行分割的,那么分割完成之后自然就是格式化( format ),在Linux 里面
我们在进行格式化的时候必须要考虑到Block 与inode 的信息,这个block 还好理解,他是我们磁
盘可以记录的最小单位,是由数个sector 所组成的,所以他的大小通常为n*512 bytes ,例如4K 。
那么inode 是什么? Block 是记录『文件内容数据』的地区,而inode 则是记录『该文件的属性、
及该文件放置在哪一个Block 之内』的信息!所以,每个文件都会占用到至少一个inode 。而当我
们Linux 系统要找到这个文件时,他会先去搜寻inode table 找到这个文件的属性及数据放置的地区
然后再到数据去找到数据存放的Block 进而将数据取出利用。这个inode 数目在一开始就会被设定好
他的设定方式通常是利用( 硬盘大小/ 一个容量),这个容量至少应该比Block 要大一些较佳,例如
刚刚的Block 订为4K ,那么inode 可以订为8K 左右。所以,一个1GB 的硬盘,如果以8K 来规划他的
inode 数时,他的inode 就会有131072 个inode !而一个inode的大小为128 bytes 这么大!这么一来
的话,我们就可以清楚的知道了,那就是一个partition 格式化为一个filesystem 之后,基本上,
他一定会有inode table 与data area 两个区块,一个用来记录文件的信息与该文件放置的block 区块
一个用来记录文件的内容!
由于我们Linux 在读取数据的时候,是先查询inode table 以得到数据是放在那个Block 里面,然后再
去该Block 里面读取真正的数据内容!然后,那个block 是我们在格式化硬盘的时候规定出来的一个值
这个block 是由2 的n 次方个sector 所集结而成的!所以,他是0.5K 的倍数!假设我们block 规划为
4KBytes 好了,那么由于一个inode 与一个block 最多均只纪录一个文件,所以,如果你的一个文件有
0.1 K bytes 这么大时,你要晓得的是,由于你的block为4K bytes ,因此,你就会有3.9 Kbytes 的空
间『浪费掉』 !所以,当你在格式化硬盘的时候,请千万注意到你的系统未来的使用方向 !
当block 越小( 最小为0.5K ) 、inodes 越多,可利用空间越多,但是大文件写入效率较差
适合文件数量多但是文件容量小的系统,例如BBS 或者新闻群组news 这方面的服务之系统
当block 越大( 最大可到16 * 0.5K 以上) 、inodes 数越少,大文件写入效率较佳,但浪费的空间
较多适合档案容量大的系统。
以上内容一定要看会
简单的说
inode 是记录 Block 的信息
Block 是记录 数 据 的地区
ln
知道了什么是inode 与他的功能之后,接着下来就要来介绍link!说到link 其实也没有什么大不了的,
说穿了,就真的有点像是Windows 的『快捷方式』一样,不过, link 的功能要好的多 Link 又分为
hard link 与symbolic link 两种
Hard Links
刚刚说过,当系统要读取某一个文件的时候,就会先去读inode table ,然后再根据inode 的信息到
block area 去将数据取出来利用!而hard link 就是直接再建立一个inode 连结到文件放置的block
区块。也就是说,进行hardlink 的时候,实际上,你的文件内容不会改变,只是你在查询的时候,利用
原来的inode 与后来的inode 均可被指定到该文件放置的地点,因此两个文件的内容会是一样的!所以
读取任何一个inode 的结果都是存取在同一个文件的内容就是了。不过,这样一来就有个问题 ,因为
inode 是会连结到block 区域去的,而『目录』本身仅消耗inode 而已,那么一来的话, hard link 不
就不能link 目录 ?对的!没错! Hard link 有两个最大的限制
1. 不能跨filesystem ,因为不同的filesystem 有不同的inode table
2. 不能link 目录!
Symbolic Links:
相对于hard link , Symbolic link 可就好理解多了,基本上,他就是在建立一个独立的文件,而这个
文件会让数据读取指向他link 的那个文件内容!由于只是利用文件来做为指向的动作,所以,当来源档
被删除之后,symbolic link 的文件用不了了
看样子,似乎hard link 比较安全,因为即使某一个inode 被删掉了,只要有任何一个inode 存在,
那么该文件就不会不见!不过,由于Hard Link 的限制太多了,包括无法做『目录』的link ,所以
在用途上面是比较受限的!反而是Symbolic Link 的使用方向较广
简单的说
Hard Links 就是直接再建立一个inode 连接
Symbolic Links 就是在建立一个独立的文件,指向它link 的那个文件内容
如果不加任何参数的话,那么就是Hard Link !
看到了吧,这个1变成2了,这就是占用掉的inodes的数值
-s 就表示是 Symbolic Links
跟cp 也不一样!因为虽然Hard Link 的文件看起来是有容量的,但是基本上还是指向原来的
文件,所以 ,整体容量是没有增大的 !
加了一个Hard Link后,还是没变
但加了一个Symbolic Links 整体和容量就变大了
而如果这个时候删掉passwd 会发生什么事情呢?
passwd-hard的内容还是会跟原来passwd 相同,但是passwd-sym 就会找不到该文件 !
就是因为这两种连接连的东西不一样
虽然使用-s 的参数时,就做成差不多是Windows 底下的『快捷方式』的意思(Symbolic Link)不过
需要特别注意的是, Linux 的link 与Windows 的快捷方式是不一样的东西!举个例子说,当你在
Windows 建立一个快捷方式时,你可以在这个快捷方式内修改任何数据,而你的原始数据并不会跟着变!
不过,当你修改Linux 下的link 文件时,则更动的其实是『原始文件』,所以不论你的这个原始档被
连结到哪里去,只要你修改了连结档原始文件就跟着变 !
如果你做了底下这样的连结
ln –s /bin /root/bin
那么如果你进入/root/bin 这个目录下,『请注意!该目录其实是/bin 这个目录,因为你做了连结了』
所以,如果你进入/root/bin 这个刚刚建立的连结目录,并且将其中的数据删掉时,/bin 里面的数据
就通通不见了!这点请千万注意!并不是/root 底下的资料都是root 的!还需要注意一下该属性才行!
看,以a开头的那些文件没了 现在在/root/bin下
我们去/bin下去看看
看,也是一样
所以,文件的属性要多意思一下
删文件也是
上面有很多文字的东西,要看明白
成功!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
本文出自 “单身贵族” 博客,请务必保留此出处http://blog.chinaunix.net/uid-10915175-id-3209108.html
附件下载:
连接.rar