http://www.cnblogs.com/yfanqiu/archive/2012/06/11/2545556.html

Linux 系统中有软链接和硬链接两种特殊的“文件”。

软链接可以看作是Windows中的快捷方式,可以让你快速链接到目标档案或目录。

硬链接则透过文件系统的inode来产生新档名,而不是产生新档案。

创建方法都很简单:

  1. 软链接(符号链接) ln -s   source  target
  2. 硬链接 (实体链接)ln       source  target

inode

要解释清楚两者的区别和联系需要先说清楚 linux 文件系统中的 inode 这个东西。当划分磁盘分区并格式化的时候,整个分区会被划分为两个部分,即inode区和data block(实际数据放置在数据区域中)这个inode即是(目录、档案)文件在一个文件系统中的唯一标识,需要访问这个文件的时候必须先找到并读取这个文件的 inode。 Inode 里面存储了文件的很多重要参数,其中唯一标识称作 Inumber, 其他信息还有创建时间(ctime)、修改时间(mtime) 、文件大小、属主、归属的用户组、读写权限、数据所在block号等信息。

通常会根据分区的用途来安排inode的数量(这是另外一个话题了),比如文件数量很多而文件都很小,则需要调增inode较大,以便能索引全部文件。否则将会出现这个分区并没有写满而无法写入任何文件的情况。

目录文件与档案文件

目录文件:记录该目录下的文件名

档案文件:记录实际文件数据

inode本身并不记录文件名,文件名记录在目录文件的block当中,所以新增、删除、更改文件名与目录的W权限有关。因此当我们要读某个档案时,就务必经过其目录的inode和block,然后才能够找到待读取档案的inode号,最终才会读到正确的档案block内的数据。系统是通过索引节点(而不是文件名)来定位每一个文件。

目录inode(满足权限?) => 目录block => 档案inode(满足权限?) => 档案block

硬链接

多个档名对应同一个inode,硬链接只是在某个目录下新增一笔档名链接到某个inode号码的关联记录而已。如果将上图中任何一个档名删除,档案的inode与block都还存在,依然还可以通过另一个档名来读取正确的档案数据。此外,不论用哪一个档名来编辑,最终的结果都会写入相同的inode和block中,因此均能进行数据的修改。

软连接

软连接就是建立一个独立的文件,而这个文件会让数据的读取指向它link的那个档案的档名,由于只是作为指向的动作,所以当来源档案被删除之后,软连接的档案无法开启,因为找不到原始档名。连结档的内容只有档名,根据档名链接到正确的目录进一步取得目标档案的inode,最终就能够读取到正确的数据。如果目标档案的原始档名被删除了那么整个环节就进行不下去了。

下面用一个实例来说明硬链接和软链接。

现在目录下有两个文件,一个名为AAA,一个名为BBB。
引用
$ ls -il
963922 -rw-r--r-- 1 ocean ocean 92 2007-05-18 15:46 AAA
963923 -rw-r--r-- 1 ocean ocean 95 2007-05-18 15:46 BBB

首先先做一个AAA的硬链接。
引用
$ ln AAA AAAhard
$ls -il
963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 AAA
963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 AAAhard
963923 -rw-r--r-- 1 ocean ocean 95 2007-05-18 15:46 BBB

这里我们注意在创建链接前,AAA显示的链接数目为1,创建链接后
1.AAA和AAAhard的链接数目都变为2。
2.AAA和AAAhard的inode号是一样的,都是963922。
3.AAA和AAAhard显示的文件大小也是一样,都是92B。
可见进行了ln命令的操作结果:AAA和AAAhard是同一个文件的两个名字,它们具有同样的索引节点号和文件属性,建立文件AAA的硬链接,就是为 AAA的文件索引节点在当前目录上建立一个新指针。你可以删除其中任何一个,如rm AAA,每次只会删除一个指针,链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。

尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一些不足之处:
1.不允许给目录创建硬链接。
2.不可以在不同文件系统的文件间建立链接。
因为 inode 是这个文件在当前分区中的索引值,是相对于这个分区的,当然不能跨越文件系统了。

接着我们做一个指向BBB的软链接,软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
引用
$ ln -s BBB BBBsoft
$ ls -il
总用量 0
963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 AAA
963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 AAAhard
963923 -rw-r--r-- 1 ocean ocean 95 2007-05-18 15:46 BBB
963924 lrwxrwxrwx 1 ocean ocean 3 2007-05-18 15:47 BBBsoft -> BBB

从上面链接后的结果可以看出来软链接与硬链接,区别不仅仅是在概念上,在实现上也是完全不同的。

区别:
1.硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;
2.在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;
3.链接数目是不一样的,软链接的链接数目不会增加;
4.文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了,BBB大小是95B,而BBBsoft是3B。因为BBB共有3个字符

5.软链接没有任何文件系统的限制,任何用户可以创建指向目录的符号链接

总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。

当然软链接也有硬链接没有的缺点:因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

分类: Linux

yfan.qiu linux硬链接与软链接相关推荐

  1. linux查看硬链接的对应文件,区分Linux硬链接与软链接

    在Linux中,连接文件有两种,一种类似于Windows的快捷方式,可以让你快速地链接到目标文件(或目录),这种称为软链接(soft link),也叫作符号链接(symbolic link):另一种则 ...

  2. linux硬链接与软链接

    详细文章链接:https://www.cnblogs.com/crazylqy/p/5821105.html (上面这个也是转载的!) 区别: 1.硬链接原文件/链接文件公用一个inode号,说明他们 ...

  3. Linux 硬链接和软链接的区别

    硬链接和软链接的区别 Linux 与其他类 UNIX 系统一样并不区分文件与目录:目录是记录了其他文件名的文件.我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user ...

  4. Linux可以对目录进行硬链接,Linux硬链接与软链接原理及用法解析

    在linux系统中有种文件是链接文件,可以为解决文件的共享使用.链接的方式可以分为两种,一种是硬链接(hard link),另一种是软链接或者也称为符号链接(symbolic link). 硬链接概念 ...

  5. LINUX 硬链接与软链接的区别

    对于一个文件来说,有唯一的索引接点(inode)与之对应,而对于一个索引接点号,却可以有多个文件名与之对应.因此,在磁盘上的同一个文件可以通过不同的路径去访问该文件.注意在Linux下是一切皆文件的啊 ...

  6. linux 硬链接和软链接

    在学习linux的过程中,我经常把软硬链接,所以今天专门查了一些资料,然后整合在自己的博客中,方便以后复习,查看. 一方面也是因为看了vamei的linux的概念与体系系列文章,感觉不全的做些补充. ...

  7. linux硬连接脚本,linux 硬链接和软链接深入理解

    在学习linux的过程中,我经常把软硬链接,所以今天专门查了一些资料,然后整合在自己的博客中,方便以后复习,查看. 一方面也是因为看了vamei的linux的概念与体系系列文章,感觉不全的做些补充. ...

  8. Linux硬链接和软链接

    2019独角兽企业重金招聘Python工程师标准>>> 链接文件 1 软链接soft link 软链接(soft link)又叫符号链接(symbolic link),这个文件包含了 ...

  9. Linux 硬链接与软链接

    在 Linux 中,链接文件分为两种,一种类似于 Windows 的快捷方式,可以让你快速地链接到目标文件(或目录),这种称为软链接(soft link),也叫作符号链接(symbolic link) ...

最新文章

  1. android获取手机通讯录
  2. OPENSSL_Uplink(0098E000,07): no OPENSSL_Applink 错误分析
  3. 04.local_gateway和network相关设置
  4. 函数的作用域在各浏览器的混乱情况
  5. [爬虫-python] scrapy框架入门实例-百度贴吧
  6. 较好的个人网址(关于编程)
  7. python自动下载邮件附件_Python批量下载电子邮件附件并汇总合并Excel文件
  8. document.ready和window.onload的区别
  9. linux nc命令入门
  10. jQuery源码研究——怎么看源码
  11. Imazing2023免费版苹果手机iOS数据管理软件
  12. End-to-end/hand-crafted的含义(深度学习)
  13. Unity(一)入门:Unity Hub下载 Unity安装
  14. HTTP协议状态码的含义
  15. spring加载一个或者多个properties配置文件方法
  16. Hadoop 面试汇总
  17. ChatGPT与AIGC,新世界的创造者
  18. Webgis 打印实现技术细节
  19. 计算机丢失slimage.dll,slimage.dll
  20. VBoxManage命令之虚机开启与关机

热门文章

  1. 福昕熊雨前:PDFium开源项目的背后
  2. Fragment基础讲解
  3. 从代码里提取的测试需求
  4. 关于在页面中针对不同版本的IE浏览器实现不同的JS或者CSS样式
  5. SQL Server 2005 DTS导入平面数据
  6. 调用WindowsAPI显示帮助提示
  7. html option ajax,Ajax实现简单下拉选项效果【推荐】
  8. linux下log日志乱码_如何用 Linux 技巧大大提高工作效率?
  9. php copy 文件夹,php删除与复制文件夹及其文件夹下所有文件的实现代码
  10. linux下kegg注释软件,KEGG数据中全部代谢反应和代谢物注释信息的下载