Capitolo 19. Lavorare con la shell

Sommario

19.1. Introduzione alla bash.
19.2. Utenti e diritti di accesso
19.3. Sommario dei comandi Linux più importanti
19.4. L'editor vi

Estratto

Anche se le interfacce grafiche di Linux stanno assumendo un'importanza crescente, usare il mouse non è sempre il modo migliore per eseguire le operazioni di ogni giorno. E anche se le interfacce ed i programmi di Linux diventano sempre più semplici e sono ora in grado di offrire un gran numero di opzioni, la flessibilità e l'efficienza della riga di comando restano ancora imbattute. Nella prima parte di questo capitolo, vi spiegheremo come gestire la cosiddetta “shell Bash”, passando poi a illustrare il concetto dei diritti dell'utente su Linux. Il capitolo si conclude con una lista dei comandi fondamentali e con un'introduzione all'editor di testo vi.

Le righe di comando, come la shell, hanno il grande vantaggio di permettere la gestione di un intero sistema persino su computer non più nuovissimi e che non dispongano delle risorse necessarie a supportare un ambiente grafico. In questo caso, infatti, si utilizzano le console virtuali. Di console virtuali, ce ne sono ben sei, tutte in modalità testo. Per passare da una console all'altra, usate le combinazioni di tasti Alt-F1 fino a Alt-F6. Esiste anche una settima console, ma è riservata all'ambiente grafico X11.

19.1. Introduzione alla bash.

Nella barra delle applicazioni di KDE, troverete un'icona raffigurante un monitor con una conchiglia shell. Cliccate su quest'icona e si aprirà la finestra della console, nella quale potete inserire i comandi. Questa shell è di solito una Bash (Bourne again shell). La Bash è stata sviluppata nell'ambito del progetto GNU. Una volta aperta la shell, vedrete nella prima riga il prompt. Esso è costituito generalmente dal nome dell'utente e dal nome del computer come pure dal path attuale, ma può anche venire configurato in base ai propri gusti. Quando il cursore si trova dietro questo prompt, potete inviare i comandi direttamente al sistema del vostro computer.

19.1.1. Comandi

I comandi che potete immettere nella console sono costituiti da diverse parti. Essi iniziano sempre con la parola di comando, a cui seguono i parametri o le opzioni. Ogni comando viene eseguito solo quando premete Invio. Prima di premerlo, potete modificare senza problemi la riga di comando, aggiungendo qualsiasi altra opzione oppure correggendo eventuali errori di battitura. Uno dei comandi usati più spesso è ls , che potete usare da solo oppure accompagnato dai cosiddetti “argomenti”. Se immettete nella console solo ls, vi verrà mostrato il contenuto della directory in cui vi trovate.

Le opzioni sono precedute da un trattino. Se immettete il comando ls -l, vi verrà mostrato il contenuto della stessa directory, ma in forma estesa. Accanto al nome dei file, apparirà anche la data nella quale è stato creato il file, la grandezza del file in byte ed altri dati di cui parleremo più avanti. Una delle opzioni più importanti in assoluto e disponibile per molti comandi è l'opzione --help. Se digitate, ad esempio, ls --help, otterrete una lista di tutte le opzioni del comando ls.

Con il comando ls, potete farvi mostrare anche altre directory: basta aggiungere al comando la directory che desiderate visualizzare, come parametro. Quindi, il comando per visualizzare il contenuto della sottodirectory Desktop, ad esempio, sarà  ls -l Desktop.

19.1.2. File e directory

Per poter lavorare in modo efficiente con la shell, è necessaria la conoscenza della struttura dei file e delle directory sotto Linux. Le directory sono cartelle elettroniche al cui interno vengono archiviati file, programmi e sottodirectory. La directory più alta nella gerarchia è la directory root, alla quale potete accedere con /. Da qui è possibile raggiungere tutte le altre directory.

Nella /home directory si trovano le directory personali dell'utente. La Figura 19.1, “Esempio di un albero di directory di Linux” mostra l'albero standard delle directory su Linux, con le home directory degli utenti xyz, linux e tux. L'albero delle directory del vostro sistema Linux è diviso funzionalmente (secondo lo schema dello standard file system). Per una breve descrizione delle directory di Linux, consultate la tabella:

Figura 19.1. Esempio di un albero di directory di Linux

Esempio di un albero di directory di Linux
/

la directory root root directory, inizio dell'albero delle directory.

/home

le directory (private) degli utenti.

/dev

i file di dispositivo che rappresentano i componenti hardware

/etc

importanti file per la configurazione del sistema.

/etc/init.d

Script per il boot.

/usr/bin

comandi accessibili a tutti.

/bin

comandi necessari per l'avvio del sistema.

/usr/sbin

comandi riservati all'amministratore del sistema.

/sbin

comandi riservati all'amministratore del sistema e necessari per l'avvio del sistema stesso.

/usr/include

file header per il compilatore C.

/usr/include/g++

file header per il compilatore C++.

/usr/share/doc

diversi file di documentazione.

/usr/share/man

la documentazione del programma.

/usr/src

i file sorgente del software di sistema

/usr/src/linux

i file sorgente del kernel.

/tmp, /var/tmp

file temporanei.

/usr

contiene tutte le applicazioni.

/var

file di configurazione (p.e. quelli collegati da /usr).

/var/log

file di protocollo.

/var/adm

amministrazione del sistema.

/lib

librerie condivise (per programmi collegati in modo dinamico).

/proc

il file system dei processi.

/sys

file system del “system” in cui sono raccolte per il kernel tutte le informazioni riguardanti i dispositivi

/usr/local

estensioni locali, indipendenti dalla distribuzione.

/opt

software opzionale, sistemi più voluminosi (come KDE, GNOME, Netscape).

19.1.3. Funzioni della bash

Sono due le funzioni della shell che possono enormemente facilitarvi il lavoro:

Lo storico

Se desiderate riutilizzare un comando già  immesso in precedenza, premete il tasto , finché non vi venga mostrato il comando che state cercando; per cercare in avanti, premete il tasto . Per editare le righe di comando, muovetevi con i tasti cursore fino ai punti da correggere e rielaborateli. Con Ctrl-R potete eseguire delle ricerche nello storico.

Espansione

La funzione di espansione – Per completare il nome di un file che sia già  chiaramente identificabile, dopo averne digitato solo le prime lettere. Premete poi il tasto Tab. Se esistono più file con le stesse lettere iniziali, ne otterrete un'elenco premendo due volte il tasto Tab.

19.1.3.1. Primo esempio: l'uso dei file

Ora sapete come è fatto un comando, quali sono le directory di SUSE LINUX e come facilitarvi le cose con l'aiuto della bash. Ora, potete mettere alla prova le vostre conoscenze con un piccolo esercizio:

  1. Aprite una console cliccando sull'icona della conchiglia.

  2. Immettete il comando ls. Ora vedete il contenuto della vostra home directory.

  3. Usate il comando mkdir make directory per creare una nuova sottodirectory col nome prova. Digitate mkdir prova.

  4. Aprite l'editor Kate, premendo Alt-F2 ed inserendo kate. Si apre una finestra: digitate qualcosa e salvate il file con il nome Filediprova (con la F maiuscola, poiché Linux differenzia maiuscole e minuscole).

  5. Ora controllate nuovamente il contenuto della vostra home directory. Tuttavia, invece di inserire di nuovo il comando ls, premete due volte . Adesso, al prompt, troverete di nuovo ls: date l'Invio per far eseguire il comando. Appare ora la nuova directory prova in blu ed il file di prova in nero (le directory vengono sempre scritte in blu ed i file in nero). Queste caratteristiche cromatiche permettono di distingure tra directory e file in una console.

  6. Il nostro file di prova verrà ora spostato nella sottodirectory prova tramite il comando mv (move) . Per non stare a riscrivere tutte le righe, usate la cosiddetta funzione di espansione: digitate mv F e premete Tab. Se, in questa directory, non vi sono altri file che iniziano con la F, la shell aggiunge la stringa di caratteri ilediprova. Altrimenti, aggiungete un altro paio di lettere e premete il tasto tabulatore. Mettete uno spazio alla fine, scrivete prova e premete Invio per spostare il file.

  7. Se ora immettete il comando ls, non vedrete più il file di prova.

  8. Per controllo, usate il comando cd prova change directory per spostarvi nella directory prova. Se immettete il comando ls, vedete il contenuto di prova. Inserendo cd change directory, passerete di nuovo nella vostra home directory.

  9. Supponiamo che il file sia talmente importante che ne volete una copia. In tal caso, usate il comando cp copy. Immettete cp Filediprova Copiadellaprova. Il comando ls vi mostrerà  ora entrambi i file.

19.1.4. Scrivere un path

Per lavorare con un file o una directory, è importante conoscerne il path. Tuttavia, non è sempre necessario specificare il path completo (assoluto) dalla directory sorgente al file che si cerca: potete infatti cominciare semplicemente dalla directory in cui vi troviate. In questo caso, si parla di un path relativo. Inoltre, potete chiarmare la vostra home directory semplicemente con il segno ~. Questo significa che potete raggiungere il file Test nella directory test con un path relativo, digitando ls test, oppure con un path assoluto, digitando ls ~/test.

Per accedere alla home directory di altri utenti, inserite ls ~nomeutente. Nel nostro caso, possiamo prendere come esempio l'utente tux. Il comando ls ~tux ci mostrerà  quindi il contenuto della home directory dell'utente tux.

La directory in cui vi trovate è rappresentata da un punto, il livello immediatamente superiore con due punti. Immettete ls .. per vedere il contenuto della directory genitrice della directory in cui vi trovate. Immettendo ls ../.., potete vedere il contenuto della directory due livelli più in alto nella gerarchia delle directory.

19.1.4.1. Secondo esempio: uso dei path.

Un altro esempio vi mostrerà  come potete muovervi nell'albero delle directory del vostro sistema SUSE LINUX.

  • Con cd, passate alla vostra home directory e create una sottodirectory test2 con il comando mkdir test2.

  • Usate il comando cd prova2 per passare a prova2 e create una nuova directory di nome sottodirectory. Per entrare ora nella sottodirectory, usate la funzione di espansione. Immettete cd so e premete Tab: la parola verrà  completata.

  • Vi trovate ora nella sottodirectory e volete spostare il file preparato in precedenza Copiadellaprova in questa directory. Non c'è bisogno di spostarsi nella directory prova; basta solo che indichiate il path relativo al file necessario. Dovete immettere mv ../../prova/Copiadellaprova . (non dimenticate il punto alla fine; questo indica che la vostra directory attuale sarà  la destinazione del comando mv). Nel nostro esempio concreto si tratta della directory di nome sottodirectory. Con i due punti, salite di volta in volta di un livello nella gerarchia della directory. In questo caso, ../.. indica la vostra home directory nella quale si trova la directory prova.

19.1.5. Wildcard

Un'altro vantaggio della shell sono i caratteri jolly (o "wildcard"). Nella bash, esistono quattro diversi caratteri jolly.

?

Sostituisce esattamente un carattere arbitrario.

*

Sostituisce un numero qualsiasi di caratteri.

[set]

Sostituisce esattamente un carattere appartenente al gruppo di caratteri indicati fra parentesi quadre, rappresentato qui dalla stringa set.

[!set]

Sostituisce esattamente un carattere qualsiasi ad eccezione di quelli indicati in set.

Supponiamo che la vostra directory test contenga i file Filediprova, Filediprova1, Filediprova2 e date; se immettete il comando ls Filediprova?, vi verranno mostrati i file Filediprova1 e Filediprova2. Con ls File*, vi verrà  mostrato anche il Filediprova.

ls vi mostra tutti i file di esempio. Usate il carattere jolly set per indicare i file il cui ultimo carattere è un numero: ls Filediprova[1-9].

Il carattere jolly più potente è sempre l'asterisco (*). Usandolo, potete risparmiarvi molto lavoro di battitura. Potete, per esempio, copiare tutti i file della directory prova nella sottodirectory di prova con il comando cp * sottodirectory. Potete usare i caratteri jolly anche per cancellare, ma in questo caso dovete sempre sapere esattamente cosa state facendo. Il comando rm *date* cancella tutti i file nella vostra directory prova il cui nome contenga la sequenza di caratteri date.

19.1.6. More or less.

Vi sono due piccoli programmi che vi permettono di aprire i file di testo direttamente nella shell, senza bisogno di avviare un editor. Per aprire un file Readme.txt, per esempio, immettete semplicemente less Readme.txt. Nella console vi verrà mostrato il testo del file. Con Spazio andate avanti di una pagina; potete però anche usare i tasti Pag Sù e Pag Giù per muovervi avanti e indietro nel testo. Per chiudere il programma less, premete q.

Oltre a less, vi è anche more, nato prima e un pò meno pratico di less, poiché non vi permette di sfogliare in avanti e indietro.

Il nome del programma less deriva dal gioco di parole inglese, more is less (“a volte, meno è meglio”). È un programma da usare non solo per leggere file di testo, ma anche, per esempio, per farsi mostrare l'output dei comandi; consultate a proposito il paragrafo Sezione 19.1.7, “Pipeline”

19.1.7. Pipeline

L'output della shell viene normalmente visualizzato sullo schermo, ovvero nella finestra della console, mentre l'input, sarebbe a dire l'immissione dei comandi, avviene sulla tastiera. Per visualizzare l'output di un comando con un programma come less, invece, si usa una pipeline (“incanalatura”).

Per visualizzare i file nella directory test, immettete il comando ls test | less. Sulla tastiera italiana, il carattere | (barra verticale o "pipe") si trova si trova in alto a sinistra. Il contenuto della directory test viene ora visualizzato con il programma less nella console. Questa funzione vi serve quando l'output di ls è troppo complesso per stare in una console. Ad esempio, provate a visualizzare dev con ls /dev: la finestra vi mostra solo una piccola parte del contenuto della directory, mentre, con ls /dev | less, potete farvi elencare contemporaneamente tutti i file che contiene.

Alla fine, per memorizzare l'output di un comando in un file a parte, digitate, nel caso del nostro esempio: ls test > Contenuto. Otterrete il nuovo file Contenuto, che conterrà  i file e le directory di test. Per visualizzare il file Contenuto, digitate poi less Contenuto.

Viceversa, per usare il nome di file come parte di un comando, procedete come segue: cominciate con il mettere le righe del testo del vostro file "Test" in ordine alfabetico, con il comando sort < Testfile. Sullo schermo, compare l'output del comando sort, con il testo che avete appena scritto ordinato secondo le iniziali di ogni riga. Con questo comando potete, ad esempio, ordinare una lista di nomi compilata senza criterio.

Per salvare poi questa lista in un file a parte, “incanalate” l'output del comando sort in un nuovo file. Ad esempio, aprite un editor e compilate una lista di nomi. Memorizzate questa nuova lista con il nome lista nella directory test. Entrate quindi nella directory test ed immettete il comando sort < lista_non_ordinata > list_ordinata. Quindi, visualizzate la lista ordinata con less.

Anche gli errori vengono normalmente segnalati sullo schermo. Se desiderate incanalare i messagi di errore in un file di nome Errori, aggiungete al comando: 2> Errori. Se, invece, aggiungete >& Output, sia l'output che i messaggi di errore verranno rediretti nel file Output. Se, al posto di un solo >, ne usate due (>> ), l'output viene incanalato in un file già  esistente e non in uno a parte.

19.1.8. Archiviazione e compressione dei dati

Ora che avete già  creato alcuni file e directory, passiamo all'argomento dell'archiviazione e della compressione dei dati. Supponiamo che vogliate impacchettare in un file tutta la directory prova per poterla memorizzare su dischetto come copia di sicurezza oppure per spedirla via posta elettronica. Usate quindi il comando tar tape achiver. Con tar --help potete guardare tutte le opzioni del comando tar; qui vi spieghiamo le più importanti:

-c

create crea un nuovo archivio

-t

table mostra il contenuto di un archivio

-x

extract spacchetta l'archivio

-v

verbose durante l'impacchettamento mostra tutti i file sullo schermo

-f

file permette di scegliere un nome di file per il file dell'archivio. Questa opzione deve sempre venire indicata per ultima, cioè, prima del nome da dare all'archivio.

Per impacchettare la directory prova con tutti i suoi file e le sottodirectory in un archivio di nome Prova.tar, abbiamo bisogno delle opzioni -c e -f. Poiché vogliamo seguire il procedimento di archiviazione, immettiamo anche l'opzione -v (che in caso contrario non sarebbe necessaria). Per prima cosa, usate cd per passare alla vostra home directory al cui interno si trova la directory prova. Ora immettete tar -cvf Prova.tar prova. Ora controllate il contenuto del file dell'archivio con tar -tf Prova.tar. La directory prova con tutti i file e le directory rimane invariata sul vostro disco rigido. Per spacchettare l'archivio, immettete tar -xvf Prova.tar. Non fatelo ancora, perché prima vogliamo comprimere il file dell'archivio per risparmiare spazio.

Per la compressione è consigliabile il comune programma gzip Immettete gzip Prova.tar. Se ora immettete ls, vedete che il file Prova.tar è sparito e che al suo posto esiste un file Prova.tar.gz. Questo file è molto più piccolo ed è quindi più adatto per essere spedito per posta elettronica; inoltre occupa meno spazio su un dischetto.

Ora ritorniamo allo spacchettamento. Questa volta, però, lavoriamo nella directory prova2 che avevate creato prima. Per farlo, usate cp Prova.tar.gz prova2 per copiare il file dell'archivio nella directory prova2. Immettete ora cd prova2. Per decomprimere unzip un file .tar.gz, usate il comando gunzip. Dovete immettere gunzip Prova.tar.gz. Ora avete di nuovo un file Prova.tar. Adesso dovete solo spacchettare l'archivio con tar -xvf Prova.tar.gz. Se immettete il comando ls, troverete una nuova directory prova con lo stesso contenuto della vecchia directory prova, nella vostra home directory.

19.1.9. mtools

Gli mtools sono un set di comandi per lavorare sui file system dell'MS-DOS, il che è importante quando si lavori con lettori di dischetti.Come su MS-DOS, potete accedere al lettore identificandolo con a:. I comandi sono poi gli stessi di MS-DOS, tranne che per il fatto che vi anteporrete una m:

mdir a:

mostra il contenuto del dischetto nell'unità  a:

mcopy Filediprova a:

copia il file Filediprova sul dischetto

mdel a:Filediprova

cancella Filediprova su a:

mformat a:

formatta il dischetto ad alto livello; per far ciò il dischetto deve essere già  stato formattato a basso livello con il comando fdformat /dev/fd0h1440 oppure doveva essere già  formattato

mcd a:

a: diventa la vostra directory corrente

mmd a:prova

crea la sottodirectory prova sul dischetto

mrd a:prova

cancella la sottodirectory prova dal dischetto

19.1.10. Mettere a posto

In questo rapido corso, avete ricevuto le cognizioni di base per l'uso della shell. Per tenere sempre in ordine la vostra home directory, ricordatevi di cancellare tutti i file e le directory di prova con i comandi rm e rmdir. Il capitolo si chidue con un elenco dei principali comandi ed una loro breve descrizione.


SUSE LINUX Manuale dell'utente 9.3