【linux命令】软链接和硬连接的区别(ln命令)

Linux 文件系统把硬盘分为三个部分:超级块、inode 列表、数据区

  inode 指示:该文件的数据存放在数据区的哪些块内。由于这个“映射”关系不能变动,所以,inode 至关于表明着文件自己。(值得注意的是,文件名与文件自己不是直接映射起来的,中间隔着 inode)node

  内核为每个新建立的文件分配一个Inode(索引结点),每一个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存,从而实现文件的快速访问。网络

  连接是一种在共享文件和访问它的用户的若干目录项之间创建联系的一种方法。spa

  Linux中包括两种连接:硬连接(Hard Link)和软连接(Soft Link),软连接又称为符号连接(Symbolic link)。操作系统

硬连接

  硬连接至关因而一个指针,指向文件索引节点,系统并不为它从新分配inode。用 ln 命令来创建硬连接。设计

  当咱们建立了一个文件的硬连接时,硬连接会使用和文件相同的inode号,此时咱们发现,原来的文件的inode链接数由最初的1变为了2,实际上硬连接和文件使用了相同的inode,只不过是inode链接数增长了,删除文件不会影响硬连接,硬连接的inode数会从2变为1指针

# 不论是硬连接仍是软链接,源文件必须先存在
[root@tanbaobao thy]# touch codefile.txt
[root@tanbaobao thy]# vi codefile.txt 

# 索引数量为1
[root@tanbaobao thy]# ls -il
总用量 8
922461 -rw-r--r-- 1 root root  6 12月 18 11:04 codefile.txt # 默认不加任何参数是建立硬连接,且参数二必须是要建立的连接文件
[root@tanbaobao thy]# ln codefile.txt h_codefile.txt

# 查看硬连接,会发现它们的inode索引号是相同的,但索引的数量会加1
[root@tanbaobao thy]# ls -il
总用量 12
922461 -rw-r--r-- 2 root root  6 12月 18 11:04 codefile.txt 922461 -rw-r--r-- 2 root root  6 12月 18 11:04 h_codefile.txt # 删除源文件并不会影响硬连接(只有将全部指向文件内容的指针,也即连接数减为0时,内核才会把文件内容从磁盘上删除。)
[root@tanbaobao thy]# rm -rf codefile.txt 
[root@tanbaobao thy]# ls -li
总用量 8
922461 -rw-r--r-- 1 root root  6 12月 18 11:04 h_codefile.txt

PS:硬连接,只能应用于文件,而不能应用于目录,并且不能跨文件系统(即分区)。不能够在不一样文件系统的文件间创建连接。code

软链接(符号连接)

  符号连接是对一个文件的间接指针。硬连接直接指向文件的i节点。 blog

  软连接克服了硬连接的不足,没有任何文件系统的限制,任何用户能够建立指向目录的符号连接。甚至能够跨越不一样机器、不一样网络对文件进行连接。创建软连接只要在ln后面加上选项 –s。   索引

  在建立文件的软连接时,软连接会使用一个新的inode,因此软连接的inode号和文件的inode号不一样,软连接的inode里存放着指向文件的路径,删除文件,软连接也没法使用了,由于文件的路径不存在了;当咱们再次建立这个文件时(文件名与以前的相同),软连接又会从新指向这个文件(inode号与以前的不一样了),而硬连接不会受其影响内存

# 先建立源文件
[root@tanbaobao thy]# touch srcfile.txt
[root@tanbaobao thy]# ls -l
总用量 4
-rw-r--r-- 1 root root 38 12月 18 11:01 srcfile.txt # 建立软链接(参数二必须是软链接文件名)
[root@tanbaobao thy]# ls -l
总用量 4
-rw-r--r-- 1 root root 38 12月 18 11:01 srcfile.txt # 查看(软链接的索引是不相同的,且索引数量都为1,而且软链接文件名后边会指向连接的源文件)
[root@tanbaobao thy]# ls -il
总用量 8
922457 lrwxrwxrwx 1 root root 11 12月 18 11:02 desfile.txt -> srcfile.txt 922460 -rw-r--r-- 1 root root 64 12月 18 11:03 srcfile.txt # 删除源文件,软链接就会失效(由于索引指向的源文件路径已经不存在了)
[root@tanbaobao thy]# rm -r srcfile.txt 
rm:是否删除普通文件 "srcfile.txt"?y [root@tanbaobao thy]# ls -il
总用量 4
922457 lrwxrwxrwx 1 root root 11 12月 18 11:02 desfile.txt -> srcfile.txt

 

 

查看软链接文件会显示没有该文件:

 

 

从新建立以后又会恢复,由于路径指向的文件存在:

[root@tanbaobao thy]# touch srcfile.txt
[root@tanbaobao thy]# ll -i
总用量 4
922457 lrwxrwxrwx 1 root root 11 12月 18 11:02 desfile.txt -> srcfile.txt 922458 -rw-r--r-- 1 root root  0 12月 18 11:43 srcfile.txt

 

说明:能够建立多个连接文件,可是不能在软链接文件上建立连接文件,这样会致使断裂,造成混乱的连接链

区别:

挂载点

  只能在同种存储媒体上的文件之间建立硬连接(Hard Link),不能在不一样挂载点下的文件间建立硬连接,对于后一种状况,可使用软连接;(区分不一样挂载点与同一挂载点不一样目录)

目录

  软链接就至关于 win 中的快捷方式即若是软连接一个目录只是一个目录的快捷方式到指定位置,操做系统找这个快捷方式会直接找到真实目录下的文件。可是硬连接的话,至关于镜像的方式,建立一个目录的硬连接以后,操做系统须要把这个目录下全部的文件都要作一次硬连接(复制一份过去),这样操做系统在访问这个连接的时候要不断去遍历,大大增长复杂度,并且很容易进入死循环。

  硬连接不能对目录建立受限于文件系统的设计。Linux 文件系统中的目录均隐藏了两个特殊的目录,当前目录和父目录。实际上是两个硬连接,若系统运行对目录建立硬连接,则会产生目录环。

总结:

 

  1)硬连接原文件&连接文件共用一个inode号,说明他们是同一个文件;而软连接原文件&连接文件拥有不一样的inode号,代表他们是两个不一样的文件;

  2)在文件属性上软连接明确写出了是连接文件,而硬连接没有写出来,由于在本质上硬连接文件和原文件是彻底平等关系,就像文件被复制了一份同样;

  3)连接数目是不同的,软连接的连接数目不会增长,硬连接会相应的加一;  

  4)文件大小是不同的,硬连接文件显示的大小是跟原文件是同样的,而这里软连接显示的大小与原文件就不一样了。

相关文章
相关标签/搜索