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

【Linux】Linux的两种连接文件方法(ln | 符号链接和硬链接)

在一次线上配置文件时,不小心将配置文件config.py放在了错误的地方,而目前项目已经运行,又不能重新配置启动项目,那么如何将其他地方的文件放在当前配置目录来使用,并实现其他地方文件改动,配置目录下文件也会自己同步??

其实这个问题可以使用Linux的软链接或者硬链接来解决,换种说法就是:

如何在 Linux 中为文件创建硬练级和符号(软)链接,并探讨两者之间的相同和不同之处。

1.使用方法:

符号链接(软链接):

Linux 中使用 ln (link 的缩写)命令加上 -s(symbolic 的缩写) 
选项创建符号链接。

ln -s [链接指向的文件] [链接名]

ln -s test/a.txt /home/a.txt:为 test 目录下的 a.txt 文件创建一个在home下的名为 a.txt的符号链接

    虽然我们可以通过符号链接文件来读、写和执行文件,但却不代表符号链接文件和源文件是同一个文件。
    如果符号链接文件指定的源文件被删除,那这个符号链接文件就会失效(用 ls -l 列出会发现标红),读取或执行会显示“没有哪个文件或目录”的提示,这种情况下,我们就称这个符号链接断裂了。

硬链接:

Linux 中使用 ln (link 的缩写)命令创建硬链接。

ln [链接指向的文件] [链接名]

ln 1.txt 2.txt:为 1.txt 文件创建一个名为 2.txt 的硬链接

    创建前后,文件属性的第三个字段发生了改变,由一变成了二,表示文件的硬链接数目增加了一。当我们再为 1.txt 创建一个硬链接 3.txt 时,此时文件的硬链接数目变成了 3。但我们清楚,1.txt、2.txt、3.txt 本质上都是同一个文件。只不过这个文件有多个名字罢了。我们通过观察其 inode-number 可以发现,都是一样的,充分说明了这三个文件名实质上都指向了同一个文件。我们可以通过任意一个硬链接文件来读写和执行源文件。

    如果将源文件删除掉,创建的硬链接并不会像符号链接一样断裂。不过文件属性中的硬链接数据会减一。

    我们为 1.txt 文件创建了两个硬链接 2.txt 和 3.txt,那么就相当于这个文件在文件系统中有了三个文件名。这三个文件名都指向同一个文件内容。删除了一个文件,只是将某个文件名从文件系统中移除了,我们仍然能通过余下的文件名来访问这个文件的数据。

加粗样式事实上,只要文件还存在一个文件名,这个文件就一切正常。除非,你将三个文件都删除,我们才无法通过文件名找到文件 inode,进而访问文件数据,文件这才叫真真被删除。

2.关于Linux下 ‘链接’ 的理解:

符号链接与 Windows 中的快捷方式很像。Windows 中的快捷方式是一个带箭头的图标,空间占用一般很小,仅仅提供了一个指向目标文件的通道,Linux 中的符号链接也类似。符号链接应用很灵活,可以为任意文件创建符号链接。

虽然硬链接名字里面也有链接二字,但其与符号链接还是相当不一样的。要理解硬链接,我们得先了解若干基本概念。首先我们得搞明白 Linux 的文件是如何存储中,在 Linux 中当划分磁盘分区并格式化的时候,整个分区会被划分为两部分,即 Inode 区和 Data Block 区。

Linux 中每个文件都被分成两部分存放,一部分是文件的唯一标识,Inode-number 以及属性信息放在 Inode 区的一个
inode 中,Inode-number 和 inode 是一一对应的;另一部分是文件的实际数据,放在 Data Block 区中,在
Linux 中我们需要通过文件的 inode 来找到存放文件数据的 data block。在一个硬盘分区,不可能有两个文件公用一个
inode。自然也不可能有两个文件的 inode-number 是一样的。

如果我们将硬盘分区中所有的文件比作样一本书的话,inode 区就是其目录,data block 区对应其内容。我们必须通过目录才能找到具体的内容。我们可以通过 ls -il 列出文件的 inode-number(列出的第一个字段就是)。至此,我们初步弄明白了 Linux 中的文件到底是如何存储的,接下来我们还得弄明白 Linux 中的目录到底是怎样的文件。

Linux 中目录是一张表,每个表项代表一个文件。目录中有多少文件,就有多少表项。每个表项都包括两样数据,一是文件名,再就是 inode-number。因此 Linux 中存取文件的过程就是,通过文件名找到对应的 inode-number,再找到 inode,最后找到对应的数据。

硬链接就是在目录这张表中,让一个 inode-number 对应了多个文件名,文件 inode 和数据还是一份,没有变,只不过文件多了一个名字,这个名字就称为硬链接。

http://www.lryc.cn/news/224742.html

相关文章:

  • vue 点击滑动到页面指定位置(点击下滑滚动)的功能
  • LCD婴儿电子秤pcba/芯片方案设计
  • 2023年开发语言和数据库排行
  • 实现http请求-hutool
  • Ubuntu22.04 FTP 搭建以及挂载
  • Mac电脑Visio文件编辑查看软件推荐Visio Viewer for Mac
  • 【星海出品】flask (二) request替代VUE测试flask接口
  • Vue3路由配置
  • Harbor(V2.8+) 登录时报错 net/http: TLS handshake timeout
  • 【 云原生 | K8S 】kubectl 详解
  • 2011年03月24日 Go生态洞察:Gobs数据编码与Go的完美契合
  • Spring集成MyBatis(自定义类和xml配置文件两种形式)
  • Git系列之Git入门级(带你走进Git的世界)
  • GPU架构与计算入门指南
  • 功能测试转自动化测试好不好转型?
  • 微软surface laptop禁用触摸屏(win10、设备管理器)
  • 冒泡排序算法原理和代码实现,就是这么简单!
  • [工业自动化-6]:西门子S7-15xxx编程 - PLC系统硬件组成与架构
  • pinpoint监控tomcat应用,页面显示No data collected
  • 【左程云算法全讲4】前缀树、非比较排序
  • 微头条项目实战:新增RequestHeader注解
  • E云管家个微协议框架--新版本的利器
  • 百度上线“文心一言”付费版本,AI聊天机器人市场竞争加剧
  • 代码随想录算法训练营第四十七天丨 动态规划part10
  • 微前端:quankun
  • CSDN每日一题学习训练——Java版(克隆图、最接近的三数之和、求公式的值)
  • XOR Construction
  • K8S容器持续Terminating无法正常关闭(sider-car容器异常,微服务容器正常)
  • Spring 循环依赖
  • MySQL 8.0.13升级到8.0.35记录 .NET