硬连接:hard link,软连接:symbolic link
首先是名字上的区别,硬连接:hard link,软连接:symbolic link
再分别叙述:
首先是hard link,大家都知道cp的用法,即cp oldfile newfile,这样一来就比较浪费空间,假设oldfile有600M,拷贝出来的newfile(也即 oldfile的副本)也同样要占距600M的空间,这对于我的LINUX系统来说简直就是噩梦,居然两个文件就站了1G多!有没有一种方法能够即节省空间又能相互连接呢?答案是有的,大家回想一下自个儿在WINDOWS下有没有类似的解决方法?对了,就是建立快捷方式嘛!hard link就是相 当于建立一个文件的快捷方式,还是迷茫?
呵呵,举个例子吧:
假设用户romeo在/tmp的目录下有个文件love,此时给love文件设置权限为:"rw-r-r",恰好系统内另一名用户juliet也要用这个文件,那么她就 只需建立一个到/tmp/love的link即可:
[juliet@redhat9 juliet]$ ln /tmp/love JulietLink
这样就在用户juliet的目录下(/home/juliet)建立了一个hard link,其文件名为:JulietLink,这时执行:
$ ls -l /home/juliet
发现如下信息:
-rw-r--r-- 2 romeo romeo 5096 ....... JulietLink
可以得知文件的链接数是:2,表明该文件除了本身外还有另一个副本.如果再切换一个用户对这个文件进行链接,则链接数继续增加.同时发现建立链接后文件的属主和属组仍是:romeo
接下来查看链接文件和原文件的索引节点编号:
$ ls -s JulietLink
24340 JulietLink
$ ls -s /tmp/love
24340 /tmo/love
可知,这两个文件的索引节点编号是一致的,如果用复制而不是链接的话,就会产生两个不相干文件,各自拥有不同的索引节点编号:
$ cp /tmp/love JulietLink
$ ls -l JulietLink
37027 JulietLink
正如你发现的:37027!=243430
最后,我们来看一下symbolic link:
其用命令ln -s创建:
$ln -s /tmp/love SysLink
再:$ls -l /home/juliet
lrwxrwxrwx 1 juliet juliet ...... SysLink->love
由首项"l"发现这是一个链接文件,由"1"得知love和SysLink的链接数没有改变,(想想为什么 ) 由权限"rwxrwxrwx"知道文件的真正权限要以所指文件为准,软链接本身不做任何限制。软链接本身不保存文件的数据,其真正内容是指向原来的文件,如果将文件love删除或改名,则SysLink会指向一个不存在的文件,其内容变成空白;但是它会占用一个索引节点,并拥有自己的索引节点编号,不信你试试:
$ls -i SysLink
其显示的索引节点编号一定不同于love的索引节点编号
总结:
hard link所创建的文件和原文件的索引节点编号相同,相当于一个原文件有多个别名。
symbolic link所创建的链接和原文件的索引节点编号不同,相当于指向原文件的位置。
PS:hard link 和 symbolic link创建后均可以用rm命令删除。
简单的说:
硬连接是给文件一个副本,同时建立两者之间的连接关系。修改其中一个,与其连接的文件同时被修改。如果删除其中任意一个其余的文件将不受影响。
软连接也叫符号连接,他只是对源文件在新的位置建立一个“快捷(借用一下wondows常用词)”,所以,当源文件删除时,符号连接的文件将成为无源之水->仅仅剩下个文件名了,当然删除这个连接,也不会影响到源文件,但对连接文件的使用、引用都是直接调用源文件的。
软连接与windows下的快捷方式类似。
至于硬连接,举个例子说吧,你把dir1/file1硬连接到dir2/file2,就是在dir2下建立一个dir1/file1的镜像文件file2,它与file1是占用一样大的空间的,并且改动两者中的一个,另一个也会发生同样的改动。
温馨提示:答案为网友推荐,仅供参考