por que existem links para links nos diretórios do sistema?

1

Por exemplo,

o executável 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

o executável 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. Por que existem links para links nos diretórios do sistema?

    Se precisarmos vincular por algum motivo, nos exemplos, por que os links de um arquivo em /usr/bin para um arquivo em /etc/alternatives/ e depois para um arquivo em /usr/bin , em vez de vincular os dois arquivos em /usr/bin diretamente?

  2. existe um comando que possa deferir um link até alcançar um arquivo sem link?

p.s. Ubuntu

    
por Tim 23.08.2014 / 19:17

2 respostas

3
  1. why are there links to links in system directories?

Ele oferece uma maneira flexível de escolher qual programa padrão ou versão do programa você usará. De man update-alternative :

Debian's alternatives system aims to solve this problem. A generic name in the filesystem is shared by all files providing interchangeable functionality. The alternatives system and the system administrator together determine which actual file is referenced by this generic name. For example, if the text editors ed(1) and nvi(1) are both installed on the system, the alternatives system will cause the generic name /usr/bin/editor to refer to /usr/bin/nvi by default. The system admin‐ istrator can override this and cause it to refer to /usr/bin/ed instead, and the alternatives system will not alter this setting until explicitly requested to do so.

2, is there a command that can deference a link until reaching a non-link file?

Se você tiver o utilitário readlink , você pode:

readlink -f link

Exemplo:

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

Ou você pode usar a função Perl abs_path do módulo de núcleo Cwd :

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

Nota

por 23.08.2014 / 19:30
2

Isso faz parte do sistema alternatives . Ele permite que os administradores configurem vários utilitários que fazem as mesmas coisas (ou semelhantes) que o padrão nesse sistema.

Exemplos estão configurando qual versão do Java é o padrão do sistema - oferta OpenJDK ou Oracle.

Você pode listar as alternativas no seu sistema usando:

alternatives -l

Você notará que todos os listados por esse comando também estão em /etc/alternatives como links simbólicos.

O utilitário namei é útil para seguir links simbólicos:

$ 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
    
por 23.08.2014 / 19:28