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/file3subsomething else

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

清单 2. 硬链接创建失败

[ian@atticf22 ~]$ df . researchFilesystem     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/file3ln: failed to create hard link ‘ research/lpi104-6/file3 ’ => 
‘ lpi104-6/file1 ’ : Invalid cross-device link [ian@atticf22 ~]$ ln lpi104-6 lpidir104-6ln: ‘ 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 ..


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部