文章目录
- 一、文件和目录的一些命令
- `ls` 命令
- `stat` 命令
 
 
- 二、链接的概念
- 三、软链接(symbolic link)
- 创建和删除软链接的示例
- 软链接的特性
- 软链接的应用
- 使用 `find` 查找链接文件
 
 
- 四、硬链接(hard link)
- 创建和删除硬链接的示例
- 硬链接的特性
- 硬链接的应用
 
 
一、文件和目录的一些命令
ls 命令
 
在bash下执行:
ls -a -l -i

每一列的含义:
因为加了-i选项,所以多了一列inode编号
| 中文解释 | 英文解释 | 
|---|---|
| 节点编号 | inode | 
| 文件权限 | Permissions | 
| 硬链接数量 | Hard Links | 
| 文件所有者 | Owner | 
| 文件所属组 | Group | 
| 文件大小 | Size | 
| 最后修改时间 | Last Modified | 
| 文件/目录名 | Name | 
stat 命令
 
使用 stat 查看文件的详细信息,包括 Inode 号码:
stat [FileName]
可以查到文件的ACM时间:Access、Modify、Change
  File: ‘log’Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd01h/64769d	Inode: 1054710     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/    chen)   Gid: ( 1001/    chen)
Access: 2088-02-05 14:50:55.609459453 +0800
Modify: 2088-02-05 14:50:55.609459453 +0800
Change: 2088-02-05 14:50:55.609459453 +0800Birth: -
[!Abstract] 说明一下:
- Access - 最后访问时间
- Modify - 文件内容最后修改时间
- Change - 属性最后修改时间
二、链接的概念
什么是链接?
- 链接是文件系统中用于关联文件或目录的概念。
软链接和硬链接的区别
- 软链接:也称为符号链接,类似于 Windows 快捷方式,可以跨文件系统。
- 硬链接:指向相同 inode 的文件副本,不能跨文件系统。
三、软链接(symbolic link)
硬链接是通过inode引用另外一个文件,软链接是通过名字引用另外一个文件
创建和删除软链接的示例
-  使用 ln -s创建软链接:ln -s log log.soft.link 可以看到软连接 log.soft.link有自己独立于log的inode编号
-  和硬链接一样,软链接文件向文件中写入数据时原文件中也会存在该数据: 
  
-  但是当原文件被删除后,再次查看软链接文件报错: 
 ![[Pasted image 20240207192118.png]]
-  删除软链接:我们可以使用 rm或unlink指令来删除链接文件
软链接的特性
- 软链接是一个独立的文件,有自己的inode
- 软连接存放内容是指向目标文件的路径
- 软链接可以指向不存在的文件
- 删除源文件会导致软链接失效
软链接的应用
软链接最常见的作用之一就是作为快捷方式使用,如下:myproc.exe 程序在很深的路径下,以至于我们每次运行它都很不方便,此时我们就可以为它建立一个软链接。

使用 find 查找链接文件
 
在Linux下,可以使用 find 命令来查找软链接文件(symbolic links):
find /path/to/search -type l
其中,/path/to/search 是你要搜索的目标路径。上述命令会查找指定路径下的所有链接文件并输出它们的路径。
如果你想要在当前目录及其子目录中查找链接文件,可以使用:
find . -type l
如果你想要在整个系统中搜索链接文件,可以使用:
sudo find / -type l
四、硬链接(hard link)
创建和删除硬链接的示例
- 演示如何使用 ln创建硬链接,以及删除硬链接:ln hello hello.hard.link 
两个现象:
创建硬链接会改变原文件的硬链接数 (文件权限后紧跟的数字代表文件的硬链接数)
硬链接文件与原文件的文件属性完全相同,即硬链接文件与原文件使用同一个
inode
注:文件 inode 中存在一个类似于 count 的整形变量来记录文件的硬链接数,当我们为文件创建硬链接时 count 加1,删除原文件或者硬链接文件时 count 减1(C++中称为引用计数,Linux中称为文件的硬链接数),这也就是我们上面观察到文件的硬链接数发生变化的原因;所以,当一个文件的硬链接数变为0时,操作系统才会真正删除该文件,即执行将该文件的 inode bitmap 和 block bitmap 对应比特位置0等操作。
硬链接的特性
通过 [[文件系统 inode#5. inode Table(inode表)]] 的学习,我们了解到:真正找到磁盘上文件的并不是文件名,而是inode。 在Linux中可以让多个文件名对应于同一个inode,这就是硬链接。
- 硬链接不是一个独立的文件,而是在指定目录内部的一组(inode,文件名)的映射关系。创建一个文件的硬链接时,新的目录项会被添加到原始文件所在的目录的目录项列表中。
- 一个文件的所有硬链接指向相同的 inode
- 删除任意一个硬链接不影响其他硬链接
- 硬链接不能跨文件系统
- 普通用户不能链接目录
当你在一个目录中创建文件时,实际上是在该目录的目录项列表中添加了一个新的目录项,该目录项包含了新文件的文件名和相应的inode号。通过inode号,系统可以快速找到文件的元数据(例如文件的权限、所有者、大小等信息)和文件的数据块。
硬链接的应用
Linux 中每个目录下都存在两个隐藏目录 . 和 ..,其中 . 代表当前目录,.. 代表上级目录:

- 新建一个普通文件,其硬链接数是1,因为普通文件本身就有一个文件名与 inode 相对应
- 新建一个目录时,目录的硬链接数为2,这是因为 Linux 中目录下存在隐藏的 .,它是目录的一个硬链接
- 如果在当前目录下再新建一个下级目录,那么当前目录的硬链接数就会变为3,因为下级目录中的 ..也是当前目录的一个硬链接。(这也是为什么 cd..能够回退到上级目录的原因,因为..是上级目录的一个别名)
注意:Linux 不允许用户给目录创建硬链接,只能系统自己创建 (
.和..),这是因为给目录创建硬链接可能会在目录中引入循环,使得在目录遍历时系统陷入无限循环当中,从而导致无法定位到访问目录 (比如系统从根目录开始查找一个文件,当在查找过程中遇到根目录的硬链接时就会造成环路查找)。