【转】linux 软连接 硬链接

原文链接  http://www.cnblogs.com/yfanqiu/archive/2012/06/11/2545556.html

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

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

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

创建方法都很简单:

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

【copy 命令也可以创建软连接,硬链接】

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.软链接没有任何文件系统的限制,任何用户可以创建指向目录的符号链接

总之,建立软链接就是建立了一个新文件

当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。

当然软链接也有硬链接没有的缺点:

因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,

再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;

还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

时间: 2024-10-07 05:30:13

【转】linux 软连接 硬链接的相关文章

linux软连接硬链接操作与详解

1.Linux硬链接和软连接  ln命令,创建连接 .命令参数: 必要参数: -b 删除,覆盖以前建立的链接 -d 允许超级用户制作目录的硬链接 -f 强制执行 -i 交互模式,文件存在则提示用户是否覆盖 -s 软链接(符号链接) -v 显示详细的处理过程     Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]    硬连接指通过索引节点来进行连接.在Linux的文件系统中,保存在磁盘

Linux 的硬链接与软连接

首先我们需要了解linux下硬链接以及软连接的基本概念. 硬链接:新建的文件是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用. 软链接:也称为符号链接,新建的文件以"路径"的形式来表示另一个文件,和Windows的快捷方式十分相似,新建的软链接可以指向不存在的文件. 下面详细介绍一下硬链接和软连接之间的区别. 1.硬链接和原来的文件没有什么区别,而且共享一个 inode 号(文件在文件系统上的唯一标识):而软链接不共享 inode,也可以说是个特殊的 inode,所以

Linux 的硬链接与软链接

Linux 的硬链接与软链接    http://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/    若一个 inode 号对应多个文件名,则称这些文件为硬链接.软链接本身是个特殊的文件,文件内容指向另一个文件名路径(建议绝对路径)   硬链接存在以下几点特性:      文件有相同的 inode 及 data block:      只能对已存在的文件进行创建:      不能交叉文件系统进行硬链接的创建:      不

理解 Linux 的硬链接与软链接

理解 Linux 的硬链接与软链接 从 inode 了解 Linux 文件系统 硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称  inode),而索引节点对象是 Linux 虚拟文件系统 (VFS) 的四个基本概念之一.通过剖析硬链接与软链接的联系与区别,我们可更好的了解  Linux 中 VFS 这一通用文件模型.并让 Linux 普通用户和系统管理员正确使用硬链接与软链接,帮助文件系统开发者获取 inode  的相关知识. 1

理解 Linux 的硬链接与软链接【转】

本文转载自:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/ 从 inode 了解 Linux 文件系统 硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux 虚拟文件系统 (VFS) 的四个基本概念之一.通过剖析硬链接与软链接的联系与区别,我们可更好的了解 Linux 中 VFS 这一通用文件模型.并让 L

理解 Linux 的硬链接与软链接(待研究)

从 inode 了解 Linux 文件系统 硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux 虚拟文件系统 (VFS) 的四个基本概念之一.通过剖析硬链接与软链接的联系与区别,我们可更好的了解 Linux 中 VFS 这一通用文件模型.并让 Linux 普通用户和系统管理员正确使用硬链接与软链接,帮助文件系统开发者获取 inode 的相关知识. Linux 的文件与目录 现代操作系统为解决

Linux系统硬链接和软链接

Linux系统硬链接和软链接 [链接的概念] 在Linux系统中,链接可分为两种:一种为硬链接(Hard Link),另一种为软链接或符号链接(Symbolic Link or soft link).Ln这个命令就是创建链接文件的命令,默认不带参数的情况下,是代表创建硬链接. [软链接] 软链接也称为符号链接(SymbolicLink).Linux里的软链接文件就类似于Windows系统中的快捷方式.Linux里的软链接文件实际上是一个特殊的文件.在软链接中,软链接文件实际上就是一个文本文件,这

linux中硬链接与软链接

硬链接记录的是目标的inode,软链接记录的是目标的路径.软链接就像快捷方式,而软链接就像备份.软链接可以做跨分区的链接,而硬链接由于inode的缘故,只能在本分区中做链接,所以软链接使用更多. 他们的缺点: 硬链接: 1.不允许给目录创建硬链接 2.只有在同一文件系统中的文件之间才能创建链接 软链接: 软链接可以是任意的文件或目录,链接文件甚至可以链接不存在的文件,因此产生"断链"问题,并且可以循环链接自己. linux中硬链接与软链接

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

转自:http://www.cnblogs.com/migongci0412/p/4986798.html 硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux 虚拟文件系统 (VFS) 的四个基本概念之一.通过剖析硬链接与软链接的联系与区别,我们可更好的了解 Linux 中 VFS 这一通用文件模型.并让 Linux 普通用户和系统管理员正确使用硬链接与软链接,帮助文件系统开发者获取 ino