实验题目

下面的练习检查了UNIX或Linux系统上文件和inode之间的关系。在这些系统上,文件用inode表示。也就是说,一个inode是一个文件(反之亦然)。可以在随本文提供的Linux虚拟机上完成此练习。也可以在任何Linux、UNIX或MacOSX系统上完成练习,但需要创建两个名为file1.txt和file3.txt的简单文本文件,其内容是唯一的句子。

相关原理与知识

  1. inode(索引节点)
    在UNIX和Linux系统中,每个文件都由一个唯一的inode表示。inode是文件系统中用于存储文件元数据的数据结构,包括文件的大小、权限、时间戳等信息,但不包含文件名。文件名仅作为目录条目的一部分存在。
  2. 硬链接与软链接
    • 硬链接:多个文件名可以指向同一个inode。硬链接不会创建新的文件,而是为现有文件提供额外的入口。
    • 软链接(符号链接):软链接是一个特殊的文件,它指向另一个文件的路径。软链接有自己的inode。
  3. 文件与inode的关系
    • 每个文件都有一个唯一的inode编号。
    • 删除文件时,实际上是从目录中移除文件名与inode的关联。只有当inode的引用计数降为0时,文件才会被真正删除。

实验过程

  1. 创建文件
    在Linux系统中,创建两个简单的文本文件file1.txt和file3.txt,分别写入唯一的句子
    image.png

  2. 查看文件的inode编号
    使用ls-i命令查看文件的inode编号
    image.png
    从输出可以看出,file1.txt和file3.txt的inode编号不同,说明他们是两个独立的文件。

  3. 创建硬链接
    为file1.txt创建一个硬链接file2.txt,再次查看文件的inode编号
    image.png
    可以看到,file1.txt和file2.txt共享同一个inode编号,说明它们是同一个文件的不同入口。

  4. 创建软链接
    为file3.txt创建一个软链接file4.txt,查看文件的inode编号:
    image.png
    可以看到,file3.txt和file4.txt的inode编号不同,说明软链接是一个独立的文件,只是指向了file3.txt的路径。

  5. 删除文件
    • 删除file2.txt(硬链接)后,file1.txt仍然存在,因为它们共享同一个inode。
    • 删除file4.txt(软链接)后,file3.txt不受影响,因为软链接只是一个路径指向。

实验结果与分析

  1. 实验结果
    image.png

  2. 结果分析

  • 文件与inode是一一对应的,inode存储了文件的元数据。
  • 硬链接不会创建新的文件,而是为现有文件提供额外的入口,所有硬链接共享同一个inode。
  • 软链接是一个独立的文件,有自己的inode,但它指向另一个文件的路径。

问题总结

  1. 遇到的问题
  • 在创建软链接时,如果目标文件不存在,软链接会变成无效链接。
  • 删除硬链接时,需要理解inode的引用计数机制。
  1. 解决方法
  • 确保目标文件存在后再创建软链接。
  • 通过ls-l查看文件的链接数量,了解inode的引用计数。

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#创建文件
echo"Thisisfile1.">file1.txt
echo"Thisisfile3.">file3.txt

#查看文件的inode编号
echo"查看文件的inode编号:"
ls-ifile1.txtfile3.txt

#创建硬链接
lnfile1.txtfile2.txt
echo"创建硬链接后查看inode编号:"
ls-ifile1.txtfile2.txt

#创建软链接
ln-sfile3.txtfile4.txt
echo"创建软链接后查看inode编号:"
ls-ifile3.txtfile4.txt

#删除文件
rmfile2.txt
echo"删除硬链接后,file1.txt仍然存在"

rmfile4.txt
echo"删除软链接后,file3.txt不受影响"