Linux软硬链接介绍

linux文件系统

在这里插入图片描述

  1.  每个文件都独自占用一个 inode,文件内容由 inode 的记录来指向;
  2. 如果想要读取文件内容,就必须借助目录中记录的文件名找到该文件的 inode,才能成功找到文件内容所在的 block 块;
  3. inode 用来记录文件的权限(r、w、x)、文件的所有者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件的数据真正保存的 block 编号。
  4. 每个文件需要占用一个 inode。inode 中是不记录文件名的,因为文件名记录在文件所在目录的 block 中
  5. block 用于实际的数据存储,如果一个 block 放不下数据,则可以占用多个 block。例如,有一个 10KB 的文件需要存储,则会占用 3 个 block,虽然最后一个 block 不能占满,但也不能再放入其他文件的数据。这 3 个 block 有可能是连续的,也有可能是分散的

注意:每个文件都独自占用一个 inode,文件内容由 inode 的记录来指向;

如果想要读取文件内容,就必须借助目录中记录的文件名找到该文件的 inode,才能成功找到文件内容所在的 block 块

软链接:类似于 Windows 系统中给文件创建快捷方式,即产生一个特殊的文件,该文件用来指向另一个文件,此链接方式同样适用于目录

硬链接:我们知道,文件的基本信息都存储在 inode 中,而硬链接指的就是给一个文件的 inode 分配多个文件名,通过任何一个文件名,都可以找到此文件的 inode,从而读取该文件的数据信 

通俗说法总结起来就是

软链接 ---- 快捷方式

硬链接 ---- 像是原文件的复制品

ln命令 

用于创建文件链接,格式为        ln [选项] 源文件 目标文件

-s:建立软链接文件。如果不加 “-s” 选项,则建立硬链接文件;
-f:强制。如果目标文件已经存在,则删除目标文件后再建立链接文件;

软连接

软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求)否则软链接文件会报错

创建

[root@localhost ~]# touch soft.txt
[root@localhost ~]# ln -s soft.txt soft_test.txt
[root@localhost ~]# ll -i soft.txt 
51285150 -rw-r--r--. 1 root root 0 Aug 16 21:00 soft.txt
[root@localhost ~]# ll -i soft_test.txt 
51285221 lrwxrwxrwx. 1 root root 8 Aug 16 21:01 soft_test.txt -> soft.txt

这里看出 soft.txt 和 soft_test.txt 的 inode 是不一样的

软链接的特点

  1. 首先,权限位中"l"表示这是一个软链接文件;其次,在文件的后面通过 “->” 显示出源文件的完整名字
  2. 不论是修改源文件(check),还是修改硬链接文件(check-soft),另一个文件中的数据都会发生改变
  3. 删除软链接文件,源文件不受影响。而删除原文件,软链接文件将找不到实际的数据,从而显示文件不存在
  4. 软链接会新建自己的 inode 信息和 block,只是在 block 中不存储实际文件数据,而存储的是源文件的文件名及 inode 号
  5. 软链接可以链接目录
  6. 软链接可以跨分区

我们知道红帽8的dnf是yum的升级版,其实这里的yum就是指向dnf的软连接

[root@localhost ~]# whereis yum
yum: /usr/bin/yum /etc/yum /etc/yum.conf /usr/share/man/man8/yum.8.gz
[root@localhost ~]# ll /usr/bin/ | grep yum
lrwxrwxrwx. 1 root root           5 Sep  3  2019 yum -> dnf-3

硬链接

建立硬链接文件,目标文件没有写文件名,会和原名一致 

创建

[root@localhost ~]# touch hard.txt
[root@localhost ~]# ln hard.txt hard_test.txt
[root@localhost ~]# ll -i hard.txt 
51285229 -rw-r--r--. 2 root root 0 Aug 16 21:01 hard.txt
[root@localhost ~]# ll -i hard_test.txt 
51285229 -rw-r--r--. 2 root root 0 Aug 16 21:01 hard_test.txt

这里看出 hard.txt 和 hard_test.txt 的 inode 是一样的

硬链接的特点:

  1. 不论是修改源文件(test 文件),还是修改硬链接文件(test-hard 文件),另一个文件中的数据都会发生改变。
  2. 不论是删除源文件,还是删除硬链接文件,只要还有一个文件存在,这个文件(inode 号是 262147 的文件)都可以被访问。
  3. 硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。
  4. 硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的。
  5. 硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的 Linux 来讲过于复杂。

两种最主要的不同:

  1. 硬链接不会建立自己的 inode 索引和 block(数据块),而是直接指向源文件的 inode 信息和 block,所以硬链接和源文件的 inode 号是一致的
  2. 软链接会真正建立自己的 inode 索引和 block,所以软链接和源文件的 inode 号是不一致的,而且在软链接的 block 中,写的不是真正的数据,而仅仅是源文件的文件名及 inode 号
<think> 首先,用户的问题是关于Linux系统中软硬链接的知识,包括原理、区别和使用方法。我需要基于用户提供的引用内容来回答。 用户引用了多个来源: - 引用[1]:解释了软链接和硬链接的区别,包括创建命令(ln -s 软链接,ln 硬链接)、限制(如目录不能创建硬链接)、inode等。 - 引用[2]:补充了软硬链接的本质,硬链接和源文件是同一份文件,软连接是独立的文件。 - 引用[3]:强调了软链接有自己独立的inode,硬链接共享inode。 - 引用[4]:软链接存储目标文件的绝对路径,硬链接是映射关系。 - 引用[5]:涉及动态库、静态库等,但主要焦点在文件系统和软硬链接上。 系统级指令要求: - 所有行内数学表达式用$...$。由于主题是Linux软硬链接,可能不需要数学表达式,但如果有的话,必须正确格式。 - 独立公式用$$...$$。同样,可能不需要。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,如[^1]。 用户可见层要求: - 回答结构清晰,逐步解决问题。 - 保证真实可靠。 我的回答结构: 1. **原理**:解释软硬链接的工作原理。 2. **区别**:对比软硬链接的特性。 3. **使用方法**:如何创建软硬链接的命令和注意事项。 4. **相关问题**:最后生成相关问题。 关键点基于引用: - **原理**: - 硬链接:硬链接和源文件共享相同的inode,意味着它们指向磁盘上的同一数据块。删除源文件,硬链接仍然有效。[^1][^2][^3] - 软链接:软链接是一个独立的文件,有自己的inode,存储目标文件的路径。删除源文件,软链接失效。[^1][^2][^3][^4] - **区别**: - 文件独立性:硬链接共享inode;软链接有自己的inode。[^3] - 限制:硬链接不能用于目录,不能跨文件系统;软链接可以用于目录、跨文件系统。[^1][^2] - 删除影响:删除源文件,硬链接无影响;软链接失效。[^1][^2] - **使用方法**: - 创建硬链接:`ln source_file hard_link` - 创建软链接:`ln -s source_file soft_link` [^1] 在回答中,自然地添加引用标识: - 例如,当提到区别时,结尾加[^1]。 生成相关问题: - 根据主题,生成2-3个相关问题,如: 1. 软硬链接在文件系统中的作用是什么? 2. 如何管理软硬链接以防止失效? 3. 软硬链接在系统备份中的应用? 确保回答真实可靠:基于提供的引用内容,不要添加未引用或无根据的信息。 </think> ### Linux软硬链接的原理、区别和使用方法 在Linux文件系统中,软链接和硬链接是管理文件和目录引用的重要机制。下面我将基于您的引用内容,逐步解释其原理、区别和使用方法。回答结合了多个可靠来源的信息[^1][^2][^3][^4][^5]。 #### 1. **原理** - **硬链接**: 硬链接本质上是文件系统中对同一文件的多个引用名。它与源文件共享相同的inode(索引节点),指向磁盘上的同一数据块。创建硬链接时,系统不复制文件数据,而是增加一个指向源文件inode的文件名。因此,所有硬链接和源文件都代表同一个物理文件。当文件被访问时,系统通过inode编号追踪数据位置[^1][^3][^5]。 例如:创建硬链接后,源文件和硬链接的文件大小、修改时间相同,因为它们共享inode。 - **软链接**: 软链接是一个独立的特殊文件(类似于Windows快捷方式),拥有自己独立的inode和元数据。它不存储文件数据本身,而是存储目标文件的绝对路径(符号路径)。当访问软链接时,系统解析该路径,重定向到目标文件。如果目标文件被移动或删除,软链接会失效(称为“断链”)[^1][^2][^4][^5]。 例如:软链接文件大小很小,因为它只包含路径字符串。 #### 2. **区别** 软链接和硬链接在多个方面存在关键差异,以下是主要区别点: | 特性 | **硬链接** | **软链接** | 引用来源 | |------------------|-----------------------------------------------|-----------------------------------------------|----------| | **文件独立性** | 共享源文件的inode,不是独立文件 | 拥有独立inode,是独立文件 | [^1][^3] | | **创建限制** | 不能用于目录;不能跨分区/文件系统创建 | 可用于目录;支持跨分区/文件系统创建 | [^1][^2] | | **目标存在性** | 必须指向已存在的文件 | 可指向不存在的文件(但访问时会报错) | [^2][^4] | | **删除影响** | 删除源文件后,硬链接仍可访问数据 | 删除源文件后,软链接失效(显示“断链”错误) | [^1][^2] | | **文件大小** | 与源文件大小相同 | 大小等于路径字符串长度(通常很小) | [^3][^5] | | **跨系统兼容性** | 仅在同一文件系统内有效 | 可跨不同文件系统(如ext4到NTFS) | [^4][^5] | 关键总结:硬链接更节省空间且稳定,但限制多;软链接灵活但依赖目标路径[^1][^2][^4]。 #### 3. **使用方法** 在Linux中,使用`ln`命令创建链接: - **创建硬链接**: 命令:`ln <源文件> <硬链接文件名>` 示例:创建源文件`file.txt`的硬链接`hardlink.txt`: ```bash touch file.txt # 创建源文件 ln file.txt hardlink.txt # 创建硬链接 ``` 验证:使用`ls -i`查看inode,源文件和硬链接的inode编号相同。 注意事项:不能用于目录(如`ln dir hardlink_dir`会报错)[^1][^5]。 - **创建软链接**: 命令:`ln -s <源文件或目录> <软链接文件名>` 示例:创建目录`my_dir`的软链接`softlink_dir`: ```bash mkdir my_dir # 创建目录 ln -s my_dir softlink_dir # 创建软链接 ``` 验证:使用`ls -l`查看,软链接显示为`softlink_dir -> my_dir`。 注意事项: - 如果源文件被移动,软链接需更新;可使用相对路径或绝对路径(推荐绝对路径以防失效)。 - 跨分区创建有效,如`ln -s /mnt/disk/file.txt ~/link.txt`[^1][^4][^5]。 **最佳实践**: - 硬链接适合备份重要文件(数据不易丢失)。 - 软链接适合管理跨系统资源或动态路径(如库文件链接)。 - 删除链接:直接删除链接文件(如`rm hardlink.txt`),不影响源文件;但如果删除源文件,软链接失效需手动清理[^1][^2]。 #### 相关问题 1. 软硬链接Linux文件系统优化中的作用是什么?比如如何提升性能或减少存储占用? 2. 如何检测和处理失效的软链接(断链)? 3. 软硬链接Linux系统备份和恢复中的应用场景有哪些?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值