linux下软链接和硬链接的区别


1、如何创建链接文件?

命令 : ln 

用法:ln [选项] 原文件 目标文件

   -s  :  创建软链接,

   -v   : 显示创建过程


例1:创建软链接

# ln -sv  /root/test/config.ini /tmp/test/config.link

例2 :创建硬链接

# ln  /root/test/config.ini /tmp/test/config.link2


注 : 默认不加 任何选项表示创建硬链接。


2、软硬链接的区别

1)先看我们刚才创建的软连接,软链接类似windows上的快捷方式

[root@bogon test]# ls -li /root/test/config.ini /tmp/test/config.link
1848989 -rw-r--r--. 1 root root 19 Jul 18 21:16 /root/test/config.ini
2359298 lrwxrwxrwx. 1 root root 21 Jul 18 21:17 /tmp/test/config.link -> /root/test/config.ini

通过这里我们看出 这两个文件的inode号是不同的,而 /tmp/test/config.link 的文件大小是21个字符,刚好是/root/test/config.ini的字符个数,也就是说/tmp/test/config.link 存的内容是/root/test/config.ini这个路径,这种就是软链接。


2)再看硬链接

[root@bogon test]# ls -li /root/test/config.ini /tmp/test/config.link2
1848989 -rw-r--r--. 2 root root 19 Jul 18 21:16 /root/test/config.ini
1848989 -rw-r--r--. 2 root root 19 Jul 18 21:16 /tmp/test/config.link2

通过这里我们看出这俩文件的inode号都是1848989,文件大小也是一样,都是19个字节,同时发现这个文件的被链接次数是2(上面用红色加粗字体),这里其实在文件系统中,这俩个文件的inode号都指向了同一个,

此时,我把 /root/test/config.ini 这个原文件删除 

# rm -f /root/test/config.ini

然后看下链接文件还在不在?

[root@bogon test]# ls -li /tmp/test/config.link2
1848989 -rw-r--r--. 1 root root 19 Jul 18 21:16 /tmp/test/config.link2

此时发现链接文件还在,且inode号还是原来的inode号,内容还是原来的内容,只是链接次数变成了 1 ,因为现在只有一个文件引用这个inode号了,如果在此删除/tmp/test/config.link2 这个文件,文件系统发现已经没有人引用这个文件了,那么就会彻底删除它了。


这里可以理解为语言中的引用,

例如php中 

<?php
$a = 'test';//声明变量$a
$b = & $a; //变量$b引用变量$a
unset($a); //删除变量$a
echo $b;//此时输出 test 
unset($b);//删除$b变量,此时这个内容为'test'字符的在内存中就会消失了
?>


3、为什么需要软链接和硬链接?

软链接在windows中相当于快捷方式,在linux中其实也是,例如我把mysql安装在了 /usr/local/mysql/ 目录下,此时我并没有把这个路径加入环境变量,若是想直接使用类似 mysql -u root -p123456  这个命令的话,我可以把mysql的执行程序创建一个软连接到/bin/mysql  ,而没必要复制一个二进制程序到/bin/mysql,因此这就是软连接的好处

硬链接功能类似软连接,但和软连接的区别是,若是把软链接的原文件删除掉了,那么软链接再也打不开了,因为软链接存的就是原文件的路径,路径不在了,也就打不开了,而硬链接引用的是inode号,因此你删除其中任何一个都没有关系,都不会影响其余的硬链接文件,上面的例子也演示了。


4、创建硬链接的注意点

1)、不允许给目录创建硬链接

2)、只能在同一个文件系统中才能创建硬链接



你可能感兴趣的:(linux,PHP,软链接,硬链接,ln,-s)