Linux 命令行与 shell 脚本编程大全 (3rd ed)(31):基本的 bash shell 命令 3.6.4

阅读数:9 2019 年 11 月 17 日 15:21

Linux命令行与shell脚本编程大全(3rd ed)(31):基本的bash shell命令 3.6.4

内容简介
这是一本关于 Linux 命令行与 shell 脚本编程的全方位教程,主要包括四大部分:Linux 命令行,shell 脚本编程基础,高级 shell 脚本编程,如何创建实用的 shell 脚本。本书针对 Linux 系统的新特性进行了全面更新,不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料。通过本书的学习,你将轻松写出自己的 shell 脚本。

(链接文件)

链接文件是 Linux 文件系统的一个优势。如需要在系统上维护同一文件的两份或多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就称为链接。链接是目录中指向文件真实位置的占位符。在 Linux 中有两种不同类型的文件链接:

  • 符号链接
  • 硬链接

符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。

要为一个文件创建符号链接,原始文件必须事先存在。然后可以使用ln命令以及-s选项来创建符号链接。

复制代码
$ ls -l data_file
-rw-rw-r-- 1 christine christine 1092 May 21 17:27 data_file
$
$ ln -s data_file sl_data_file
$
$ ls -l *data_file
-rw-rw-r-- 1 christine christine 1092 May 21 17:27 data_file
lrwxrwxrwx 1 christine christine 9 May 21 17:29 sl_data_file -> data_file
$

在上面的例子中,注意符号链接的名字 sl_data_file 位于ln命令中的第二个参数位置上。显示在长列表中符号文件名后的->符号表明该文件是链接到文件 data_file 上的一个符号链接。

另外还要注意的是,符号链接的文件大小与数据文件的文件大小。符号链接 sl_data_file 只有 9 个字节,而 data_file 有 1092 个字节。这是因为 sl_data_file 仅仅只是指向 data_file 而已。它们的内容并不相同,是两个完全不同的文件。

另一种证明链接文件是独立文件的方法是查看 inode 编号。文件或目录的 inode 编号是一个用于标识的唯一数字,这个数字由内核分配给文件系统中的每一个对象。要查看文件或目录的 inode 编号,可以给ls命令加入-i参数。

复制代码
$ ls -i *data_file
296890 data_file 296891 sl_data_file
$

从这个例子中可以看出数据文件的 inode 编号是 296890,而 sl_data_file 的 inode 编号则是 296891。所以说它们是不同的文件。

硬链接会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但是它们从根本上而言是同一个文件。引用硬链接文件等同于引用了源文件。要创建硬链接,原始文件也必须事先存在,只不过这次使用ln命令时不再需要加入额外的参数了。

复制代码
$ ls -l code_file
-rw-rw-r-- 1 christine christine 189 May 21 17:56 code_file
$
$ ln code_file hl_code_file
$
$ ls -li *code_file
296892 -rw-rw-r-- 2 christine christine 189 May 21 17:56
code_file
296892 -rw-rw-r-- 2 christine christine 189 May 21 17:56
hl_code_file
$

在上面的例子中,我们使用ls -li命令显示了 *code_files 的 inode 编号以及长列表。注意,带有硬链接的文件共享 inode 编号。这是因为它们终归是同一个文件。还要注意的是,链接计数(列表中第三项)显示这两个文件都有两个链接。另外,它们的文件大小也一模一样。

说明 只能对处于同一存储媒体的文件创建硬链接。要想在不同存储媒体的文件之间创建链接,只能使用符号链接。

复制链接文件的时候一定要小心。如果使用cp命令复制一个文件,而该文件又已经被链接到了另一个源文件上,那么你得到的其实是源文件的一个副本。这很容易让人犯晕。用不着复制链接文件,可以创建原始文件的另一个链接。同一个文件拥有多个链接,这完全没有问题。但是,千万别创建软链接文件的软链接。这会形成混乱的链接链,不仅容易断裂,还会造成各种麻烦。

你可能觉得符号链接和硬链接的概念不好理解。幸好下一节中的文件重命名容易明白得多。

评论

发布