7.2.2 【Linux】实体链接与符号链接:ln

news2024/12/26 23:17:26

在Linux下面的链接文件中有两种,一种是类似Windows的捷径功能的文件,可以快速链接到目标文件(或目录);另一种是通过文件系统的inode链接来产生新文件名,而不是产生新文件。这种称为实体链接(hard link)

Hard Link (实体链接, 硬式链接或实际链接)

每个文件都会占用一个 inode ,文件内容由 inode 的记录来指向;

想要读取该文件,必须要经过目录记录的文件名来指向到正确的 inode 号码才能读取。

文件名只与目录有关,但是文件内容则与 inode 有关。hard link只是在某个目录下新增一笔文件名链接到某inode号码的关连记录而已。

举个例子来说,假设我系统有个 /root/crontab 他是 /etc/crontab 的实体链接,也就是说这两个文件名链接到同一个 inode , 自然这两个文件名的所有相关信息都会一模一样(除了文件名之外)。实际的情况可以如下所示:

你可以发现两个文件名都链接到 34474855 这个 inode 号码,所以您瞧瞧,是否文件的权限/属性完全一样呢? 因为这两个“文件名”其实是一模一样的“文件”啦!而且你也会发现第二个字段由原本的 1 变成 2 了! 那个字段称为“链接”,这个字段的意义为:“有多少个文件名链接到这个 inode 号码”的意思。 如果将读取到正确数据的方式画成示意图,就类似如下画面:

                       

                                       图7.2.1、实体链接的文件读取示意图

上图的意思是,你可以通过 1 或 2 的目录之 inode 指定的 block 找到两个不同的文件名,而不管使用哪个文件名均可以指到 real 那个 inode 去读取到最终数据。如果你将任何一个“文件名”删除,其实 inode 与 block都还是存在的! 此时你可以通过另一个“文件名”来读取到正确的文件数据。此外,不论你使用哪个“文件名”来编辑, 最终的结果都会写入到相同的 inode 与 block 中,因此均能进行数据的修改。

一般来说,使用 hard link 设置链接文件时,磁盘的空间与 inode 的数目都不会改变! 我们还是由图 7.2.1 来看,由图中可以知道, hard link 只是在某个目录下的 block 多写入一个关连数据而已,既不会增加 inode 也不会耗用 block 数量。

hard link 的制作中,其实还是可能会改变系统的 block 的,那就是当你新增这笔数据却刚好将目录的 block 填满时,就可能会新加一个 block 来记录文件名关连性,而导致磁盘空间的变化!不过,一般 hard link 所用掉的关连数据量很小,所以通常不会改变 inode 与磁盘空间的大小。

因为是在同一个filesystem上,所以hard link是有限制的:

不能跨 Filesystem;

不能 link 目录。

hard link 链接到目录时, 链接的数据需要连同被链接目录下面的所有数据都创建链接,举例来说,如果你要将 /etc 使用实体链接创建一个 /etc_hd 的目录时,那么在 /etc_hd 下面的所有文件名同时都与 /etc 下面的文件名要创建 hard link 的,而不是仅链接到 /etc_hd 与 /etc 而已。 并且,未来如果需要在 /etc_hd 下面创建新文件时,连带的, /etc 下面的数据又得要创建一次 hard link ,因此造成环境相当大的复杂度。 所以母亲hard link对于目录暂时还不支持。

Symbolic Link (符号链接,亦即是捷径)

Symbolic link 就是在创建一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的文件名!由于只是利用文件来做为指向的动作, 所以,当来源文件被删除之后,symbolic link 的文件会“开不了”, 会一直说“无法打开某文件!”。实际上就是找不到原始“文件名”。

由上表的结果我们可以知道两个文件指向不同的 inode 号码,当然就是两个独立的文件存在! 而且链接文件的重要内容就是他会写上目标文件的“文件名”, 你可以发现为什么上表中链接文件的大小为 12 Bytes 呢? 因为箭头(-->)右边的文件名“/etc/crontab”总共有 12 个英文,每个英文占用 1 个 Bytes ,所以文件大小就是 12Bytes了。

                    

                                      图7.2.2、符号链接的文件读取示意图

由 1 号 inode 读取到链接文件的内容仅有文件名,根据文件名链接到正确的目录去取得目标文件的 inode , 最终就能够读取到正确的数据了。你可以发现的是,如果目标文件(/etc/crontab)被删除了,那么整个环节就会无法继续进行下去, 所以就会发生无法通过链接文件读取的问题了。

Symbolic link 所创建的文件为一个独立的新的文件,所以会占用掉 inode 与 block。

举上面的例子来说,我的 /etc/crontab 与 /root/crontab 指向同一个文件,如果我删除了 /etc/crontab 这个文件,该删除的动作其实只是将 /etc 目录下关于 crontab 的关连数据拿掉而已, crontab 所在的 inode 与 block 其实都没有被变动。

不过由于 Hard Link 的限制太多了,包括无法做“目录”的 link , 所以在用途上面是比较受限的!反而是 Symbolic Link 的使用方面较广。

如果 ln 使用 -s 的参数时,就做成差不多是 Windows 下面的“捷径”的意思。当你修改 Linux下的 symbolic link 文件时,则更动的其实是“原始文件”, 所以不论你的这个原始文件被链接到哪里去,只要你修改了链接文件,原始文件就跟着变。以上面为例,由于你使用 -s 的参数创建一个名为 passwd-so 的文件,则你修改 passwd-so 时,其内容与 passwd 完全相同,并且,当你按下储存之后,被改变的将是 passwd 这个文件。

关于目录的 link 数量:

当我们创建一个新目录名称为 /tmp/testing 时,基本上会有三个东西,那就是:

/tmp/testing

/tmp/testing/.

/tmp/testing/..

而其中 /tmp/testing 与 /tmp/testing/. 其实是一样的,都代表该目录。而 /tmp/testing/.. 则代表 /tmp 这个目录,所以说,当我们创建一个新的目录时, “新的目录的 link 数为 2 ,而上层目录的 link 数则会增加 1 ”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/714627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【webrtc】nack学习笔记

本文大量参考了以下大神的文章,表示感谢:WebRTC 中的NackWebRTC之视频NackModuleWebRtc Video Receiver(三)-NACK丢包重传原理适用场景 Nack , 即丢包重传,在RTT小的情况下,是非常有效的错误恢复手段一般接收端会维护一个列表,用于记录收到的包的序列号,一般这个列表的长…

道路车辆 功能安全第1部分:术语

前言 本文件按照GB/T 1.1—2020《标准化工作导则 第1部分:标准化文件的结构和起草规则》的规定起草。 GB/T 34590-XXXX《道路车辆 功能安全》分为以下部分: —— 第1部分:术语; —— 第2部分:功能安全管理;…

【JUC进阶】09. 关于锁升级

目录 1、前言 2、回顾 2.1、对象头和内存布局 2.2、四大锁回顾 3、状态转换 3.1、锁状态 3.1.1、无锁状态 3.1.2、偏向锁状态 3.1.3、轻量级锁状态 3.1.4、重量级锁状态 3.2、状态转换条件 3.2.1、无锁 -> 偏向锁 3.2.2、偏向锁 -> 无锁 3.2.3、偏向锁 -&g…

SAP 查询字段所存在的表(增强定义)

T-CODE——axtshow DATA:lv_zzbranch TYPE ze_les_branch, ls_aet088 TYPE zlesaet088_bol_attr, lr_adminh TYPE REF TO cl_crm_bol_entity. lr_entity_relationv TYPE REF TO cl_crm_bol_entity. lr_entity_relationv lr_adminh->get_related_entity( …

15. 查询所有用户的连续登录两天及以上的日期区间

文章目录 题目需求思路一实现一题目来源 题目需求 从登录明细表(user_login_detail)中查询出,所有用户的连续登录两天及以上的日期区间,以登录时间(login_ts)为准。 期望结果如下: user_id (…

C#与C++编程环境对比:优点与应用场景详解

C#与C是两种常用的编程语言,它们在编程环境方面有一些相同点和不同点。首先,它们都可以用于开发跨平台的应用程序。其次,它们都具有强大的面向对象编程能力。但是,它们在语法、性能和应用领域等方面存在一些不同点 。 在语法方面…

编织魔法:探索Python字符串的奇幻世界

文章目录 前言什么是 python 字符串通过下标(索引)来访问字符串中的字符字符串的切片操作字符串常用的方法find() 查找子串index() 查找子串rfind() / rindex()count() 返回某个子串在字符串中出现的次数replace() 替换split() 按照指定字符分割字符串join() 用一个字符或者子串…

Debian 12 静态IP / 固定IP的设置

环境:Debian 12 amd64-lxde 局域网:PT925E电信光猫 手机APP 网络管家 一般用动态IP就可以了,但如果软件环境比较小众,问题就随之而来。起始问题:路由器无法解析设备名和IP,网络管家也不让设置固定IP&…

炫酷水球图:让数据可视化更生动有趣

水球图是一种独特而引人注目的数据可视化形式,通过模拟水球的形状和大小来展示数据的分布和比例关系。它以其生动的表现形式和直观的视觉效果,吸引了越来越多的关注和应用。在数据可视化领域,水球图为我们提供了一种直观、易于理解的方式来展…

实施供应商管理时常见的挑战及解决方案

供应商管理在现代商业环境中是很重要的,是企业在采购活动中的重要组成部分。采购组织必须确保其供应商得到妥善管理,以维持成功的工作关系。然而,管理好供应商是一项艰巨且具有挑战性的任务。 以下是采购组织常面临的挑战以及有效的解决方案。…

SNMP 计算机网络管理 实验1(二) 练习与使用Wireshark抓取SNMP数据包抓包之 任务三分析并验证TCP三次握手建立连接时三次握手工作过程

⬜⬜⬜ 🐰🟧🟨🟩🟦🟪(*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu &am…

您应该设置 Kubernetes CPU 限制吗?

管理Pod 和容器可用的资源是 Kubernetes 管理的最佳实践步骤。您需要防止 Pod 贪婪地消耗集群的 CPU 和内存。一组 Pod 的过度使用可能会导致资源争用,从而减慢相邻容器的速度并破坏主机的稳定性。 但 Kubernetes 资源管理经常被误解。提供了两种机制来控制分配:请求和限制。…

打jar包

pom文件指定打包的类型是jar&#xff0c;并指定启动主类 <packaging>jar</packaging><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>…

django要在books接口中不同数据的新类

要在books接口中添加一个处理不同数据的新类&#xff0c;并希望通过 Django 管理后台添加和显示这些数据&#xff0c;需要对三个文件进行修改 1.在 models.py 文件中添加新的模型类。 例如&#xff0c;假设您要添加一个名为 Category 的新模型&#xff1a; from django.db i…

Mac菜单栏图标管理软件 Bartender 4

Bartender 4是一款用于管理 macOS 系统状态栏图标的软件。它允许你自定义状态栏图标的显示和排序&#xff0c;帮助你更好地组织和管理你在状态栏中使用的应用程序和工具。 通过 Bartender 4&#xff0c;你可以隐藏或显示状态栏图标&#xff0c;以避免状态栏过多的图标拥挤在一起…

dbeaver远程数据库连接管理工具使用,数据库拒绝访问,用python远程访问postgre数据库

dbeaver软件 安装postgresql sudo apt-get update sudo apt-get install postgresql postgresql-client 修改postgresql密码,创建数据库 psql -U postgres ALTER USER postgres WITH PASSWORD new_password; CREATE DATABASE DB_NAME; \q 允许数据库被远程访问 点insert,加…

解决VS2013 C#无法联网搜索NuGet程序包的问题

1问题描述 2 结果办法 先打开程序包管理控制台 在程序包控制台输入后按回车&#xff1a;[Net.ServicePointManager]::SecurityProtocol[Net.ServicePointManager]::SecurityProtocol-bOR [Net.SecurityProtocolType]::Tls12 完成

7.1.6 Linux 文件系统的运行

所有的数据都得要载入到内存后CPU才能够对该数据进行处理。为了解决耗时等待磁盘的写入/读取上的问题&#xff0c;Linux使用的方式是通过一个称为非同步处理&#xff08;asynchronously&#xff09; 的方式。所谓的非同步处理是这样的&#xff1a; 当系统载入一个文件到内存后…

SAP ABAP结构复用的两种数据结构

一、定义结构中嵌套一层结构&#xff1a; 断点内表看结构是这样的&#xff1a; 二、定义结构中字段都放平层&#xff0c;注意那个include关键字的颜色&#xff0c;要变蓝色&#xff1a; 断点看内表结构&#xff0c;对了&#xff0c;就是我们想要的一层&#xff1a;

Oracle 查询下载补丁集

想必许多朋友在打开oracle支持网站后有些懵不知道如何查询下载数据库的补丁。 登入 登入Oracle support网站&#xff1a; https://support.oracle.com/portal/ 查询文档编号&#xff1a;2118136.2 选择需要的补丁编号&#xff1a; 选择对应的版本&#xff1a; 提前阅读…