一、前言
有时候我们希望给某个文件取个别名,那么在 Linux 中可以通过硬链接 和软链接的方式来实现,它们都是比较特殊的文件,但是实现方式也是不相同的。
首先简单介绍一下,Linux文件系统的索引节点(inode)
- 索引节点,也就是 inode,用来记录文件的元信息,比如 inode 编号、文件大小、访问权限、创建时间、修改时间、数据在磁盘的位置等等。索引节点是文件的唯一标识,它们之间一一对应,也同样都会被存储在硬盘中,所以索引节点同样占用磁盘空间。
二、硬链接和软链接的实现
ln命令 用来为文件创建链接,链接类型分为硬链接和软链接两种,
默认的链接类型是硬链接。如果要创建软链接必须使用"-s"选项。
硬链接是多个目录项中的「索引节点」指向一个文件,也就是指向同一个 inode,但是 inode 是不可能跨越文件系统的,每个文件系统都有各自的 inode 数据结构和列表,所以硬链接是不可用于跨文件系统的。由于多个目录项都是指向一个 inode,那么只有删除文件的所有硬链接以及源文件时,系统才会彻底删除该文件(源文件会有一个引用计数Links来标记)。
软链接相当于重新创建一个文件,这个文件有独立的 inode,但是这个文件的内容是另外一个文件的路径,所以访问软链接的时候,实际上相当于访问到了另外一个文件,所以软链接是可以跨文件系统的,甚至目标文件被删除了,链接文件还是在的,只不过指向的文件找不到了而已。
三、软、硬链接的区别
- 与硬链接不同的是,软链接确实是一个新文件,当然它具有不同的索引节点号;而硬链接并没有建立新文件。
- 软链接没有硬链接的限制,可以对目录文件做软链接,也可以在不同文件系统之间做软链接。
- 用ln -s命令建立软链接时,源文件最好用绝对路径名。这样可以在任何工作目录下进行软链接。而当源文件用相对路径时,如果当前的工作路径与要创建的软链接文件所在路径不同,就不能进行链接。
- 软链接不增加源文件的Links值,硬链接会增加源文件的Links值,(Links值可以用 stat + 文件名查看)