La shell


 

Shell

  • conchiglia, buccia, involucro
  • corazza, proiettile
  • (informatica) interprete di comandi.

La shell nasce dalla necessità dell'utente di poter dialogare con la macchina, è uno strumento capace di rendere flessibile e minima la distanza tra quello che vogliamo fare e la sua effettiva esecuzione da parte del sistema.

È un intermediario tra l'utente ed il kernel (il cuore della macchina), in pratica si occupa di tradurre i comandi dell'utente e di passarli al kernel per l'esecuzione. La shell è simile è simile al COMMAND.COM in DOS. Una volta effettuato il login nel sistema, viene assegnata la shell di default che

  • legge i suoi file di inizializzazione e
  • può settare alcune variabili di ambiente, i path di ricerca dei comandi, gli alias dei comandi e
  • eseguire qualche comando specificato in questi file.

Esistono vari tipi di shell per i sistemi Unix e Linux

Shell Descrizione Path
ash Shell limitata di tipo sh /bin/ash
ash.static Shell di tipo sh compilata staticamente, utile per il recover del sistema /bin/ash.static
bash Bourn Again, forse la più famosa /bin/bash
bash2 Nuova versione della Bash /bin/bash2
bsh Link simbolico alla ash /bin/bsh
csh C shell /bin/csh
ksh Korn Shell /bin/ksh /usr/bin ksh
pdksh Link simbolico alla ksh /usr/bin/pdksh
rsh Shell per operazioni di rete /usr/bin/rsh
sh Link simbolico alla Bash /bin/sh
tcsh Molto utilizzata e compatibile con ls csh /bin/-tcsh
zsh Compatibile con csh, ksh e sh /bin/-zsh

A differenza di particolari sistemi operativi dove si è vincolati a una sola shell, nei sistemi Linux è possibile scegliere quale shell utilizzare a seconda della propria esperienza ed alle proprie necessità.

Le shell presenti nel sistema sono elencate nel file /etc/shells

/bin/sh
/bin/bash
/bin/bash2
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh

tramite il comando

$ cat /etc/shells.

Bourne shell (sh)

È la shell originale di UNIX, scritta da Steve Bourn dei Bell Labs. Disponibile su tutti i sistemi UNIX, non possiede le agevolazioni interattive fornite da shell più recenti come C e Korn. La Bourne shell fornisce un semplice linguaggio per la sua programmazione.

C shell (csh)

È stata scritta all'università di Berkley, California. Come indica il nome, il suo linguaggio di programmazione è molto simile al C.

Korn shell (ksh)

È stata scritta da David Korn dei Bell Labs. Attualmente è la shell standard dei sistemi UNIX, fornisce le stesse prestazioni della C e TC shell unitamente a un linguaggio di programmazione simile a quello della Bourne shell.

Bourne Again Shell (bash)

È stata scritta dalla Free Software Foundation come shell di pubblico dominio. Ampliamente usata in ambienti accademici, fornisce tutte le stesse prestazioni della C e Korn shell, con un linguaggio compatibile con la Bourne.

Public Domain Korn Shell (pdksh)

Data l'enorme popolarità della Korn shell fra gli utenti Unix, ne è stata sviluppata questa versione per Linux. La pdksh non supporta tutte le caratteristiche della Korn, ma solo le principali, aggiungendone di nuove.

TC Shell (tcsh)

È una versione modificata della C shell, con cui è interamente compatibile, introducendo però nuove caratteristiche che ne rendono più agevole l'interazione con l'utente. I maggiori miglioramenti rispetto alla csh sono nell'area dell'editing della linea di comando, seguendo lo stile dell'editor EMACS.

La shell

La shell è un vero e proprio ambiente di programmazione, oltre che un interprete di comandi, con cui è possibile realizzare script per automatizzare operazioni anche complesse e ripetitive ed è altamente configurabile.

Le shell dispongono ognuna di un proprio set di comandi e di regole sintattiche non sempre simili e compatibili, dispongono di operatori, istruzioni di selezione e di ciclo.

La shell maggiormente utilizzata e predefinita nella maggior parte delle distribuzioni Linux è la bash, acronimo di Bourne Again shell, capace di eseguire script scritti per la shell Bourne che è una tra le più utilizzate in ambiente Unix.

Cosa non trascurabile la shell Bash include quasi tutte le funzioni delle shell C e Korn integrandole con funzioni proprie che ampliano le possibilità dell'utente.

Una ulteriore nota di rilievo di questa shell è la sua forma free secondo la filosofia Open Source, quindi liberamente utilizzabile.

I file di configurazione

La shell può usare cinque files di configurazione, ma spesso nelle varie distribuzioni non vengono usati tutti, d'altra parte vedremo che non è difficile crearsene di propri.

I file sono

/etc/profile file globale
/etc/bashrc file globale
~/bash_profile file locale
~/bashrc file locale
~/bash_logout file locale

File globali contengono direttive di configurazione valide per tutti gli utenti mentre file locali contengono direttive di configurazione valide solo per l'utente che possiede la cartella nella directory /home che li contiene.

/etc/profile

È il file di configurazione globale che determina le variabili di ambiente e i programmi da eseguire per ogni utente che manda in esecuzione la shell.

Per fare un paragone con il mondo Dos potrebbe essere qualcosa di molto simile al file AUTOEXEC.BAT.

/etc/bashrc

È un file di configurazione globale molto simile al precedente, per questo motivo spesso non è usato, contiene alias (collegamenti brevi a comandi molto lunghi li vedremo in seguito), e pezzi di codice nel linguaggio di scripting della shell che devono essere eseguiti alla partenza della shell. Tutto può essere spostato senza problema nel file /etc/profile.

~/.bash_profile

È un file di configurazione locale che contiene direttive di configurazione e variabili di ambiente specifiche dell'utente al quale appartiene la directory /home in cui si trova. Il file viene letto ed eseguito successivamente a quelli globali e modifica o sovrascrive variabili che riguardano esclusivamente l'utente.

~/.bashrc

È un file di configurazione locale che contiene direttive di configurazione come gli alias, o funzioni definite dall'utente. Il file viene letto ed eseguito successivamente a quelli globali, gli alias o le funzioni saranno specifici dell'utente e non influenzeranno nessun altro utente.

È il corrispondente locale di /etc/bashrc.

~/.bash_logout

È un file di configurazione locale che contiene comandi da eseguire quando l'utente esce dalla shell.

I comandi influenzano solo l'utente che possiede la cartella /home nella quale si trova.

Le variabili

Il metodo più usato per archiviare temporanemente uno o più valori consiste nell'usare le variabili, cioè usare un'area di memoria del computer assegnandogli un nome a cui si possa far riferimento in seguito per recuperare il valore assegnato.

Le variabili di ambiente sono quelle variabili create autonomamente dal sistema operativo e normalmente sono definite nel file /etc/profile, come per esempio SHELL, PS1, PS2.

Le variabili locali sono quelle variabili definite dall'utente e sono generalmente definite nel file ~/.bashrc che si trova nella /home dell'utente del quale possono influenzare l'ambiente.

La definizione di una variabile avviene in un modo intuitivo e elementare.

È composta di tre parti: il nome della variabile seguito dall'operatore di assegnamento = e il valore da assegnare, cioè nome_variabile=valore_variabile. Una volta definita la variabile la possiamo rendere disponibile ai programmi che l'utente usa con il comando export

export nome_variabile

Per accedere al valore di una variabile cioè per recuperarne il valore dobbiamo far precedere al nome variabile il suffisso $.

Per esempio per conoscere il valore della variabile SHELL possiamo digitare il comando

echo $SHELL

che produrrà una stampa a video

/bin/bash

La variabile PATH

La prima variabile da configurare è la variabile PATH che definisce le directory a cui possiamo accedere da qualsiasi punto del filesystem.

Per esempio potremmo avere un programma nella directory /bin chiamato mio_prog, se la directory /bin è presente nella variabile PATH possiamo lanciare il programma da qualsiasi posizione nel file system, altrimenti saremmo costretti o a digitare l'intero percorso /bin/mio_prog oppure portarci nella directory digitando prima cd /bin e successivamente ./mio_prog.

Il punto e la barra traversa (slash) che precedono il nome del programma dicono alla shell di cercare di eseguire quel file se ci sono i permessi adatti. La variabile PATH è definita in /etc/profile e ha una sintassi leggermente diversa dal normale, ogni percorso di directory alla destra dell'operatore di assegnazione = è separato dal carattere :, esempio

PATH=/bin:/usr/bin:/usr/local/bin

export PATH

renderà possibile mandare in esecuzione da qualsiasi punto del file system tutti gli eseguibili che si trovano nelle cartelle dichiarate nella variabile PATH. Se noi volessimo aggiungere altri valori alla variabile PATH potremmo digitare semplicemente

PATH=$PATH:/home/test/bin
export PATH

che aggiungerà al valore già esistente della variabile PATH il nostro nuovo valore, infatti il nome variabile preceduto dal simbolo $ verrà espanso con il contenuto originale della variabile cioè

/bin:/usr/bin:/usr/local/bin

che diventerà

/bin:/usr/bin:/usr/local/bin:/home/test/bin.

Si può modificare il proprio path inserendo il comando precedente in ~/.bash_profile.

La memoria della shell

La shell è in grado di ricordare i comandi immessi dall'utente che normalmente sono salvati nel file ~/.bash_history e possono essere richiamati premendo i tasti freccia in su e freccia in giù, questo comportamento può essere modificato configurando le variabili: HISTSIZE, HISTFILE, HISTFILESIZE.

È da ricordare che per abitudine le variabili di ambiente vengono indicate usando lettere maiuscole a differenza delle locali per cui si usano le minuscole. Queste variabili sono definite in /etc/profile ma possono essere sovrascritte in ~/.bash_profile.

HISTSIZE

Visualizza il numero massimo dei comandi da memorizzare nel file storico. Normalmente il valore preimpostato è 500 o più comandi.

HISTFILE

Indica il file che deve essere usato per contenere i comandi digitati. Normalmente il valore preimpostato è ~/.bash_history, può anche non essere impostato, lo storico si limiterà alla sessione di lavoro corrente.

HISTFILESIZE

Determina la grandezza fisica massima che può avere il file dello storico.

Gli alias

Gli alias si possono definire come comandi accorciati. Se vogliamo chiamare un comando lungo in maniera più mnemonica possiamo assegnarlo ad un alias.

Se per esempio volessimo evitare di digitare ogni volta il comando

ls -aF --color

potremmo assegnarlo nel file /etc/bashrc oppure ~/.bashrc nel seguente modo

alias ls='ls -aF --color'

Possiamo definire quanti alias ci servono senza limiti.


Precedente ] Home ] Su ] Successiva ]

Un nuovo modo di comunicare: Open Source e Free Documentation License
ITIS "Luigi Negrelli" Feltre - Unione Artigiani e Piccola Industria di Belluno