Visualizzazione post con etichetta chsh. Mostra tutti i post
Visualizzazione post con etichetta chsh. Mostra tutti i post

martedì 18 aprile 2023

Linux: Verificare la shell utilizzata

Linux e Unix mettono a disposizione dell'utente diverse shell. Nelle varie distribuzioni si possono trovare shell come bash (Bourne Again shell), ksh (Korn shell), csh (C shell), tcsh (TC shell), sh (Bourne shell), zsh (Z shell) e altre installate di default. Come facciamo a scoprire quale shell stiamo utilizzando su Linux?
L'utilizzo della variabile $SHELL, in questo caso, non è così affidabile infatti i comandi
echo "$SHELL"
oppure
printf "La mia shell - %s\n" "$SHELL"
visualizzano la shell dell'utente corrente ma non necessariamente quella in esecuzione al momento.
Come visibile in FIG 1, la shell di default di Kali Linux è zsh.
Default Shell
FIG 1 - Default Shell
Per passare, temporaneamente, ad un altra shell in genere basta digitarne il nome all'interno del terminare e premere invio. Ad esempio per passare alla shell bash basterà eseguire il comando
bash
Se, dopo aver modificato la shell, eseguiamo nuovamente il comando per la visualizzazione della variabile $SHELL, noteremo che in output verrà mostrata sempre la shell di default FIG 2. 
Modifica shell attuale
FIG 2 - Modifica shell attuale

Per uscire dalla nuova shell avviata basterà digitare il comando
exit
oppure aprire una nuova finestra terminale (la nuova finestra verrà aperta sulla shell di default).

Di seguito verranno mostrati alcuni metodi per individuare la shell in esecuzione.

Metodo 1
Un vecchio trucco in ambiente Unix per individuare la shell che si sta usando prevede l'utilizzo del comando ps con l'opzione -p {pid}. Il seguente comando permette di scoprire in quale shell ci si trova.
ps -p $$
Il comando seleziona i processi il cui numero ID (PID o numero di identificazione del processo) viene passato all'opzione -p. L'argomento $$ passato all'opzione -p restituisce il PID  del processo corrente. Dato che il processo corrente, all'interno di una finestra terminale, è la shell in esecuzione, il comando visualizzerà un elenco dello stato del processo della shell. In questo elenco, nella colonna CMD, verrà visualizzato il nome della shell in esecuzione al momento.
ps, Shell corrente
FIG 3 - ps, Shell corrente

Metodo 2
Un altro metodo semplice e affidabile per ottenere il nome dell'interprete di shell corrente su Linux o sistemi Unix-like prevede l'utilizzo del parametro speciale della shell $0:
echo $0
oppure
printf "%s\n" $0

$0 è il nome del processo in esecuzione. Se lo si usa all'interno di una shell, restituirà il nome della shell in caso contrario, se lo si usa all'interno di uno script, restituirà il nome dello script.
Visualizzazione shell corrente tramite $0
FIG 4 - Visualizzazione shell corrente tramite $0

Metodo 3
Un altro metodo per ottenere il nome della shell corrente in modo affidabile sui sistemi operativi Linux è attraverso il seguente comando.
readlink /proc/$$/exe
readlink viene utilizzato per stampare i collegamenti simbolici risolti nella shell attuale. Come visto per il Metodo 1, $$ indica il PID del processo corrente (shell) pertanto readlink restituirà il collegamento alla shell in esecuzione
Visualizzazione shell corrente tramite readlink
FIG 5 - Visualizzazione shell corrente tramite readlink

Verificare quali shell sono installate

Il file /etc/shells è un file di testo che contiene i nomi completi delle shell di accesso valide. Per visualizzare quali e quante shell sono installate sulla propria Linux o Unix box, eseguire da terminale il comando
cat /etc/shells

Il file /etc/shells può essere modificato solo da root
sudo vi /etc/shells
/etc/shells
FIG 6 - /etc/shells 

Stampare il nome della shell predefinita

La shell predefinita è quella che viene eseguita quando si apre una finestra di terminale ed è definita nel file /etc/passwd. Per stampare a video la shell predefinita, oltre all'utilizzo della variabile $SHELL visto in precedenza, è possibile utilizzare il seguente comando grep:
grep "^$USER" /etc/passwd
oppure
awk -F: '/kali/ { print $7}' /etc/passwd
dove al posto di kali va specificato l'utente corrente.
Shell predefinita
FIG 7 - Shell predefinita

Modificare la shell predefinita per l'account corrente

Per modificare la shell predefinita per l'account corrente, è possibile utilizzare chsh come mostrato di seguito
chsh -s /usr/bin/zsh

In questo caso il comando imposta come shell predefinita quella specificata dall'opzione -s e che risulta presente nel file /etc/shells.