LINUX软链接和硬链接

软连接和硬链接

Linux分为两种链接,一种叫做软链接(符号链接),另一种叫硬链接。
默认情况下,ln命令产生硬链接

软链接(符号链接)

软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

硬链接

硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

示例

colin@colinsoft:~/tang$ touch test    #创建一个测试文件
colin@colinsoft:~/tang$ ln -s test test.soft   #创建一个软链接文件
colin@colinsoft:~/tang$ ln test test.hard      #创建一个硬链接文件
colin@colinsoft:~/tang$ echo "cout test">>test   #写入test文件
colin@colinsoft:~/tang$ cat test				#查看test
cout test
colin@colinsoft:~/tang$ cat test.soft 			#查看test.soft
cout test
colin@colinsoft:~/tang$ cat test.hard 			#查看test.hard
cout test
#将test.soft移动到其他目录下
colin@colinsoft:~/tang$ mv test.soft ..   #将test.soft移动到上一级目录
colin@colinsoft:~/tang$ cat ../test.soft  #查看上一级目录下的test.soft
cat: ../test.soft: 没有那个文件或目录	  
#由于软链接只是记录文件的位置,并且当创建软链接是使用的是文件的相对路径,
#所以当软链接移动时,找不到原来链接文件的路径,因此出错。
#解决此问题,需要在创建软链接时使用链接文件的绝对路径
colin@colinsoft:~/tang$ ln -s /home/colin/tang/test test.soft   #使用绝对路径创建软链接
colin@colinsoft:~/tang$ mv test.soft ..
colin@colinsoft:~/tang$ cat ../test.soft 
cout test
#查看链接的Inode
colin@colinsoft:~/tang$ stat test
  文件:'test'
  大小:10        	块:8          IO 块:4096   普通文件
设备:801h/2049d	Inode:694358      硬链接:2
权限:(0664/-rw-rw-r--)  Uid:( 1000/   colin)   Gid:( 1000/   colin)
最近访问:2019-12-27 10:08:23.382634445 +0800
最近更改:2019-12-27 10:08:19.602634223 +0800
最近改动:2019-12-27 10:08:19.602634223 +0800
创建时间:-
colin@colinsoft:~/tang$ stat test.soft 
  文件:'test.soft' -> '/home/colin/tang/test'
  大小:21        	块:0          IO 块:4096   符号链接
设备:801h/2049d	Inode:694893      硬链接:1
权限:(0777/lrwxrwxrwx)  Uid:( 1000/   colin)   Gid:( 1000/   colin)
最近访问:2019-12-27 10:57:41.838808188 +0800
最近更改:2019-12-27 10:57:37.750807948 +0800
最近改动:2019-12-27 10:57:37.750807948 +0800
创建时间:-
colin@colinsoft:~/tang$ stat test.hard 
  文件:'test.hard'
  大小:10        	块:8          IO 块:4096   普通文件
设备:801h/2049d	Inode:694358      硬链接:2
权限:(0664/-rw-rw-r--)  Uid:( 1000/   colin)   Gid:( 1000/   colin)
最近访问:2019-12-27 10:08:23.382634445 +0800
最近更改:2019-12-27 10:08:19.602634223 +0800
最近改动:2019-12-27 10:08:19.602634223 +0800
创建时间:-
#通过stat命令可以查看文件的Inode,Inode号相当于c语言中的地址,每一块空间都一个专属地址
#可以看到,test和test.hard的Inode号,而与test.soft的Inode号不同
#可以看到,test和test.hard的硬链接数都是2,此时test和test.hard已经没有区别,都是这快内存的硬链接
#当删除test或者test.hard时,硬链接数会减一
colin@colinsoft:~/tang$ rm test
colin@colinsoft:~/tang$ stat test.hard
  文件:'test.hard'
  大小:10        	块:8          IO 块:4096   普通文件
设备:801h/2049d	Inode:694358      硬链接:1
权限:(0664/-rw-rw-r--)  Uid:( 1000/   colin)   Gid:( 1000/   colin)
最近访问:2019-12-27 10:08:23.382634445 +0800
最近更改:2019-12-27 10:08:19.602634223 +0800
最近改动:2019-12-27 11:06:48.494840292 +0800
创建时间:-
#可以看到,Inode号没有改变,但是硬链接数变为1

总结

1.软链接可以看做windows下的快捷方式,方便理解
2.硬链接用的比较多,可以看做是c语言中指向同一块内存的指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值