在使用 Windows 安装软件的时候,安装程序一般都会在桌面创建一个快捷方式,方便使用,而在 Linux 上也有一种类似于 Windows 快捷方式的文件类型,这就是软链接。虽然大多数 Linux 服务器都没有桌面,但是对于一些经常需要查看或修改的目录层级比较升的配置文件或日志文件来说,建立一个软链接,放在常用的文件夹,找起来也会比较方便。

下面是创建软链接的方法

ln -s 命令可以创建一个软链接,使用方法为 ln -s 指向的文件名 软链接的名称

比如我要给 home/index.php 创建一个软链接,

ln -s /home/index.php /home/首页

上面给 /home/index.php 创建了一个名为 首页 的软链接。

下面查看一下软链接的文件信息:

lrwxrwxrwx 1 root root    15 11月 16 17:46 首页 -> /home/index.php

在上图中可以看到 首页 文件是指向 index.php,所以如果删除了 index.php 创建的 首页 软链接就不能用了。当打开 首页文件时,其实打开的也就是 index.php,也就是说 当打开软链接时,其实打开的就是软链接指向的原文件。删除软链接不会影响原文件。

删除原文件后:

删除源文件后

可以看到软链接的文件名变成了红色。

如果现在在创建一个名为 index.php 的文件,首页 软链接又可以恢复使用了,所以即使是指向的原文件不存在也是可以创建软链接的。

除了软链接外,在 Linux 中还有一种名为硬链接的文件类型。当给一个文件创建硬链接时,Linux 会复制一个与源文件的 inode 编号相同的文件。当修改硬链接文件内容时,源文件的内容也会改变。类似于我们平时使用的云同步,当修改本地文件时,云端的文件内容也会改变。不过 Linux 上如果删除了硬链接源文件并不会一起被删除,而且删除了源文件硬链接文件也可以继续使用。但硬链接需要原文件存在才能创建,不可以为不存在的文件创建硬链接,也不能为目录创建硬链接。

下面是创建硬链接的方法:

lnlink 都可以创建,格式为 link 要指向的文件名 硬链接名称ln 也是一样的。

这里还是给 /home/index.php 创建硬链接,

link /home/index.php /home/首页

使用 ls -l -i 可以显示 inode 编号,下面是 index.php首页inode 编号:

25780771 -rw-r--r-- 2 root root     0 11月 16 18:07 index.php
25780771 -rw-r--r-- 2 root root     0 11月 16 18:07 首页

上面的 25780771 就是 inode 编号。

可以看到两个文件的 inode 编号都是一样的,两个文件的 inode 节点数都是 2 。如果在给其中一个文件创建一个硬链接 inode 节点数量就会变为 3。如果修改了其中一个文件的内容,inode 编号相同的文件的内容也会改变。如果删除了一个文件,inode 相同的文件也不会受到影响。

软链接和硬链接比较不同的地方就是,软链接只是一个保存了源文件位置的文件,只要没有了源文件,软链接也不能打开。而硬链接是一个完整的文件,和源文件之间相互关联又相互独立,即使删除了源文件,关联的硬链接文件也可以继续使用。