如需要在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编号。这是因为它们终归是同一个文件。还要注意的是,链接计数
(列表中第三项)显示这两个文件都有两个链接。另外,它们的文件大小也一模一样。
说明 只能对处于同一存储媒体的文件创建硬链接。要想在不同存储媒体的文件之间创建链接,
只能使用符号链接。