当前位置: 首页 > news >正文

Linux下的软硬链接

Linux下的软硬链接

Linux下的硬链接和软链接是一种文件系统级别的链接方式,它们允许你在不同的目录中创建指向同一个文件的引用。硬链接和软链接的主要区别在于它们的实现方式和删除方式。

硬链接(Hard Link):

硬链接是指向同一个inode的多个文件名。当你在一个目录中创建一个硬链接时,系统会在inode表中查找目标文件的inode,然后在该目录下创建一个新的文件,并将新文件的inode指针指向目标文件的inode。这意味着,当你访问硬链接时,你实际上是在访问目标文件本身。硬链接有一些限制,例如不能链接到目录,不能链接到不同文件系统的文件,不能链接到已经删除的文件等。

创建硬链接的命令:

ln source_file link_name

例如,如果你有一个名为file.txt的文件,你可以通过以下命令创建一个名为link.txt的硬链接:

ln file.txt link.txt

软链接(Symbolic Link):

软链接是一个特殊类型的文件,它包含了一个指向另一个文件的文本指针。当你访问软链接时,系统会读取软链接中的指针,然后访问指针指向的文件。软链接可以链接到目录,可以链接到不同文件系统的文件,甚至可以链接到已经删除的文件。与硬链接不同,软链接有自己的inode和文件系统属性。

创建软链接的命令:

ln -s source_file link_name

例如,如果你有一个名为file.txt的文件,你可以通过以下命令创建一个名为link.txt的软链接:

ln -s file.txt link.txt

删除链接:
删除硬链接不会影响原始文件,只会删除链接本身。但是,如果最后一个硬链接被删除,原始文件也会被删除,因为系统不再有任何指向该文件的引用。

删除软链接不会影响原始文件,只会删除链接本身。但是,如果软链接指向的文件被删除,软链接将变为无效,因为系统不再有任何指向该文件的引用。

示例:
假设你有一个名为file.txt的文件,以及两个指向该文件的链接:一个硬链接和一个软链接。

$ ls -li file.txt link1.txt link2.txt
1234 -rw-r--r-- 2 user group 1024 Jan 1 00:00 file.txt
1234 -rw-r--r-- 2 user group 1024 Jan 1 00:00 link1.txt
1245 lrwxrwxrwx 1 user group   8 Jan 1 00:00 link2.txt -> file.txt

在这个例子中,file.txtlink1.txtlink2.txt都是指向同一个文件的链接。link1.txt是硬链接,而link2.txt是软链接。你可以看到,link1.txtfile.txt的inode号码是相同的,而link2.txt的inode号码是不同的,因为它是一个软链接。

现在,让我们删除link1.txtlink2.txt

$ rm link1.txt link2.txt

删除后,file.txt仍然存在,因为它是原始文件。但是,如果你删除了file.txt,那么所有的链接都将变为无效,因为系统不再有任何指向该文件的引用。

总结:

硬链接和软链接是Linux下文件系统级别的链接方式,它们允许你在不同的目录中创建指向同一个文件的引用。硬链接和软链接的主要区别在于它们的实现方式和删除方式。硬链接是指向同一个inode的多个文件名,而软链接是一个特殊类型的文件,它包含了一个指向另一个文件的文本指针。在删除链接时,硬链接不会影响原始文件,而软链接不会影响原始文件。

相关文章:

  • 生产派工自动化:MES系统的关键作用
  • 第三十二章 控制到 XML 模式的映射 - %ListOfObjects
  • 金融专题 | 对复杂的金融工具进行设计、定价和对冲分析
  • Redis第1讲——入门简介
  • 【MODBUS】Modbus主站云端服务器和边缘设备部署区别
  • yarn或者pnpm第一次执行的时候遇到报错yarn : 无法加载文件......因为在此系统上禁止运行脚本
  • flex布局,换行的元素上下设置间距
  • 计算机毕业设计 基于SpringBoot的乡村政务办公系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 汽车IVI中控开发入门及进阶(十一):ALSA音频
  • 【APP安卓测试工具】adb(Android Debug Bridge)
  • 【Docker】进阶之路:(十三)Docker Swarm
  • 基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(三)
  • 算法 - 二分搜索法 / 二分法(704)
  • 【教程】制作 iOS 推送证书
  • Rust测试字符串的移动,Move
  • .pyc 想到的一些问题
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Javascript编码规范
  • Java的Interrupt与线程中断
  • MySQL主从复制读写分离及奇怪的问题
  • Terraform入门 - 3. 变更基础设施
  • 使用 QuickBI 搭建酷炫可视化分析
  • 算法系列——算法入门之递归分而治之思想的实现
  • 王永庆:技术创新改变教育未来
  • 写代码的正确姿势
  • 用mpvue开发微信小程序
  • raise 与 raise ... from 的区别
  • Semaphore
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • !$boo在php中什么意思,php前戏
  • ###项目技术发展史
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $().each和$.each的区别
  • $(selector).each()和$.each()的区别
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2022 CVPR) Unbiased Teacher v2
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (四) 虚拟摄像头vivi体验
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)Java算法:二分查找
  • (一)为什么要选择C++
  • (转)程序员技术练级攻略
  • *上位机的定义
  • .NET 5种线程安全集合
  • .net framework4与其client profile版本的区别
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET企业级应用架构设计系列之技术选型
  • .NET中使用Redis (二)