例如,
可执行文件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
为什么系统目录中有指向链接的链接?
如果我们出于某种原因需要链接,在示例中,为什么要从文件 in 链接
/usr/bin
到文件 in/etc/alternatives/
然后再链接回文件 in ,而不是直接/usr/bin
链接两个文件 in ?/usr/bin
是否有一个命令可以延迟链接直到到达非链接文件?
乌班图
答案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