Linux探索学习:
https://blog.csdn.net/2301_80220607/category_12805278.html?spm=1001.2014.3001.5482
前言:
在 Linux 文件系统中,链接是管理文件的一种重要机制。链接允许我们创建指向文件的引用,有助于节省存储空间和提高数据管理的灵活性。根据链接的性质,Linux 中的链接可以分为两种:硬链接(Hard Link)和软链接(Symbolic Link,也称为符号链接)。本文将深入探讨这两种链接的原理、使用场景及其差异,并提供相应的示例和表格。
目录
目录
1. 链接的基本概念
2. 硬链接详解
2.1 硬链接的创建
2.2 硬链接的特点
2.3 硬链接的使用场景
3. 软链接详解
3.1 软链接的创建
编辑
3.2 软链接的特点
3.3 软链接的使用场景
4. 硬链接与软链接的比较
4.1 示例代码
4.1.1 硬链接示例
4.2.2 软链接示例
5. 拓展
编辑
6. 总结
1. 链接的基本概念
在 UNIX/Linux 系统中,文件并不仅仅是存储在硬盘上的数据块,它们还具有文件名、权限、时间戳等属性。文件系统将文件名与文件数据块之间的映射称为“链接”。每个文件都有一个唯一的 inode(索引节点),用于存储该文件的元数据,包括文件的物理位置(数据块的地址)。关于inode的知识在前面已经详细讲解过了,这里就不再作详解了,有需要的可以看一下前面的内容。
- 硬链接 是指多个文件名指向同一个 inode,意味着这些文件名实际上引用的是同样的数据。删除其中一个硬链接,并不会影响其他硬链接。
- 软链接 则是一个独立的文件,包含指向另一个文件路径的引用。软链接可以指向其他文件或目录,甚至是不存在的文件。
我们先来看一下关于链接的一些基本知识,首先我们要先直到什么是链接?其实我们之前已经接触过关于链接的概念了
当我们使用ls -l指令查看一个文件的属性时,第二列会有一个数字,这个数字就叫做链接数,链接分为硬链接和软链接两种,下面我们分别来看一下
2. 硬链接详解
2.1 硬链接的创建
在 Linux 中,可以使用 ln
命令来创建硬链接。
# 创建一个文件
echo "Hello, World!" > file1.txt# 创建一个硬链接
ln file1.txt file2.txt
在前面我们讲过查看文件inode的方式是通过ls -li指令
ls -li
执行完上面的硬链接后,我们可以发现这样的结果:
它们的inode是一样的,也就是说它们指向同一片空间,拥有同样的内容,而且它们的链接数也变为了2,当我们删除这两个文件的其中一个时,剩下的那个硬链接数就又会变成1,这其实是因为在inode中是有一个引用计数的东西来记录有几个文件指向这个inode的
2.2 硬链接的特点
- 同一文件系统内:硬链接只能在同一文件系统内创建,不能跨文件系统。
- 不可链接目录:通常情况下,用户无法为目录创建硬链接,以避免循环引用。
- 相同的 inode:硬链接共享相同的 inode,删除一个硬链接不会影响其他链接。
- 文件数量:通过
ls -l
命令查看文件时,会显示链接计数,即有多少个链接指向该 inode。(ls -li可以查看包括inode编号在内更具体的内容)
操作 | 命令 | 结果 |
---|---|---|
创建文件 | echo "Hello" > file1.txt | 创建名为 file1.txt 的文件 |
创建硬链接 | ln file1.txt file2.txt | file1.txt 和 file2.txt 均指向同一数据 |
查看文件信息 | ls -l | 显示硬链接计数 |
删除硬链接 | rm file1.txt | file2.txt 仍然存在,文件内容不受影响,但是硬链接数会减1 |
2.3 硬链接的使用场景
- 文件备份:可以创建文件的多个硬链接,便于快速备份和恢复。比如当我们误删一个文件时,就可以通过之前系统帮忙建立的硬链接找到备份文件,然后就可以恢复。
- 版本控制:在软件开发过程中,可以通过硬链接管理多个版本的文件。
3. 软链接详解
3.1 软链接的创建
软链接的创建也使用 ln
命令,但需要加上 -s
选项。
# 创建一个软链接
ln -s file1.txt symlink_to_file1.txt
执行结果:
创建软链接后,我们可以发现生成的软链接的文件的inode编号与原文件并不同,也就是说生成的这个文件是一个独立的新的文件,而且它们的链接数也没有发生变化就可以证明它们两个并没有指向同一个inode,那么软链接生成的这个文件内放的是什么内容呢?我们来看这样一条指令
cat symlink_to_file1.txt
我们发现我们可以通过这个文件来打印原文件中的内容,我们之前也讲过cat指令执行打印时,后面需要跟文件的路径,所以说软链接生成的这个新文件里面存放的实际上就是原文件的路径
3.2 软链接的特点
- 可跨文件系统:软链接可以跨文件系统创建。
- 可以链接目录:软链接可以指向文件和目录。
- 不同的 inode:软链接具有自己独立的 inode,删除原文件后,软链接将指向一个无效的路径。
- 可读性:软链接包含原文件的路径,用户可以轻松识别其指向的文件。
操作 | 命令 | 结果 |
---|---|---|
创建软链接 | ln -s file1.txt symlink_to_file1.txt | 创建指向 file1.txt 的软链接 |
查看软链接信息 | ls -l | 显示原文件的路径信息 |
删除原文件 | rm file1.txt | symlink_to_file1.txt 变为无效链接 |
创建指向目录的软链接 | ln -s /etc symlink_to_etc | 创建指向 /etc 目录的软链接 |
3.3 软链接的使用场景
- 简化路径:可以使用软链接简化长路径名的访问。比如我们的桌面向导就是软链接的一种应用方式。
- 版本管理:在很多软件中,常使用软链接来管理不同版本的可执行文件。
4. 硬链接与软链接的比较
下面是硬链接与软链接的对比表:
特性 | 硬链接 | 软链接 |
---|---|---|
inode 数量 | 共享同一 inode | 拥有自己的 inode |
文件系统限制 | 只能在同一文件系统内 | 可以跨文件系统 |
链接目录 | 不可以创建 | 可以创建 |
删除文件影响 | 删除一个链接不会影响其他链接 | 删除原文件会导致无效链接 |
可读性 | 不可读,只有 inode | 可读,显示原文件路径 |
创建命令 | ln file1.txt file2.txt | ln -s file1.txt symlink_to_file1.txt |
4.1 示例代码
为了更好地理解硬链接和软链接,下面是一些实际操作的示例代码:
4.1.1 硬链接示例
# 创建文件
echo "This is a test file." > testfile.txt# 创建硬链接
ln testfile.txt hardlink1.txt
ln testfile.txt hardlink2.txt# 查看文件信息
ls -l
# 应该显示如:
# -rw-r--r-- 2 user user 22 Oct 1 12:00 hardlink1.txt
# -rw-r--r-- 2 user user 22 Oct 1 12:00 hardlink2.txt
# -rw-r--r-- 2 user user 22 Oct 1 12:00 testfile.txt# 删除原文件
rm testfile.txt# 查看文件信息
ls -l
# hardlink1.txt 和 hardlink2.txt 仍然存在,文件内容不受影响
4.2.2 软链接示例
# 创建文件
echo "This is another test file." > anotherfile.txt# 创建软链接
ln -s anotherfile.txt symlink_to_anotherfile.txt# 查看软链接信息
ls -l
# 应该显示如:
# lrwxrwxrwx 1 user user 20 Oct 1 12:00 symlink_to_anotherfile.txt -> anotherfile.txt# 删除原文件
rm anotherfile.txt# 查看软链接信息
ls -l
# symlink_to_anotherfile.txt 变为无效链接
5. 拓展
我们拓展一个小知识,是关于硬链接使用的问题
#创建一个普通文件
touch file1#创建一个目录
mkdir d1
当我们创建一个普通文件和一个目录时,我们发现创建的普通文件的链接数是1,而目录文件的链接数则是2,这是因为什么呢?
在之前我们讲过每一个目录下都默认有一个 . 文件和一个 .. 文件,其中 . 文件是当前目录的意思,其实这个文件就是当前目录的一个硬链接,所以硬链接数为2,而 .. 文件是上级目录文件的硬链接,所以上级目录文件对应的硬链接数也要加1
但是前面我们讲到了目录是不能创建硬链接的,这是针对我们用户而言的,这两个特殊文件是数据库已经设定好的,我们自己并不能进行创建,原因是可能导致环路问题(感兴趣的可以自己去搜一下,这里就不做讲解了)
6. 总结
在 Linux 系统中,理解硬链接和软链接的概念及其使用场景是非常重要的。硬链接适用于需要在同一文件系统内共享同一数据的场景,而软链接则提供了更大的灵活性,可以链接到不同文件系统的文件或目录。通过适当使用这两种链接,可以有效地管理文件,提高工作效率。希望本文能够帮助你深入了解 Linux 中的软链接与硬链接,并在日常工作中合理应用它们。如果有不理解的地方或者讲解有误的地方欢迎在评论区中指出,或者与我私信交流学习
本篇笔记:
感谢各位大佬观看,创作不易,还请各位大佬点赞支持!!!