Linux 中符号/硬链接的典型实际用例或应用是什么?

P K*_*P K 8 linux

我了解 Linux 中的链接概念,无论是硬链接还是软链接。

有人可以告诉我真正的用例吗?

为什么我们需要保留对同一个文件的多个引用?他们的管理是不是有问题?

如果有人错误地复制了一个引用而不是对原始引用进行新的引用,我认为这可能会使可管理性方面变得一团糟。

Zan*_*ynx 11

任何时候您需要为同一事物命名多个名称时,您都需要一个链接。

Linux 中的共享库以其实际名称命名,如下例所示:

lrwxrwxrwx. 1 root root     16 Dec  2 15:24 /usr/lib64/libcurl.so -> libcurl.so.4.2.0
lrwxrwxrwx. 1 root root     16 Dec  2 15:04 /usr/lib64/libcurl.so.4 -> libcurl.so.4.2.0
-rwxr-xr-x. 1 root root 380864 Sep 19 07:04 /usr/lib64/libcurl.so.4.2.0
Run Code Online (Sandbox Code Playgroud)

这是为了让只需要任何版本的 libcurl 的程序打开 libcurl.so。如果他们想要版本 4,他们会打开 libcurl.so.4。如果他们需要非常具体的 4.2.0 版本,他们可以打开 libcurl.so.4.2.0。

这也用于像/usr/bin/java. Java 可以由许多不同的来源提供。它可能是 IcedTea OpenJDK。它可能是 Sun JRE。或者它可能是 IBM 版本。使用符号链接可以让系统指向默认版本,同时将每个版本保存在自己的目录中。


Eva*_*ice 6

简化备份

用例 1:将文档重定位到单独的本地或 NFS 分区

假设您喜欢在每个新版本中更新您的操作系统。典型的备份方法是将您的主文件夹复制到单独的分区,以便您可以在安装后将内容复制回来。

我通常做的是将我想要备份的文件夹符号链接到单独的分区。为了恢复符号链接,我只是运行一个快速的 bash 脚本来在操作系统安装后恢复链接。

我只是称之为备份您的数据,但实际上没有额外的“备份”步骤。好的部分是,如果你不小心拉了一个像“rm -rf”这样的菜鸟移动你的文件系统,rm 不遵循符号链接,所以你不会丢失你的文件。

注意:我知道您可以使用 /etc/fstab 更改 /home 的安装位置。我不使用该技术的原因是因为我只想有选择地链接我的用户文件的一部分并留下任何累积的垃圾。

用例 2:使用跨平台分区(简单的方法)

使用符号链接(软链接)的额外好处是它们可以跨不同的文件系统工作。

我们中的一些人(由于业务需要)没有能力使用 Linux 作为我们唯一的操作系统,因此我们经常跳回第四位。为了扩展案例 1,我个人所做的是为我的用户文件使用 NTFS 分区,并符号链接出我想要拉入 Linux 的各种配置和用户文件。这将我所有的东西都放在一个地方。

注意:如果您还不知道,您还可以使用 MKLINK 命令在 Windows 中创建符号链接。

想象一下。您有一个可在 Linux 和 Windows 中使用的 Dropbox 帐户。为了避免下载/同步相同文件的两个副本,在两个操作系统中使用所有内容就像从 /home 文件夹符号链接到 NTFS 分区上的 Dropbox 文件夹一样容易。

注意:要自动挂载 NTFS 驱动器(在基于 Debian 的发行版中,不确定其他发行版),您必须在 /etc/fstab 中添加一个挂载点,使用 umask=000 以获得写入权限。

用例 3:同时支持默认和自定义文件夹结构

假设您是一名负责在多个网站上工作的网络开发人员。

您在以下位置正确设置了测试服务器:

/opt/lampp
Run Code Online (Sandbox Code Playgroud)

您可以尝试创建一个适用于所有站点的大规模配置,但随着时间的推移,随着新站点的添加,维护起来会变得很麻烦。您添加的站点越多,权限设置与生产服务器的不同步就越多。

当您想要放入生产服务器配置以测试安全漏洞或验证没有向用户显示服务器端脚本错误时会发生什么。您是否只是为此添加了另一组例外?您对自己的测试配置与团队中其他开发人员使用的配置相同的信心有多大。

Apache 在配置方面特别灵活,但灵活性带来了复杂性;当您为 Web 编写代码时,复杂性会带来风险。

幸运的是,有一种更简单的方法。使用 --testing 和 --production 参数为每​​个网站创建一个 bash 脚本。然后只需配置参数以将正确的符号链接放入特定配置的 htdocs 和 config 文件夹中。该站点可能处于版本控制之下,位于单独的分区上,甚至位于远程共享上。没关系,只要符号链接指向正确的位置。

更新

这再次得到了赞成,所以我决定再添加另外两个常见的用例。

用例 4:通过命令行轻松访问应用程序

假设您将一个新应用程序(例如 Sublime Text)安装到“/opt/Sublime Text”,以提供用户级别的访问权限,而无需 root 权限。

为了通过命令行轻松访问它,一种常见的方法是修改 $PATH 变量以包含 Sublime 应用程序目录。这种方法可能不太理想,因为 $PATH 的长度有限,容易被大量指向共享库路径的链接污染,并且以后更难删除。

既然/usr/bin(即主应用程序目录之一)已经包含在$PATH 中,为什么不捎带它呢?

最简单的方法是创建一个指向 Sublime Text 可执行文件的符号链接 /usr/bin/。

sudo ln -s "/opt/Sublime Text/sublime" /usr/bin/sublime
Run Code Online (Sandbox Code Playgroud)

现在从命令行启动 Sublime 文本编辑器就像sublime在终端中输入一样简单。只有在创建/删除符号链接时才需要 Sudo,因为 /usr/bin 默认具有用户级执行权限。

用例 5:无缝备份和选择性同步到云

在 IT 人群中,最常被人提及的建议之一是“备份您的文件”。但备份是如此“2000 年和晚”。

虽然有很多可用的文件同步服务,但在组织文件时它们并不是很灵活。通常,它们需要将自己的文件夹放置在用户目录中,并且并非都支持选择性同步。没关系,因为符号链接解决了这两个问题。

在文件夹位置的情况下,谁在乎。除非您想同步整个主目录内容(即我更喜欢对备份更有选择性),否则这是一个好地方。

至于你同步的“什么”。这取决于你的喜好。就我个人而言,我更喜欢将游戏保存、软件开发项目、文档、便携式软件和配置等内容同步到云,同时将照片同步到更适合图像定制的不同服务。

最近,我的主要台式计算机(即 iMac)在使用 6 年后遇到内部硬盘故障,数据丢失为零。当然,我必须重新安装操作系统、应用程序并重新链接所有内容,但重新开始感觉很好,而且我能够编写大部分流程的脚本,以便将来更轻松地完成。