我了解Linux中的链接概念,无论是硬链接还是软链接。
有人能告诉我真正的用例吗?
为什么我们需要保留对同一文件的多个引用?它们的管理难道不是个问题吗?
如果有人错误地复制了参考文献而不是对原始参考文献做出新的引用,我认为这会给可管理性方面带来混乱。
答案1
任何时候您想要同一事物的多个名称,您都需要一个链接。
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
这样,需要任何版本的 libcurl 的程序都可以打开 libcurl.so。如果它们需要版本 4,则可以打开 libcurl.so.4。如果它们需要非常具体的版本 4.2.0,则可以打开 libcurl.so.4.2.0。
这也用于像 这样的程序/usr/bin/java
。Java 可以由许多不同的来源提供。它可能是 IcedTea OpenJDK。它可能是 Sun JRE。或者它可能是 IBM 版本。使用符号链接可让系统指向默认版本,同时将每个版本保留在其自己的目录中。
答案2
简化备份
用例 1:将文档重新定位到单独的本地或 NFS 分区
假设您希望在每次发布新版本时更新您的操作系统。一种典型的备份方法是将您的主文件夹复制到单独的分区,以便您可以在安装后将内容复制回来。
我通常会将要备份的文件夹符号链接到单独的分区。要恢复符号链接,我只需在操作系统安装后运行一个快速 bash 脚本来恢复链接。
我将其称为备份数据,但实际上没有额外的“备份”步骤。好处是,如果您不小心对文件系统执行了“rm -rf”之类的新手操作,rm 不会跟踪符号链接,因此您不会丢失文件。
注意:我知道您可以使用 /etc/fstab 更改 /home 的挂载位置。我不使用这种方法的原因是,我只想有选择地链接部分用户文件,并留下任何累积的垃圾。
用例 2:使用跨平台分区(简单方法)
使用符号链接(软链接)的额外好处是它们可以在不同的文件系统中工作。
我们中的一些人没有能力(由于业务需要)将 Linux 用作我们唯一的操作系统,所以我们经常来回切换。为了扩展案例 1,我个人的做法是使用 NTFS 分区来存储我的用户文件,并将我想要拉入 Linux 的各种配置和用户文件符号链接出来。这样可以将我的所有东西都放在一个地方。
注意:如果您还不知道,您还可以使用 MKLINK 命令在 Windows 中创建符号链接。
想象一下。您有一个 Dropbox 帐户,可在 Linux 和 Windows 中使用。为了避免必须下载/同步相同文件的两个副本,在两个操作系统上使用所有内容就像从 /home 文件夹符号链接到 NTFS 分区上的 Dropbox 文件夹一样简单。
注意:要自动挂载 NTFS 驱动器(在基于 Debian 的发行版中,不确定其他发行版是否如此),您必须在 /etc/fstab 中添加一个挂载点,并使用 umask=000 来获得写权限。
用例 3:同时支持默认和自定义文件夹结构
假设您是负责多个网站工作的网站开发人员。
您已在以下位置正确设置测试服务器:
/opt/lampp
您可以尝试创建一个适用于所有网站的大型配置,但随着新网站的添加,维护起来会变得很麻烦。您添加的网站越多,权限设置与生产服务器的不同步程度就越大。
当您想要放弃生产服务器配置来测试安全漏洞或验证没有向用户显示服务器端脚本错误时会发生什么。您是否只是为此添加另一组例外?您有多大信心您的测试配置与团队中其他开发人员使用的配置相同。
Apache 在配置方面特别灵活,但灵活性带来了复杂性;当您为 Web 编写代码时,复杂性会带来风险。
幸运的是,有一种更简单的方法。为每个网站创建一个带有 --testing 和 --production 参数的 bash 脚本。然后只需配置参数以将正确的符号链接放入特定配置的 htdocs 和 config 文件夹中。该站点可以处于版本控制之下,位于单独的分区上,甚至位于远程共享上。只要符号链接指向正确的位置,这都没关系。
更新:
这再次获得了赞成票,因此我决定添加另外 2 个常见用例。
用例 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
现在从命令行启动 Sublime 文本编辑器就像sublime
在终端中输入一样简单。只有在创建/删除符号链接时才需要 Sudo,因为 /usr/bin 默认具有用户级执行权限。
用例 5:无缝备份和选择性同步到云端
在 IT 人群中,最常被提及的建议之一就是“备份文件”。但备份已经过时了。
虽然有很多可用的文件同步服务,但它们在组织文件方面不太灵活。通常,它们需要将自己的文件夹放在用户目录中,并且并非所有都支持选择性同步。没关系,因为符号链接解决了这两个问题。
至于文件夹位置,谁在乎呢?除非你想同步整个主目录的内容(即我更喜欢对备份进行更有选择性),否则这里就是个不错的位置。
至于要同步“什么”。这取决于您的偏好。就我个人而言,我更喜欢将游戏存档、软件开发项目、文档、便携式软件和配置等内容同步到云端,同时将照片同步到更适合图像的其他服务。
我的主台式电脑(即 iMac)最近在使用 6 年且没有丢失任何数据后,内部硬盘出现故障。当然,我必须重新安装操作系统、应用程序并重新链接所有内容,但重新开始感觉很好,而且我能够编写大部分流程的脚本,以便将来更轻松地完成。
答案3
答案4
在 Linux 或一般的 *nix 系统中,符号链接有多种用途。例如,当您想要移动物理文件位置而不破坏现有或常见的“众所周知”引用时,您可能希望在旧位置创建符号链接。无论出于何种原因,当您尝试使用私有版本升级常用工具时,这很有用。某些实用程序(例如 busybox)使用通用二进制文件来满足多种需求。在某些 Linux 发行版(例如 OpenWRT)中,/bin/bash、/bin/ls、/bin/mv 等都是指向 /bin/busybox 的链接。此二进制文件能够根据用途表现出不同的行为argv[0]
。