MegaLab.it
Stampa Articolo
Aperiodico gratuito di informatica
 
20080829210745

Primo incontro con la Shell Testuale

a cura di M@ttia, Xerex, Dr.Fix
16/03/2011 - articolo
Linux & Open Source - Prima di immergersi a fondo nel mondo Linux, è necessario conoscerne qualche comando testuale: vediamo i più importanti.

Questo articolo vuol essere un piccolo aiuto per chi, non soddisfatto di Windows, ha deciso di cambiare rotta virando verso il sistema open source per eccellenza o per chi, e il numero sta aumentando vertiginosamente, per la prima volta si affaccia sul mondo di Linux.

Alcuni utenti di Linux pensano che la sfida con Microsoft si combatta sulle potenzialità dell'interfaccia grafica, ma non è così, infatti l'uso di X-Windows risulta in alcuni casi limitante rispetto alle potenzialità reali di questo sistema operativo. È ovvio che tutto ciò che si può fare tramite mouse supera ampiamente le richieste che la maggior parte degli utenti fa ad un sistema operativo. A noi ora però interessa la shell, ovvero l'interfaccia testuale.

Preparazione all'uso

Avviata la macchina, dovreste trovarvi davanti ad una finestra grafica di login, in cui solitamente inserivate login e password per accedere all'interfaccia grafica. A questo punto, premete Alt+Ctrl+F1. Se tutto è andato a buon fine, vi dovreste trovare davanti ad una schermata nera con un cursore lampeggiante. Qui potrete inserire il vostro solito login e la vostra password. Dopo aver eseguito le corrette operazioni di login, dovreste trovarvi davanti ad un prompt.

Shellvuota.jpg

Da questo momento in poi, ogni cosa che scriverete verrà gestita da un'interprete di comandi, detta Shell.

Esistono vari tipi di shell: la più comunemente usata dagli utenti medi di Linux è la Bash (acronimo di Bourne-Again Shell).

Comandi Principali

Passiamo ora a conoscere, uno ad uno, i primi fondamentali comandi per l'uso di Linux e alcune regolette che governano questo potente sistema:

NB: Il simbolo []$ indica il prompt, pertanto non fa parte del comando stesso, bensì rappresenta ciò che compare a schermo!

Regole Generali

Innanzitutto, di grandissima utilità è il comando man, che ci permette di richiamare il manuale (guida di help) per ogni singolo comando che non conosciamo o di cui non ricordiamo la sintassi, ecc. Per uscire basterà poi premere q.

La chiamata avviene così:

[]$ man [nome_comando]

In alternativa, esiste anche la seguente sintassi:

[]$ [nome_comando] --help

Attenzione! pippo non è uguale a piPpo , poiché Linux (al contrario di Windows) è "case-sensitive", ovvero distingue fra lettere maiuscole e minuscole!

È inoltre importante sapere che ogni comando può avere varie funzionalità, ognuna delle quali attivabile "parametrizzando" il comando stesso, ovvero scegliendo delle opzioni che non sono attivate di default.

La sintassi consiste nello scrivere il comando normalmente, seguito da uno spazio e dal segno -, nonché successivamente da tutti i parametri che desideriamo: ad esempio, il comando ls (vedi sotto) può accettare molti parametri, fra cui ad esempio "1", "a", ecc.

Alcune chiamate valide (con i rispettivi differenti risultati) saranno quindi, ad esempio:

[]$ ls

[]$ ls -1

[]$ ls -a

[]$ ls -1a oppure []$ ls -al

Come avrete già notato, i vari parametri possono essere combinati, semplicemente scrivendoli in sequenza (l'ordine è indipendente).

Navigazione e Visualizzazione

ls (List)

Supponiamo di voler vedere quali file e cartelle sono presenti nella cartella in cui ci troviamo: per saperlo ci basterà digitare []$ ls e premere invio.

Fatto questo, verrà stampata a schermo la lista dei file e delle directory presenti nella cartella (in ordine alfabetico ed in riga).

Ls.gif

Utilizzando alcuni parametri, è inoltre possibile avere informazioni più dettagliate:

[]$ ls -a (Visualizza anche i File che iniziano con il carattere . (punto), che in Linux implica essere "nascosto")

[]$ ls -l (Visualizza i File in colonna, anziché in riga, visualizzando anche le informazioni riguardo ai permessi dei File, alla loro dimensione e alla data di creazione)

Ricordiamo che, per un elenco completo delle opzioni usate (come spiegato sopra), è possibile utilizzare il comando []$ man ls.

CD (Change Directory)

Questo comando di basilare importanza è utilizzato per muoverci fra le cartelle (ad esempio, con un ls possiamo renderci conto di quali cartelle esistano nel punto in cui ci troviamo). Per muoverci ad esempio nella cartella chiamata Prima basterà digitare:

[]$ cd Prima

Per tornare indietro, invece, basta "andare nella cartella .. " (lo spazio tra CD e .. è necessario!), ovvero digitare:

[]$ cd ..

Infine, se non verrà specificata nessuna cartella di destinazione, verremo automaticamente portati alla directory "home".

pwd (Print Working Directory)

Stampa la directory di lavoro corrente.

md (Make Directory)

Il nostro obiettivo è ora quello di creare una Directory (Cartella) di nome Prima:

[]$ md Prima

rd (Remove Directory)

Al contrario, per cancellare Directory appena creata, basterà digitare:

[]$ rd Prima

Mdrd.gif

touch

Crea un nuovo file: se il file specificato esiste già, verrà solo variata la marcatura temporale (Data di Creazione, ...) del file già esistente. Ad esempio:

[]$ touch file1

clear

Facciamo un po' di pulizia sullo schermo con:

[]$ clear

cat

Se nella directory in cui siamo è presente un file di testo, se ne può visualizzare il contenuto col comando []$ cat [nome_file].

Se invece si conosce la posizione di un file che non è nella cartella corrente, useremo []$ cat [[nome_dir] / [nome_file]].

Esempio:

[]$ cat Auguri

[]$ cat xerex/Auguri

Se vogliamo sapere di quante righe è formato il file, ci basterà usare il parametro -s:

[]$cat -s [nome_file].

Cat.gif

grep (General Regular Expression Print)

Stampa le righe corrispondenti ad un criterio. Ad esempio:

[]$ grep word /etc/config

Stamperà a video tutte le righe del file /etc/config, che hanno un riferimento alla parola word.

Il comando grep può essere usato in una varietà di modi. Ad esempio con Wildcard Pipe (vedi prossimo capitoletto):

[]$ ls | grep ciao

Stamperà a video tutti i file della directory corrente che contengono l'espressione "ciao".

more e less

Il primo comando mostra un file, ma una schermata per volta: per proseguire la lettura è necessario premere la barra spaziatrice; per tornare indietro invece bisogna premere b.

Il secondo comando svolge praticamente le stesse funzioni, ma aggiungendone altre.

Si consiglia la lettura dell'help (raggiungibile come sempre digitando il comando man less o less --help).

Esempio:

[]$ more /home/textfile

[]$ cat file1 | less (vedi prossima pagina per il significato della |).

file

Stampa a video la tipologia del file (zip, testo etc), il cui nome è passato come parametro.

Esempio:

[]$ file archivio.tar.gz

echo

Stampa a video il parametro passato nello standard input.

Esempio:

[]$ echo Stampa questa frase

Parliamo un po' di File

cp (Copy)

Copiare un file è compito del comando cp, il quale si attende un file di partenza e un file di destinazione (che ovviamente non possono avere lo stesso nome, se nella stessa cartella).

Ad esempio:

[]$ cp Auguri Xerex/Copia_Auguri

Copia il File Auguri nella directory Xerex, assegnandgli il nome Copia_Auguri, a condizione che la cartella Xerex esista.

In caso Copia_Auguri sia un File già presente nella cartella, verrà chiesta conferma dell'operazione.

Con il Parametro -f, invece, il file verrà rimosso senza nulla chiedere (questa forzatura è utile se si vuole cancellare un alto numero di File).

Esempio:

[]$ cp -f file1 file2

[]$ cp /home/pino/file.odt ./docs

[]$ cp /etc/*.* /backup

mv (Move)

Il comando mv ha due funzioni:

Ovviamente, le due funzioni di mv si possono combinare, senza far coincidere il nome di partenza con quello di arrivo.

rm (Remove)

Per cancellare un file, invece, si usa il comando []$ rm [nome_file].

Prima di rimuovere il file, verrà chiesta una conferma.

Se preferite che il file venga rimosso senza nulla chiedere, usate nuovamente il parametro -f.

Questa forzatura è utile se si vuole cancellare un alto numero di File.

Il comando rm si può usare anche per rimuovere delle cartelle anche non vuote. Prima di rimuoverle verrà chiesta una conferma.

[]$ rm Text

Se invece si desidera eliminare tutto il contenuto di una cartella (delete all), basta utilizzare il simbolo * (vedi sotto):

[]$ rm *

rmdir (Remove Directory)

Elimina una directory vuota. Se la directory non è vuota, bisognerà prima eliminarne tutti i file contenuti, oppure forzare il comando con i parametri -r e -f. Ad esempio:

[]$ rmdir Old

[]$ rmdir -rf Trashed

diff (Difference)

Mostra le differenze fra due file. Ad esempio:

[]$ diff fileA fileB

Wildcard

Le Wildcard sono dei caratteri Jolly che si sostituiscono ad altri caratteri normali all'interno dei comandi; un esempio chiarirà tutto:

Le Wildcard si possono combinare:

[]$ ls *a?.jpg stamperà l'elenco dei file con estensione .jpg e con un nome che ha come penultima lettera la "a".

Nota: le Wildcard * e ? sostituiscono qualunque stringa o carattere ad esclusione del punto.

Un altro carattere speciale è la pipe (|): le pipe servono per dirigere l'output di un programma o di un comando nell'input di un altro programma o di un altro comando. Per un approfondimento, si veda "Bash: pipe e redirezioni".

Nota: Il comando wc è un contatore di righe, bytes, ecc., a seconda dei parametri. Ad esempio, la seguente riga stampa il numero di file presenti nella cartella:

[]$ ls -1 | wc -l

I Permessi

Ogni file, nella sua descrizione, ha 9 bit che indicano all'utente le operazioni che le diverse classi di utenti del sistema possono compiere sul file.

Ci sono tre "classi di utente":

[Come detto sopra, applicando l'opzione -l al comando ls si possono leggere i permessi di ogni file e directory presente nella cartella corrente]

Ad esempio, la riga -rw-r--r-- 1 xerex xerex 25077 feb 2 00:00 imm.jpg indica che imm.jpg è un file con permessi in lettura e scrittura per il proprietario, nonché permessi di lettura per gruppo ed altri utenti (vedi spiegazione dettagliata sotto).

Per cambiare i permessi si usa il comando chmod.

Questo comando necessita di parametri che specifichino quali permessi modificare e per chi.

Ad esempio:

[]$ chmod +x [nome_file]

Aggiunge il permesso di esecuzione a tutti gli utenti del sistema.

Permessi.gif

Un altro modo di settare i permessi è "passando" a chmod un valore in notazione "ottale" che indica i permessi.

Questa tabella esemplificherà il prossimo esempio.

Ottale.gif

[]$ chmod 755 Text

Assegna al proprietario del file tutti i permessi, mentre al gruppo ed agli altri utenti permette solo la lettura e l'esecuzione del file.

Programmazione

La Shell può essere interpretata anche come un vero e proprio ambiente di sviluppo: "l'arte" Shell Programming permette di scrivere script che possono risolvere problemi di amministrazione di sistema.

Prendete, ad esempio, una rete con decine di computer e centinaia di utenti. L'amministratore del sistema, che ha permessi da superutente, può decidere di ricercare utenti che non accedano al sistema da uno specificato periodo di tempo e spedire una mail a questi, per domandare se l'account è ancora necessario e, in caso contrario, cancellarlo.

Pensate alla mole di lavoro che l'amministratore dovrebbe sobbarcarsi per controllare ogni utente su ogni macchina: non credo basterebbe una settimana. Grazie allo Shell Scripting, invece, è sufficiente scrivere un programma combinando vari comandi della shell simili a quelli appena visti, che eseguano il compito sopra descritto.

Come è facile intuire, i pochi comandi descritti in questo articolo non sono sufficienti per scrivere un programma così complesso, ma con un po' di pratica e molta volontà sarà possibile scrivere programmi utili anche dopo poche ore di esercizio.

Ah, dimenticavo... per tornare all'interfaccia grafica premete Alt+F7!

MegaLab.it rispetta la tua privacy. Per esercitare i tuoi diritti scrivi a: privacy@megalab.it .

Copyright 2008 MegaLab.it - Tutti i diritti sono riservati