轻松理解操作系统 - Linux 软硬链接是什么?
Linux 由于其开源、比较稳定等特点统治了服务端领域。也因此,学习Linux 系统相关知识在后端开发等岗位中变得越来越重要,甚至可以说是必不可少的。
因为它的广泛应用,所以在程序员的日常工作和面试中,它都是经常出现的。它的开源特性也让它适合于让对于计算机和操作系统底层原理感兴趣的人进行学习。
开始今天的正文
一、如何让我们更方便访问一个文件或程序?
首先回想下如果直接访问的话需要使用 cd 指令打开相应的目录,然后使用 vi 或 vim 访问文本文件,使用 ./程序名 访问二进制程序。
cd /your_load
vim ./your_txt
./your_binary
显然,对于一些经常要访问的文件,我们可以像类似于在 Windows 系统中经常采用的方法一样,直接创建一个桌面快捷方式。这样访问多方便!
二、Linux 中的“快捷方式” - 软链接(符号链接)文件
由于 Linux 系统的 “一切皆文件” 的设计理念,软链接文件本身就是一个独立的文件。只不过它这个文件很特殊,它是指向另一个文件或目录的引用。因此,它有一个独立的 inode 号。
那它是如何找到相应的目录或文件呢?答案是:软链接包含了目标文件的路径。
软链接还有一些很有意思的特性与 Windows 的快捷方式进行对比:
1、如果原始文件被删除,软链接就会变成一个“死链接”,指向一个不存在的文件。
2、软链接可以指向文件或目录。
3、但是 Linux 的软链接可以跨越不同的文件系统,而 Windows 的快捷方式则不能。
创建方法:
ln -s /path/to/original/file /path/to/symlink
/path/to/symlink 为软链接路径
/path/to/original/file 为硬链接路径
三、就像是 C语言 的指针、C++的智能指针 - 硬链接
硬链接就像是 C语言 的指针,它通过不同的文件名指向同一个文件。
在Linux文件系统中,每个文件都有一个 inode 号来唯一标识,硬链接就是不同的文件名指向同一个 inode。因此,它没有一个独立的 inode 号。
为什么说它的特点类似于 C++的智能指针,因为它有一个重要的特点就是:
无论创建多少个硬链接,它们指向的都是相同的文件数据。删除某一个硬链接文件,并不会影响其他硬链接和原始文件的数据。并且每创建一个硬链接,它的引用计数 +1
当然这个特点只是像 C语言 的指针啊?它能被比作 C++的智能指针肯定不止有这个特点:
试想一下,假如指向一个文件的所有硬链接都被删除了会发生什么?
答案就是所有硬链接都删除也就是引用计数为 0 的时候该文件本身也会删除掉!这像不像 C++的 share_ptr 等指针的行为模式。
相比于软链接,它还有其他以下特点:
1、硬链接只能在同一个文件系统内创建。
2、硬链接只能用于文件,不能用于目录(为了避免出现循环引用的问题)。
如何创建它呢?
ln /path/to/original/file /path/to/hardlink
/path/to/hardlink
是硬链接文件的路径
/path/to/original/file
是原始文件的路径
四、总结:软链接像能跨越文件系统的快捷方式,硬链接像 C++的智能指针
1. 指向对象与方式
-
硬链接:直接指向文件的数据块,是文件的另一个名字。多个硬链接共享相同的inode号和数据块,因此它们是等价的,删除一个并不会影响其他硬链接的访问。
-
软链接:指向的是另一个文件或目录的路径,它本身是一个独立的文件,包含了目标文件或目录的引用。软链接可以指向不同的文件系统,甚至可以是远程文件系统的文件。
2. 独立性
-
硬链接:不是独立的文件,它们只是文件数据块的多个引用。因此,修改任何一个硬链接都会影响到其他所有硬链接,因为它们共享相同的数据。
-
软链接:是独立的文件,它只存储了目标文件的路径信息。如果目标文件被删除或移动,软链接可能会变成“死链接”,即指向一个不存在的文件或路径。
3. 使用限制
-
硬链接:只能在同一个文件系统内创建,不能跨文件系统。此外,硬链接不能用于目录,因为这会引入复杂的循环引用问题。
-
软链接:可以跨文件系统创建,并且可以指向文件或目录。这使得软链接在创建快捷方式或引用不同文件系统上的文件时非常有用。
4. 文件类型与显示
-
硬链接:在文件系统中,硬链接的文件类型与目标文件相同,它们共享相同的inode号。使用
ls -l
命令查看时,硬链接的链接数(即引用计数)会显示在输出中。 -
软链接:文件类型为
l
(表示链接),并且会显示指向的目标文件或目录的路径。使用ls -l
命令可以清晰地看到软链接指向的目标。
5. 性能与占用
-
硬链接:由于直接指向数据块,硬链接在访问时通常比软链接更快,因为它们不需要额外的路径解析步骤。此外,硬链接不占用额外的磁盘空间(除了文件系统的元数据),因为它们只是数据块的引用。
-
软链接:在访问时,系统需要解析软链接指向的路径,这可能会引入一些额外的开销。此外,软链接本身会占用磁盘空间来存储目标路径信息。
相关文章:

轻松理解操作系统 - Linux 软硬链接是什么?
Linux 由于其开源、比较稳定等特点统治了服务端领域。也因此,学习Linux 系统相关知识在后端开发等岗位中变得越来越重要,甚至可以说是必不可少的。 因为它的广泛应用,所以在程序员的日常工作和面试中,它都是经常出现的。它的开源特…...

Redis - 数据库管理
Redis 提供了⼏个⾯向Redis数据库的操作,分别是dbsize、select、flushdb、flushall命令, 本机将通过具体的使⽤常⻅介绍这些命令。 一、切换数据库 select dbIndex 许多关系型数据库,例如MySQL⽀持在⼀个实例下有多个数据库存在的&#…...

VBA02-初识宏——EXCEL录像机
一、录制宏 录制宏其实就是将一系列操作结果录制下来,并命名存储。这些操作可以是关于数据的处理、格式的设置、函数的运用等,相当于在编程语言(如VB)中定义的一个子程序。 在录制宏时,软件会记录用户执行的一系列操…...

Unity网络开发基础(part5.网络协议)
目录 前言 网络协议概述 OSI模型 OSI模型的规则 第一部分 物理层 数据链路层 网络层 传输层 第二部分 编辑 应用层 表示层 会话层 每层的职能 TCP/IP协议 TCP/IP协议的规则 TCP/IP协议每层的职能 TCP/IP协议中的重要协议 TCP协议 三次握手 四次挥手 U…...

forEach可以遍历不可枚举属性吗
首先第一个问题,forEach能不能遍历对象的属性 const obj { a: 1, b: 2, c: 3 }; obj.forEach((item) > console.log(item))运行这段代码我们发现发生了一个错误 这说明forEach是不可以遍历对象的属性的 在js中,forEach 方法用于遍历数组或类数组对象(如 NodeL…...

Docsify文档编辑器:Windows系统下个人博客的快速搭建与发布公网可访问
文章目录 前言1. 本地部署Docsify2. 使用Docsify搭建个人博客3. 安装Cpolar内网穿透工具4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows环境本地部署 Docsify 这款以 markdown 为中心的文档编辑器,并即时生成您的文档博客网站,结合…...

索引基础篇
前言 通过本篇博客的学习,我希望大家可以了解到 “索引” 是为了提高数据的查询效率。 索引的介绍 索引是为了提高查询数据效率的数据结构 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着…...

多进程与多线程分不清?
多进程对应的是fork函数,而多线程对应的是thread函数。 fork 与 thread 的区别: fork开辟新进程,使用了新的资源空间,父子进程对变量的修改互不影响。由于每个进程都是独立的个体,进程间无法直接进行通信。 thread开辟…...

【零基础学习CAPL】——XML工程创建与使用详解
🙋♂️【零基础学习CAPL】系列💁♂️点击跳转 ——————————————————————————————————–—— 从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者,时光不负有心人。 文章目录 1.概述2.XML和CAPL/.NET之间的区别…...

市场营销应该怎么学?
别一听市场营销就觉得是那些大公司玩的高深莫测的游戏,其实它就在你我身边,无处不在,影响着咱们生活的方方面面。 记得去年双十一,你是不是被各种优惠券、预售、秒杀整得头晕眼花,最后还是忍不住剁了手? …...

作为一个前端开发者 以什么步骤学习后端技术
作为一个前端开发者,学习后端技术可以按照以下步骤进行: 明确学习目标 确定方向:明确自己想学习的后端技术栈(如Node.js、Python、Java等)。 设定目标:短期目标(如完成一个简单的后端项目&…...

大数据新视界 -- 大数据大厂之经典案例解析:广告公司 Impala 优化的成功之道(下)(10/30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

yolov8涨点系列之Concat模块改进
文章目录 Concat模块修改步骤(1) BiFPN_Concat3模块编辑(2)在__init_.pyconv.py中声明(3)在task.py中声明yolov8引入BiFPN_Concat3模块yolov8.yamlyolov8.yaml引入C2f_up模块 在YOLOv8中, concat模块主要用于将多个特征图连接在一起。其具体…...

JavaAPI(1)
Java的API(1) 一、Math的API 是一个帮助我们进行数学计算的工具类私有化构造方法,所有的方法都是静态的(可以直接通过类名.调用) 平方根:Math.sqrt()立方根:Math.cbrt() 示例: p…...

【大模型】通过Crew AI 公司的崛起之路学习 AI Agents 的用法
AI 技术的迅猛发展正以前所未有的速度重塑商业格局,而 AI Agents,作为新一代的智能自动化工具,正逐步成为创新型公司的核心力量。在本文中,我们将探讨如何利用 AI Agents 构建一家 AI 驱动的公司,并详细了解 Crew AI 创…...

Python接口自动化测试实战
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 接口自动化测试是指通过编写程序来模拟用户的行为,对接口进行自动化测试。Python是一种流行的编程语言,它在接口自动化测试中得到了广泛…...

前端Web用户 token 持久化
用户 token 持久化 业务背景:Token的有效期会持续一段时间,在这段时间内没有必要重复请求token,但是pinia本身是基于内存的管理方式,刷新浏览器Token会丢失,为了避免丢失需要配置持久化进行缓存 基础思路:…...

【测试工具篇一】全网最强保姆级教程抓包工具Fiddler(2)
本文接上篇Fiddler介绍,开始讲fiddler如何使用之前,给大家讲讲http以及web方面的小知识,方便大家后面更好得理解fiddler使用。 目录 一、软件体系结构---B/S与C/S架构 B/S架构 C/S架构 二、HTTP基础知识 什么是http请求和响应? http协…...

ONLYOFFICE 文档8.2更新评测:PDF 协作编辑、性能优化及更多新功能体验
文章目录 🍀引言🍀ONLYOFFICE 产品简介🍀功能与特点🍀体验与测评ONLYOFFICE 8.2🍀邀请用户使用🍀 ONLYOFFICE 项目介绍🍀总结 🍀引言 在日常办公软件的选择中,WPS 和微软…...

【WebRTC】视频采集模块中各个类的简单分析
目录 1.视频采集模块中的类1.1 视频采集基础模块(VideoCaptureModule)1.2 视频采集工厂类(VideoCaptureFactory)1.3 设备信息的实现(DeviceInfoImpl)1.4 视频采集的实现(VideoCaptureImpl&#…...

【大模型系列】Grounded-VideoLLM(2024.10)
Paper:https://arxiv.org/pdf/2410.03290Github:https://github.com/WHB139426/Grounded-Video-LLMHuggingface:https://huggingface.co/WHB139426/Grounded-Video-LLMAuthor:Haibo Wang et al. 加州大学,复旦 动机&a…...

EV录屏好用吗?盘点2024年10款专业好用的录屏软件。
EV录屏的方式有很多种,它设置了很多模式,并且录制高清,可以免费使用。但是现在很多的录屏工具都有着与这个软件相似的功能,在这里我可以给大家列举一些。 1、福昕电脑录屏 这个软件为用户提供了多种录制模式,让视频录…...

Pandas | 理性判断数据是否存在缺失值的一种方法
理性判断 一般思路进一步思考df[B].explode() 一般思路 tcc.info()上述信息info显示没有缺失值 但是真实的情况还是要根据业务实际分析tcc.isnull().sum() # 和tcc.info()作用和tcc.info() 其实是一样的 进一步思考 在此过程中,我们需要检验是否存在采用别的值来表…...

ENSP (虚拟路由冗余协议)VRRP配置
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种用于提高网络可用性和可靠性的协议。它通过在多个路由器之间共享一个虚拟IP地址,确保即使一台路由器发生故障,网络依然能够正常运行,防止…...

move_base
move_base 官方介绍:http://wiki.ros.org/move_base 如果在仿真环境下, sensor source、odometry source 和 sensor transforms 都已提供好,我们只需要完成以下部分: 一、编写导航程序 ①创建 ROS 工作空间 和 pkg 包 mkdir -p …...

Android Intent 跳转常见系统设置
常量值描述android.settings.DATA_ROAMING_SETTINGS显示 2G/3G 选择的设置android.settings.SETTINGS显示系统设置android.settings.WIFI_SETTINGS显示设置以允许配置 Wi-Fiandroid.intent.action.POWER_USAGE_SUMMARY显示电池 … 更多GO 官网...

[复健计划][紫书]Chapter 7 暴力求解法
7.1 简单枚举 例7-1 Division uva725 输入正整数n,按从小到大的顺序输出所有形如abcde/fghij n的表达式,其中a~j恰好为数字0~9的一个排列(可以有前导0),2≤n≤79。枚举fghij,验证a…...

基于SpringBoot的社区讯息服务小程序【附源码】
基于SpringBoot的社区讯息服务小程序 效果如下: 系统登陆页面 管理员主页面 用户管理页面 社区活动管理页面 设施报修管理页面 缴费信息管理页面 用户主页面 用户登录页面 社区活动页面 研究背景 随着移动互联网技术的飞速发展,社区生活日益依赖于数字…...

springboot图书管理系统(一个简单的单体架构项目,适合小白)
期末作业 为了水一水期末作业,打算写一个简易的单体架构图书管理系统。以下为后端主要技术栈(后期可能更新,打算一个星期左右写完吧)。 springbootredismysqlspringcachespringsecurity … 数据库设计 第一次从0开始搭建后续可能还会多更新一些表。 -- 角…...

《CLR via C#》读书笔记--CLR的执行模型
将源代码编译成托管模块将托管模块合并成程序集加载公共语言运行时执行程序集的代码本机代码生成器:NGen.exeFramework 类库入门通用类型系统公共语言规范(CLS)与非托管代码的互操作性 将源代码编译程托管模块 公共语言运行时(Co…...