Guida al Terminale (base)

I primi passi

Prima di cominciare la lezione vorrei fare un ringraziamento a Dario per lo spazio dedicatomi per poter trasmettere le mie conoscenze e metterle al servizio della comunità informatica.

Personalmente credo che esistano due tipologie di utenti che utilizzano il computer, indipendentemente dal sistema operativo che hanno scelto (o gli è stato imposto) di utilizzare:

  • gli utenti passivi: sono quelli che si limitano ad utilizzare il computer per lo più come lo hanno comperato, che non sono curiosi di sapere come funziona la loro macchina.
  • gli utenti attivi: sono quelli che invece ricercano sempre il massimo dal proprio sistema e non ne sono intimoriti, anzi provano a modificarlo e ad assecondarlo al loro volere consci dei rischi che corrono nel farlo, perché un vero programmatore è questo che fa, modifica il sistema in base alle proprie necessità.

L'obiettivo di questa guida sarà quello di spronare anche i più timorosi nell'utilizzo di un componente più che fondamentale per l'interazione tra utente e sistema operativo: il terminale

Dove si trova

Sebbene questa guida sia indirizzata soprattutto ad utenti Linux è bene che anche coloro che usano Macintosh (Mac Os X) o Windows sappiano dove possono trovare il terminale:

  • Linux: Menu > Sistema > Terminale
  • Macintosh: Macintosh HD > Applicazioni > Utility > Terminale
  • Windows: Menu Start > Tutti i programmi > Accessori > Prompt dei Comandi

L'immagine mostra l'apertura del terminale su Linux Fedora:

Aprire il terminale

I primi passi...

Una volta aperto il terminale, la schermata si presenterà così:

[alfadaco@localhost:~]$

Cerchiamo ora di capire cosa vuol dire la scritta che è apparsa sullo schermo.

La parola tra la parentesi quadra e la chiocciola (alfadaco) è lo username (nome utente) dell'utente che sta utilizzando il terminale, che generalmente è il nome che avete scelto per il vostro utente durante il processo di installazione.
Più avanti vedremo come si può cambiare utente direttamente dal terminale, ma per quello che dovremo fare in questa lezione non ci servirà.

Tra la chiocciola e i due punti (localhost) è indicato il nome del computer sulla rete locale che, in caso non l'abbiate esplicitamente modificato, dovrebbe essere localhost. Anche questa parte per ora non ci interessa.

Focalizziamoci invece su ciò che sta tra i due punti e la parentesi quadra (~), si chiama tilde e nei sistemi basati su UNIX (Linux e Mac Os X) indica che attualmente siete nella home directory, cioè la cartella nella quale sono contenuti tutti i vostri file, i vostri documenti, la vostra scrivania e persino le vostre preferenze dei vari programmi che avete installato sul sistema. Nel prossimo paragrafo capirete perché è stata fatta questa precisazione.

A questo punto il terminale è pronto a ricevere i vostri comandi e noi stiamo per entrare nel cuore di questa lezione, ma prima di addentrarci nel prossimo paragrafo, introduciamo un comando utilissimo per sapere in che cartella ci troviamo:

Il comando "print working directory" - pwd

Se proviamo a digitarlo sul terminale otterremo il percorso, o path, assoluto della cartella in cui ci troviamo:

[alfadaco@localhost:~]$ pwd
/Users/alfadaco

Il Path

Un'ultima precisazione prima di iniziare: dovete conoscere cos'è e come è costituito un path (percorso) in UNIX. Il path di un file o di una directory (cartella) indica come arrivare a quel file o a quella directory dalla directory root (cartella radice), per intenderci la cartella root è la cartella che non ha un livello superiore.

Senza ulteriori indugi passiamo subito ad un paio di esempi che dovrebbero chiarire alcune idee prima di passare ad un po' di sintassi. Supponiamo di avere una cartella root (/) che contiene alcuni file ed altre cartelle, che a loro volta contengono altri file e cartelle:
Un esempio di cartelle

Supponiamo di trovarci nella cartella root allora:
Il path di d1file2.html è /directory1/d1file2.html
Il path di d1afile.zip è /directory1/directory1a/d1afile.zip
Il path di d2file1.tar è /directory2/d2file1.tar
Il path di directory3aa è /directory3/directory3a/directory3aa
Si noti che tutti e tre i path di esempio cominciano con lo slash, questo tipo di path si dice assoluto perché fa riferimento alla cartella radice.

Supponiamo ora di trovarci nella cartella directory1 allora:
Il path di d1file2.html è d1file2.html
Il path di d1afile.zip è directory1a/d1afile.zip
Il path di d2file1.tar è ../directory2/d2file1.tar
Il path di directory3aa è ../directory3/directory3a/directory3aa
Si noti che tutti e tre i path di esempio non cominciano con lo slash, questo tipo di path si dice relativo perché fa riferimento alla directory1. L'utilizzo della sintassi ../ indica che bisogna andare alla cartella superiore, cioè alla cartella che contiene la direcotry1 prima di proseguire.

Riassumendo abbiamo detto che il path può essere sia assoluto (e quindi comincia con /) oppure relativo, ogni slash indica al sistema di entrare nella cartella che ha come nome la sequenza di caratteri prima dello slash stesso, e ../ indica di passare al livello superiore.

Ad esempio il path /ciao/prova/lezione1/terminale.txt indica al sistema che il file terminale.txt può essere raggiunto partendo dalla root directory, entrando nella cartella prova ed entrando nella cartella lezione1.
Mentre il path ../../lezione1/terminale.txt indica al sistema che il file terminale.txt può essere raggiunto partendo dalla directory attuale, salendo di un livello, salendo di un altro livello ed entrando nella cartella lezione1.

Il comando “list directory contents” - ls

Torniamo al nostro terminale, la tilde indica che la cartella attuale è la home directory, quello che vogliamo fare ora è sapere cosa c'è dentro questa cartella. Digitiamo ls nel terminale e premiamo invio, il risultato sarà qualcosa di simile:

[alfadaco@localhost:~]$ ls
Documenti Immagini Musica Pubblici Scrivania Video

Il comando non ci restituisce molte informazioni, solo il nome degli elementi (non sappiamo ancora se sono file o cartelle) contenuti nella home directory.

Per sapere qualcosa di più digitiamo ls -l e otteniamo qualcosa di simile:

[alfadaco@localhost:~]$ ls -l
drwxr-xr-x 2 alfadaco alfadaco 1024 2009-11-15 19:31 Documenti
drwxr-xr-x 3 alfadaco alfadaco 256 2009-11-15 20:03 Immagini
drwxr-xr-x 2 alfadaco alfadaco 65530 2009-11-15 19:31 Musica
drwxr-xr-x 2 alfadaco alfadaco 5 2009-11-15 19:31 Pubblici
drwxr-xr-x 11 alfadaco alfadaco 56 2010-03-14 18:27 Scrivania
drwxr-xr-x 3 alfadaco alfadaco 15 2009-11-15 20:03 Video
-rwxr-xr-x 37 alfadaco alfadaco 2097152 2009-11-15 00:03 documentoroot.txt
-rwxr-xr-x 37 alfadaco alfadaco 5242880 2009-11-15 00:03 tutorial.pdf
lrwxr-xr-x 2 root root 135 2009-11-15 00:03 collegamento -> cartella_puntata

Di sicuro abbiamo più informazioni suddivise nelle varie colonne, ma cerchiamo di capire qual è il significato di ciascuna di esse.

La prima colonna ci dà informazioni relative al tipo di file UNIX ed ai suoi permessi, è composta sempre da dieci caratteri: il primo indica il tipo e gli altri nove, suddivisi in gruppi da tre, indicano i permessi rispettivamente del proprietario, del gruppo, di tutti.
Ecco un elenco dei tipi di file in UNIX con il loro rispettivo carattere che li identifica:

  • - indica un file regolare
  • d indica una directory
  • l indica un collegamento ad un altro file o ad un'altra cartella
  • c indica un file speciale (o dispositivo) a caratteri
  • b indica un file speciale (o dispositivo) a blocchi
  • s indica un file socket
  • p indica una pipe di tipo FIFO

Si noti che i dispositivi (a caratteri o a blocchi) sono file speciali che servono al sistema per accedere alle varie periferiche e che, unitamente ai socket ed alle pipe FIFO, non saranno trattati di seguito poiché richiedono conoscenze più approfondite sull'argomento.
Per quanto riguarda una tripletta di permessi rwx sia che essa sia riferita al proprietario (prima tripletta), o al gruppo (seconda tripletta), o a tutti (terza tripletta), essa indica i permessi che le varie categorie (proprietario, gruppo e altri) hanno sul file.

  • Il primo carattere di ogni tripletta indica il permesso di lettura sul file, in particolare la lettura è abilitata se il carattere è una r, altrimenti è disabilitata (-)
  • Il secondo carattere indica il permesso di scrittura sul file, in particolare la scrittura è abilitata se il carattere è una w, altrimenti è disabilitata (-)
  • Il terzo carattere indica il permesso di esecuzione del file, in particolare l'esecuzione è abilitata se il carattere è una x, altrimenti è disabilitata (-)

La seconda colonna è poco interessante per noi poiché indica il numero di collegamenti che puntano a quel file o a quella cartella.

La terza e la quarta colonna indicano rispettivamente il nome del proprietario del file ed il nome del gruppo a cui appartiene.

La qunta colonna indica la dimensione del file in byte, si noti che la dimensione delle cartelle non è la somma delle dimensioni dei file contenuti in essa, ma è collegata al numero di elementi contenuti in essa.

Sesta e settima colonna indicano rispettivamente data e ora dell'ultima modifica all'elemento.
Infine l'ottava colonna indica il nome dell'elemento.

Accenno soltanto che in UNIX esistono dei file nascosti e possono essere inclusi nel comando ls inserendo il parametro -a e questo può essere usato in modo combinato con altri parametri (per esempio -l che abbiamo visto prima, ma ce ne sono tanti altri. Digitare ls --help per una lista delle possibili lettere che si possono usare) in questo modo:

[alfadaco@localhost:~]$ ls -la
*** Listato della cartella corrente (con file nascosti) ***

Inoltre è bene sottolineare che si può ottenere il contenuto di qualsiasi cartella indipendentemente da quale sia la cartella corrente inserendo alla fine del comando ls il path della cartella di cui vogliamo conoscere il contenuto:

[alfadaco@localhost:~]$ ls -la pathToDirectory
*** Listato della cartella (con file nascosti) ***

Dove ovviamente al posto di pathToDirectory dovete mettere il percorso, assoluto o relativo, della cartella di cui volete conoscere il contenuto.

Se usate l'opzione per mostrare anche i file nascosti vi imbatterete in due nomi un po' particolari, il punto (.) e i due punti (..) essi identificano rispettivamente la cartella corrente e la cartella "livello superiore", cioè la cartella che contiene quella corrente.

Il comando “change directory” - cd

Ecco che in breve siamo arrivati al primo comando che ci permetterà di navigare all'interno del nostro filesystem, cioè l'insieme dei file e delle cartelle presenti sul nostro disco. Utilizzare il comando è molto semplice poiché basta far seguire al nome del comando il path della directory in cui vogliamo entrare:

[alfadaco@localhost:~]$ cd pathToDirectory
[alfadaco@localhost:directoryName]$

Dove ancora al posto di pathToDirectory dovete mettere il percorso, assoluto o relativo, della cartella in cui volete trasferirvi.

Vi faccio subito notare che se il comando è stato eseguito correttamente potete visualizzare il nome della cartella (oppure il suo intero path, dipende dai vari sistemi operativi) subito dopo i due punti (directoryName).

Ma per i più scettici possiamo eseguire il comando pwd prima e dopo aver eseguito il comando cd per vedere il risultato della nostra operazione.

Il path può ovviamente essere sia assoluto che relativo, inoltre potrebbe essere utile sapere che se tentate di entrare in un file, e non in una cartella, il comando restituirà un errore, impedendovi di fare danni. Quindi potete stare tranquilli e provare a prendere un po' di confidenza con questi due comandi importantissimi per cominciare a navigare nel vostro computer da terminale.

Esempio Riassuntivo

Concludiamo questa prima lezione con un esempio riassuntivo, che ha lo scopo di amalgamare insieme i concetti che abbiamo visto insieme per far capire al lettore quale sia poi l'effettiva utilità dei comandi sopra descritti.

Ora ci accingeremo a:

  1. Aprire il Terminale
  2. digitare pwd per sapere con certezza qual è il path della cartella corrente (dovremmo trovarci nella home directory)
  3. digitare ls per sapere il contenuto della cartella corrente
  4. scegliere la cartella in cui vogliamo trasferirci (ad esempio "Scrivania") e digitare cd Scrivania (o qualunque sia la cartella che avete scelto)
  5. verificare di esserci trasferiti con successo sia con il comando pwd, sia guardando la scritta tra i due punti e la parentesi quadra.
  6. digitare cd .. per tornare al livello superiore
  7. digitare pwd per essere sicuri che tutto sia andato a buon fine
  8. digitare exit per uscire

La sessione dovrebbe presentarsi più o meno così:

[alfadaco@localhost:~]$ pwd
/Users/alfadaco (al posto di alfadaco ci sarà il vostro username)
[alfadaco@localhost:~]$ ls
Documenti Immagini Musica Pubblici Scrivania Video
[alfadaco@localhost:~]$ cd Scrivania
[alfadaco@localhost:Scrivania]$ pwd
/Users/alfadaco/Scrivania
[alfadaco@localhost:Scrivania]$ cd ..
[alfadaco@localhost:~]$ pwd
/Users/alfadaco
[alfadaco@localhost:~]$ exit

Il comando exit serve per uscire dalla sessione in modo sicuro e dovrebbe essere sempre usato quando si vuole chiudere il terminale, invece di cliccare con il mouse sulla x della finestra del terminale.

Conclusioni

Se questa lezione vi è sembrata particolarmente facile, non stupitevi sono stato volontariamente prolisso per fare in modo che TUTTI potessero comprendere questa guida e apprendere il lessico specifico che verrà usato con più disinvoltura nelle prossime lezioni. Grazie a tutti quelli che hanno deciso di trasformarsi da utenti passivi ad utenti attivi nell'uso del computer.

  1. I primi passi
  2. Gestire i file
  3. Permessi su file e directory