【linux命令】软连接和硬链接的区别(ln命令)
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命令)的更多相关文章
- linux中软连接和硬链接的区别
linux中创建软连接和硬链接的方法: 软连接: ln -s oldfile slink 硬连接: ln oldfile hlink linux中创建软连接和硬链接的区别: 原理上,硬链 ...
- Linux的软连接、硬链接和find命令
软链接和硬链接 序号 命令 作用 01 ln –s 被链接的源文件 链接文件 建立文件的软连接,用通俗的是方式类似于Windows下的快捷链接 源文件连接要是有绝对路径,不能使用相对路径,这样可以方便 ...
- linux 软连接和 硬链接的区别
Linux软链接硬链接的区别 ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下 ...
- [转帖]Linux 下软链接和硬链接的区别
Linux 下软链接和硬链接的区别 http://os.51cto.com/art/201911/605267.htm 软连接 文件是小的 只是一个链接 删除和其他处理不影响 原始文件的计数 删除源文 ...
- linux下符号链接和硬链接的区别
存在2众不同类型的链接,软链接和硬链接,修改其中一个,硬链接指向的是节点(inode),软链接指向的是路径(path) 软连接文件 软连接文件也叫符号连接,这个文件包含了另一个文件的路径名,类似于wi ...
- linux中软链接和硬链接的区别与小结
ln命令 该命令在文件之间创建链接.这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称.对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题. 如果链 ...
- linux下软链接与硬链接及其区别
linux下创建链接命令 ln -s 软链接 这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s, 具体用法是:ln ...
- 描述Linux下软链接和硬链接的区别(计时2分钟)
在linux系统中,链接分两种 :一种被称为硬链接(Hard Link),另一种被称为符号链接或软链接(Symbolic Link). 1)默认不带参数情况下,ln命令创建的是硬链接. 2)硬链接文件 ...
- Linux的软连接与硬链接
Linux的软连接相当于window系统的快捷方式,如我们桌面的QQ等. 硬连接相当于复制一个文件,但不同的是两个文件内容同步.如创建一个文件A的硬连接B, 如果我修改A里面的内容,同时B中的内容也会 ...
随机推荐
- R 语言学习笔记(1)——R 工作空间与输入输出
什么是工作空间? 工作空间(workspace)就是当前 R 的工作环境,它储存着所有用户定义的对象(objectives)包括了向量.矩阵.函数.数据框.列表等. 处理 R 文件的工作流程 #设置当 ...
- 不用任何第三方,写一个RTMP直播推流器
2016年是移动直播爆发年,不到半年的时间内无数移动直播App掀起了全民直播的热潮.然而个人觉得直播的门槛相对较高,从推流端到服务端器到播放端,无不需要专业的技术来支撑,仅仅推流端就有不少需要学习的知 ...
- 转:Spring事务管理
spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作.今天一起学习一下Spring的事务管理.Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.Tran ...
- mac os 搭建私有DNS 之 dnsmasq
- MAC OS 创建私有DNS 仓库 - 使用场景 实际工作中有一些私有的域名需要修改host才可以访问 例如:localhost.dev develop-test.dev - 安装方法 brew ...
- 2020年深度学习DeepLearning技术实战班
深度学习DeepLearning核心技术实战2020年01月03日-06日 北京一.深度学习基础和基本思想二.深度学习基本框架结构 1,Tensorflow2,Caffe3,PyTorch4,MXNe ...
- cocoapods 安装使用详解
http://blog.csdn.net/showhilllee/article/details/38398119 http://www.jianshu.com/p/1222dd6c4271 删除 ...
- iOS-使用Xcode自带单元测试UnitTest
![Uploading QQ20160129-3_262826.png . . .]####什么是单元测试?一听到单元测试这个词感觉很高端,其实单元测试就是为你的方法多专门写一个测试函数.以保证你的方 ...
- [TimLinux] JavaScript 阻止父节点接收子节点事件的方法
1. 事件 两种类型的事件:触发式.冒泡式 2. 冒泡式 触发式:事件从DOM结构的顶层往下走的事件触发过程: 冒泡式:事件从DOM结构的底层往上走的事件触发过程. 3. 父子节点 当父.子节点同时对 ...
- [TimLinux] 养成一个习惯
1. 习惯 在博客园开博之前,大约六个月之前,我开始给自己定下坚持跑步的目标,从而养成了一个习惯.就在大约半个月前,回顾自己的工作经历的时候,发现还有一个来月自己就工作十年了,为此我树立了一个新的目标 ...
- Java 复制Excel工作表
本文归纳了关于Java如何复制Excel工作表的方法,按不同复制需求,可分为: 1. 复制工作表 1.1 在同一个工作簿内复制工作表 1.2 在不同工作簿间复制工作表 2. 复制指定单元格数据 对于复 ...