domenica, 1. gennaio 2012, 16:52
Guida per principianti a GNU/Linux: navigare nelle directory
Una cosa che spesso i newbie del terminale non riescono a comprendere è la logica delle directory. Ad esempio una guida dice di “scompattare il file e spostarsi nella directory creata” e vanno nel panico. Oppure scaricano un file, lo mettono sulla Scrivania, poi aprono il terminale, danno il comando, ma si stupiscono perché non funziona.
Eppure non c’è nulla di più semplice. Per capire come funziona il tutto, basta rifarsi a quello che di norma facciamo quando apriamo il nostro file manager grafico (Nautilus per GNOME, Konqueror o Dolphin per KDE, Thunar per XFCE, ecc.)
Supponiamo di voler accedere alla foto del/della nostro/a fidanzato/a, localizzata nella cartella “Amore”, dentro la cartella “Immagini”. Apriamo Nautilus che di default si posiziona nella cartella home del nostro utente. Poi clicchiamo su “Immagini” e quindi su “Amore”. E lì troveremo la foto che ci interessa.
Lo stesso vale per il terminale: apriamo il terminale e siamo nella nostra home.
Quindi diamo:
"cd Immagini,,
e poi:
"cd Amore,,
per vedere i file contenuti diamo:
"ls,,
Insomma la logica è proprio la stessa.
E se vogliamo tornare indietro?
Basta dare:
"cd ..,,
e saliamo alla directory superiore (cioè Immagini).
Se diamo:
"cd ..,,
una seconda volta torneremo alla directory home.
Se vogliamo andare sulla Scrivania, basta sapere che essa altro non è che una direcotry nella nostra home, il cui nome è proprio “Scrivania” (con la S maiuscola) oppure “Desktop” (dipende dalla distribuzione che usiamo, ma in ogni caso basta dare ls per saperlo).
Quindi:
"cd Scrivania,,
Ma il terminale è più veloce della grafica. Ad esempio se vogliamo andare nella directory Amore che sta in Immagini, senza dare due volte il comando cd, possiamo dirgli direttamente la nostra destinazione:
"cd Immagini/Amore,,
Notate come il prompt del terminale cambia indicandoci la directory dove siamo:
"guido@guido-laptop:~/Immagini/Amore$,,
Il segno ~ indica la nostra directory home, quindi ~/Immagini/Amore vuol dire “Amore dentro Immagini dentro la home dell’utente.
Ovviamente se siamo in Immagini/Amore e vogliamo andare in Immagini/Sfondi non possiamo dare un semplice cd Sfondi perché la directory Sfondi non è nella directory corrente.
Dobbiamo invece dare:
"cd ..
cd Sfondi,,
oppure:
"cd /home/nomeutente/Immagini/Sfondi,,
Ma come è strutturato l’albero delle directory nel suo complesso?
Il livello più alto è la directory radice (root) indicata con /.
Sotto di essa vi sono varie directory tra cui /home che contiene a sua volta le directory degli utenti. Ad esempio la mia è /home/guido che equivale per me a scrivere ~
Un’altra convenzione è che il punto (.) indica la directory corrente (quella in cui siamo in questo momento) mentre i due punti (..) indicano la directory superiore a quella corrente. Ecco perché cd .. ci riporta nella directory “padre” di quella attuale.
Ad esempio il salto tra Immagini/Amore e Immagini Sfondi avremmo potuto scriverlo anche così:
"cd ../Sfondi,,
perché se siamo in Immagini/Amore allora il simbolo dei due punti (..) rappresenta Immagini, ovvero la directory padre di Amore (e anche di Sfondi)
Oltre a /home troviamo:
/bin: contiene i programmi essenziali per il sistema (tra cui la shell BASH e i comandi più comuni)
/sbin: contiene programmi utili per il sistema, anche se non indispensabili per il suo avvio (ad esempio contiene le utility per partizionare i dischi fissi).
/boot: contiene i file per l’avvio de sistema, quindi i file del bootloader (GRUB o LILO) e il kernel Linux.
/dev: contiene i file che rappresentano i dispositivi fisici presenti nel computer. Come negli altri sistemi Unix ance in GNU/Linux qualsiasi cosa è rappresentata virtualmente come un file. Approfondirò questo tema in seguito.
/etc: contiene i file di configurazione dei programmi di sistema (ad esempio Xorg e Apt).
/lib: contiene le librerie essenziali, come glibc di cui abbiamo già parlato.
/proc: contiene dei file virtuali (cioé non esistono davvero sul disco) che contengono informazioni sui processi in esecuzione e altre cose legate al kernel (come la gestione del riscarmio energetico)
/root: è la directory home dell’utente root.
/sys: simile a /proc, andrà piano piano a sostituirla
/tmp: directory dei file temporanei
/media e /mnt: contengono i punti di mount degli hard disk, vedremo in seguito a cosa serve precisamente.
/usr: contiene eseguibili e librerie non essenziali per l’avvio del sistema (quindi praticamente tutti i nostri programmi, ma anche Xorg, GNOME, ecc.)
/var: contiene altre cose tra cui i log del sistema e dei programmi
/opt: coniene programmi opzionali (ad esempio le versioni di sviluppo di programmi già installati in /usr ma che non vogliamo che si sovrappongano a queste ultime).
E’ importante comprendere bene che questa struttura è “virtuale”. Alcune directory non esistono sul disco rigido (ad esempio /dev, /proc e /sys) altre directory possino essere su partizioni diverse o addirittura su dischi diversi o persino su computer diversi (nel caso abbiamo attivato una condivisione in rete).
Questa virtualizzazione però ci permette di vedere tutto il sistema come se fosse composto da un unico albero di directory e file. Una “astrazione” che torna molto utile in fase di programmazione: difatti per variare il funzionamento del sistema basta leggere o scrivere su dei file. In fondo, come abbiamo visto, il sistema operativo serve a creare un ambiente virtuale per i programmi. Unix lo fa nel modo più elegante: tutto è un file, quindi per fare qualsiasi cosa basta leggere e scrivere su dei file.
Un esempio?
Citato:
"cat /proc/acpi/thermal_zone/THRM/temperature,,
e sappiamo la temperatura del processore, senza usare nessun programma particolare, ma solo il comando cat che serve a stampare a video il contenuto di uno o più file. Nel nostro caso il file che contiene l’informazione sulla temperatura del processore.
Crescia