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

Linux:软链接和硬链接的理解

Linux通过命令行创建快捷方式使用的命令是ln,这里就涉及到了软链接和硬链接,确实有些不好理解,如果你也一样,那么可以继续看下去了

目录

  • ln命令
  • 语法
  • 实操
    • 创建软链接:ln -s [源文件或目录][目标文件或目录]
    • 创建硬链接:ln [源文件或目录][目标文件]
    • 删除源文件,软链接和硬链接的表现
  • 软链接和硬链接原理
    • 软链接
    • 硬链接
    • 图示软硬链接的区别
    • 硬链接和软链接的区别

ln命令

在Linux系统也可以创建快捷方式,和在win系统下是一样的,同样是使用快捷方式就可以直接进入到原文件夹的目录,或者原文件,不需要点击原文件

Linux ln(英文全拼:link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。

语法

 ln [参数][源文件或目录][目标文件或目录]

⚠️: 目标文件可以不存在,在创建链接时候会默认创建同名的文件

此处感谢大佬的指点:bluetata

实操

创建软链接:ln -s [源文件或目录][目标文件或目录]

对文件lnTest.sh创建快捷方式
在这里插入图片描述
创建快捷方式lnTest-1.sh,可以看到lnTest-1.sh -> lnTest.sh
在这里插入图片描述

创建硬链接:ln [源文件或目录][目标文件]

对文件lnTest2.sh创建快捷方式lnTest2-1.sh,发现和软链接有区别
在这里插入图片描述

删除源文件,软链接和硬链接的表现

如下图结果
在这里插入图片描述
删除源文件后,软链接创建的快捷方式依然失效,但硬链接创建的快捷方式无影响

为什么呢有如此区别呢?那让我们进入理论部分


软链接和硬链接原理

软链接

  • 软链接类似windows系统的快捷方式;
  • 软链接里面存放的是源文件的路径,指向源文件;
  • 删除源文件,软链接依然存在,但无法访问源文件内容;(上面实操的结论)
  • 软链接失效时一般是白字红底闪烁;
  • 创建软链接命令 ln -s 源文件 软链接文件;
  • 软链接和源文件是不同的文件,文件类型也不同,inode号也不同;
  • 软链接的文件类型是“l”,可以用rm删除。

硬链接

  • 相同inode节点号的多个文件互为硬链接文件;
  • 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除;(上面实操的结论)
  • 只有删除了源文件和所有对应的硬链接文件,文件实体才会被删除;
  • 硬链接文件是文件的另一个入口;
  • 可以通过给文件设置硬链接文件来防止重要文件被误删;
  • 创建硬链接命令 ln 源文件 硬链接文件;
  • 硬链接文件是普通文件,可以用rm删除;
  • 对于静态文件(没有进程正在调用),当硬链接数为0时文件就被删除。注意:如果有进程正在调用,则无法删除或者即使文件名被删除但空间不会释放。

图示软硬链接的区别

在这里插入图片描述

硬链接和软链接的区别

  • 原理上,硬链接和源文件的inode节点号相同,两者互为硬链接。软连接和源文件的inode节点号不同,进而指向的block也不同,软连接block中存放了源文件的路径名。
  • 实际上,硬链接和源文件是同一份文件,而软连接是独立的文件,类似于快捷方式,存储着源文件的位置信息便于指向。
  • 使用限制上,不能对目录创建硬链接,不能对不同文件系统创建硬链接,不能对不存在的文件创建硬链接;可以对目录创建软连接,可以跨文件系统创建软连接,可以对不存在的文件创建软连接。

相关文章:

  • 【LeetCode】每日一题(1)
  • Linux内核并发与竞争-原子操作
  • 【Spring】注解实现IOC操作,你理解了吗?
  • 【C++:STL之栈和队列 | 模拟实现 | 优先级队列 】
  • 面试官问:如何确保缓存和数据库的一致性?
  • Java零基础教程——数据类型
  • SharkTeam:Move合约开发与合约安全
  • 刚刚,体验了一把Bing chat很爽
  • 【计算机网络】Linux环境中的TCP网络编程
  • 【SpringBoot】SpringBoot常用注解
  • 【性能】性能测试理论篇_学习笔记_2023/2/11
  • 【Hello Linux】 Linux基础命令
  • 【Python小游戏】通过这款专为程序员设计的《极限车神》小游戏,你的打字速度可以赢过专业录入员,这个秘密98%的人都不知道哦~(爆赞)
  • C++之多态【详细总结】
  • Android 逆向工具大整理,碉堡了
  • [译]如何构建服务器端web组件,为何要构建?
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 2017届校招提前批面试回顾
  • chrome扩展demo1-小时钟
  • input的行数自动增减
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • rabbitmq延迟消息示例
  • Redis中的lru算法实现
  • Travix是如何部署应用程序到Kubernetes上的
  • 诡异!React stopPropagation失灵
  • 解决iview多表头动态更改列元素发生的错误
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 源码安装memcached和php memcache扩展
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • k8s使用glusterfs实现动态持久化存储
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​插件化DPI在商用WIFI中的价值
  • ​一些不规范的GTID使用场景
  • #include到底该写在哪
  • $GOPATH/go.mod exists but should not goland
  • (3)nginx 配置(nginx.conf)
  • (ZT)一个美国文科博士的YardLife
  • (阿里云万网)-域名注册购买实名流程
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (离散数学)逻辑连接词
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .Net接口调试与案例
  • .net项目IIS、VS 附加进程调试
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [2]十道算法题【Java实现】