Aggiunta di collegamenti ai comandi in / bin


8

Esiste un modo per aggiungere comandi personalizzati a /bin?

Ad esempio, uso docker container lsmolto e vorrei trasformarlo in un comando di scelta rapida, come dcls.

Se posso aggiungere un file chiamato dclsper /bine all'interno del file, specificare il comando esatto docker container ls, presumo che non avrebbe funzionato.

Qual è il modo giusto, se ce n'è uno, di fare qualcosa del genere?


6
Non aggiungere a /bin, è possibile aggiungere a ~/bin(un cestino nella propria directory) oppure a /usr/local/bin(per condividere con tutti gli utenti del proprio sistema, ma non interferire con il gestore pacchetti). O meglio in questo caso, usare un alias.
ctrl-alt-delor

Risposte:


25

Un modo semplice per un collegamento è definire un alias

alias dcls='docker container ls'

Ciò verrà eseguito docker container lsquando si immette dclse il comando aliaselenca gli alias definiti. Per rimuovere questo alias utilizzare unalias dcls.

Se usi bash, puoi salvare l'alias nel tuo ~/.bashrco ~/.bash_aliases.

Se ~/.bash_aliasesnon viene letto all'avvio, è possibile aggiungere questa riga a ~/.bashrc:

[ -f ~/.bash_aliases ] && . ~/.bash_aliases

Grazie Freddy! Dovrò creare questo alias ogni volta che il server viene riavviato? O è limitato al mio profilo utente?
alex067,

2
Devi salvarlo nel file di avvio della shell dell'utente ~/.bashrco ~/.profileo ... Se non salvi l'alias, questo viene perso quando ti disconnetti o chiudi il terminale.
Freddy,

Grazie ancora. Cosa succede se non abbiamo .bashrc o .profile nella nostra cartella ~?
alex067,

1
Veramente? Che strano server! Se usi bash, puoi crearlo usando echo "alias dcls='docker container ls'" >> ~/.bashrc, quindi procurartelo con . ~/.bashrco disconnettiti e accedi di nuovo.
Freddy,

Saluti per il vostro aiuto, farlo funzionare!
alex067,

15

In realtà, ciò che descrivi funzionerebbe, con alcune note:

  1. Si potrebbe semplicemente mettere docker container lsin un file chiamato /bin/dcls. Ma il comportamento può essere un po 'complicato. È un po 'più affidabile iniziare il file con una riga chiamata "shebang", quindi il file sarebbe simile
    #! / Bin / sh
    contenitore docker ls
    che specifica che il file è uno script di shell.
  2. Prima di poter eseguire il comando, è necessario rendere il file eseguibile con un comando simile
    chmod + x / bin / dcls
    Probabilmente devi essere root per fare questo (cioè eseguirlo con sudo).
  3. Segui i due passaggi precedenti e sarai in grado di digitare dcls e lo farà docker container ls. Ma, se digiti dcls -l foo, lo farà comunque docker container ls. Se vuoi farlo docker container ls -l foo, dovresti cambiare lo script per dire

    #! / Bin / sh
    contenitore docker ls "$ @"
    che specifica che tutti gli argomenti digitati sulla dclsriga di comando devono essere passati al docker container lscomando.

    Naturalmente, ci sono cose più complicate che puoi fare con gli argomenti da riga di comando.

Per una mappatura di un semplice comando → un semplice comando, che non ha bisogno di essere condiviso con altri utenti, è più semplice definire un alias ( come suggeriva Freddy ), o una funzione shell. Funzioni più complicate sono spesso scritte come script; cioè, file di testo che contengono comandi. Ma, se non è necessario condividerlo con altri utenti, è più comune utilizzare una bindirectory privata .

$ cd                                     # (nella tua home directory) 
$ mkdir bin
Quindi copia dclsin $HOME/bine aggiungi
export PATH = "$ HOME / bin: $ PATH"
al tuo ~/.bashrc.

Inoltre, è comune inserire script personali /usr/local/bine partire /binper i programmi forniti con il sistema.


Bella risposta. Se lo aggiungo al cestino come ho già detto, ciò influenzerebbe tutti gli utenti corretti?
alex067,

Sì; tutti gli utenti guardano a /bin,  /usr/bin, e in genere directory come condiviso /usr/local/bin e, a volte /opt, così i programmi in queste directory sono disponibili per tutti gli utenti.
G-Man dice "Reinstate Monica"

1
Se si desidera condividere con altri sul proprio sistema /usr/local/bin, non interferire con il gestore pacchetti.
ctrl-alt-delor

5
+1 per raccomandare $HOME/bin. Dovresti davvero usarlo. Questo non è solo l'ambito giusto, ma aiuta quando si reinstalla il sistema (e si mantiene HOME) per non perdere il comando personalizzato.
allo

1
FWIW ~/.local/bin invece lo uso .
Sparhawk,

0

Se solo per te, un alias va bene, ma in base agli script del sistema locale Linux Gerarchia standard del file vanno /usr/local/bin/, no /bin.

  1. Anche se sicuramente funzionerebbe /bin, è meglio attenersi agli standard soprattutto se il software verrà distribuito nei siti dei clienti.
  2. Se il tuo script sarebbe facoltativo, dovrebbe entrare /opt
  3. La sceneggiatura stessa sarebbe:

    #!/bin/bash
    #
    # Version 1.0 DD 2019-05-04
    # dcls = docker container ls
    docker container ls "@0"
    if [[ $? -eq 0 ]]; then
      echo -e "Errors encountered..."
      exit 1
    fi
    
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.