In generale esistono molti tipi di shell, che si dividono principalmente in testuali e grafiche: quando si parla semplicemente di “shell”, o anche di “terminale”, si intende di solito una shell testuale con cui l’utente interagisce attraverso un terminale o un terminale virtuale (quest’ultimo può anche far parte della shell stessa anziché essere un programma a parte) tramite un’interfaccia a riga di comando; nel caso di shell grafiche è comune fare riferimento ai cosiddetti desktop environment, che forniscono agli utilizzatori un ambiente grafico da cui è possibile gestire file e avviare programmi.
Quando diamo dei comandi li diamo tramite una shell
La shell pertanto mi permette di eseguire i comandi e di avere un ambiente con delle variabili.
Le moderne shell testuali posseggono diverse funzionalità ergonomiche, tra le quali:
-la cronologia dei comandi eseguiti (o command history), che permette di ripetere gli ultimi comandi digitati;
-il completamento dei comandi (o command-line completion), che permette di completare automaticamente nomi di programmi e di file
-il job control, che permette di avviare in background più programmi o di sospenderli temporaneamente.
Le shell testuali dei sistemi integrano un linguaggio di scripting con il quale è possibile scrivere veri e propri programmi che possono ad esempio automatizzare le operazioni di amministrazione di sistema, semplificandola. La sintassi di tale linguaggio è un’estensione di quella usata interattivamente, per cui chi è familiare con l’uso interattivo della shell trova facile e naturale creare degli script.
C’e’ una variabile che puo’ essere stampata a video ed ‘ e’ $
[morro@fedolinux]$ echo $SHELL
/bin/bash
[morro@fedolinux]$
Questa variabile contiene per l’utente che esegue, il contenuto /bin/bash/
Viene pertanto detto quale e’ la shell di default e cioe’ /bin/bash
Questa e’ una variabile e viene inizializzata ad ogni avvio di sistema
Ora digitiamo
[morro@fedolinux] $ grep morro /etc/passwd
morro:x:1000:1000:morro:/home/morro: /bin//bash
[morro@fedolinux]$
In questa analisi si evince che l’utente fa uso della shell /bin//bash
Posso pero’ cambiare per il mio utente quella che e’ la mia shell di default
digitando ad esempio ksh ( kornshell) oppure sh ( un altro tipo di shell)
[morro@fedolinux]$ sh
sh-4.35
E questo pero’ bisognera’ farlo manualmente, ad ogni avvio di terminale, non e’ persistente.
Digitando
[morro@fedolinux]$ sh
sh-4.35
exit
[morro@fedolinux] $
Digitando exit si ritorna in bash shell.
Possiamo visualizzare un elenco delle shell disponibili, su cui cambiare.
[morro@fedolinux]$ chsh -l
Il comando chsh (change shell) che si trova nei sistemi operativi Unix e Unix-like permette di modificare la shell di login, ovvero la shell predefinita che si presenta all’utente al momento dell’accesso al sistema. Le shell valide utilizzabili sono elencate generalmente nel file /etc/shells
/bin/sh/
/bin/bash/
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/bin/rbash
/usr/bin/nologin
/bin/ksh
/user/bin/ksh
E questo e’ l’elenco delle shell a disposizione.
Poniamo ora il caso che si voglia definitivamente stabilire quale sara’ la mia shell di default:
[morro@fedolinux]$ chsh -s /usr/bin/ksh
Modifica shell per morro in corso
Password:*********
Shell modificata
Posso ora simulare un login
[morro@fedolinux]$ su -l morro
Password:********
ksh
Abbiamo cambiato la shell
Questa lista:
/bin/sh/
/bin/bash/
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/bin/rbash
/usr/bin/nologin
/bin/ksh
/user/bin/ksh
Fa parte di un file di configurazione, modificabile solo da root e quindi:
[root@fedolinux morro]# vi /etc/shells
/bin/sh/
/bin/bash/
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/bin/rbash
/usr/bin/nologin
/bin/ksh
/user/bin/ksh
“/etc/shells” 9L, 113C
Dove noi potremo opportunamente cancellare o modificare le shells presenti, al riavvio e tornando in shell avremo quindi:
[morro@fedolinux]$ chsh -l
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/bin/rbash
/usr/bin/nologin
/bin/ksh
Avendo ora cancellato /user/bin/ksh.
Il comando per determinare il cambio di shell e’ quindi: chsh