Existe uma maneira de listar todas as alternativas configuráveis ​​(links simbólicos para comandos semelhantes) no sistema?

24

O alternativescomando (pacote chkconfig) no RHEL / Fedora gerencia links simbólicos que vinculam um nome genérico a uma das implementações alternativas. Por exemplo, o mtagrupo de links simbólicos pode ser fornecido pelo Sendmail e Postfix (para implementar o sendmailcomando ie ):

alternatives --display mta

Enquanto eu puder --displayum grupo de links simbólicos, preciso adivinhar seu nome primeiro (ie mta).

Posso simplesmente listar todos os grupos de links simbólicos configuráveis ​​possíveis (como mta) para escolher?

O motivo é que eu esqueço alguns nomes de grupos ocasionalmente.

uvsmtid
fonte

Respostas:

25

No Debian (mas não no Fedora ou RHEL), para ver uma lista de todos os "nomes alternativos principais":

update-alternatives --get-selections

--get-selections listar nomes alternativos principais e seu status.

E para cada um dos listados, você pode executar --list $ALTERNATIVE_NAME, por exemplo

update-alternatives --list editor

--list name Exibir todos os destinos do grupo de links.

Se você quiser ver uma lista de todas as alternativas em seus respectivos grupos, execute o seguinte no fishshell:

for alternative in (update-alternatives --get-selections)
    echo $alternative 
    update-alternatives --list (echo $alternative | cut -d" " -f1)
    echo
end | pager

A sintaxe (ba | z)? Sh deve ser algo semelhante.

Para alterar as alternativas, execute sudo update-alternatives --config $ALTERNATIVE_NAME

kzh
fonte
1
No meu Fedora 12 update-alternativesé um link simbólico para alternatives: /usr/sbin/update-alternatives -> alternatives. Portanto, a opção --get-selectionsnão mostra nada (saia com erro mostrando o uso).
Uvsmtid 03/07
1
Não li a pergunta corretamente. Desculpe. Isto é para o Debian. Eu estava tentando encontrar a mesma coisa que você e não consigo responder a essa resposta. Gostaria de saber se devo excluir minha resposta?
kzh
Você decide. Se você acha que está correto em algumas circunstâncias e pode ser útil para qualquer outra pessoa, vale a pena deixá-lo.
Uvsmtid 3/07
16

A resposta exata é:

ls /var/lib/alternatives

O Directory /etc/alternativesmantém uma lista longa e plana de todos os links simbólicos que misturam mestres e escravos. Links simbólicos escravos não podem ser usados ​​com o alternatives --display [symlink]comando

Ao mesmo tempo, o diretório /var/lib/alternativescontém informações de status (incluindo o relacionamento mestre-escravo) de cada grupo na lista abreviada de nomes de arquivos, os quais podem ser usados ​​diretamente com a --displayopção Por exemplo /var/lib/alternatives/java:

alternatives --display java
uvsmtid
fonte
4
No Ubuntu 12.04, não existe /var/lib/alternatives, parece que sim /var/lib/dpkg/alternatives.
Hibou57
1
Ótima resposta, obrigado! Uma adição: no Debian e no Armbian, em /etc/alternativesvez de/var/lib/alternatives
Alexey Vesnin
4

A resposta mais simples seria ...

ls /etc/alternatives
Michael Hampton
fonte
1
É sempre mais óbvio quando você já sabe a resposta :)
gparent
Foi também o meu primeiro palpite. Mas isso não me satisfez. A lista é muito longa, contendo links mestre e escravo por completo.
uvsmtid
-1

No Ubuntu 12.04 (pode haver algumas versões anteriores também, a serem verificadas) e provavelmente o Debian também (a ser verificado):

ls /var/lib/dpkg/alternatives

Liste apenas para obter nomes alternativos configuráveis, pois as entradas nesses diretórios não são links. A propósito, pode haver um arquivo compactado nesse diretório, portanto os nomes listados lá nem sempre podem ser usados ​​como estão. Ex. eu tenho um/var/lib/dpkg/alternatives/psql.1.gz

Hibou57
fonte
Não é realmente útil, pois a pergunta afirma claramente que se aplica ao RedHat Enterprise Linux. A maneira de configurar o RHEL é descrita corretamente nas outras respostas.
Kosi2801