Le astrazioni possono essere utili per gli utenti perché molti utenti non si preoccupano di come il loro computer riesca a portare a termine un'attività purché sia in linea con l'obiettivo. In effetti, anche le applicazioni non si preoccupano sempre di come ottenere qualcosa fintanto che tutte le sue chiamate di sistema ricevono una risposta corretta. In teoria, un amministratore di sistema Linux può offrire molti strumenti di sistema in base alla funzione piuttosto che in base al nome esatto dell'eseguibile, ma ciò spesso richiede molto collegamento simbolico e monitoraggio della versione. A meno che non utilizzi le alternatives
comando.
Le alternatives
comando ha iniziato la sua vita come, cosa interessante, un'alternativa. Originariamente, questa era una comoda utility, scritta in Perl, dal progetto Debian Linux, chiamata update-alternatives
. Red Hat ha riscritto il comando senza Perl ed è stato diffuso in tutte le distribuzioni basate su Fedora come Red Hat e CentOS, così come in altre distribuzioni che si affidano a Red Hat per la definizione funzionale di Linux Standard Base (LSB).
Quando usare il comando alternative
Un esempio semplice e realistico:hai un comando sul tuo sistema chiamato em
, che avvia un semplice editor di testo. È stato l'editor di riferimento per la tua base di utenti per anni, molte persone hanno basato i flussi di lavoro su di esso e alcuni mantengono configurazioni altamente personalizzate per esso. Tuttavia, la tua base di utenti ti ha chiarito di recente che non possono più sopravvivere senza il supporto delle emoji nei loro editor di terminali e em
non supporta Unicode.
Trovi un fork abilitato per Unicode di em
chiamato nem
, ma sai che il 99% dei tuoi utenti è abituato a em
, hanno script che chiamano em
e continueranno a considerare qualsiasi applicazione sostitutiva come em
non importa quello che fai. La soluzione facile a questa situazione, ea molti altri esempi simili, è designare il nuovo nem
binario come alternativa preferita a em
binario quando em
viene utilizzato il comando.
La creazione manuale di un collegamento simbolico potrebbe sembrare allettante, ma non è resistente agli aggiornamenti di un gestore di pacchetti, né è centralizzata.
Le alternatives
comando è molto utile quando si gestiscono nomi di applicazioni "generiche". Ovviamente nel mondo UNIX, "generico" non è sempre generico più di quanto lo sia "Kleenex" o "Xerox" nel mondo reale, quindi termini come java , (x)emacs(-nox) , (n)vi(m) , chi è e iptables sono spesso tra i primi ad avere delle alternative definite per loro. Per termini veramente generici, come EDITOR
e CC
, le alternatives
comando non è considerata una soluzione appropriata. Per quei termini, perché sono variabili d'ambiente e dovrebbero essere definite in /etc
o $HOME/.profile
.
Creare una nuova alternativa
Continuando con lo scenario di esempio di un vecchio binario chiamato em
essendo soppiantato dalla nuova variante nem
, è facile creare una voce alternativa. In questo esempio, devi rinominare il comando originale, anche se in altri casi questo non è necessario perché il comando non è esattamente quello che la gente pensa che sia in primo luogo (java
, ad esempio, si trova raramente in /usr/bin
direttamente). Se è necessario modificare il nome di un binario, il modo corretto per farlo è nel suo file delle specifiche RPM, in modo tale che l'RPM che installa il comando fornisca il binario con il nuovo nome.
In un pizzico, specialmente se stai comunque eliminando gradualmente il comando, potresti rimuovere il comando dalla gestione dei pacchetti del sistema e mantenere una versione personalizzata del vecchio comando disponibile /opt
o simili.
Per questo esempio, supponi di aver rinominato l'editor originale em2
(indicando il suo numero di versione più recente).
Ora hai due binari (em2
e nem
) da associare a un comando:em
. Per aiutare a mantenere chiari i diversi ruoli della terminologia, supponi che em
e nem
sono entrambi editor in stile micro Emacs. In tal caso, un termine molto generico per indicare l'alternativa creata potrebbe essere µemacs
(usando il simbolo µ per indicare "micro") o uemacs
per semplicità.
Crea un'alternativa all'originale fornendo:
- una posizione per il collegamento simbolico "generico"
- un nome per l'alternativa (ho deciso per
uemacs
, per chiarire che si tratta di un nome di riferimento anziché di un binario specifico) - il binario da eseguire quando vengono chiamati questi collegamenti simbolici
- un livello di priorità per indicare quale alternativa è preferita
$ sudo alternatives --install /usr/bin/em uemacs /opt/em-legacy/em2 1
Crea un'alternativa per il nuovo binario, con una priorità alta perché è il tuo binario preferito:
$ sudo alternatives --install /usr/bin/em uemacs /usr/local/bin/nem 99
Questi comandi creano un nuovo collegamento simbolico, /usr/bin/em
, puntando a /etc/alternatives/em
, che a sua volta puoi puntare a o /opt/em-legacy/em2
o /usr/local/bin/nem
. Il riferimento umano a questo pacchetto di alternative è uemacs
, scelto arbitrariamente dall'amministratore di sistema perché descrittivo e memorabile. Puoi scegliere la destinazione del collegamento simbolico alternativo usando il --config
opzione:
$ 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
Rimozione di un'alternativa
A volte le alternative sono soluzioni a lungo termine, altre volte servono solo ad aiutare gli utenti o gli amministratori a passare a qualcosa di nuovo. Se hai bisogno di rimuovere un'alternativa per qualsiasi motivo, puoi farlo con il --remove-all
opzione, seguito dal nome "generico" dell'alternativa. In questo esempio, è uemacs
:
$ sudo alternatives --remove-all uemacs
Questo rimuove tutto ciò che riguarda uemacs
dalle alternatives
sottosistema:il collegamento simbolico in /usr/bin
e /etc/alternatives
. Se vuoi rimuovere solo una scelta da un'alternativa, usa --remove
opzione, fornendo il nome alternativo (uemacs
in questo esempio) e il percorso della scelta che vuoi rilasciare:
$ sudo alternatives --remove uemacs /opt/em-legacy/em2
Alternative
Le alternatives
comando ha molte più funzionalità, inclusa la possibilità di collegare simbolicamente i componenti dipendenti quando viene scelta un'alternativa specifica. Oltre a gestire gran parte del lavoro pesante, alternatives
mantiene le tue incongruenze centralizzate. Puoi controllare quali alternative sono in atto, così non devi ricordare giorno per giorno che emacs
è in realtà emacs-26.3
o quel java
non è java-1.8
ma /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0
, e così via:
$ alternatives --list
Linux è tutto incentrato sulla scelta, sulla flessibilità e sulle alternatives
command è un esempio di come sia gli utenti che gli amministratori possono trarre vantaggio da alcuni astuti giochi di prestigio.
Vuoi provare Red Hat Enterprise Linux? Scaricalo ora gratuitamente.