一、link与unlink的定义

1、link

link是Linux文件系统目录管理的一个系统调用,创建一个链接,该链接只是创建一个目录项上文ext2的介绍中提到过目录项是<文件名,inode号>的组合,所以链接所建的目录项的文件名可以有一个新的文件名,但是inode号还是被链接的的那个文件的inode号。但同时实现了文件的共享。链接的强大功能赋予了 Linux 文件系统灵活性,因为一切皆是文件。

举例如下图,查看lib64下的uuid库文件,libuuid.so.1为libuuid.so.1.3.0的链接,两个文件都是指向libuuid.so.1.3.0的inode号,我们在版本升级和兼容性方面经常这样使用。

2、unlink

unlink系统调用是删除其中一个目录项,那么如果另一个目录项依然存在,相关的文件也依然存在。如果所有的目录项都被删除,Linux发现没有任何目录项指向该文件(在inode中有一个域,记录指向该文件的目录项数),那么该文件从磁盘上被删除

二、硬链接与软链接

Linux 文件系统中有两种链接link:硬链接(hard link)和软链接(soft link,或者符号链接symbolic link)。

shell命令,软链接:ln –s 源文件 目标文件;硬链接: ln 源文件 目标文件,没有参数-s。

1、硬链接

我们前面讨论的方式都是硬链接。

硬链接的缺点

(1)目录和inode是属于同一个文件系统,即同一个分区(原理请查阅上一篇),因此在一个文件系统中的目录不能指向另一个文件系统当中的inode。所以硬链接不可以跨越文件系统。

(2)一个文件只能有一个所有者和一组权限,如果是另外的用户因为权限不够,将无法删除文件

2、软链接

基于硬链接的限制,提出了软连接,与硬链接不同的是,它会创建一个文件,只是文件的数据是另一个文件的路径名。网上有人说软连接是引用硬链接,这个说法并不准确,只能说是其中的方式之一,因为路径名可以是任意一个文件,甚至还可以是一个不存在的文件名。

这种连接可以跨越不同的文件系统。在Windows系统中,它被称为快捷方式(shortcut)。而在苹果的Mac OS中,它被称为别名(alias)。

软链接的特点

(1)软链接有自己的文件属性及权限等;

(2)可对不存在的文件或目录创建软链接;

(3)软链接可交叉文件系统;

(4)软链接可对文件或目录创建;

(5)创建软链接时,链接计数 i_nlink 不会增加

软链接的缺点

当一个文件被删除时或者被改了名字,相应的链接就会变得无效(即死链接dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

2020.07.31补充:

其实软链接和硬链接的区别就在于inode号的不一样

首先,每个文件都有自己的目录项,而目录项是<文件名,inode号>的组合。

硬链接只是文件名不一样而已,inode号没变

软链接呢,两个(文件名,inode号)都变了,inode对应的数据块的内容是一个绝对路径而已。所以因为这个可以跨文件系统,也可以和真实的文件没有半毛钱关系

总之,只要抓住这一点,目录项的inode号不一样,其他都迎刃而解了。

好了,清楚了吧,到这里我也是真正搞清楚了两种的区别,启发来自《Linux系统编程》 一书中!

参考资料:

《操作系统设计与实现》第三版 上册。

https://www.cnblogs.com/invisible2/p/6992420.html

存储系列之 共享文件:链接link的更多相关文章

  1. 存储系列之 Linux ext2 概述

    引言:学习经典永不过时. 我们之前介绍过存储介质主要是磁盘,先介绍过物理的,后又介绍了虚拟的.保存在磁盘上的信息一般采用文件(file)为单位,磁盘上的文件必须是持久的,同时文件是通过操作系统管理的, ...

  2. 【代码笔记】Web-CSS-CSS 链接(link)

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  3. 存储系列之 从ext2到ext3、ext4 的变化与区别

    引言:ext3 和 ext4 对 ext2 进行了增强,但是其核心设计并没有发生变化.所以建议先查看上上篇的<存储系列之 Linux ext2 概述 >,有了ext2的基础,看这篇就是so ...

  4. Oracle11g R2学习系列 之六数据库链接,快照及序列

    Create public database link link_name Connect to user identified by password using 'DBName' 为'DBName ...

  5. css链接link

    链接可以使用任何css属性,包括字体.颜色.背景等等. 链接有四个状态,可在四个状态时设置不同的属性 a:link - 正常,未访问过的链接 a:visited - 用户已访问过的链接 a:hover ...

  6. 存储系列之 LUN 和 LVM

    一.LUN 1.LUN的由来 上一篇文章已经介绍了RAID技术的原理,那么RAID的实现呢?有两种方式,RAID软件和RAID硬件.但是因软件RAID占用主机CPU和主机内存,而且RAID功能不易实现 ...

  7. 存储系列之 硬盘接口与SCSI总线协议

    本文主要介绍硬盘的接口.总线和协议,SSD与SATA硬盘一般是兼容的,NVmeSSD除外. 一.磁盘控制器 上一章介绍了存储系统的主要介质硬盘,而硬盘的读写通过磁头臂,磁头臂是由磁盘驱动器来控制的.磁 ...

  8. 存储系列之 VFS虚拟文件系统简介

    引言:文件系统发展到一定阶段,开始进一步抽象和分层.   前面我们介绍了ext系列文件系统和xfs文件系统,这些是Linux使用最多的文件系统,也是很多发布版本默认选择的文件系统.而事实上,Linux ...

  9. 存储系列之 XFS文件系统简介

    引言:磁盘容量越来越大,文件系统管理的文件也是越来越大.越来越多,如何破解?唯有快!于是动态分配.B+树开始登上舞台.还记得当年MySQL的索引结构吗,好的作品所见略同. 一.XFS为什么替换Ext4 ...

随机推荐

  1. wordpress学习笔记

    版本:4.9.8 我用wordpress的初衷是借用它的后台系统,前端用自己的网页显示存在wordpress数据库里的文章. wordpress本质上是个框架,技术栈:web-php-mysql. 初 ...

  2. class初探

    我们说类的时候,先回忆一下es5的构造函数 function myobj(x,y){ this.x= x; this.y =y; } myobj.prototype.add = function(){ ...

  3. 题解 UVA1608 【不无聊的序列 Non-boring sequences】

    思路: 算法很显然: 一.在区间\([l,r]\)找到一个只出现一次的元素P(如果不存在,那么序列\(boring\)) 二.递归处理区间\([l,p-1]\)和区间\([p+1,r]\). 其关键在 ...

  4. 搞事情?Spring Boot今天一口气发布三个版本

    学无止境?本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BAT的乌托邦]逐个击 ...

  5. Redis的各种数据类型到底能玩出什么花儿?

    https://mp.weixin.qq.com/s/ZSQ9vCkWXYuLrKS0UJ4RIg 两个星期终于肝了出来,Redis相关问题脑图,终于整理完了!!! 文末无套路分享~~附获取方式 Re ...

  6. PHP入门之流程控制

    前言 上一篇文章对PHP的一些类型和运算符进行了简单的讲解.PHP入门之类型与运算符 这篇简单讲解一下流程控制.结尾有实例,实例内容是用switch分支和for循环分别做一个计算器和金字塔. 分支控制 ...

  7. hcharts生成图表

    借助hcharts插件,可以很方便地在模板页面中生成图表.类似插件还有echarts. 补充...

  8. 没有学历如何从事Java开发?

    学历成了当今社会一个衡量一个人能力的标准,未来只会越来越深入,也有的人说不要总是把学历挂嘴边,学历并不能代表能力,确实学历不能代表能力,但是学历是能代表一个的人学习深度,也是在职场上必备的一个敲门砖. ...

  9. PHP is_uploaded_file() 函数

    定义和用法 is_uploaded_file() 函数检查指定的文件是否是通过 HTTP POST 上传的. 如果文件是通过 HTTP POST 上传的,该函数返回 TRUE. 语法 is_uploa ...

  10. PHP imagecolorat - 取得某像素的颜色索引值

    imagecolorat — 取得某像素的颜色索引值.高佣联盟 www.cgewang.com 语法 int imagecolorat ( resource $image , int $x , int ...