linux--硬链接和软链接

ln命令:在文件之间建立链接

ln [选项] 源文件 目标文件
    选项:
     -s:建立软链接文件。如果不加'-s',则建立硬链接文件
     -f:强制。如果目标文件已经存在,则删除目标文件后再建立链接文件

创建硬链接

如:touch ying
  ln /home/ying /tmp/
  #建立硬链接文件,目标文件没有写文件名,会和原名一直
  #也就是/home/ying 和/tmp/ying 是硬链接文件

创建软链接

touch ruan
ln -s /home/ruan /tmp/
#建立软链接

这里需要注意,软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求);否则软链接文件会报错

硬链接详解

#代表系统用户,$代表当前用户

[root@VM-0-17-centos home]# touch test
#建立源文件
[root@VM-0-17-centos home]# ln /home/test /tmp/test-lianjie
#给源文件建立硬链接文件/tmp/test-lianjie
[root@VM-0-17-centos home]# ll -i /home/test /tmp/test-lianjie 
393820 -rw-r--r-- 2 root root 0 6月   2 19:13 /home/test
393820 -rw-r--r-- 2 root root 0 6月   2 19:13 /tmp/test-lianjie
#查看两个文件的详细信息,可以发现这连个文件的inode号是一样的

 硬链接特点

  • 不论是修改源文件(test文件),还是修改硬链接文件(test-lianjie文件),另一个文件中的数据都会发生改变
  • 不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件(inode号是393820的文件)都可以被访问
  • 硬链接不会建立新的inode信息,也不会更改inode的总数
  • 硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode号是重新计算的
  • 硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,较复杂

          硬链接的限制比较多,既不能跨文件系统,也不能链接目录,而且源文件和硬链接文件之间除inode号是一样的之外,没有其他明显的特征。这些特征都使得硬链接并不常用

向其中一个文件中写入数据,都会发生改变

删除其中任意一个,另一个仍能正常读取

软链接详解

软链接也称作符号链接,相比硬链接来讲,软链接就要常用多了

[root@VM-0-17-centos home]# touch check
#建立源文件
[root@VM-0-17-centos home]# ln -s /home/check /tmp/check-soft
#建立软链接文件
[root@VM-0-17-centos home]# ll -i /home/check /tmp/check-soft 
393829 -rw-r--r-- 1 root root  0 6月   2 19:44 /home/check
 23947 lrwxrwxrwx 1 root root 11 6月   2 19:44 /tmp/check-soft -> /home/check
 #软链接和源文件的inode号不一致,软链接通过->明显的标识出源文件的位置
 #在软链接的权限中lrwxrwxrwx,l就代表软链接文件
 #必须使用绝对路径

         软链接也不像硬链接的限制那样多,比如软链接可以链接目录,也可以跨分区来建立软链接,类似Windows的快捷方式,比如,有些系统的自启动文件/etc/rc.local放置在/etc/目录中,而有些系统却将其放置在/etc/rc.d/rc.local中,那么干脆对这两个文件建立软链接,不论你习惯操作哪一个文件,结果都是一样的

         软链接和硬链接在原理上最主要的不同在于:硬链接不会建立自己的inode索引和block (数据块),而是直接指向源文件的inode信息和block,所以硬链接和源文件的inode号是一致的;而软链接会真正建立自己的inode索引和block,所以软链接和源文件的inode号是不一致的,而且在软链接的block中,写的不是真正的数据,而仅仅是源文件的文件名及inode号

软链接的特点:

  • 不论是修改源文件(check),还是修改硬链接文件(check-soft),另一个文件中的数据都会发生改变。
  • 删除软链接文件,源文件不受影响。而删除源文件,软链接文件将找不到实际的数据,从而显示文件不存在
  • 软链接会新建自己的inode信息和block,只是在block中不存储实际文件数据,而存储的是源文件的文件名及inode号
  • 软链接可以链接目录
  • 软链接可以跨分区

[root@VM-0-17-centos home]# rm -rf /home/check 
#删除源文件
[root@VM-0-17-centos home]# cat /tmp/check-soft 
cat: /tmp/check-soft: 没有那个文件或目录
#软链接无法正常使用
软链接是可以链接目录的,例如

落后就要吃土,努力吧,骚年!!!
原文地址:https://www.cnblogs.com/u-damowang1/p/14842810.html