为什么系统目录中有指向链接的链接?

为什么系统目录中有指向链接的链接?

例如,

可执行文件emacs

lrwxrwxrwx 1 root root      23 Jun  9  2012 /usr/bin/emacs -> /etc/alternatives/emacs
llrwxrwxrwx 1 root root     18 Jun  9  2012 /etc/alternatives/emacs -> /usr/bin/emacs23-x
lrwxrwxrwx 1 root root       9 May 16  2013 /usr/bin/emacs23 -> emacs23-x
-rwxr-xr-x 1 root root 6772008 May 16  2013 /usr/bin/emacs23-x

可执行文件emacsclient

lrwxrwxrwx 1 root root      29 Jun  9  2012 /usr/bin/emacsclient -> /etc/alternatives/emacsclient
lrwxrwxrwx 1 root root      28 Jun  9  2012 /etc/alternatives/emacsclient -> /usr/bin/emacsclient.emacs23
-rwxr-xr-x 1 root root   18256 May 16  2013 /usr/bin/emacsclient.emacs23
  1. 为什么系统目录中有指向链接的链接?

    如果我们出于某种原因需要链接,在示例中,为什么要从文件 in 链接/usr/bin到文件 in/etc/alternatives/然后再链接回文件 in ,而不是直接/usr/bin链接两个文件 in ?/usr/bin

  2. 是否有一个命令可以延迟链接直到到达非链接文件?

乌班图

答案1

  1. 为什么系统目录中有指向链接的链接?

它为您提供了一种灵活的方式来选择您将使用的默认程序或程序版本。从man update-alternative

Debian 的替代系统旨在解决这个问题。文件系统中的通用名称由提供可互换功能的所有文件共享。替代系统和系统管理员共同确定该通用名称引用哪个实际文件。例如,如果系统上同时安装了文本编辑器 ed(1) 和 nvi(1),则替代系统将导致通用名称 /usr/bin/editor 默认引用 /usr/bin/nvi。系统管理员可以覆盖此设置并使其引用 /usr/bin/ed,并且替代系统不会更改此设置,除非明确请求这样做。


2、是否有一个命令可以延迟链接直到到达非链接文件?

如果你有readlink实用性,你可以:

readlink -f link

例子:

$ readlink -f /usr/bin/nawk
/usr/bin/gawk

或者您可以使用abs_path核心模块中的 Perl 函数Cwd

$ perl -MCwd=abs_path -le 'print abs_path(shift)' /usr/bin/nawk 
/usr/bin/gawk

笔记

答案2

这是系统的一部分alternatives。它允许管理员配置各种实用程序,这些实用程序执行与系统上默认设置相同(或类似)的操作。

示例包括配置系统默认的 Java 版本 - OpenJDK 或 Oracle 的产品。

您可以使用以下方法列出系统上的替代方案:

alternatives -l

您会注意到此命令列出的所有内容也以/etc/alternatives符号链接形式存在。

namei实用程序对于以下符号链接很有用:

$ namei /usr/bin/cdrecord
f: /usr/bin/cdrecord
 d /
 d usr
 d bin
 l cdrecord -> /etc/alternatives/cdrecord
   d /
   d etc
   d alternatives
   l cdrecord -> /usr/bin/wodim
     d /
     d usr
     d bin
     - wodim

相关内容