Linux 由于其开源、比较稳定等特点统治了服务端领域。也因此,学习Linux 系统相关知识在后端开发等岗位中变得越来越重要,甚至可以说是必不可少的。
因为它的广泛应用,所以在程序员的日常工作和面试中,它都是经常出现的。它的开源特性也让它适合于让对于计算机和操作系统底层原理感兴趣的人进行学习。
开始今天的正文
一、如何让我们更方便访问一个文件或程序?
首先回想下如果直接访问的话需要使用 cd 指令打开相应的目录,然后使用 vi 或 vim 访问文本文件,使用 ./程序名 访问二进制程序。
cd /your_load
vim ./your_txt
./your_binary
显然,对于一些经常要访问的文件,我们可以像类似于在 Windows 系统中经常采用的方法一样,直接创建一个桌面快捷方式。这样访问多方便!
二、Linux 中的“快捷方式” - 软链接(符号链接)文件
由于 Linux 系统的 “一切皆文件” 的设计理念,软链接文件本身就是一个独立的文件。只不过它这个文件很特殊,它是指向另一个文件或目录的引用。因此,它有一个独立的 inode 号。
那它是如何找到相应的目录或文件呢?答案是:软链接包含了目标文件的路径。
软链接还有一些很有意思的特性与 Windows 的快捷方式进行对比:
1、如果原始文件被删除,软链接就会变成一个“死链接”,指向一个不存在的文件。
2、软链接可以指向文件或目录。
3、但是 Linux 的软链接可以跨越不同的文件系统,而 Windows 的快捷方式则不能。
创建方法:
ln -s /path/to/original/file /path/to/symlink
/path/to/symlink 为软链接路径
/path/to/original/file 为硬链接路径
三、就像是 C语言 的指针、C++的智能指针 - 硬链接
硬链接就像是 C语言 的指针,它通过不同的文件名指向同一个文件。
在Linux文件系统中,每个文件都有一个 inode 号来唯一标识,硬链接就是不同的文件名指向同一个 inode。因此,它没有一个独立的 inode 号。
为什么说它的特点类似于 C++的智能指针,因为它有一个重要的特点就是:
无论创建多少个硬链接,它们指向的都是相同的文件数据。删除某一个硬链接文件,并不会影响其他硬链接和原始文件的数据。并且每创建一个硬链接,它的引用计数 +1
当然这个特点只是像 C语言 的指针啊?它能被比作 C++的智能指针肯定不止有这个特点:
试想一下,假如指向一个文件的所有硬链接都被删除了会发生什么?
答案就是所有硬链接都删除也就是引用计数为 0 的时候该文件本身也会删除掉!这像不像 C++的 share_ptr 等指针的行为模式。
相比于软链接,它还有其他以下特点:
1、硬链接只能在同一个文件系统内创建。
2、硬链接只能用于文件,不能用于目录(为了避免出现循环引用的问题)。
如何创建它呢?
ln /path/to/original/file /path/to/hardlink
/path/to/hardlink
是硬链接文件的路径
/path/to/original/file
是原始文件的路径
四、总结:软链接像能跨越文件系统的快捷方式,硬链接像 C++的智能指针
1. 指向对象与方式
-
硬链接:直接指向文件的数据块,是文件的另一个名字。多个硬链接共享相同的inode号和数据块,因此它们是等价的,删除一个并不会影响其他硬链接的访问。
-
软链接:指向的是另一个文件或目录的路径,它本身是一个独立的文件,包含了目标文件或目录的引用。软链接可以指向不同的文件系统,甚至可以是远程文件系统的文件。
2. 独立性
-
硬链接:不是独立的文件,它们只是文件数据块的多个引用。因此,修改任何一个硬链接都会影响到其他所有硬链接,因为它们共享相同的数据。
-
软链接:是独立的文件,它只存储了目标文件的路径信息。如果目标文件被删除或移动,软链接可能会变成“死链接”,即指向一个不存在的文件或路径。
3. 使用限制
-
硬链接:只能在同一个文件系统内创建,不能跨文件系统。此外,硬链接不能用于目录,因为这会引入复杂的循环引用问题。
-
软链接:可以跨文件系统创建,并且可以指向文件或目录。这使得软链接在创建快捷方式或引用不同文件系统上的文件时非常有用。
4. 文件类型与显示
-
硬链接:在文件系统中,硬链接的文件类型与目标文件相同,它们共享相同的inode号。使用
ls -l
命令查看时,硬链接的链接数(即引用计数)会显示在输出中。 -
软链接:文件类型为
l
(表示链接),并且会显示指向的目标文件或目录的路径。使用ls -l
命令可以清晰地看到软链接指向的目标。
5. 性能与占用
-
硬链接:由于直接指向数据块,硬链接在访问时通常比软链接更快,因为它们不需要额外的路径解析步骤。此外,硬链接不占用额外的磁盘空间(除了文件系统的元数据),因为它们只是数据块的引用。
-
软链接:在访问时,系统需要解析软链接指向的路径,这可能会引入一些额外的开销。此外,软链接本身会占用磁盘空间来存储目标路径信息。