Linux -- 软硬链接

目录

软链接

什么是软链接?

怎么建立软链接?

文件的软链接

目录的软链接

如何删除链接?

硬链接

什么是硬链接?

怎么建立硬链接?

文件的硬链接

目录的硬链接

硬链接数

什么是硬链接数?


软链接

什么是软链接?

软链接(Symbolic Link),也称为符号链接或symlink,在计算机文件系统中是一种特殊类型的文件,它指向另一个文件或目录。软链接可以被看作是指向其他文件的一个快捷方式。与硬链接不同,软链接可以跨越不同的文件系统,并且可以指向目录

怎么建立软链接?

文件的软链接

命令 ln -s 源文件名 软链接名 就可以建立软链接。

可以发现,软链接的 inode 和 源文件的 inode 不一样, 说明软链接本质上就是一个独立的文件。软链接本身并不包含实际的文件内容。它只是一个特殊的文件,包含了指向另一个文件或目录的路径信息

目录的软链接

目录的软链接建立方式和文件一样。

如何删除链接?

命令 unlink 软链接名 就可以删除链接。硬链接也是一样的方法

硬链接

什么是硬链接?

硬链接(Hard Link)是操作系统中的一种文件系统特性,它允许多个文件名指向同一个文件的inode

怎么建立硬链接?

文件的硬链接

命令 ln 源文件 硬链接名 就可以建立硬链接。不带 -s !

查看硬链接的 inode 可以发现,硬链接的 inode 和 源文件的 inode 一样! 硬链接的本质不是一个独立的文件,硬链接与原始文件共享相同的 inode


这意味着如果你修改了通过硬链接访问的文件内容,那么这个修改也会反映到所有其他硬链接上,因为它们都指向相同的数据块。如下图,当我们重定向时,硬链接的文件大小也跟着改变。


只有当最后一个指向某个inode的硬链接被删除后,该文件的实际数据才会从磁盘上移除。在此之前,即使原始文件被删除,只要还有一个硬链接存在,文件数据就仍然可用

目录的硬链接

不允许用户对目录进行硬链接!

在文件系统中,如果允许对目录创建硬链接,可能会导致循环引用的问题。在文件系统的情境下,循环引用会导致遍历操作(如ls -R递归列出目录内容)进入无限循环。

让我们通过一个例子来说明为什么硬链接目录可能导致循环引用:

假设我们有以下目录结构,并且我们可以为目录创建硬链接:

/home/user/
├── dir1
│   └── file1
└── dir2
    └── file2

现在,如果我们能够创建硬链接,那么可以做如下操作:

  1. 创建一个从dir1dir2的硬链接:

    ln /home/user/dir2 /home/user/dir1/link_to_dir2
  2. 然后,再创建一个从dir2dir1的硬链接:

    ln /home/user/dir1 /home/user/dir2/link_to_dir1

此时,我们的目录结构变成了这样:

/home/user/
├── dir1
│   ├── file1
│   └── link_to_dir2 -> /home/user/dir2
└── dir2
    ├── file2
    └── link_to_dir1 -> /home/user/dir1

在这个新的结构中,/home/user/dir1/link_to_dir2指向了 /home/user/dir2,而/home/user/dir2/link_to_dir1又指向了 /home/user/dir1。这就形成了一个循环引用:

  • dir1可以通过 link_to_dir2 到达 dir2
  • dir2可以通过 link_to_dir1 回到 dir1

当使用递归命令(如ls -R)来列出所有目录的内容时,程序会不断尝试从 dir1跳到 dir2,然后再从 dir2跳回 dir1,从而陷入无限循环

硬链接数

什么是硬链接数?

硬链接数是指向同一个inode的不同目录条目(文件名)的数量。

命令 ll 可以查看文件的硬链接数。在下图中,对文件建立硬链接后,文件的硬链接数从 1 变为 2,这是因为硬链接和源文件共享一个 inode。

新建的文件的默认硬链接数为 1 ,而新建目录的默认硬链接数为 2。

为什么新建目录的默认硬链接数是2?

这是因为每个目录下都有 . (当前目录)和 .. (父目录)这两个子目录,当前目录这是一个指向目录自身的硬链接当前目录和新建的目录都指向同一个 inode,所以新建目录的默认硬链接数为 2. 而 ..(父目录)使父目录的硬链接数加 1.

一个目录的硬链接数 -2 就可以得到该目录下有多少个子目录 。

当文件或目录的硬链接数减为 0 时,这个文件或目录才会被删掉! 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值