[操作系统] 文件的软链接和硬链接


文章目录

  • 引言
  • 硬链接(Hard Link)
    • 什么是硬链接?
    • 硬链接的特性
    • 硬链接的用途
  • 软链接(Symbolic Link)
    • 什么是软链接?
    • 软链接的特性
    • 软链接的用途
  • 软硬链接对比
  • 文件的时间戳
  • 实际应用示例
    • 使用硬链接节省备份空间
    • 用软链接管理多版本
    • 查找所有硬链接文件
  • 注意事项
  • 总结

引言

在 Linux 文件系统中,文件名与文件数据的关系并不像表面看起来那样简单。真正标识文件的是 inode(索引节点),而文件名只是 inode 的别名。这种设计衍生出了两种特殊的文件关联方式:硬链接(Hard Link)软链接(Symbolic Link,又称软链接)。本文将深入探讨它们的原理、区别及实际应用。


硬链接(Hard Link)

什么是硬链接?

硬链接是多个文件名指向同一个 inode 的映射关系。通过 ln 命令可以创建硬链接:

touch abc
ln abc def  # 创建硬链接
ls -li      # 查看 inode

输出示例:

263466 -rw-r--r-- 2 user group 0 Sep 15 17:45 abc
263466 -rw-r--r-- 2 user group 0 Sep 15 17:45 def
  • inode 相同abcdef 的 inode 均为 263466
  • 链接数:inode 的硬链接数会递增(此处为 2)。

硬链接的特性

  • 共享数据写时计数的原理,所有硬链接指向同一份磁盘数据。
  • 独立性:删除任意一个硬链接不会影响其他链接,只有当链接数归零时,文件才会被真正删除。
  • 限制
    • 不能跨文件系统创建(inode 是文件系统局部的)。
    • 不能对目录创建硬链接(避免循环引用)。

硬链接的用途

  • 文件备份:创建重要文件的硬链接,防止误删。
  • 文件系统结构:目录中的 .(当前目录)和 ..(上级目录)本质上是硬链接,所以目录文件的硬链接数会被当前目录的.和下一级目录的..影响。
  • ... 是文件系统内部实现的硬链接,用于维护目录树结构。
  • 用户无法手动为目录创建硬链接,但文件系统自身在底层使用硬链接机制。

用户手动建立目录硬链接的话会破坏文件系统的树状结构,形成路径环问题


软链接(Symbolic Link)

什么是软链接?

软链接是一个独立的文件,其内容存储的是目标文件的路径。通过 ln -s 创建:

ln -s abc abc.soft  # 创建软链接
ls -li

输出示例:

263563 -rw-r--r-- 2 user group 0 Sep 15 17:45 abc
261678 lrwxrwxrwx 1 user group 3 Sep 15 17:53 abc.soft -> abc
  • inode 不同:软链接有自己的 inode(261678)。
  • 文件类型l 表示链接文件,-> 指向目标路径。

软链接的特性

  • 灵活性
    • 可跨文件系统创建。
    • 可指向目录或文件。
  • 依赖性:删除原文件后,软链接会变成“悬空链接”(Dangling Link)。
  • 路径解析:可以是绝对路径或相对路径(相对于软链接的位置)。

软链接的用途

  • 快捷方式:快速访问深层目录中的文件。
  • 版本管理:如 /usr/bin/python 指向具体版本(如 python3.11)。
  • 动态切换:在配置文件中指向不同环境(开发、生产)。

软硬链接对比

特性硬链接软链接
inode与原文件相同独立 inode
跨文件系统❌ 不支持✅ 支持
指向目录❌ 不允许✅ 允许
原文件删除后仍可访问(链接数减 1)失效(悬空链接)
存储内容直接映射 inode存储目标路径字符串
文件大小与原文件相同等于路径字符串长度
应用场景备份、文件系统结构快捷方式、动态引用

文件的时间戳

Linux 文件有三个关键时间戳:

  1. Access Time (atime):最后访问时间(如 cat 查看文件)。
  2. Modify Time (mtime):文件内容最后修改时间(如 echo 写入)。
  3. Change Time (ctime):文件元数据最后修改时间(如权限、链接数变化)。

注意

  • 修改文件内容会更新 mtimectime
  • 创建硬链接会增加链接数,因此会更新 ctime

实际应用示例

使用硬链接节省备份空间

cp -l data.txt backup/  # 用硬链接备份,共享相同数据块

用软链接管理多版本

ln -s /opt/app/v2.0/ /opt/app/current

查找所有硬链接文件

find /path -samefile filename  # 根据 inode 查找

注意事项

  1. 避免循环软链接:如 a -> bb -> a
  2. 权限问题:软链接的权限是独立的,但最终访问权限由目标文件决定。
  3. 路径依赖:移动原文件会导致软链接失效,硬链接不受影响。

总结

场景推荐链接类型
同文件系统备份硬链接
跨文件系统引用软链接
需要快捷方式软链接
维护文件系统结构(. / …)硬链接

理解软硬链接的底层机制,能帮助开发者更高效地管理文件、设计存储方案。无论是通过硬链接实现低成本备份,还是利用软链接灵活组织项目结构,这两种工具都是 Linux 系统中不可或缺的利器。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c# winform程序 vs2022 打包生成安装包

最近,利用c# winform程序该客户开发一套进销存管理系统,项目在部署前,需要生成安装包,以便部署在客户电脑上面。总结步骤如下: 1、在打包之前 (VS中需要包括Microsoft visual studio installer projects扩展项目)&…

现今大语言模型性能(准确率)比较

现今大语言模型性能(准确率)比较 表头信息:表的标题为“大语言模型性能比较结果”(英文:Table 1: Large Language Model Performance Comparison Results),表明该表是用于对比不同大语言模型的性能。列信息: 模型:列出参与比较的不同大语言模型名称,包括LLAMA3(70B)…

Mysql-如何理解事务?

一、事务是什么东西 有些场景中,某个操作需要多个sql配合完成: 例如: 李四这个月剩下的前不够交房租了,找张三借1000元急用: (1)给张三的账户余额 减去1000元 updata 账户表 set money money -…

GitLab Pages 托管静态网站

文章目录 新建项目配置博客添加 .gitlab-ci.yml其他配置 曾经用 Github Pages 来托管博客内容,但是有一些不足: 在不科学上网的情况下,是没法访问的,或者访问速度非常慢代码仓库必须是公开的,如果设置为私有&#xff0…

智能图像处理平台:图片管理

接着我们讲图片管理,先实现图片基础的增删改查,再去考虑图像处理。 主要是,我们需要完成查询时,查询的图片的上传者的角色等级小于等于我们当前登陆账号。 后端controller: package com.llpp.controller;import cn.…

计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型音乐推荐系统 音乐数据分析 音乐可视化 音乐爬虫 知识图谱 大数据毕业设计

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

《Python实战进阶》No 11:微服务架构设计与 Python 实现

第11集:微服务架构设计与 Python 实现 2025年3月3日更新了代码和微服务运行后的系统返回信息截图,所有代码在 python3.11.5虚拟环境下运行通过。 微服务架构通过将复杂应用拆分为独立部署的小型服务,显著提升了系统的可扩展性和维护性。本集…

NC2227_约瑟夫环

题解: import java.util.Scanner;​public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int k sc.nextInt();int m sc.nextInt();int set 0;for(int i 2;i < n;i ){set (set m) % i;}System.out.p…

openEuler操作系统

一、OpenEuler简介 OpenEuler 是一款由华为发起、社区驱动的开源 Linux 操作系统&#xff0c;专注于企业级应用场景(如服务器、云计算、边缘计算等)。其前身是华为的 EulerOS&#xff0c;2019 年正式开源并捐赠给开放原子开源基金会&#xff0c;旨在构建一个中立、开放的生态系…

vite+react+ts如何集成redux状态管理工具,实现持久化缓存

1.安装插件 这里的redux-persist--进行数据的持久化缓存&#xff0c;确保页面刷新数据不会丢失 yarn add react-redux^9.2.0 redux-persist^6.0.0 reduxjs/toolkit^2.5.1 2.创建仓库文件夹 在项目的src文件夹下创建名为store的文件夹&#xff0c;里面的具体文件如下 featur…

大模型function calling:让AI函数调用更智能、更高效

大模型function calling&#xff1a;让AI函数调用更智能、更高效 随着大语言模型&#xff08;LLM&#xff09;的快速发展&#xff0c;其在实际应用中的能力越来越受到关注。Function Calling 是一种新兴的技术&#xff0c;允许大模型与外部工具或API进行交互&#xff0c;从而扩…

图像分类项目1:基于卷积神经网络的动物图像分类

一、选题背景及动机 在现代社会中&#xff0c;图像分类是计算机视觉领域的一个重要任务。动物图像分类具有广泛的应用&#xff0c;例如生态学研究、动物保护、农业监测等。通过对动物图像进行自动分类&#xff0c;可以帮助人们更好地了解动物种类、数量和分布情况&#xff0c;…

在 Ansys Maxwell 中分析磁场

在 Ansys Maxwell 中分析磁场 分析磁场的能力对于理解电磁系统至关重要。Ansys Maxwell 为工程师提供了强大的工具&#xff0c;帮助他们探索磁场数据并从中提取有价值的见解。在本指南中&#xff0c;我将深入研究 Ansys Maxwell 中的几种基本技术和方法&#xff0c;以有效地分…

[Lc滑动窗口_1] 长度最小的数组 | 无重复字符的最长子串 | 最大连续1的个数 III | 将 x 减到 0 的最小操作数

目录 1. 长度最小的字数组 题解 代码 ⭕2.无重复字符的最长子串 题解 代码 3.最大连续1的个数 III 题解 代码 4.将 x 减到 0 的最小操作数 题解 代码 1. 长度最小的字数组 题目链接&#xff1a;209.长度最小的字数组 题目分析: 给定一个含有 n 个 正整数 的数组…

数据库Redis数据库

目录 一、数据库类型 1、关系型数据库 2、非关系型数据库 3、关系型非关系型区别 二、Redis数据库 1、什么是Redis 3、Redis特点 4、Redis为什么读写快 5、部署Redis数据库 6、redis管理 7、Redis数据库五大类型 8、Redis数据库基础使用 9、redis五大类型增删查?…

蓝桥备赛(四)- 数组(下)

一 、 字符数组 1.1 介绍 数组的元素如果是字符类型 &#xff0c; 这种数组就是字符数组 &#xff0c; 字符数组可以是一维数组 &#xff0c; 可以是二维数组 (多维数组)。 接下来主要讨论一维的字符数组 : char arr1[5] //一维数组 char arr2[3][5] // 二维数组 C语言 中…

数据图表ScottPlot.WPF用法示例

目录 一、添加 NuGet 程序包&#xff08;5.0.47&#xff09; 二、MainWindow.xaml中添加引用 三、MainWindow.xaml.cs 具体使用代码 图表示例&#xff1a; 一、添加 NuGet 程序包&#xff08;5.0.47&#xff09; 二、MainWindow.xaml中添加引用 <Window x:Class"…

AtCoder Beginner Contest 001(A - 積雪深差、B - 視程の通報、C - 風力観測、D - 感雨時刻の整理)题目翻译

由于我发现网上很少有人会发很久之前AtCoder Beginner Contes的题&#xff0c;所以我打算从AtCoder Beginner Contest 001开始写。大约两周一更&#xff0c;需要的可以订阅专栏&#xff0c;感谢支持Thanks♪(&#xff65;ω&#xff65;)&#xff89; →题目讲解 A - 積雪深差 …

Windows 11【1001问】查看Windows是否激活的11种方法

在使用Windows 11的过程中&#xff0c;确保系统已正确激活是非常重要的一步。未激活的系统可能会限制某些功能的使用&#xff0c;并且无法获得最新的安全更新和支持。本文将详细介绍多种判断Windows 11是否已激活的11种方法&#xff0c;帮助用户快速了解自己的系统状态&#xf…

秒杀系统的常用架构是什么?怎么设计?

架构 秒杀系统需要单独部署&#xff0c;如果说放在订单服务里面&#xff0c;秒杀的系统压力太大了就会影响正常的用户下单。 常用架构&#xff1a; Redis 数据倾斜问题 第一步扣减库存时 假设现在有 10 个商品需要秒杀&#xff0c;正常情况下&#xff0c;这 10 个商品应该均…