【Linux】什么是文件系统及inode?如何创建软硬链接?软硬链接有什么作用?

文章详细介绍了Linuxext2文件系统结构,包括BlockGroup、SuperBlock、inode等概念。接着,讨论了软链接和硬链接的创建及区别。硬链接不创建新文件,共享相同inode和内容,而软链接有自己的inode,通过路径指向源文件,类似于Windows的快捷方式。当删除源文件时,硬链接数量减一,当硬链接数为0时文件才真正删除;软链接则会失效,除非有同名新文件产生。

inode

了解一下文件系统:
在这里插入图片描述

Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被
划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设
定block大小为1024、2048或4096字节。而上图中启动块(Boot Block)的大小是确定的

  • Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相
    同的结构组成。政府管理各区的例子
  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,
    未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的
    时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个
    文件系统结构就被破坏了—备份
  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息
  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没
    有被占用
  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
  • inode Table 节点表:存放文件属性 如 文件大小,所有者,最近修改时间等,保存了分组内部所有可用的inode(已经使用/没有使用)
  • Date blocks :保存的是分组内部所有文件的数据块

软硬链接

创建软硬链接

创建软链接:

我们先随便touch一个文件file.txt,我们使用ll -li命令查看到的前面的数字是inode的值,这里是658016
在这里插入图片描述

给一个文件创建软链接命令:

ln -s file.txt soft_file.link

软链接的inode值是658307
在这里插入图片描述

创建硬链接:

给一个文件创建硬链接命令:

ln file.txt hard_file.link

我们可以发现file.txthard_link的属性和inode都是一样的
在这里插入图片描述

理解硬链接

我们给file.txt文件中追加重定向一些数据:
在这里插入图片描述
我们使用cat命令查看file.txthard_file.link里面的数据,可以发现都是一样的内容
在这里插入图片描述

建立一个硬链接,究竟是做了什么?
 建立硬链接,根本没有创建新文件!因为没有给硬链接分配独立的inode既然没有创建文件,那么你一定没有自己的属性集合和内容集合你用的一定是别人的inode和内容
在这里插入图片描述
在这里插入图片描述
这个数字2,其实就是inode里面用来引用计数的硬链接数。

建立一个硬链接,就是在指导的路径下,新增文件名和inode编号的映射关系

什么时候一个文件算是被真正删除了?
 我们将file.txt删除后,它的硬链接个数会-1
在这里插入图片描述

当一个人文件的硬链接数变为0的时候,这个文件才算真正被删除了

理解软链接

我们将软链接的文件file.txt删除,我们会发现它的软链接标红了,且我们使用cat命令显示找不到这个文件,同样也可以说明,软链接不是通过inode编号去寻找file.txt,因为硬链接跟原文件inode编号是一样的,软链接是通过文件路径来寻找的。
在这里插入图片描述

比如我们重新创建一个同名文件,他有全新的inode,这时候软链接就恢复了,但是跟之前的硬链接已经没关系了:
在这里插入图片描述

一般情况下,软链接相当于windows下软件的快捷方式
在这里插入图片描述

总结软硬件链接:

  • 软硬链接有什么区别:是否具有独立的inode
  • 软链接具有独立的inode,可以被当做独立文件看待
  • 硬链接没有独立的inode

软链接的作用:

下面是完整的shell操作流程:

[AMY@VM-12-15-centos lesson_13]$ mkdir -p ./bin/exe/mydir/
[AMY@VM-12-15-centos lesson_13]$ cd ./bin/exe/mydir/
[AMY@VM-12-15-centos mydir]$ ll
total 0
[AMY@VM-12-15-centos mydir]$ touch hello.c
[AMY@VM-12-15-centos mydir]$ vim hello.c
[AMY@VM-12-15-centos mydir]$ cat hello.c
#include <stdio.h>
int main()
{
    printf("hello world!!\n");
    return 0;
}
[AMY@VM-12-15-centos mydir]$ gcc -o hello hello.c
[AMY@VM-12-15-centos mydir]$ ll
total 16
-rwxrwxr-x 1 AMY AMY 8360 Jun 24 16:28 hello
-rw-rw-r-- 1 AMY AMY   79 Jun 24 16:27 hello.c
[AMY@VM-12-15-centos mydir]$ cd -
/home/AMY/zt/lesson_13
[AMY@VM-12-15-centos lesson_13]$ pwd
/home/AMY/zt/lesson_13
[AMY@VM-12-15-centos lesson_13]$ ln -s ./bin/exe/mydir/hello myhello
[AMY@VM-12-15-centos lesson_13]$ ll -i
total 4
658016 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:26 bin
658313 lrwxrwxrwx 1 AMY AMY   21 Jun 24 16:30 myhello -> ./bin/exe/mydir/hello
[AMY@VM-12-15-centos lesson_13]$ ./myhello
hello world!!

上面的主要意思就是在该路径lesson_13下面创建一个目录到./bin/exe/mydir/,然后在这个路径写一个程序hello.c用来输出hello world!!,然后回到原路径,创建一个软链接ln -s ./bin/exe/mydir/hello myhello,运行程序./myhello输出hello world!!

硬链接的作用:

思考下面为什么普通文件的硬链接个数是1,而目录文件的硬链接是2
在这里插入图片描述

一个普通文件,本身就有一个文件名和自己的inode具有一个映射关系

在这里插入图片描述

而一个目录文件,除了本身文件名与自己的inode的一个映射关系,在目录里面还有.表示当前文件,与目录也具有一个映射关系,所以它的初始硬链接个数是2.

我们在mydir里面再创建一个目录,它的硬链接就是3

[AMY@VM-12-15-centos empty]$ ll -ia
total 8
658308 drwxrwxr-x 2 AMY AMY 4096 Jun 24 16:57 .
658307 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:57 ..
[AMY@VM-12-15-centos empty]$ cd ..
[AMY@VM-12-15-centos mydir]$ ll -ia
total 12
658307 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:57 .
658301 drwxrwxr-x 3 AMY AMY 4096 Jun 24 16:47 ..
658308 drwxrwxr-x 2 AMY AMY 4096 Jun 24 16:57 empty
[AMY@VM-12-15-centos mydir]$ cd ..
[AMY@VM-12-15-centos lesson_13]$ ll -ia
total 12
658301 drwxrwxr-x  3 AMY AMY 4096 Jun 24 16:47 .
664585 drwxrwxr-x 17 AMY AMY 4096 Jun 23 20:38 ..
658016 -rw-rw-r--  1 AMY AMY    0 Jun 24 16:47 file.txt
658307 drwxrwxr-x  3 AMY AMY 4096 Jun 24 16:57 mydir

在这里插入图片描述


如有错误或者不清楚的地方欢迎私信或者评论指出🚀🚀

<think>好的,我需要详细分析用户关于Linux硬链接和软链接区别的问题,并结合提供的引用内容来组织回答。首先,用户希望了解两者的区别,我需要从定义、创建方式、特性、应用场景等方面展开。 首先,根据引用[1],硬链接和软链接都是链接机制,允许多个路径指向同一文件或目录。硬链接是直接指向inode,而软链接则是独立的文件,存储目标路径。引用[2]提到硬链接共享inode,而软链接有自己的inode,这点需要确认是否正确,因为通常软链接确实有自己的inode,但存储的是路径。引用[3]提供了创建命令,硬链接用ln,软链接用ln -s,并且强调软链接需要绝对路径。引用[4]指出软链接类似快捷方式,依赖源文件,而硬链接则更稳定。 接下来,我需要确保回答覆盖以下区别点: 1. 定义与存储方式:硬链接共享inode,软链接独立inode存储路径。 2. 跨文件系统支持:硬链接不支持,软链接支持。 3. 源文件删除的影响:硬链接不受影响,软链接失效。 4. 目录链接:硬链接不能链接目录,软链接可以。 5. 文件大小:硬链接大小与源相同,软链接较小(路径长度)。 6. 创建命令:ln和ln -s。 7. 应用场景:硬链接用于备份,软链接用于快捷方式。 需要检查引用内容是否有冲突。比如,引用[2]说硬链接共享inode,而软链接是否独立inode?是的,正确。引用[4]提到软链接数据块存路径,正确。创建命令在引用[3]中正确。 现在组织回答结构,先概述两者,再分点对比,最后应用场景。确保使用正确格式:行内公式用$...$,独立公式用$$...$$,但此处可能不需要公式,所以主要用列表和代码块。引用标识放在相关段落末尾,如[^1]、[^2]等。 可能需要验证某些细节,比如硬链接是否真的不能跨文件系统。根据Linux知识,是的,因为inode文件系统唯一的,所以硬链接必须同一文件系统。而软链接可以跨,正确。 最后生成相关问题,确保问题覆盖主要知识点,如创建方法、应用、限制等。</think>### Linux硬链接与软链接的区别 #### 1. **定义与存储方式** - **硬链接**:多个文件名直接指向同一个$inode$(索引节点),本质是同一文件的不同入口。删除源文件后,硬链接仍可访问数据[^2][^3]。 - **软链接**:独立文件,拥有自己的$inode$,但文件内容存储的是目标文件的路径。若源文件被删除,软链接会失效(“断链”)[^4][^1]。 #### 2. **跨文件系统支持** - **硬链接**:仅限同一文件系统创建(因$inode$是文件系统内唯一标识)[^2]。 - **软链接**:支持跨文件系统和分区(仅需存储目标路径)[^4]。 #### 3. **对目录的支持** - **硬链接**:默认不可链接目录(防止目录循环问题)。 - **软链接**:可指向目录,常用于简化路径访问。 #### 4. **源文件删除的影响** - **硬链接**:源文件删除后,硬链接仍有效($inode$引用计数减少,数据未删除)[^2]。 - **软链接**:源文件删除后,软链接变为“悬空链接”,无法访问。 #### 5. **文件大小** - **硬链接**:与源文件大小相同(共享同一数据块)。 - **软链接**:大小等于目标路径的字符串长度(例如路径`/home/file`占9字节)。 #### 6. **创建命令** - **硬链接**:`ln 源文件 目标路径` ```bash ln /home/file /tmp/hard_file ``` - **软链接**:`ln -s 源文件绝对路径 目标路径` ```bash ln -s /home/file /tmp/soft_file ``` #### 7. **典型应用场景** - **硬链接**:备份关键文件(如配置文件),确保数据冗余。 - **软链接**:创建快捷方式(如版本切换、简化长路径)。 ---
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侠客cheems

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值