Les abstractions peuvent être utiles aux utilisateurs, car de nombreux utilisateurs ne se soucient pas de la manière dont leur ordinateur accomplit une tâche tant qu'elle est ciblée. En fait, même les applications ne se soucient pas toujours de savoir comment quelque chose est réalisé tant que tous ses appels système reçoivent une réponse correcte. En théorie, un administrateur système Linux peut proposer de nombreux outils système en fonction de la fonction plutôt que du nom exact de l'exécutable, mais cela nécessite souvent beaucoup de liens symboliques et de suivi des versions. Sauf si c'est le cas, vous utilisez les alternatives
commande.
Les alternatives
le commandement a commencé sa vie comme, curieusement, une alternative. À l'origine, il s'agissait d'un utilitaire pratique, écrit en Perl, du projet Debian Linux, appelé update-alternatives
. Red Hat a réécrit la commande sans Perl, et elle a été propagée dans les distributions basées sur Fedora telles que Red Hat et CentOS, ainsi que dans d'autres distributions qui se tournent vers Red Hat pour la définition fonctionnelle de Linux Standard Base (LSB).
Quand utiliser la commande alternatives
Un exemple simple et réaliste :vous avez une commande sur votre système appelée em
, qui lance un simple éditeur de texte. C'est l'éditeur incontournable de votre base d'utilisateurs depuis des années, de nombreuses personnes ont basé des flux de travail autour de lui et certains maintiennent des configurations hautement personnalisées pour lui. Cependant, votre base d'utilisateurs vous a récemment fait comprendre qu'ils ne peuvent plus survivre sans la prise en charge des emoji dans leurs éditeurs de terminaux et em
ne prend pas en charge Unicode.
Vous trouvez un fork Unicode de em
appelé nem
, mais vous savez que 99 % de vos utilisateurs sont habitués à em
, et continuera à considérer toute application de remplacement comme em
peut importe ce que vous faites. La solution facile à cette situation, et à de nombreux autres exemples similaires, consiste à désigner le nouveau nem
binaire comme alternative préférée au em
binaire quand le em
commande est utilisée.
La création manuelle d'un lien symbolique peut sembler tentante, mais cela ne résiste pas aux mises à jour d'un gestionnaire de packages et n'est pas non plus centralisé.
Les alternatives
La commande est la plus utile lors de la gestion des noms d'application "génériques". Bien sûr, dans le monde UNIX, "générique" n'est pas toujours générique, pas plus que "Kleenex" ou "Xerox" ne l'est dans le monde réel, donc des termes comme java , (x)emacs(-nox) , (n)vi(m) , whois , et iptables sont souvent parmi les premiers à voir des alternatives définies pour eux. Pour les termes vraiment génériques, comme EDITOR
et CC
, les alternatives
commande n'est pas considérée comme une solution appropriée. Pour ces termes, car ce sont des variables d'environnement et doivent être définis dans /etc
ou $HOME/.profile
.
Créer une nouvelle alternative
Continuer avec l'exemple de scénario d'un ancien binaire appelé em
étant supplanté par la nouvelle variante nem
, il est facile de créer une entrée alternative. Dans cet exemple, vous devez renommer la commande d'origine, bien que dans d'autres cas, cela ne soit pas nécessaire car la commande n'est pas exactement ce que les gens pensent qu'elle est en premier lieu (java
, par exemple, est rarement situé dans /usr/bin
directement). Si vous avez besoin de changer le nom d'un binaire, la bonne façon de le faire est dans son fichier de spécification RPM, de sorte que le RPM installant la commande fournisse le binaire sous le nouveau nom.
À la rigueur, surtout si vous supprimez progressivement la commande de toute façon, vous pouvez supprimer la commande de la gestion des packages du système et conserver simplement une version personnalisée de l'ancienne commande disponible /opt
ou similaire.
Pour cet exemple, supposons que vous avez renommé l'éditeur d'origine em2
(indiquant son dernier numéro de version).
Vous avez maintenant deux binaires (em2
et nem
) à associer à une seule commande :em
. Pour aider à garder les différents rôles de la terminologie clairs, supposez que em
et nem
sont tous deux des éditeurs de style micro Emacs. Dans ce cas, un terme très générique pour l'alternative en cours de création pourrait être µemacs
(en utilisant le symbole µ pour signifier "micro") ou uemacs
pour plus de simplicité.
Créez une alternative à l'original en fournissant :
- un emplacement pour le lien symbolique "générique"
- un nom pour l'alternative (j'ai choisi
uemacs
, pour préciser qu'il s'agit d'un nom de référence plutôt que d'un binaire spécifique) - le binaire à exécuter lorsque ces liens symboliques sont appelés
- un niveau de priorité pour indiquer quelle alternative est préférée
$ sudo alternatives --install /usr/bin/em uemacs /opt/em-legacy/em2 1
Créez une alternative pour le nouveau binaire, avec une priorité élevée car c'est votre binaire préféré :
$ sudo alternatives --install /usr/bin/em uemacs /usr/local/bin/nem 99
Ces commandes créent un nouveau lien symbolique, /usr/bin/em
, pointant vers /etc/alternatives/em
, que vous pouvez à votre tour pointer vers soit /opt/em-legacy/em2
ou /usr/local/bin/nem
. La référence conviviale à cet ensemble d'alternatives est uemacs
, qui a été choisi arbitrairement par l'administrateur système car il est descriptif et mémorisable. Vous pouvez choisir la destination du lien symbolique alternatif en utilisant le --config
choix :
$ sudo alternatives --config uemacs
[sudo] password for seth:
There are 2 programs which provide 'uemacs'.
Selection Command
-----------------------------------------------
*+ 1 /usr/local/bin/nem
2 /opt/em-legacy/em2
Supprimer une alternative
Parfois, les alternatives sont des solutions à long terme, et d'autres fois, elles servent simplement à aider les utilisateurs ou les administrateurs à passer à quelque chose de nouveau. Si vous avez besoin de supprimer une alternative pour une raison quelconque, vous pouvez le faire avec le --remove-all
option, suivi du nom "générique" de l'alternative. Dans cet exemple, c'est uemacs
:
$ sudo alternatives --remove-all uemacs
Cela supprime tout ce qui concerne uemacs
parmi les alternatives
sous-système :le lien symbolique dans /usr/bin
et /etc/alternatives
. Si vous ne souhaitez supprimer qu'un seul choix d'une alternative, utilisez le --remove
option, en fournissant le nom alternatif (uemacs
dans cet exemple) et le chemin du choix que vous souhaitez supprimer :
$ sudo alternatives --remove uemacs /opt/em-legacy/em2
Alternatives
Les alternatives
La commande a beaucoup plus de fonctionnalités, y compris la possibilité de lier symboliquement des composants dépendants lorsqu'une alternative spécifique est choisie. En plus de gérer une grande partie du travail lourd, alternatives
centralise vos incohérences. Vous pouvez vérifier quelles alternatives sont en place, vous n'avez donc pas à vous rappeler au jour le jour que emacs
est en fait emacs-26.3
, ou que java
n'est pas java-1.8
mais /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0
, et ainsi de suite :
$ alternatives --list
Linux est une question de choix et de flexibilité, et les alternatives
est un exemple de la façon dont les utilisateurs et les administrateurs peuvent bénéficier d'un tour de passe-passe astucieux.
Vous voulez essayer Red Hat Enterprise Linux ? Téléchargez-le maintenant gratuitement.