Linux上创建和更改硬链接和符号链接

概述

在本篇中,学习创建和管理硬链接和符号链接。学习:

  • 创建硬或软链接
  • 识别链接并知道它们的类型
  • 理解复制与链接文件之间的区别
  • 使用链接执行系统管理任务

链接简介

在存储设备上,文件或目录包含在一些数据块中。有关某个文件的信息包含在一个 inode 中,它记录了所有者、最后访问该文件的时间、文件的大小、它是否是目录,以及谁可以读取或写入它等信息。inode 编号也称为文件序列号 ,该编号在特定文件系统内是唯一的。一个 目录条目 包含一个文件或目录的名称,以及用来存储该文件或目录的信息的 inode 的指针。

创建链接

硬链接 是指向 inode 的目录条目,而 软链接符号链接 是指向提供另一个目录条目的名称的 inode 的目录条目。存储第二个名称的准确机制可能依赖于文件系统和名称的长度。符号链接也称为symlink

您可以只为文件创建硬链接,而不为目录创建硬链接。一个例外是一个包含该目录和它的父目录(. 和 ..)的目录中的特殊目录条目,它们是维护子目录数量的硬链接。因为硬链接指向 inode,而且 inode 仅在特定的文件系统内是唯一的,所以硬链接不能跨文件系统使用。如果一个文件有多个硬链接,那么只在指向该 inode 的最后一个链接被删除,而且链接数量变为 0 时,才会删除该文件。

软链接或 symlink 仅按名称指向另一个文件或目录,而不是按 inode。软链接可以跨越文件系统边界进行使用。删除软链接不会删除目标文件或目录,删除目标文件或目录也不会自动删除任何软链接。

首先让我们看看如何创建硬和软链接。在本教程后面,我们将介绍识别和使用我们在这里创建的链接的方式。

硬链接

使用 ln 命令创建现有文件的额外的硬链接(但不能是目录,即使系统将 . 和 .. as 设置为硬链接)。

清单 1 展示了如何创建一个包含两个文件和一个子目录的目录,其中包含 file1 的两个硬链接,一个位于同一个目录中,另一个位于子目录中。我们向 file1 添加一个词,然后向 file3 添加另一个词,并在子目录中显示该链接的内容,以表明所有链接确实都指向相同的数据。

清单 1. 创建硬链接

[ian@atticf22 ~]$ mkdir -p lpi104-6/subdir
 [ian@atticf22 ~]$ touch lpi104-6/file1
 [ian@atticf22 ~]$ touch lpi104-6/file2
 [ian@atticf22 ~]$ ln lpi104-6/file1 lpi104-6/file3
 [ian@atticf22 ~]$ ln lpi104-6/file1 lpi104-6/subdir/file3sub
 [ian@atticf22 ~]$ echo "something" > lpi104-6/file1
 [ian@atticf22 ~]$ echo "else" >> lpi104-6/file3
 [ian@atticf22 ~]$ cat lpi104-6/subdir/file3sub
 something 
 else

如果尝试创建跨文件系统或针对目录的硬链接,则会获得错误。清单 2 显示我的主目录和 research 目录在不同的文件系统上,而且跨这些文件系统创建硬链接的尝试失败了,与创建 lpi104-6 目录的硬链接的尝试一样。

清单 2. 硬链接创建失败

[ian@atticf22 ~]$ df . research
 Filesystem     1K-blocks     Used Available Use% Mounted on 
 /dev/sda5       71168700 31642752  35887712  47% / 
 /dev/sdb3       60326992 30677592  26578276  54% /home/ian/research 
 [ian@atticf22 ~]$ mkdir -p research/lpi104-6/
 [ian@atticf22 ~]$ ln lpi104-6/file1 research/lpi104-6/file3
 ln: failed to create hard link ‘ research/lpi104-6/file3 ’ => 
‘ lpi104-6/file1 ’ : Invalid cross-device link 
 [ian@atticf22 ~]$ ln lpi104-6 lpidir104-6
 ln: ‘ lpi104-6 ’ : hard link not allowed for directory

软链接

使用 ln 命令和 -s 选项来创建软链接。软链接使用文件或目录名称,这些名称可能是相对或绝对的。如果使用相对名称,您可能希望当前工作目录是您创建链接的目录。否则,您创建的链接将是文件系统中的另一个位置相对的链接。

清单 3 展示了为我们刚创建的 file1 创建软链接的两种方式,以及如何创建软链接,而不是创建在 清单 2中失败的两个硬链接。

清单 3. 创建软链接

[ian@atticf22 ~]$ # Create symlink using absolute paths
 [ian@atticf22 ~]$ ln -s ~/lpi104-6/file1 ~/lpi104-6/file4
 [ian@atticf22 ~]$ # Create symlink using relative paths
 [ian@atticf22 ~]$ cd lpi104-6/
 [ian@atticf22 lpi104-6]$ ln -s file1 file5
 [ian@atticf22 lpi104-6]$ cd ..
 [ian&#
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值