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

图 1 缺少文件的提示
Linux下的连接文件分为两种,一种是类似于windows的快捷方式的软连接,另一种是就是通常所说的硬链接。这两种链接方式都是为了实现文件的共享而存在的。下面根据自己的理解做一个介绍,如果有不对的地方,欢迎大家批评指正。
在介绍硬链接和软连接之前,首先说明一下linux系统的对于文件的设置。文件都是有文件名和文件中存储的数据组成的,这在linux上被分成两个部分:用户数据部分和元数据部分。用户数据就是文件数据块,记录着文件中真实的内容;元数据包含的是文件的附加属性,如,文件的大小、创建时间、所有者信息、所属的组等。在Linux中用户数据的内容是通过元数据中的inode标识的,也就是说inode号才是文件的唯一标识,而不是文件名。文件名只是为了使用者的记忆和使用的方便,用户可以通过文件名得到对应的inode号码,系统或者程序通过inode号寻找正确的文件数据块,如图2所示。

图 2 文件系统设置
一、硬链接
在硬链接下一个inode一般对应多个而文件名,可以通过link或者是ln创建,其本质是在某个目录文件下创建一个文件名链接到某个inode号码的关联记录而已,如图3所示。其有以下特点:
- 硬链接具有相同的inode和data,如图4;
- 只能对已经存在的文件创立硬链接,而不能对不存在的文件创建硬链接,如图5;
- 只能对文件创建硬链接,不能对目录创建硬链接,如图6;
- 由于linux系统将不同的文件分类存放在不同的目录系统下,因此不能对不同的文件文件系统交叉建立硬链接,如图7;
- 由于硬链接是不同的文件引用相同的inode和data,因此删除一个硬链接不会导致inode和data的消失;只有当所有的链接到这个inode的链接都被删除的时候,最终的data才会被删除;也就是说不同的硬链接彼此之间不相互影响;这种引用的方式类似于智能指针的应用;

图 3 硬链接

图 4 硬链接相同的inode

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

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

图 7 不同设备之间创建硬链接
二、软连接
和硬连接不同,软连接一般存放的是另一文件的目录名的指向(即另一个文件的路径),而不是具有的inode值。因此软连接有着自己的inode的data,这个inod的值是可以和要指向的文件具有的inode值具有相同的值的(如果软连接和所指向的文件具有不同的文件系统),如图8所示。基于上述对于软链接的定义,可以得到软链接的定义如下:
- 软链接具有自己的元数据和用户数据;
- 可以对不存在的文件创建软链接,甚至可以对文件夹创建软连接;如果对不存在的文件创建软链接,则最终该软链接称为死链接,如果后来创建了该软链接指向的文件,那么该软链接将不再是死链接,如图9所示;
- 因为软链接是中的用户数据是另一个文件的路径,因此如果该被指向的文件被删除,那么该链接失效,成为死链接,如下图用红色表示;
- 软链接可以交叉文件系统创建,因此软链接的inode和指向的文件的inode可以具有相同的值,可以通过find / -inum xxxx找出具有相同的inod值得文件;

图 8 软连接

图 9 软连接测试用例
总结:
链接机制可以减少不必要文件的重复存在,减轻磁盘的压力。
linux系统下的软连接与硬链接的更多相关文章
- Linux下的软连接和硬链接
由于教学上的原因,需要下载Android源码,后来使用repo时,系统提示需要python2,我的系统中是两个都有的,但是默认是python3,无法下载,通过创建了个链接搞定,下面就来说说linux下 ...
- 认识Linux系统中的inode,硬链接和软链接
在学习和创建软链接遇到了一点问题,总结一下: 在当前文件夹下面建立了两个临时文件夹tempdir1和tempdir2,然后在tempdir2里面创建了一个hello文件,然后用指令ln -s temp ...
- 【linux命令】软连接和硬链接的区别(ln命令)
Linux 文件系统把硬盘分为三个部分:超级块.inode 列表.数据区 inode 指示:该文件的数据存放在数据区的哪些块内.因为这个“映射”关系不能变更,因此,inode 相当于代表着文件本身.( ...
- Linux链接文件——软连接和硬链接
Linux链接文件——软连接和硬链接 摘要:本文主要介绍了Linux系统中的链接文件. 文件系统 在Linux系统中,将文件分为两个部分:用户数据和元数据. 元数据(inode) 元数据即文件的索引节 ...
- linux中软连接和硬链接的区别
linux中创建软连接和硬链接的方法: 软连接: ln -s oldfile slink 硬连接: ln oldfile hlink linux中创建软连接和硬链接的区别: 原理上,硬链 ...
- Linux的软连接、硬链接和find命令
软链接和硬链接 序号 命令 作用 01 ln –s 被链接的源文件 链接文件 建立文件的软连接,用通俗的是方式类似于Windows下的快捷链接 源文件连接要是有绝对路径,不能使用相对路径,这样可以方便 ...
- 深入理解linux系统下proc文件系统内容
深入理解linux系统下proc文件系统内容 内容摘要:Linux系统上的/proc目录是一种文件系统,即proc文件系统. Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它 ...
- Centos 软连接和硬链接
1.软链接: 建立软链接:ln -s /usr/local/node-v4.2.6-linux-x86/bin/node /usr/local/bin/node 解释:将/usr/local/node ...
- Linux系统下Apache2.4.17的安装过程
Linux系统下安装Apache Server2.4.17.还是先声明一下,Linux命令我不进行讲解,因为我不是讲Linux命令的.有需要注意的地方,我会上图,没什么值得的注意的地方,我就不上图了. ...
随机推荐
- 使用jQuery+PHP+Mysql实现抽奖程序
抽奖程序在实际生活中广泛运用,由于应用场景不同抽奖的方式也是多种多样的.本文将采用实例讲解如何利用jQuery+PHP+Mysql实现类似电视中常见的一个简单的抽奖程序. 查看演示 本例中的抽奖程序要 ...
- Tuxedo 超时时间控制(转贴)
以下是转贴: TUXEDO超时控制全功略 摘要: 本<功略>集中了TUXEDO应用中,可能涉及到的所有时间参数,并分别对其进行详细描述,不但对其出处.取值等基本属性进行查证,而且,通过分析 ...
- Javascript中变量提升的问题
一.函数声明变量提升 函数声明具有变量提升的问题,所以在函数被声明之前就可以访问. //else中的语句相当于将if中的function重写,因此无论flag为何值,返回的方法始终为重写后的方法. / ...
- Linux:加载硬盘
在腾讯云购买了一个云服务器,送了20G的系统盘,购买了一个50G的数据盘. 第一次进入系统后,通过镜像中自带的脚本,挂载数据盘. 后来重装了系统,进入系统后查看硬盘信息.
- linux下对进程按照内存使用情况进行排序
linux下对进程按照内存使用情况进行排序的命令为:ps aux --sort -rss 详细解说参见 http://alvinalexander.com/linux/unix-linux-proce ...
- dingding post POST请求
POST请求请在HTTP Header中设置 Content-Type:application/json,否则接口调用失败 获取AccessToken Https请求方式: GET https://o ...
- WKWebview 拼接tableview,获取web内容高度
- (void)addWKWebView { _webView = [[WKWebView alloc] initWithFrame:CGRectMake(, , SCREEN_WIDTH, 0.1) ...
- MyEclipse中折叠和展开所有代码
我们有些时候一个文件中会后很多函数,需要对其进行折叠或展开. Ctrl+Shift+/可以快速折叠所有代码 Ctrl+Shift+*可以快速展开所有代码
- string相关总结
一 <string> 1 string类常见成员函数 (1)属性相关 s.empty() s为空时返回true,否则返回false s.size() 返回s中字符的个数,不包 ...
- shell条件判断中-a至-z的含义
[ -a file ] ------- 如果file存在,返回值为真. [ -b file ] ------- 如果file存在且为块特殊文件,返回值为真. [ -c file ] ------- 如 ...