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

  inode 指示:该文件的数据存放在数据区的哪些块内。因为这个“映射”关系不能变更,因此,inode 相当于代表着文件本身。(值得注意的是,文件名与文件本身不是直接映射起来的,中间隔着 inode)

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

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

  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:硬链接,只能应用于文件,而不能应用于目录,而且不能跨文件系统(即分区)。不可以在不同文件系统的文件间建立链接。

软连接(符号链接)

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

  软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。甚至可以跨越不同机器、不同网络对文件进行链接。建立软链接只要在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)文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,而这里软链接显示的大小与原文件就不同了。

【linux命令】软连接和硬链接的区别(ln命令)的更多相关文章

  1. linux中软连接和硬链接的区别

    linux中创建软连接和硬链接的方法: 软连接: ln -s oldfile slink 硬连接: ln oldfile hlink linux中创建软连接和硬链接的区别:        原理上,硬链 ...

  2. Linux的软连接、硬链接和find命令

    软链接和硬链接 序号 命令 作用 01 ln –s 被链接的源文件 链接文件 建立文件的软连接,用通俗的是方式类似于Windows下的快捷链接 源文件连接要是有绝对路径,不能使用相对路径,这样可以方便 ...

  3. linux 软连接和 硬链接的区别

    Linux软链接硬链接的区别   ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下 ...

  4. [转帖]Linux 下软链接和硬链接的区别

    Linux 下软链接和硬链接的区别 http://os.51cto.com/art/201911/605267.htm 软连接 文件是小的 只是一个链接 删除和其他处理不影响 原始文件的计数 删除源文 ...

  5. linux下符号链接和硬链接的区别

    存在2众不同类型的链接,软链接和硬链接,修改其中一个,硬链接指向的是节点(inode),软链接指向的是路径(path) 软连接文件 软连接文件也叫符号连接,这个文件包含了另一个文件的路径名,类似于wi ...

  6. linux中软链接和硬链接的区别与小结

    ln命令 该命令在文件之间创建链接.这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称.对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题. 如果链 ...

  7. linux下软链接与硬链接及其区别

    linux下创建链接命令 ln -s 软链接 这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s, 具体用法是:ln ...

  8. 描述Linux下软链接和硬链接的区别(计时2分钟)

    在linux系统中,链接分两种 :一种被称为硬链接(Hard Link),另一种被称为符号链接或软链接(Symbolic Link). 1)默认不带参数情况下,ln命令创建的是硬链接. 2)硬链接文件 ...

  9. Linux的软连接与硬链接

    Linux的软连接相当于window系统的快捷方式,如我们桌面的QQ等. 硬连接相当于复制一个文件,但不同的是两个文件内容同步.如创建一个文件A的硬连接B, 如果我修改A里面的内容,同时B中的内容也会 ...

随机推荐

  1. webpack4.0(二)--热更新

    webpack4.0---热更新 使用webpack可帮助我们的开发以及打包,在开发过程中,有时候我们只修改了部分代码并想不必刷新整个页面即可看到更改后的效果,这时候 webpack-dev-serv ...

  2. 【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图【华为云技术分享】

    [摘要] 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节 ...

  3. DevOps on DevCloud|如何采用流水线践行CI/CD理念【华为云技术分享】

    [摘要] 持续集成/持续交付(CI/CD,Continuous Integration/Continuous Deployment)在DevOps CMALS理念中具有支柱性地位,因而CI/CD流水线 ...

  4. 在Linux下生成crypt加密密码

    [摘要]当我们用红帽Kickstart脚本或useradd或其他方式写东西的时候,经常会需要用到crypt命令加密生成的密码格式.那么,有没有其他方式可以生成这种格式的密码?事实上,方法有很多 1.我 ...

  5. 二叉树的建立&&前中后遍历(递归实现)&&层次遍历

    下面代码包含了二叉树的建立过程,以及三种遍历方法了递归实现,代码中还利用队列实现了层次遍历. import java.util.LinkedList; import java.util.Queue; ...

  6. luogu P3572 [POI2014]PTA-Little Bird |单调队列

    从1开始,跳到比当前矮的不消耗体力,否则消耗一点体力,每次询问有一个步伐限制,求每次最少耗费多少体力 #include<cstdio> #include<cstring> #i ...

  7. iOS使用Workspace来管理多项目 ( 转 )

    开发中会有一些常用的类或方法,或者是某个特定功能的,比如一个自定义的弹框.一个更容易使用的网络请求库,可以把它们放到一个单独的工程里,通过静态库(library.FrameWork)的方式应用到任何其 ...

  8. react-native布局中的层级问题(zIndex,elevation)

    目录 关于层级的zIndex/elevation 1.zIndex是rn在0.30开始支持的属性,是可以生效的: 2.shadow和elevation 结论 关于层级的zIndex/elevation ...

  9. HDU-1274

    在纺织CAD系统开发过程中,经常会遇到纱线排列的问题.  该问题的描述是这样的:常用纱线的品种一般不会超过25种,所以分别可以用小写字母表示不同的纱线,例如:abc表示三根纱线的排列:重复可以用数字和 ...

  10. flex布局中flex-grow与flex-shrink的计算方式

    CSS 中的 Flex(弹性布局) 可以很灵活的控制网页的布局,其中决定 Flex 布局内项目宽度/高度的是三个属性: flex-basis, flex-grow, flex-shrink. flex ...