La shell
|
Shell
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
Esistono vari tipi di shell per i sistemi Unix e Linux
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 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 shellLa 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 configurazioneLa 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
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 variabiliIl 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 PATHLa 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 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 shellLa 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. HISTSIZEVisualizza il numero massimo dei comandi da memorizzare nel file storico. Normalmente il valore preimpostato è 500 o più comandi. HISTFILEIndica 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. HISTFILESIZEDetermina la grandezza fisica massima che può avere il file dello storico. Gli aliasGli 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. |
Un nuovo modo di comunicare: Open Source e Free Documentation License |