Linux中的软硬链接文件详解

news2024/11/6 5:16:49

概述

在Linux文件系统中,软连接(Symbolic Link)和硬连接(Hard Link)是两种重要的文件链接方式。它们都可以创建指向相同文件内容的多个“链接”,但在实现方式和特性上有所不同。

1. 硬连接(Hard Link)

  • 概念:硬连接是同一个文件在文件系统中的多个目录项,本质上是给同一个inode分配多个文件名。所有硬连接都指向同一个inode,即同一份数据。
  • 特点
    • 硬连接与目标文件共享同一个inode,因此只在同一文件系统内有效。
    • 删除目标文件或硬链接文件不会影响其他硬链接,只有当所有硬连接被删除后,文件数据才会真正被删除。
    • 硬连接只能指向文件,不能指向目录。
  • 创建命令:使用ln [目标文件] [链接文件]来创建硬连接。例如:
    ln /home/user/file.txt /home/user/hard_link_to_file 

2. 软连接(Symbolic Link)

  • 概念:软连接是一种指向文件或目录的引用,类似于Windows中的快捷方式。软连接文件包含目标文件的路径,当访问软连接时,系统会自动跳转到目标文件。
  • 特点
    • 软连接是一个独立的文件,具有自己的inode(索引节点)。
    • 软连接可以跨文件系统创建,即可以链接到不同分区上的文件。
    • 软连接可以指向文件或目录。
    • 如果目标文件被删除,软连接会失效,变成“断链”(Broken Link)。
  • 创建命令:使用ln -s [目标文件或目录] [链接文件]来创建软连接。例如:
    ln -s /home/user/file.txt /home/user/link_to_file 

总结

特性软连接硬连接
是否共享inode
跨文件系统支持不支持
指向类型文件或目录文件
失效情况目标文件删除则失效目标或链接删除不影响其他

软连接适合用于快捷访问不同位置的文件或目录,硬连接则更适合需要在同一文件系统中保留文件副本的场景。

原理

inode源码

以下结构体对应文件的inode的源码,其中不相关的部分已省略

struct ext2_inode {
    ...
	__le32	i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
    ...
};

__le32 i_block[EXT2_N_BLOCKS]: 文件数据块的指针数组,EXT2_N_BLOCKS 通常定义为 15。前 12 个是直接指向数据块的指针,后面 3 个分别是单重、双重、三重间接指针,用于存储文件内容的物理地址。

硬连接

硬连接文件和源文件使用同一个inode,只是这个inode有两个不一样的文件名称, 对应的结构体中的i_block中存放的是数据块的具体地址。

软连接

软连接是一个全新的文件,为不同的inode,通常情况下,i_block 是用来存储文件数据块地址的。但在 EXT2 文件系统 中,有一个例外:对于小于 60 字节的软链接文件,i_block 会直接存储软链接目标路径,而不是数据块地址。这种设计是为了提高效率,因为短路径的软链接可以直接在 inode 中存储路径信息,从而避免为软链接额外分配数据块。

具体来说:

  • 普通文件和较大的软链接文件i_block 中保存的是数据块的地址。
  • 小的软链接文件(通常指目标路径少于 60 字节):i_block 中直接保存路径字符串,而不是数据块地址。

这是 EXT2 文件系统的一种优化策略,使得对短路径的软链接访问更快,也减少了磁盘空间的使用。

示例

[root@ct7_node01 tmp]# ll /disk/ -i
total 17
12 -rw-r--r--. 2 root root     3 Nov  4 15:57 hlf
13 lrwxrwxrwx. 1 root root     4 Nov  4 15:57 slf -> srcf
12 -rw-r--r--. 2 root root     3 Nov  4 15:57 srcf
[root@ct7_node01 tmp]#

# 软连接的data blocks中存放的为原文件的路径即当前目录下的srcf
[root@ct7_node01 ~]# hexdump -s 128512 -n 128  /root/disk.img -C
0001f600  ff a1 00 00 04 00 00 00  6d 7e 28 67 66 7e 28 67  |........m~(gf~(g|
0001f610  66 7e 28 67 00 00 00 00  00 00 01 00 02 00 00 00  |f~(g............|
0001f620  00 00 00 00 01 00 00 00  73 72 63 66 00 00 00 00  |........srcf....|
0001f630  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
0001f660  00 00 00 00 e0 90 fe e3  7a 01 00 00 00 00 00 00  |........z.......|
0001f670  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0001f680
[root@ct7_node01 ~]# 

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

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

相关文章

Linux 服务器使用指南:从入门到登录

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 🚩博主致力于用通俗易懂且不失专业性的文字,讲解计算机领域那些看似枯燥的知识点🚩 目录 一…

《AI 大模型:重塑软件开发新未来》

引言 在科技的璀璨星河中,AI 大模型宛如一颗耀眼的新星,正以前所未有的力量改写着软件开发的篇章。随着其技术的持续演进,软件开发流程正经历着翻天覆地的变化。从代码自动生成的神奇魔法,到智能测试的精准洞察,AI 大…

acmessl.cn提供接口API方式申请免费ssl证书

目录 一、前沿 二、API接口文档 1、证书可申请列表 简要描述 请求URL 请求方式 返回参数说明 备注 2、证书申请 简要描述 请求URL 请求方式 业务参数 返回示例 返回参数说明 备注 3、证书查询 简要描述 请求URL 请求方式 业务参数 返回参数说明 备注 4、证…

windows server2019下载docker拉取redis等镜像并运行项目

一、基本概念 1、windows server 指由微软公司开发的“Windows”系列中的“服务器”版本。这意味着它是基于Windows操作系统的,但专门设计用于服务器环境,而不是普通的桌面或个人用户使用。主要用途包括服务器功能、用户和资源管理、虚拟化等 2、dock…

Docker-- cgroups资源控制实战

上一篇:容器化和虚拟化 什么是cgroups? cgroups是Linux内核中的一项功能,最初由Google的工程师提出,后来被整合进Linux内核; 它允许用户将一系列系统任务及其子任务整合或分隔到按资源划分等级的不同组内,从而为系统…

解决ImportError: DLL load failed while importing _message: 找不到指定的程序。

C:\software\Anoconda\envs\yolov5_train\python.exe C:\Project\13_yolov5-master\train.py C:\software\Anoconda\envs\yolov5_train\lib\site-packages\torchvision\io\image.py:13: UserWarning: Failed to load image Python extension: [WinError 127] 找不到指定的程序…

超越Axure:探索新一代原型设计工具

Axure RP是一款被广泛认可的快速原型设计工具,专为专业设计师打造,用于创建高效的产品原型图,包括APP和网页的原型图、框架图和结构图等。Axure RP制作的原型图能够实现与实际APP相似的交互效果,便于向用户或客户展示,…

综合项目--博客

一。基础配置: 1.配置主机名,静态IP地址 2.开启防火墙配置 3.部分开启selinux并且配置 4.服务器之间使用同ntp.aliyun.com进行世家能同步 5.服务器之间实现SSH绵密登陆 二。业务需求 1.Sever-NFS-DNS主机配置NFS服务器,将博客网站资源…

dns欺骗

[[Ettercap]] 少不了这个 arp 毒化和流量截取的中间人工具。 dns欺骗原理 什么是 DNS 欺骗? DNS 欺骗(DNS Spoofing) 是一种网络攻击技术,攻击者通过修改 DNS 响应,将目标用户的 DNS 查询结果篡改,指向攻…

危机来临前---- 力扣: 876

危机即将来临 – 链表的中间节点 描述: 给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 示例: 何解? 1、遍历找到中间节点 : 这个之在回文链表中找…

SQL Server数据库中,报错:用户名或密码不正确

1、 用户名或密码不正确 2、解决方式 可能是服务器名称不对,检查服务器名称是否是安装sqlserver数据的服务器名称。安装sqlserver数据的服务器,没有开启1433端口,需要开启端口 下一步保证:TCP/IP 状态状态为:已启用 然…

PKG_CHECK_MODULES(FUSE,fuse)

运行 ./configure 命令报错如下: ./configure: line 13934: syntax error near unexpected token FUSE,fuse ./configure: line 13934: PKG_CHECK_MODULES(FUSE,fuse)解决方案: 命令窗口运行如下命令,安装 pkg-config: sudo …

不要只知道deepl翻译,这里有10个专业好用的翻译工具等着你。

deepl翻译的优点还是有很多的,比如翻译的准确性很高,支持翻译的语言有很多,并且支持翻译文件和文本。但是现在翻译工具那么多,大家需要翻译的场景也有很多,怎么能只拥有一个翻译工具呢。所以在这里我帮助大家寻找了一波…

如何检索 LINEMOD 数据集的相机内参

简介 BOP (Benchmark for 6D Object Pose Estimation) 是一个专为6D物体姿态估计而设计的基准测试平台。它为研究人员提供了多种数据集,以帮助评估和比较物体识别和姿态估计算法的性能。官方网站是 BOP,你可以在这里找到丰富的资源和信息。 检索 LINEM…

健康生活的重要性,注重规律作息

在快节奏的现代生活中,健康已成为我们最宝贵的财富。随着生活水平的提高,人们越来越注重养生,追求身心的和谐与平衡。那么,如何在繁忙的日常中实践健康养生,为生活注入新的活力呢?以下是一些实用的建议&…

最简单方式SSH连接局域网中另一台电脑的WSL2

1、首先确认一下WSL2中的SSH服务是否开启: 先安装更新一下,再安装一下ssh服务模块,这里很多人都没有安装过。 sudo apt update sudo apt upgrade sudo apt install openssh-server 2、配置SSH服务器: 打开配置文件&#xff0c…

andrular输入框input监听值传递

效果图&#xff1a; step1: E:\projectgood\ajnine\untitled4\src\app\apple\apple.component.html <button mat-button (click)“openDialog()”>Open dialog step2: E:\projectgood\ajnine\untitled4\src\app\apple\apple.component.ts import {Component, inject}…

数据结构——二叉树(续集)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ 在上一篇博客我们…

动态规划 —— dp问题-按摩师

1. 按摩师 题目链接&#xff1a; 面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/the-masseuse-lcci/description/ 2. 算法原理 状态表示&#xff1a;以某一个位置为结尾或者以某一个位置为起点 dp[i]表示&#xff1a;选择到i位置…

python爬取旅游攻略(1)

参考网址&#xff1a; https://blog.csdn.net/m0_61981943/article/details/131262987 导入相关库&#xff0c;用get请求方式请求网页方式&#xff1a; import requests import parsel import csv import time import random url fhttps://travel.qunar.com/travelbook/list.…