【Linux】文件的软硬链接

文章目录

  • 一、文件和目录的一些命令
      • `ls` 命令
      • `stat` 命令
  • 二、链接的概念
  • 三、软链接(symbolic link)
      • 创建和删除软链接的示例
      • 软链接的特性
      • 软链接的应用
      • 使用 `find` 查找链接文件
  • 四、硬链接(hard link)
      • 创建和删除硬链接的示例
      • 硬链接的特性
      • 硬链接的应用

一、文件和目录的一些命令

ls 命令

在bash下执行:

ls -a -l -i

【Linux】文件的软硬链接_第1张图片

每一列的含义:【Linux】文件的软硬链接_第2张图片

因为加了-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 +0800
 Birth: -

[!Abstract] 说明一下:

  • Access - 最后访问时间
  • Modify - 文件内容最后修改时间
  • Change - 属性最后修改时间


二、链接的概念

什么是链接?

  • 链接是文件系统中用于关联文件或目录的概念。

软链接和硬链接的区别

  • 软链接:也称为符号链接,类似于 Windows 快捷方式,可以跨文件系统。
  • 硬链接:指向相同 inode 的文件副本,不能跨文件系统。


三、软链接(symbolic link)

硬链接是通过inode引用另外一个文件,软链接是通过名字引用另外一个文件

创建和删除软链接的示例

  • 使用 ln -s 创建软链接:

    ln -s log log.soft.link
    

    【Linux】文件的软硬链接_第3张图片

    可以看到软连接 log.soft.link 有自己独立于 log 的inode编号

  • 和硬链接一样,软链接文件向文件中写入数据时原文件中也会存在该数据:
    【Linux】文件的软硬链接_第4张图片

  • 但是当原文件被删除后,再次查看软链接文件报错:
    ![[Pasted image 20240207192118.png]]

  • 删除软链接:我们可以使用 rmunlink 指令来删除链接文件

软链接的特性

  • 软链接是一个独立的文件,有自己的inode
  • 软连接存放内容是指向目标文件的路径
  • 软链接可以指向不存在的文件
  • 删除源文件会导致软链接失效

软链接的应用

软链接最常见的作用之一就是作为快捷方式使用,如下:myproc.exe 程序在很深的路径下,以至于我们每次运行它都很不方便,此时我们就可以为它建立一个软链接。

【Linux】文件的软硬链接_第5张图片



使用 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
    
    【Linux】文件的软硬链接_第6张图片

两个现象:

  • 创建硬链接会改变原文件的硬链接数 (文件权限后紧跟的数字代表文件的硬链接数)

  • 硬链接文件与原文件的文件属性完全相同,即硬链接文件与原文件使用同一个 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 中每个目录下都存在两个隐藏目录 ...,其中 . 代表当前目录,.. 代表上级目录:

【Linux】文件的软硬链接_第7张图片

  • 新建一个普通文件,其硬链接数是1,因为普通文件本身就有一个文件名与 inode 相对应
  • 新建一个目录时,目录的硬链接数为2,这是因为 Linux 中目录下存在隐藏的 .,它是目录的一个硬链接
  • 如果在当前目录下再新建一个下级目录,那么当前目录的硬链接数就会变为3,因为下级目录中的 .. 也是当前目录的一个硬链接。(这也是为什么 cd .. 能够回退到上级目录的原因,因为 .. 是上级目录的一个别名)

注意:Linux 不允许用户给目录创建硬链接,只能系统自己创建 (...),这是因为给目录创建硬链接可能会在目录中引入循环,使得在目录遍历时系统陷入无限循环当中,从而导致无法定位到访问目录 (比如系统从根目录开始查找一个文件,当在查找过程中遇到根目录的硬链接时就会造成环路查找)。

你可能感兴趣的:(Linux系统编程,linux,运维,服务器,软链接,硬链接,软硬链接,符号链接)