Linux链接文件——软连接和硬链接

摘要:本文主要介绍了Linux系统中的链接文件。

文件系统

在Linux系统中,将文件分为两个部分:用户数据和元数据。

元数据(inode)

元数据即文件的索引节点(inode),用来记录文件的权限(r、w、x)、文件的所有者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件数据的block编号。

inode的默认大小为128Byte,新的ext4和xfs可以设置为256Byte。

在Linux中,元数据中的inode号,即索引节点号,才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过inode号寻找正确的文件数据块。

用户数据(block)

用户数据即文件数据块(block),记录了文件的真实内容,包括文件名,文件名会被记录在上级目录的block中。也就是说,目录的block中记录的是这个目录下所有一级子文件和子目录的文件名及inode的对应,而文件的block中记录的才是文件实际的数据。

block的大小可以是1KB、2KB、4KB,默认为4KB。block用于实际的数据存储,如果一个block放不下数据,则可以占用多个block,最后一个block可能不会占满,但也不能再放入其他文件的数据。多个block有可能是连续的,也有可能是分散的。

硬链接(Hard Link)

含义

硬链接可以视为普通的目录,但是所有的硬链接共用同一个inode号,只是文件名不同。

查找文件的步骤

当我们查找一个硬链接文件,比如/root/test-hard时,要经过以下步骤:

1)首先找到根目录的inode(根目录的inode是系统已知的,inode号是2),然后判断用户是否有权限访问根目录的block。

2)如果有权限,则可以在根目录的block中访问到/root的文件名及对应的inode号。

3)通过/root/目录的inode号,可以查找到/root/目录的inode信息,接着判断用户是否有权限访问/root/目录的block。

4)如果有权限,则可以从/root/目录的block中读取到test-hard文件的文件名及对应的inode号。

5)通过test-hard文件的inode号,就可以找到test-hard文件的inode信息,接着判断用户是否有权限访问test-hard文件的block。

6)如果有权限,则可以读取block中的数据,这样就完成了/root/test-hard文件的读取与访问。

硬链接的特点

1)不论是修改源文件(test文件),还是修改硬链接文件(test-hard文件),另一个文件中的数据都会发生改变。

2)不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件都可以被访问。

3)硬链接不会建立新的inode信息,也不会更改inode的总数。

4)硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode号是重新计算的。

5)硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的Linux来讲过于复杂。

6)硬链接不会占用inode和block。

软链接(Symbolic Link)

含义

软链接有着自己的inode号以及用户数据块。只不过用户数据块中存放的内容是另一文件的路径名的指向。

查找文件的步骤

当我们查找一个软链接文件,比如/root/test-soft时,要经过以下步骤:

1)首先找到根目录的inode索引信息,然后判断用户是否有权限访问根目录的block。

2)如果有权限访问根目录的block,就会在block中查找到/root/目录的inode号。

3)接着访问/root/目录的inode信息,判断用户是否有权限访问/root/目录的block。

4)如果有权限,就会在block中读取到软链接文件test-soft的inode号。因为软链接文件会真正建立自己的inode索引和block,所以软链接文件和源文件的inode号是不一样的。

5)通过软链接文件的inode号,找到了test-soft文件inode信息,判断用户是否有权限访问block。

6)如果有权限,就会发现test-soft文件的block中没有实际数据,仅有源文件test的inode号。

7)接着通过源文件的inode号,访问到源文件test的inode信息,判断用户是否有权限访问block。

8)如果有权限,就会在test文件的block中读取到真正的数据,从而完成数据访问。

软连接的特点

1)不论是修改源文件(test),还是修改硬链接文件(test-soft),另一个文件中的数据都会发生改变。

2)删除软链接文件,源文件不受影响。而删除原文件,软链接文件将找不到实际的数据,从而显示文件不存在。

3)软链接会新建自己的inode信息和block,只是在block中不存储实际文件数据,而存储的是源文件的文件名及inode号。

4)软链接可以链接目录。

5)软链接可以跨分区。

6)软链接会占用inode和block。

Linux链接文件——软连接和硬链接的更多相关文章

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

    Linux 文件系统把硬盘分为三个部分:超级块.inode 列表.数据区 inode 指示:该文件的数据存放在数据区的哪些块内.因为这个“映射”关系不能变更,因此,inode 相当于代表着文件本身.( ...

  2. Linux下的软连接和硬链接

    由于教学上的原因,需要下载Android源码,后来使用repo时,系统提示需要python2,我的系统中是两个都有的,但是默认是python3,无法下载,通过创建了个链接搞定,下面就来说说linux下 ...

  3. Linux命令 – ln 软连接与硬链接区别介绍

    ln命令可以生成软链接和硬链接,也可叫做符号链接和实体链接. 有兴趣深入理解的可以查阅相关文档,一般的读者只需记住以下几点即可: 不管是软链接还是硬链接都不会额外增加磁盘空间(虽然实际情况可能会多占用 ...

  4. linux中软连接和硬链接的区别

    linux中创建软连接和硬链接的方法: 软连接: ln -s oldfile slink 硬连接: ln oldfile hlink linux中创建软连接和硬链接的区别:        原理上,硬链 ...

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

    前几天在linux系统下安装mongoDB,然后运行脚本导入数据的时候遇到了链接库查询不到的情况,如图 1所示.当时是通过创建软连接的方式解决的这个问题.虽然,通过网上的教程解决了这个问题,但是对于软 ...

  6. Linux学习笔记之详解linux软连接和硬链接

    0x00 链接文件 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [软连接] 另外一种连接称之为符 ...

  7. linux 软连接和硬链接

    硬链接 ln sourceFile targetFile 硬链接只能给文件创建,不能为目录建立硬链接,硬链接不能跨分区创建,  硬链接会增加inode连接数, 硬链接的文件删除不影响其他文件 课外: ...

  8. Linux的软连接、硬链接和find命令

    软链接和硬链接 序号 命令 作用 01 ln –s 被链接的源文件 链接文件 建立文件的软连接,用通俗的是方式类似于Windows下的快捷链接 源文件连接要是有绝对路径,不能使用相对路径,这样可以方便 ...

  9. linux文件软链接与硬链接

    1.命令格式: ln [参数][源文件或目录][目标文件或目录] 软链接只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间. 2.命令功能: Linux文件系统中,有所谓的链接(link),我们 ...

随机推荐

  1. JavaWeb之servlet(1)

    servlet servlet:就是一个Java程序,运行在web服务器中,用于接收和响应客户端的http请求.更多是配合动态资源使用.当然静态资源也要使用servlet,只不过Tomcat里面已经定 ...

  2. CSS @charset规则

    定义和用法 @charset规则指定样式表中使用的字符编码.@charset规则必须在样式表中的第一元素,而不是由任何字符之后进行.在外部样式文件中使用.如果@charset定义了多个规则,则仅使用第 ...

  3. 高强度学习训练第五天总结:JAVA对象+GC

    第五天了.. 理清了Java对象的创建过程,分配内存,线程安全性,对象头和对象的访问定位 理清了JVM GC的发展历史,算法,例如: 可达性分析 引用计数法 标记-清楚法 复制算法 标记-整理算法 分 ...

  4. 为Dynamics 365 USD设置使用Chrome进程来驻留Web应用程序

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  5. ARP攻击 winpcap

    ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗.解决办法详见百科 #define ETHER_ADDR_LEN 6 typedef struct { u_char DestMAC[ETHER ...

  6. .Net Core使用Swagger来对接口文档化

    参考文档来源:https://www.cnblogs.com/yilezhu/p/9241261.html 官方地址 https://swagger.io/ 代码即接口文档,接口文档即代码 使用.ne ...

  7. 基于Spark.NET和ML.NET Automated ML (自动学习)进行餐厅等级的检查预测

    简介 Apache Spark是一个开源.分布式.通用的分析引擎.多年来,它一直是大数据生态系统中对大型数据集进行批量和实时处理的主要工具.尽管对该平台的本地支持仅限于JVM语言集,但其他通常用于数据 ...

  8. python详解json模块

    我们在做工作中经常会使用到json模块,今天就简单介绍下json模块 什么是json JSON ,全称为JavaScript Object Notation, 也就是JavaScript 对象标记,它 ...

  9. itest(爱测试) 3.3.7 发布,开源BUG 跟踪管理& 敏捷测试管理软件

    v3.3.7 下载地址 :itest下载 itest 简介:查看简介 V3.3.7 增加了 5个功能增强,和8个BUG修复 ,详情如下所述. 5个功能增强 :(1)任务看板中,除了显示任务外,增加测试 ...

  10. 一些有价值bug产生的思考

    1.异步处理时防止重复点击的逻辑校验 场景 打款请求时,进入异步处理的队列,生成一个任务号,存在如数据库,且状态为未完成.此时,如果并发操作,如重复点击或者重复调用接口,则发出的两条请求可能被分配到不 ...