我们在管理Linux服务器的时候,经常会用到链接文件,就像在《Linux时区的设置中》中,我们把 /etc/localtime 文件软链接到 /usr/share/zoneinfo/Asia/Shanghai 文件上。这篇日志,和大家分享一下这两者之前的区别和联系。
简单地说:
软链接(符号链接,Symbolic Link)类似于 Windows 中的快捷方式,可以快速链接到目标档案或目录。
硬链接(Hard Link)相当于给同一个 Inode (即同一个文件)创建多个可访问的路径。
Inode
要理解软链接与硬链接,先了解 Linux 文件系统中的 Inode,在划分磁盘分区并格式化的时候,整个分区会被划分为两个部分,即 Inode 区和 data block 区, Inode 里面存储了文件的很多重要参数,包括创建时间、修改时间等等,系统访问这个文件的时候必须先找到并读取这个文件的 Inode。
df -i
命令可以显示 Inode 信息。
硬链接
创建硬链接的方法:
ln source destination
硬链接的本质是新增一个文件名链接到某个 inode,如下图,ahard.txt 是 a.txt 的硬链接,他们使用相同的 Inode 索引号 133681,并且有相同的文件大小,但是他有两个路径(可以在不同目录,示例为了方便放在一个目录下)。不论编辑哪个文档,都会编辑同一个 inode 和 block,如果删除其中一个,还可以通过另外一个来访问。
软链接
创建软链接的方法:
ln -s source destination
软链接实际上只是一段字符,里面包含着它所指向的文件的路径,系统看到软链接后自动跳到对应的文件位置处进行处理,类似我们 Windows 下的快捷方式。如下图,软链接和源文件有不同的 Inode 号和文件大小,软链接会创建自己的 Inode 和 block,并在权限位中用“l”表示这是一个软链接文件。如果删除源文件,那么软链接就访问不了了,提示找不到源文件。
软链接的删除和普通文件的删除一样,使用 rm
命令。
查看软链接的源文件,也有一个命令 readlink
。
这创建软链接的时候,建议源文件使用绝对路径,这样这个软链接不管拷贝到哪里都可以使用。
硬链接 vs 软链接
1、软链接可以链接文件或者文件夹,但硬链接只能链接文件,不能链接文件夹。
2、软链接可以在不同的文件系统之间创建,硬链接只能在相同的文件系统下创建。
ln命令常见用法
基本用法:ln [参数] 源文件 目标文件
-f
,强制创建链接
-s
,创建符号链接,不带参数创建硬链接
-i
,交互输出,在替换、删除链接的时候进行提示
-v
, 打印创建链接的步骤过程
如上图所示,本来 ahrad.txt 的源文件是 b.txt,利用 -f
参数强制修改源文件为 a.txt,-i
参数会提示是否覆盖,-v
参数会把创建链接的过程打印出来。