轻松理解操作系统 - Linux 软硬链接是什么?

news/2024/11/8 14:36:53 标签: linux, 运维, 服务器, 1024程序员节

Linux 由于其开源、比较稳定等特点统治了服务端领域。也因此,学习Linux 系统相关知识在后端开发等岗位中变得越来越重要,甚至可以说是必不可少的。

因为它的广泛应用,所以在程序员的日常工作和面试中,它都是经常出现的。它的开源特性也让它适合于让对于计算机和操作系统底层原理感兴趣的人进行学习。

开始今天的正文

一、如何让我们更方便访问一个文件或程序?

首先回想下如果直接访问的话需要使用 cd 指令打开相应的目录,然后使用 vi 或 vim 访问文本文件,使用 ./程序名 访问二进制程序。

cd /your_loadvim ./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. 性能与占用

  • 硬链接:由于直接指向数据块,硬链接在访问时通常比软链接更快,因为它们不需要额外的路径解析步骤。此外,硬链接不占用额外的磁盘空间(除了文件系统的元数据),因为它们只是数据块的引用。

  • 软链接:在访问时,系统需要解析软链接指向的路径,这可能会引入一些额外的开销。此外,软链接本身会占用磁盘空间来存储目标路径信息。


http://www.niftyadmin.cn/n/5744033.html

相关文章

ChatGPT键盘快捷键(按ctrl + /呼出)

文章目录 ChatGPT键盘快捷键- 打开新聊天: Ctrl Shift O- 聚焦聊天输入: Shift Esc- 复制最后一个代码块: Ctrl Shift ;- 复制最后一个回复: Ctrl Shift C- 设置自定义指令: Ctrl Shift I- 切换边栏: Ctrl Shift S- 删除聊天: Ctrl Shift ⌫- 显示快捷方式: Ctrl …

STM32 基于HAL库和STM32cubeIDE的应用教程 (二)--GPIO的使用

如果有什么不懂的地方欢迎私聊博主,欢迎小白,博主必一一解答。 在 STM32 中,GPIO(通用输入输出)是与外部硬件接口进行交互的主要方式之一。STM32 HAL 库提供了简洁的接口来配置和控制 GPIO 引脚。下面是使用 STM32 HA…

Android Parcelable和Serializable的区别与联系

在Android开发中,Parcelable和Serializable是两种用来在组件之间传递数据的序列化机制。它们有不同的使用场景和性能特点。 以下是它们之间的关系和区别: 1. 什么是 Parcelable Parcelable 是 Android 特有的接口,用于高效地在进程间传递数…

优化策略:揭秘钢条切割与饼干分发的算法艺术

引言 在生活中,钢条和饼干看似风马牛不相及,但它们的分割与分发却隐藏着惊人的数学魅力。如何最大化利润?如何用有限的资源最大程度满足需求?这便是算法世界中的艺术。今天,我们来揭秘钢条切割与饼干分发的算法设计。本…

6-1.Java 面向对象 - 初级(对象与属性、对象与方法、递归、重载、可变参数、作用域、构造器、对象创建流程详解、this 关键字)

一、对象与属性 1、基本介绍 属性是类的一个组成部分,一般是基本数据类型,也可以是引用数据类型 属性的定义语法类似变量 【访问修饰符】 【属性类型】 【属性名】;属性的定义类型可以为任何类型(基本数据类型、引用数据类型)…

生产环境中添加多项式特征实现:将逻辑回归应用于非线性关系

要将逻辑回归应用于非线性关系,并实现到生产环境中,我们可以通过以下步骤来完成。这里主要使用 Python 和 Scikit-Learn 库,因为它们为机器学习任务提供了强大的工具和易于使用的接口。我们将通过添加多项式特征来扩展逻辑回归模型&#xff0…

免费数据集网站

1、DataSearch https://datasetsearch.research.google.comhttp://DataSearch 2、FindData findata-科学数据搜索引擎https://www.findata.cn/ 3、Kaggle Kaggle: Your Machine Learning and Data Science CommunityKaggle is the world’s largest data science community …

16通道AD采集方案,基于复旦微ARM + FPGA国产SoC处理器平台

测试数据汇总 表 1 本文带来的是基于复旦微FMQL20S400M四核ARM Cortex-A7(PS端) + FPGA可编程逻辑资源(PL端)异构多核SoC处理器设计的全国产工业评估板的AD采集案例。本次案例演示的开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit PL端开发环境:P…