Linux硬链接与软链接

我们在管理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, 打印创建链接的步骤过程

ln命令常见参数详解

如上图所示,本来 ahrad.txt 的源文件是 b.txt,利用 -f 参数强制修改源文件为 a.txt,-i 参数会提示是否覆盖,-v 参数会把创建链接的过程打印出来。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>