首页 > 系统相关 >【Linux探索学习】第二十四弹——软硬链接:Linux 中的软链接与硬链接详解

【Linux探索学习】第二十四弹——软硬链接:Linux 中的软链接与硬链接详解

时间:2024-12-28 15:58:23浏览次数:8  
标签:文件 file1 创建 第二十四 Linux txt inode 链接

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 硬链接的特点

  1. 同一文件系统内:硬链接只能在同一文件系统内创建,不能跨文件系统。
  2. 不可链接目录:通常情况下,用户无法为目录创建硬链接,以避免循环引用。
  3. 相同的 inode:硬链接共享相同的 inode,删除一个硬链接不会影响其他链接。
  4. 文件数量:通过 ls -l 命令查看文件时,会显示链接计数,即有多少个链接指向该 inode。(ls -li可以查看包括inode编号在内更具体的内容)
操作命令结果
创建文件echo "Hello" > file1.txt创建名为 file1.txt 的文件
创建硬链接ln file1.txt file2.txtfile1.txt 和 file2.txt 均指向同一数据
查看文件信息ls -l显示硬链接计数
删除硬链接rm file1.txtfile2.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 软链接的特点

  1. 可跨文件系统:软链接可以跨文件系统创建。
  2. 可以链接目录:软链接可以指向文件和目录。
  3. 不同的 inode:软链接具有自己独立的 inode,删除原文件后,软链接将指向一个无效的路径。
  4. 可读性:软链接包含原文件的路径,用户可以轻松识别其指向的文件。
操作命令结果
创建软链接ln -s file1.txt symlink_to_file1.txt创建指向 file1.txt 的软链接
查看软链接信息ls -l显示原文件的路径信息
删除原文件rm file1.txtsymlink_to_file1.txt 变为无效链接
创建指向目录的软链接ln -s /etc symlink_to_etc创建指向 /etc 目录的软链接

3.3 软链接的使用场景

  • 简化路径:可以使用软链接简化长路径名的访问。比如我们的桌面向导就是软链接的一种应用方式。
  • 版本管理:在很多软件中,常使用软链接来管理不同版本的可执行文件。

4. 硬链接与软链接的比较

下面是硬链接与软链接的对比表:

特性硬链接软链接
inode 数量共享同一 inode拥有自己的 inode
文件系统限制只能在同一文件系统内可以跨文件系统
链接目录不可以创建可以创建
删除文件影响删除一个链接不会影响其他链接删除原文件会导致无效链接
可读性不可读,只有 inode可读,显示原文件路径
创建命令ln file1.txt file2.txtln -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 中的软链接与硬链接,并在日常工作中合理应用它们。如果有不理解的地方或者讲解有误的地方欢迎在评论区中指出,或者与我私信交流学习

本篇笔记:


感谢各位大佬观看,创作不易,还请各位大佬点赞支持!!!

标签:文件,file1,创建,第二十四,Linux,txt,inode,链接
From: https://blog.csdn.net/2301_80220607/article/details/144776270

相关文章

  • [Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下
    wireshark下载链接:https://pan.quark.cn/s/eab7f1e963be提取码:rRAg链接失效(可能会被官方和谐)可评论或私信我重发chrome与firefox在访问https网站的时候会将密钥写入这个环境变量SSLKEYLOGFILE中,在wireshark中设置就可以解析https变量配置环境变量先创建文件ssl.log,点击......
  • odoo12环境搭建(linux系统)
    1.准备环境Centos7.6.1810:Postgresql12:Centos7下安装Postgresql12-CSDN博客python3.6.7:Centos7下搭建python3.6.7环境-CSDN博客odoo12:https://github.com/odoo/odoo/archive/refs/heads/12.0.zip2.odoo12环境配置odoo12源码解压,我放置在 /home/soft/odoo12路径下配......
  • Linux文本处理的利剑:grep、sed和awk的深度解析与应用
    前言:在Linux系统管理与开发工作中,文本处理是一项核心技能。面对海量日志文件、配置文件或数据文件,如何快速提取、分析或修改所需信息,成为衡量一个Linux用户熟练度的重要标准。Linux系统中的grep、sed和awk工具,因其强大且灵活的文本处理能力,被冠以“文本处理三剑客”的美誉。它们不......
  • 【Linux系列】Linux 命令行中的`cat`与`/dev/null`:清空文件
    ......
  • systemd服务(一):Linux程序崩溃自启动方法
     linux进程挂掉后,可以通过配置systemd来自动启动服务1.创建systemd服务文件,例如:huyang.service,需要放置在系统文件夹/etc/systemd/system2.编辑文件,填写详细信息3.操作systemd服务[Unit]Description=huyangSCRSserver#对服务的描述After=netw......
  • Linux实时查看网卡流量为多少?如何查看历史网卡流量?
    在Linux中,你可以使用多种工具来实时查看网卡流量以及检查历史网卡流量数据。下面我将列出一些常见的方法:1.实时查看网卡流量iftopiftop是一个实时流量监控工具,它显示类似于top命令的输出。你需要先安装它:sudoapt-getinstalliftop#Debian/Ubuntusudoyuminstallif......
  • Kali Linux 如何安装.
    首先,下载Kali镜像文件,这里推荐Weekly镜像版本,最新版本不容易出错,这里使用虚拟机搭建,安装在实体机上是一样的.打开kali.org网站,点击下载按钮.点击InstallerImages.下拉,选择x86_64平台,选择Weekly,点击下载.下载完成.这里使用virtualbox进行安装,新建虚拟机,选择刚......
  • Linux内核蓝牙子系统有什么(9)
    接前一篇文章:Linux内核蓝牙子系统有什么(8) 本文内容参考:Linux之蓝牙相关代码浅析|DD'Notes蓝牙驱动相关代码_蓝牙驱动代码-CSDN博客linux蓝牙驱动代码阅读笔记_bt-sco.c-CSDN博客Linux内核的蓝牙子系统架构-CSDN博客BlueZ-Linux平台上的蓝牙协议栈-CSDN博客蓝牙模......
  • linux中,redis哨兵和数据持久化存储
    redis哨兵:"主从同步增强架构","读写分离","高可用" 1.概念 是Redis主从同步的增强架构,可以实现Redis主从同步的读写分离和高可用 2.特性: 1、可以承接客户端连接,但不存储数据 2、实现Redis主从复制组的监控 3、实现Redis主从的读写分离 4、Redis主从复制组的故......
  • lpksetup.exe与 语言包安装 和 本地化设置 相关,主要用于帮助用户添加或删除 Windows
    lpksetup.exe是Windows操作系统中的一个可执行文件,位于C:\Windows\System32目录下。它与语言包安装和本地化设置相关,主要用于帮助用户添加或删除Windows操作系统的语言包。以下是对lpksetup.exe的详细介绍:1. 功能lpksetup.exe主要用于管理Windows操作系统的语......