怎么理解Linux的硬链接与软链接

76次阅读
没有评论

共计 2475 个字符,预计需要花费 7 分钟才能阅读完成。

这篇“怎么理解 Linux 的硬链接与软链接”文章的知识点大部分人都不太理解,所以丸趣 TV 小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么理解 Linux 的硬链接与软链接”文章吧。

硬链接

硬链接只是分区表中的一个条目,它指向磁盘上的某个区域,表示该区域已经被分配给文件。换句话说,硬链接指向已经被另一个条目索引的数据。让我们看看它是如何工作的。

打开终端,创建一个实验目录并进入:

mkdir test_dircd test_dir

使用 touch 创建一个文件:

touch test.txt

为了获得更多的体验(?),在文本编辑器中打开 test.txt 并添加一些单词。

现在通过执行以下命令来建立硬链接:

ln test.txt hardlink_test.txt

运行 ls,你会看到你的目录现在包含两个文件,或者看起来如此。正如你之前读到的那样,你真正看到的是完全相同的文件的两个名称:hardlink_test.txt 包含相同的内容,没有填充磁盘中的任何更多空间(可以尝试使用大文件来测试),并与 test.txt 使用相同的 inode:

$ ls -li *test*16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 hardlink_test.txt16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 test.txt

ls 的 -i 选项显示一个文件的“inode 数值”。“inode”是分区表中的信息块,它包含磁盘上文件或目录的位置、上次修改的时间以及其它数据。如果两个文件使用相同的 inode,那么无论它们在目录树中的位置如何,它们在实际上都是相同的文件。

软链接

软链接,也称为符号链接 symlink,它与硬链接是不同的:软链接实际上是一个独立的文件,它有自己的 inode 和它自己在磁盘上的小块地方。但它只包含一小段数据,将操作系统指向另一个文件或目录。

你可以使用 ln 的 -s 选项来创建一个软链接:

ln -s test.txt softlink_test.txt

这将在当前目录中创建软链接 softlink_test.txt,它指向 test.txt。

再次执行 ls -li,你可以看到两种链接的不同之处:

$ ls -litotal 816515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 hardlink_test.txt16515855 lrwxrwxrwx 1 paul paul 8 oct 12 09:50 softlink_test.txt -  test.txt16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 test.txt

hardlink_test.txt 和 test.txt 包含一些文本并且字面上占据相同的空间。它们使用相同的 inode 数值。与此同时,softlink_test.txt 占用少得多,并且具有不同的 inode 数值,将其标记为完全不同的文件。使用 ls 的 -l 选项还会显示软链接指向的文件或目录。

为什么要用链接?

它们适用于带有自己环境的应用程序。你的 Linux 发行版通常不会附带你需要应用程序的 *** 版本。以优秀的 Blender 3D 设计软件为例,Blender 允许你创建 3D 静态图像以及动画电影,人人都想在自己的机器上拥有它。问题是,当前版本的 Blender 至少比任何发行版中的自带的高一个版本。

幸运的是,Blender 提供可以开箱即用的下载。除了程序本身之外,这些软件包还包含了 Blender 需要运行的复杂的库和依赖框架。所有这些数据和块都在它们自己的目录层次中。

每次你想运行 Blender,你都可以 cd 到你下载它的文件夹并运行:

./blender

但这很不方便。如果你可以从文件系统的任何地方,比如桌面命令启动器中运行 blender 命令会更好。

这样做的方法是将 blender 可执行文件链接到 bin/ 目录。在许多系统上,你可以通过将其链接到文件系统中的任何位置来使 blender 命令可用,就像这样。

ln -s /path/to/blender_directory/blender /home/ username /bin

你需要链接的另一个情况是软件需要过时的库。如果你用 ls -l 列出你的 /usr/lib 目录,你会看到许多软链接文件一闪而过。仔细看看,你会看到软链接通常与它们链接到的原始文件具有相似的名称。你可能会看到 libblah 链接到 libblah.so.2,你甚至可能会注意到 libblah.so.2 相应链接到原始文件 libblah.so.2.1.0。

这是因为应用程序通常需要安装比已安装版本更老的库。问题是,即使新版本仍然与旧版本(通常是)兼容,如果程序找不到它正在寻找的版本,程序将会出现问题。为了解决这个问题,发行版通常会创建链接,以便挑剔的应用程序相信它找到了旧版本,实际上它只找到了一个链接并最终使用了更新的库版本。

有些是和你自己从源代码编译的程序相关。你自己编译的程序通常最终安装在 /usr/local 下,程序本身最终在 /usr/local/bin 中,它在 /usr/local/bin 目录中查找它需要的库。但假设你的新程序需要 libblah,但 libblah 在 /usr/lib 中,这就是所有其它程序都会寻找到它的地方。你可以通过执行以下操作将其链接到 /usr/local/lib:

ln -s /usr/lib/libblah /usr/local/lib

或者如果你愿意,可以 cd 到 /usr/local/lib:

cd /usr/local/lib

然后使用链接:

ln -s ../lib/libblah

以上就是关于“怎么理解 Linux 的硬链接与软链接”这篇文章的内容,相信大家都有了一定的了解,希望丸趣 TV 小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计2475字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)