【Linux】文件的软硬链接

本文介绍了Linux中文件和目录的基本命令,如ls和stat,以及软链接(symlink)和硬链接(hardlink)的概念、创建方法、特性及应用,包括使用find命令查找链接文件。
摘要由CSDN通过智能技术生成

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

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 +0800
 Birth: -

[!Abstract] 说明一下:

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


二、链接的概念

什么是链接?

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

软链接和硬链接的区别

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


三、软链接(symbolic link)

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

1. 创建和删除软链接的示例

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

    ln -s log log.soft.link
    

    请添加图片描述

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

  • 和硬链接一样,软链接文件向文件中写入数据时原文件中也会存在该数据:
    请添加图片描述

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

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

2. 软链接的特性

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

3. 软链接的应用

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

请添加图片描述



4. 使用 find 查找链接文件

在Linux下,可以使用 find 命令来查找软链接文件(symbolic links):

find /path/to/search -type l

其中,/path/to/search 是你要搜索的目标路径。上述命令会查找指定路径下的所有链接文件并输出它们的路径。

如果你想要在当前目录及其子目录中查找链接文件,可以使用:

find . -type l

如果你想要在整个系统中搜索链接文件,可以使用:

sudo find / -type l


四、硬链接(hard link)

1. 创建和删除硬链接的示例

  • 演示如何使用 ln 创建硬链接,以及删除硬链接:
    ln hello hello.hard.link
    
    请添加图片描述

两个现象:

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

  • 硬链接文件与原文件的文件属性完全相同,即硬链接文件与原文件使用同一个 inode

注:文件 inode 中存在一个类似于 count 的整形变量来记录文件的硬链接数,当我们为文件创建硬链接时 count 加1,删除原文件或者硬链接文件时 count 减1(C++中称为引用计数,Linux中称为文件的硬链接数),这也就是我们上面观察到文件的硬链接数发生变化的原因;所以,当一个文件的硬链接数变为0时,操作系统才会真正删除该文件,即执行将该文件的 inode bitmap 和 block bitmap 对应比特位置0等操作。



2. 硬链接的特性

通过 文件系统 inode Table(inode表) 的学习,我们了解到:真正找到磁盘上文件的并不是文件名,而是inode。 在Linux中可以让多个文件名对应于同一个inode,这就是硬链接。

  • 硬链接不是一个独立的文件,而是在指定目录内部的一组(inode,文件名)的映射关系。创建一个文件的硬链接时,新的目录项会被添加到原始文件所在的目录的目录项列表中。
  • 一个文件的所有硬链接指向相同的 inode
  • 删除任意一个硬链接不影响其他硬链接
  • 硬链接不能跨文件系统
  • 普通用户不能链接目录

当你在一个目录中创建文件时,实际上是在该目录的目录项列表中添加了一个新的目录项,该目录项包含了新文件的文件名和相应的inode号。通过inode号,系统可以快速找到文件的元数据(例如文件的权限、所有者、大小等信息)和文件的数据块。



3. 硬链接的应用

Linux 中每个目录下都存在两个隐藏目录 ...,其中 . 代表当前目录,.. 代表上级目录:

请添加图片描述

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

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

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_宁清

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

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

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

打赏作者

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

抵扣说明:

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

余额充值