如果需要在系统上维护同一文件的两份或者多份副本,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理文件副本和多个虚拟副本的方法。这种虚拟的副本就称为链接
。链接是目录中指向文件真实位置的占位符。
在linux 中有不同类型的文件链接:
1)符号链接;2)硬链接。
符号链接
符号链接就是一个实实在在的文件,它指向存放在虚拟目录结构中某个地方的另一个文件。这两个通过符号链接在一起的文件,彼此的内容并不相同。
要为一个文件创建符号链接,原始文件必须事先存在。然后可以利用ln -s
创建符号链接。
touch a.txt
ln -s a.txt b
即通过ln -s
创建了符号链接,将b 链接到了a 上。
-rw-r--r-- 1 mugpeng wheel 12 May 29 10:26 a.txt
lrwxr-xr-x 1 mugpeng wheel 5 May 29 10:23 b -> a.txt
需要注意的是,符号链接的文件大小与数据文件的文件大小并不相同。这是因为它们本质上就是两个内容并不相同,完全不同的文件。
我们可以通过查看文件的inode
编号。该编号为用于标识的唯一数字,该数字由内核分配给文件系统中的每一个对象。要查看文件或目录的inode 编号可以使用ls -i
。
$ ls -i
8611212722 a.txt 8611212723 b
由此可见它们是不同的文件。
硬链接
硬连接也会创建独立的虚拟文件,其中也包含了原始文件的信息及位置。但和符号链接不同的是,硬连接创建的文件从本质上和源文件为同一个文件。
引用硬连接文件就等同于引用源文件。
通过下面的结果不难发现,带有硬连接的文件共享inode 编号。
$ ln a.txt c
$ ls -li
total 16
8611212722 -rw-r--r-- 2 mugpeng wheel 12 May 29 10:26 a.txt
8611212723 lrwxr-xr-x 1 mugpeng wheel 5 May 29 10:23 b -> a.txt
8611212722 -rw-r--r-- 2 mugpeng wheel 12 May 29 10:26 c
注意点
我们只能对处于同一存储媒体的文件创建硬链接
。若想在不同存储媒体的文件之间创建链接,则只能使用符号链接
。
另外,复制链接文件的时候一定要小心。如果使用cp 命令复制文件,而该文件又被链接到了另一个源文件上,那么我们cp 得到的其实是源文件的副本。
同一个文件可以拥有多个链接,完全没有问题。但需要注意的是,尽量不要创建软链接文件的软链接。因为这会形成混乱的链接链,不仅容易断裂,可能还会造成各种麻烦。
网友评论