Linux 系统中的软链接与硬链接

server/2025/2/25 0:25:03/

目录

一、什么是软链接

1. 创建软链接

2. 软链接的特性

3. 软链接的用途

二、什么是硬链接

1. 创建硬链接

2. 硬链接的特性

3. 硬链接的用途

4. 目录硬链接的特殊性

​编辑

三、软链接硬链接的区别

1. inode 编号

2. 路径依赖

3. 删除行为

四、实际操作演示

1. 创建和删除软链接

2. 创建和删除硬链接

3. 软链接硬链接的对比

五、深度对比分析


一、什么是软链接

        软链接(Symbolic Link)也称为符号链接,类似于 Windows 系统中的快捷方式。它是一个独立的文件,其内容是指向目标文件或目录的路径。通过软链接,我们可以在不同的位置访问同一个文件或目录,而无需复制文件。

1. 创建软链接

创建软链接的命令是 ln -s,其中 -s 表示创建符号链接。语法如下:

ln -s <目标文件或目录> <软链接名称>

示例:

假设我们有一个文件 file_target1.txt,我们想为它创建一个软链接 file_soft.link

touch file_target1.txt  # 创建目标文件
ln -s file_target1.txt file_soft.link  # 创建软链接
ll  # 查看文件列表

输出结果:

从输出中可以看到,file_soft.link 是一个符号链接,指向 file_target1.txt

2. 软链接的特性

  • 独立性软链接是一个独立的文件,具有自己的 inode 编号。

  • 路径依赖软链接依赖于目标文件的路径。如果目标文件被移动或删除,软链接将失效。

示例:

删除目标文件后,软链接将失效。

rm file_target1.txt  # 删除目标文件
ll  # 查看文件列表

输出结果:

可以看到,file_soft.link 仍然存在,但它已经失效,因为目标文件 file_target1.txt 被删除了。

3. 软链接的用途

  • 路径重定向:将文件或目录的访问路径重定向到另一个位置。

  • 简化路径:通过软链接简化复杂路径,方便访问。

  • 文件共享:在不同目录中共享同一个文件。

二、什么是硬链接

        硬链接(Hard Link)是指多个文件名指向同一个 inode(索引节点)。硬链接不是独立的文件,它与目标文件共享同一个 inode,因此它们实际上是同一个文件的不同入口。

1. 创建硬链接

创建硬链接的命令是 ln,语法如下:

ln <目标文件> <硬链接名称>

示例:

假设我们有一个文件 file_target2.txt,我们想为它创建一个硬链接 file_hard.link

touch file_target2.txt  # 创建目标文件
ln file_target2.txt file_hard.link  # 创建硬链接
ll  # 查看文件列表

输出结果

从输出中可以看到,file_hard.linkfile_target2.txt硬链接数都是 2,这表明它们共享同一个 inode。

2. 硬链接的特性

  • 共享 inode硬链接与目标文件共享同一个 inode,因此它们实际上是同一个文件。

  • 路径独立硬链接不依赖于目标文件的路径,即使目标文件被重命名或移动,硬链接仍然有效。

  • 删除行为:删除一个硬链接不会影响其他硬链接或目标文件,只有当所有硬链接都被删除时,文件才会被真正删除。

示例:

删除一个硬链接,目标文件仍然存在。

rm file_hard.link  # 删除硬链接
ll  # 查看文件列表

输出结果

可以看到,file_target2.txt 仍然存在,只是硬链接数减少到 1。

3. 硬链接的用途

  • 文件备份:通过硬链接创建文件的备份,节省磁盘空间。

  • 文件共享:在不同目录中共享同一个文件。

  • 系统文件管理:用于系统文件的冗余备份和管理。

4. 目录硬链接的特殊性

目录结构解析:

  • . 代表当前目录

  • .. 代表父目录

  • 每个子目录的..都会增加父目录的链接计数

系统限制的意义:

禁止用户创建目录硬链接是为了防止出现循环引用,避免文件系统陷入死循环。

三、软链接硬链接的区别

1. inode 编号

  • 软链接:具有独立的 inode 编号。

  • 硬链接:与目标文件共享同一个 inode 编号。

示例:

ll -i  # 查看 inode 编号

输出结果

可以看到,file_soft.link 有独立的 inode 编号(527771),而 file_hard.linkfile_target2.txt 共享同一个 inode 编号(527769)。

2. 路径依赖

  • 软链接:依赖于目标文件的路径,路径改变会导致软链接失效。

  • 硬链接:不依赖于目标文件的路径,即使目标文件被重命名或移动,硬链接仍然有效。

示例:

移动目标文件后,软链接失效,硬链接仍然有效。

mv file_target2.txt /home/lv/  # 移动目标文件
ll  # 查看文件列表

输出结果

可以看到,file_soft.link 已经失效,而 file_hard.link 仍然有效。

3. 删除行为

示例:

删除目标文件后,硬链接仍然有效。

rm file_target2.txt  # 删除目标文件
ll  # 查看文件列表

输出结果

可以看到,file_hard.link 仍然存在,因为它是硬链接

四、实际操作演示

1. 创建和删除软链接

2. 创建和删除硬链接

3. 软链接硬链接的对比

五、深度对比分析

特性软链接硬链接
存储内容目标路径直接指向inode
inode编号独立与源文件相同
跨文件系统✔️
目录支持✔️❌(系统目录除外)
文件删除影响链接失效减少链接计数
文件大小路径字符长度与源文件相同
权限显示显示lrwxrwxrwx与源文件相同

http://www.ppmy.cn/server/170433.html

相关文章

Microsoft 365 Copilot中使用人数最多的是哪些应用

今天在浏览Microsoft 365 admin center时发现&#xff0c;copilot会自动整理过去30天内所有用户使用copilot的概况&#xff1a; 直接把这个图丢给copilot让它去分析&#xff0c;结果如下&#xff1a; 总用户情况 总用户数在各应用中均为 561 人&#xff0c;说明此次统计的样本…

C/C++跳动的爱心

系列文章 序号直达链接1C/C李峋同款跳动的爱心2C/C跳动的爱心3C/C经典爱心4C/C满屏飘字5C/C大雪纷飞6C/C炫酷烟花7C/C黑客帝国同款字母雨8C/C樱花树9C/C奥特曼10C/C精美圣诞树11C/C俄罗斯方块小游戏12C/C贪吃蛇小游戏13C/C孤单又灿烂的神14C/C闪烁的爱心15C/C哆啦A梦16C/C简单…

JS宏实例:数据透视工具的制作(四)

上一节中&#xff0c;我们完成了核心的计算代码部分&#xff0c;本节中将完善事件代码 一、创建所有需求的事件函数 1、窗体初始化 // 窗体初始化 function pivotForm_Initialize(){} function typeSet_Initialize(){} function valueSet_Initialize(){} function allCol…

topN 相似度 torch实现

目录 优化版,去重相似度 topN 欧式距离版 没有去重复, 优化版,去重相似度 import torch import torch.nn.functional as F torch.manual_seed(42) # 假设 10 条数据,每条数据的特征维度是 128 data = torch.randn(10, 128)# 计算所有数据对之间的余弦相似度 cosine_simi…

(网络安全)渗透测试

1、渗透测试种类 2、网络安全渗透测试分类 1&#xff09;网络安全渗透测试&#xff0c; 根据事先对测试目标系统信息的了解程度&#xff0c;可以分为 a.黑盒测试&#xff1a; 只知道要测试的目标系统&#xff0c;但系统内部的任何信息&#xff0c;都不清楚。这种测试最真实&am…

【多模态处理篇八】【DeepSeek增强现实:AR导航实时推理优化】

一、AR导航的「地狱级难度」挑战 搞AR导航就像在钢丝上跳街舞——既要实时感知环境,又得丝滑渲染虚拟指引,还得防着手机发烫罢工。具体难点包括: 1. 算力饥渴症 手机端要同时处理: 摄像头画面(30fps+)SLAM定位(每秒百次坐标计算)3D箭头渲染(每帧万级三角形) 这相当…

Qt 中的线程池QRunnable和QThreadPool

Qt 中的线程池QRunnable和QThreadPool 一、QThreadPool类介绍 QThreadPool 是 Qt 框架中用于管理线程池的类&#xff0c;它提供了一种高效的方式来管理和复用线程&#xff0c;避免频繁创建和销毁线程带来的开销。 1. 基本概念 QThreadPool 是一个全局的线程池&#xff0c;它…

解决github验证问题

The authenticity of host ‘github.com’ can’t be established.ED25519 key fingerprint is SHA256 首先&#xff0c;生成 SSH key&#xff1a; ssh-keygen -t ed25519 -C "your_emailexample.com"启动 ssh-agent&#xff1a; eval "$(ssh-agent -s)"…