Linux(五)——硬链接和软链接

301 阅读3分钟

linux系统中有种文件是链接文件,可以为解决文件的共享使用。链接的方式可以分为两种,一种是硬链接(Hard Link),另一种是软链接或者也称为符号链接(Symbolic Link)。

硬链接:

在 Linux 中,多个文件名指向同一索引节点是存在的,所以硬连接指通过索引节点来进行的连接,即每一个硬链接都是一个指向对应区域的文件。

软链接:

软连接可以是任意文件或目录,可以链接不同文件系统的文件,在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身,这一点类似于 Windows 操作系统下的快捷方式。

测试:

 [root@iZ2ze3tzd3n3binlxkotjwZ home]# touch f1 #使用 touch 创建一个文件f1
 [root@iZ2ze3tzd3n3binlxkotjwZ home]# ln f1 f2  #建立f1的硬链接f2
 [root@iZ2ze3tzd3n3binlxkotjwZ home]# ls
 cheng  f1  f2  peng  www
 [root@iZ2ze3tzd3n3binlxkotjwZ home]# ln -s f1 f3  #创建f1的软链接f3
 [root@iZ2ze3tzd3n3binlxkotjwZ home]# ll  
 total 12
 drwxr-xr-x 2 root root 4096 Jul 20 13:37 cheng
 -rw-r--r-- 2 root root    0 Jul 21 16:12 f1
 -rw-r--r-- 2 root root    0 Jul 21 16:12 f2
 lrwxrwxrwx 1 root root    2 Jul 21 16:14 f3 -> f1
 drwxr-xr-x 2 root root 4096 Jul 20 22:11 peng
 drwx------ 3 www  www  4096 Jul 19 22:26 www
 #可以看出f1和f2为普通文件,f3为链接
 ​
 #给文件f1输入文本
 [root@iZ2ze3tzd3n3binlxkotjwZ home]# echo "hello world" >>f1
 #查看f1,f2,f3的内容
 [root@iZ2ze3tzd3n3binlxkotjwZ home]# cat f1
 hello world
 [root@iZ2ze3tzd3n3binlxkotjwZ home]# cat f2
 hello world
 [root@iZ2ze3tzd3n3binlxkotjwZ home]# cat f3
 hello world
 ​
 #删除文件f1,查看f2和f3的情况
 [root@iZ2ze3tzd3n3binlxkotjwZ home]# rm -rf f1
 [root@iZ2ze3tzd3n3binlxkotjwZ home]# ls
 cheng  f2  f3  peng  www
 [root@iZ2ze3tzd3n3binlxkotjwZ home]# cat f2 
 hello world   #f2硬链接存在
 [root@iZ2ze3tzd3n3binlxkotjwZ home]# cat f3 
 cat: f3: No such file or directory  #f3软链接不存在,因为源文件删了,快捷方式也就不在了
 ​
 ​

主要区别、限制:

硬链接:

a:不能对目录创建硬链接,原因有几种,最重要的是:文件系统不能存在链接环(目录创建时的".."除外,这个系统可以识别出来),存在环的后果会导致例如文件遍历等操作的混乱(du,pwd等命令的运作原理就是基于文件硬链接,顺便一提,ls -l结果的第二列也是文件的硬链接数,即inode节点的链接数)

b:不能对不同的文件系统创建硬链接,即两个文件名要在相同的文件系统下。

c:不能对不存在的文件创建硬链接,由原理即可知原因。

软链接:

a:可以对目录创建软链接,遍历操作会忽略目录的软链接。

b:可以跨文件系统

c:可以对不存在的文件创建软链接,因为放的只是一个字符串,至于这个字符串是不是对于一个实际的文件,就是另外一回事了

\