GNU/Linux
Conchiglia
Ricerca…
introduzione
La shell esegue un programma in risposta al suo prompt. Quando si assegna un comando, la shell cerca il programma e quindi lo esegue. Ad esempio, quando si assegna il comando ls, la shell cerca l'utilità / programma denominata ls e quindi la esegue nella shell. Gli argomenti e le opzioni fornite con le utilità possono influire sul risultato ottenuto. La shell è anche nota come CLI o interfaccia a riga di comando.
Cambiare la shell di default
La maggior parte delle distribuzioni moderne verrà fornita con BASH ( B ourne A gain SH ell) preinstallata e configurata come shell di default.
Il comando (in realtà un binario eseguibile, un ELF) responsabile della modifica delle shell in Linux è chsh
( ch ange sh ell).
Possiamo prima controllare quali shell sono già installate e configurate sulla nostra macchina usando il comando chsh -l
, che produrrà un risultato simile a questo:
[user@localhost ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/usr/bin/fish
In alcune distribuzioni Linux, chsh -l
non è valido. In questo caso, l'elenco di tutte le shell disponibili può essere trovato nel file / etc / shells. Puoi mostrare il contenuto del file con cat
:
[user@localhost ~]$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/usr/bin/fish
Ora possiamo scegliere la nostra nuova shell di default, ad esempio fish
, e configurarla usando chsh -s
,
[user@localhost ~]$ chsh -s /usr/bin/fish
Changing shell for user.
Password:
Shell changed.
Ora tutto ciò che resta da fare è preformare un ciclo di logoff-logon e goderti la nostra nuova shell di default.
Se si desidera modificare la shell predefinita per un utente diverso e si dispone di privilegi amministrativi sulla macchina, sarà possibile eseguire questa operazione utilizzando chsh
come root
. Quindi, supponendo di voler cambiare la shell predefinita di user_2
in fish, useremo lo stesso comando di prima, ma con l'aggiunta del nome utente dell'altro utente, chsh -s /usr/bin/fish user_2
.
Per verificare quale sia la shell di default corrente, possiamo visualizzare la variabile di ambiente $SHELL
, che punta al percorso della nostra shell predefinita, quindi dopo la nostra modifica ci aspetteremmo di ottenere un risultato simile a questo,
~ echo $SHELL
/usr/bin/fish
opzioni chsh
:
-s shell
Imposta shell come shell di login.
-l
, --list-shells
Stampa l'elenco delle shell elencate in / etc / shells ed esci.
-h
, --help
Stampa un messaggio di utilizzo ed esci.
-v
, --version
Stampa le informazioni sulla versione ed esci.
Basic Shell Utilities
Personalizzazione del prompt della shell
Il prompt dei comandi predefinito può essere modificato per apparire diverso e breve. Nel caso in cui la directory corrente sia lunga, il prompt dei comandi predefinito diventa troppo grande. L'utilizzo di PS1
diventa utile in questi casi. Un comando breve e personalizzato carino ed elegante. Nella tabella seguente PS1
è stato utilizzato con un numero di argomenti per mostrare diverse forme di prompt della shell. Il prompt dei comandi di default assomiglia a questo: user@host ~ $
nel mio caso si presenta così: bruce@gotham ~ $
. Può essere modificato come da tabella seguente:
Comando | Utilità |
---|---|
PS1 = '\ w $' | ~ $ prompt della shell come nome della directory. In questo caso la directory root è root. |
PS1 = '\ h $' | prompt di shell di gotham $ come nome host |
PS1 = '\ u $' | prompt di bruce $ shell come nome utente |
PS1 = '\ t $' | 22:37:31 $ prompt della shell 22:37:31 $ nel formato 24 ore |
PS1 = '@ $' | 10:37 PM prompt della shell in formato 12 ore |
PS1 = '! $ ' | 732 mostrerà il numero di cronologia del comando al posto del prompt della shell |
PS1 = 'Dude $' | dude $ mostrerà il prompt della shell nel modo che preferisci |
Alcuni comandi di shell di base
Comando | Utilità |
---|---|
Ctrl-k | taglio / kill |
Ctrl-y | Yank / incolla |
Ctrl-a | porterà il cursore all'inizio della linea |
Ctrl-e | porterà il cursore alla fine della linea |
Ctrl-d | cancellerà il carattere dopo / al cursore |
Ctrl-l | cancellerà lo schermo / terminale |
Ctrl-u | cancellerà tutto tra prompt e il cursore |
Ctrl-_ | annullerà l'ultima cosa digitata sulla riga di comando |
Ctrl-c | interromperà / interromperà il processo / processo in esecuzione in primo piano |
Ctrl-r | invertire la ricerca nella storia |
~/.bash_history | memorizza gli ultimi 500 comandi / eventi usati nella shell |
history | mostrerà la cronologia dei comandi |
history | grep <key-word> | mostrerà tutti i comandi nella cronologia con la parola chiave <parola-chiave> (utile nei casi in cui ricordi parte del comando usato in passato) |
Crea il tuo Alias di comando
Se sei stanco di usare lunghi comandi in bash puoi creare il tuo alias di comando.
Il modo migliore per farlo è modificare (o creare se non esiste) un file chiamato .bash_aliases nella tua cartella home. La sintassi generale è:
alias command_alias='actual_command'
dove actual_command
è il comando che si sta rinominando e command_alias
è il nuovo nome che gli è stato assegnato. Per esempio
alias install='sudo apt-get -y install'
esegue il mapping del nuovo comando alias install
al comando effettivo sudo apt-get -y install
. Ciò significa che quando si utilizza l' installazione in un terminale questo viene interpretato da bash come sudo apt-get -y install .
Trova un file sul tuo sistema
Usando bash puoi facilmente localizzare un file con il comando locate
. Ad esempio, supponiamo che stai cercando il file mykey.pem:
locate mykey.pem
A volte i file hanno nomi strani, ad esempio potresti avere un file come random7897_mykey_0fidw.pem
. Diciamo che stai cercando questo file ma ti ricordi solo le parti mykey e pem. Puoi combinare il comando locate
con grep
usando una pipe come questa:
locate pem | grep mykey
Quale porterebbe su tutti i risultati che contengono entrambi questi pezzi.
Si noti che non tutti i sistemi hanno installato l'utilità di locate
e molti che non l'hanno abilitato. locate
è veloce ed efficiente perché analizza periodicamente il tuo sistema e memorizza nella cache i nomi e le posizioni per ogni file su di esso, ma se quella raccolta di dati non è abilitata allora non può dirti nulla. È possibile utilizzare updatedb
per avviare manualmente la scansione del filesystem per aggiornare le informazioni memorizzate nella cache relative ai file sul proprio filesystem.
Se non si dispone di un gruppo di lavoro locate
, si può ripiegare sul find
di utilità:
find / -name mykey.pem -print
è approssimativamente equivalente a locate mykey.pem
ma deve eseguire la scansione del / dei filesystem ogni volta che viene eseguito per il file in questione, piuttosto che usare i dati nella cache. Questo è ovviamente più lento e meno efficiente, ma più in tempo reale. L'utilità di find
può fare molto di più che trovare i file, ma una descrizione completa delle sue capacità va oltre lo scopo di questo esempio.