linux系统下的软连接与硬链接

  前几天在linux系统下安装mongoDB,然后运行脚本导入数据的时候遇到了链接库查询不到的情况,如图 1所示。当时是通过创建软连接的方式解决的这个问题。虽然,通过网上的教程解决了这个问题,但是对于软连接和硬链接始终不是很明白。趁着周末的时间补补课,将软连接和硬链接的概念、特点以及创建的限制系统的学习一下。

图 1 缺少文件的提示

  Linux下的连接文件分为两种,一种是类似于windows的快捷方式的软连接,另一种是就是通常所说的硬链接。这两种链接方式都是为了实现文件的共享而存在的。下面根据自己的理解做一个介绍,如果有不对的地方,欢迎大家批评指正。

  在介绍硬链接和软连接之前,首先说明一下linux系统的对于文件的设置。文件都是有文件名和文件中存储的数据组成的,这在linux上被分成两个部分:用户数据部分和元数据部分。用户数据就是文件数据块,记录着文件中真实的内容;元数据包含的是文件的附加属性,如,文件的大小、创建时间、所有者信息、所属的组等。在Linux中用户数据的内容是通过元数据中的inode标识的,也就是说inode号才是文件的唯一标识,而不是文件名。文件名只是为了使用者的记忆和使用的方便,用户可以通过文件名得到对应的inode号码,系统或者程序通过inode号寻找正确的文件数据块,如图2所示。

图 2 文件系统设置

  一、硬链接

  在硬链接下一个inode一般对应多个而文件名,可以通过link或者是ln创建,其本质是在某个目录文件下创建一个文件名链接到某个inode号码的关联记录而已,如图3所示。其有以下特点:

  1. 硬链接具有相同的inode和data,如图4;
  2. 只能对已经存在的文件创立硬链接,而不能对不存在的文件创建硬链接,如图5;
  3. 只能对文件创建硬链接,不能对目录创建硬链接,如图6;
  4. 由于linux系统将不同的文件分类存放在不同的目录系统下,因此不能对不同的文件文件系统交叉建立硬链接,如图7;
  5. 由于硬链接是不同的文件引用相同的inode和data,因此删除一个硬链接不会导致inode和data的消失;只有当所有的链接到这个inode的链接都被删除的时候,最终的data才会被删除;也就是说不同的硬链接彼此之间不相互影响;这种引用的方式类似于智能指针的应用;

图 3 硬链接

图 4 硬链接相同的inode

图 5 创建不存在的文件的链接

图 6 创建目录的硬链接失败的情况

图 7 不同设备之间创建硬链接

  二、软连接

  和硬连接不同,软连接一般存放的是另一文件的目录名的指向(即另一个文件的路径),而不是具有的inode值。因此软连接有着自己的inode的data,这个inod的值是可以和要指向的文件具有的inode值具有相同的值的(如果软连接和所指向的文件具有不同的文件系统),如图8所示。基于上述对于软链接的定义,可以得到软链接的定义如下:

  1. 软链接具有自己的元数据和用户数据;
  2. 可以对不存在的文件创建软链接,甚至可以对文件夹创建软连接;如果对不存在的文件创建软链接,则最终该软链接称为死链接,如果后来创建了该软链接指向的文件,那么该软链接将不再是死链接,如图9所示;
  3. 因为软链接是中的用户数据是另一个文件的路径,因此如果该被指向的文件被删除,那么该链接失效,成为死链接,如下图用红色表示;
  4. 软链接可以交叉文件系统创建,因此软链接的inode和指向的文件的inode可以具有相同的值,可以通过find / -inum xxxx找出具有相同的inod值得文件;

图 8 软连接

图 9 软连接测试用例

  总结:

  链接机制可以减少不必要文件的重复存在,减轻磁盘的压力。

时间: 2024-08-02 06:57:30

linux系统下的软连接与硬链接的相关文章

Linux下的软连接和硬链接

由于教学上的原因,需要下载Android源码,后来使用repo时,系统提示需要python2,我的系统中是两个都有的,但是默认是python3,无法下载,通过创建了个链接搞定,下面就来说说linux下的链接. 1.Linux链接概念 Linux下链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接,通过使用-s选项,产生符号链接,也就是软链接.硬连接指通过索引节点来进行连接.在Linux的文件系统中,保存在磁盘分区

linux 下的软连接和硬链接

linux下创建硬链接相当于对源文件的拷贝,生成的新文件和源文件的inode值时一致的,当源文件删除后,硬链接不会失效 软连接类似于源文件的快捷方式,两者的inode不同,它里面保存的时源文件的路径信息,当源文件的删除消失后,软连接失效,此时如果在新建源文件,则软链接继续生效 测试一下实验环境:ubuntu 14.04 kernel:3.13.0-24-generic 1. 新建一个测试文件 touch test 使用stat或者ls -i选项去查看test的inode值 ``` [email 

Linux的软连接与硬链接

Linux的软连接相当于window系统的快捷方式,如我们桌面的QQ等. 硬连接相当于复制一个文件,但不同的是两个文件内容同步.如创建一个文件A的硬连接B, 如果我修改A里面的内容,同时B中的内容也会更新. 创建软连接的命令:ln -s  源文件  目标文件 创建硬连接的命令:ln   源文件  目标文件 硬连接不能跨区创建,比如/home 目录与/ect目录不在一个分区,a这个文件现在在/home目录中,这时你想对a文件创建硬连接到/ect目录下是不行的. 软连接可以跨区创建 Linux的软连

linux下的符号链接和硬链接

一   Linux下链接文件的作用 Linux特别注重用户的权限,而链接文件的作用也正体现了这个方面.对源文件的位置进行了隐藏,用户只对链接文件操作. 二  链接文件的区别 链接文件分为硬链接文件和软连接(符号链接)文件. 硬链接:默认条件下创建的文件为硬链接文件,即 ln  文件名   链接文件名 . 硬链接文件共享文件的 inode ,是对文件物理地址的操作,相当于拷贝了源文件.删除源文件而链接文件依然有效.修改源文件则链接文件随之改变,修改链接文件则源文件也随之改变.链接文件后面没有指向源

linux 软连接和硬链接的区别

linux 软连接和硬链接的区别 2011-06-27  zale的图...   阅 3345  转 23 转藏到我的图书馆 微信分享: 4点不同 : (1)软连接可以 跨文件系统 ,硬连接不可以 .实践的方法就是用共享文件把windows下的 aa.txt文本文档连接到linux下/root目录 下 bb,cc . ln -s aa.txt /root/bb 连接成功 .ln aa.txt /root/bb 失败 .(2)关于 I节点的问题 .硬连接不管有多少个,都指向的是同一个I节点,会把

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

Linux 文件系统把硬盘分为三个部分:超级块.inode 列表.数据区 inode 指示:该文件的数据存放在数据区的哪些块内.因为这个“映射”关系不能变更,因此,inode 相当于代表着文件本身.(值得注意的是,文件名与文件本身不是直接映射起来的,中间隔着 inode) 内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个唯一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存,从而实现文件的快速访问. 链接是一种在共享文件和访问它的用户的若干目录项

[Linux] Linux软连接和硬链接

转载自:http://www.cnblogs.com/itech/archive/2009/04/10/1433052.html 1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节点来进行连接.在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索 引节点号(Inode Index).在Linux中,多个文件名指向同

inode工作原理及软连接与硬链接

 inode工作原理及软连接,硬链接 inode: 在linux文件系统中,不管什么类型的文件,保存在磁盘分区中时,系统都会分配一个编号,叫做索引节点index node,简称inode inode里面存储了文件的很多参数: 文件类型,权限.UID,GID,属主,属组 链接数(指向这个文件名路径名称个数) 该文件的大小和不同的时间戳 指向磁盘上文件的数据指针 .... 在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)

软连接与硬链接区别

前言: 今天学习了文件系统,简单的接触到文件系统构成的原理.原来我们不管在linux和win上面删除某个文件只是删除一个链接而已.而linux把链接分为软链接和硬链接.接下来我们就从文件系统构成的基本原理出发来说明下linux软链接和硬链接的区别. 文件系统简述: linux的哲学就是一切皆文件.为了方便人们的使用,我们可以通过看文件名来区分不同的文件.但作为只识别0 1 的机器,让它识别一串文字肯定复杂的多.所以linux文件系统用一串数字来标识一个文件,而且这个数字在文件所处的分区中是唯一存