• file-system-linux

    Il file system di Linux

    Introduzione al file system di Linux, ai concetti di file e directory, e su come si effettua la navigazione di base sul file system.

    File system: file e directory

    Secondo la definizione fornita da Wikipedia,  “un file system (abbreviazione: FS) […] indica informalmente un meccanismo con il quale i file sono posizionati e organizzati su dispositivi di archiviazione (memorie di massa come disco rigido, CD-ROM, etc. o in casi particolari anche nella RAM) o su dispositivi remoti tramite protocolli di rete. […] Più formalmente, un file system è l’insieme dei tipi di dati astratti necessari per la memorizzazione (scrittura), l’organizzazione gerarchica, la manipolazione, la navigazione, l’accesso e la lettura dei dati.

    I dati omogenei tra loro vengono raccolti in contenitori, i file. Quindi un file è essenzialmente un contenitore di dati (omogenei):  può contenere del testo (il codice sorgente di un programma C) o dati binari (l’eseguibile di un programma C, un file musicale, un’ immagine, un video). Ci sono delle regole per i nomi dei file:

    • il nome di un file può contenere caratteri alfanumerici, caratteri di sottolineatura o di punteggiatura;
    • il nome del file può essere lungo al massimo 256 caratteri
    • il nome di un file non può iniziare con un numero e non dovrebbe contenere caratteri particolari come punti interrogativi, spazi o asterischi: questi caratteri hanno dei significati particolari per il sistema;
    • Linux e’ un sistema case sensitive, cioè sensibile ai caratteri minuscoli e maiuscoli. Questo vuol dire che per Linux ‘hi’, ‘HI’, ‘Hi’ e ‘hI’ sono quattro file diversi.

    Nell’immagine sotto viene mostrato il contenuto della directory /home/giulio

    debian-linux-file-directory

    Struttura ad albero del file system

    Per Linux sia i file che le directory sono comunque file. Ogni file viene collocato all’interno di una directory (cartella) ben precisa. Una directory (o cartella o folder) è essenzialmente un contenitore di file e di altre directory. Una directory contenuta all’interno di un’altra directory viene definita subdirectory o sottodirectory. Un filesystem composto da directory viene di solito paragonato ad un albero, dove la directory principale o root o radice o “/”, rappresenta il tronco (il punto di partenza), mentre le sottodirectory rappresentano i rami dell’albero. Partendo dalla directory radice si può arrivare ad un file qualsiasi all’interno di una qualsiasi directory, così come partendo dal tronco si può arrivare ad una foglia qualsiasi di un ramo qualsiasi dell’albero.

    file-system-linux-struttura-albero

    La modalità che Linux utilizza per organizzare i suoi file nel disco fissa è diversa da quella usata da Windows. I nuovi utenti di Linux che provengono dal mondo Windows a volte si trovano in difficoltà nel gestire file e directory. Un punto essenziale da tenere a mente è che mentre in Windows si identificano le “unità”, come l’unità disco C: o D:, in Linux si ha a che fare con qualcosa chiamato “punti di montaggio” (o mount-points). Questi sono i luoghi in cui gli altri hard disk, i masterizzatori CD/DVD, ecc … si collegano alla partizione root.

    Nell’organizzazione gerarchica (ad albero) delle directory, dobbiamo ricordarci le seguenti cose:

    • la directory radice dell’albero è “/” (slash)
    • la directory corrente è indicata con “.” (dot)
    • il padre della directory corrente è indicato con “..” (dot dot)
    • le directory si separano con con uno “/” (slash)

    Navigare il file system di Linux

    I path (percorsi) dei file e delle directory possono essere:

    • assoluti, cioè partono dalla directory radice: /home/giulio/
    • relativi, cioè partono dalla directory corrente: ./Templates/index.html

    Se il nome di un file inizia con il carattere “.” (punto) il file è nascosto e per vederlo occorre utilizzare un’opzione specifica per i comandi che mostrano l’elenco dei file e delle directory.

    Il comando pwd (print working directory)

    Quando si apre per la prima volta il terminale dopo aver eseguito il login, il sistema si posiziona automaticamente nella home directory dell’utente.

    linux-directory-corrente

    Per conoscere la directory corrente basta lanciare il comando pwd (abbreviazione dalla lingua inglese di print working directory, stampa la directory corrente), che mostra sullo standard output il pathname assoluto della directory corrente.

    linux-comando-pwd

     

    Il comando pwd utilizza le seguenti opzi0ni:

    OpzioneSignificato
    -Lusa il valore della variabile d'ambiente PWD ma solo se nelle componenti del pathname assoluto in esso indicato non sono usate le directory speciali "." e ".."
    -Prisolve eventuali collegamenti simbolici presenti nelle componenti del pathname assoluto.

    Il comando cd (change directory)

    Cambiare la directory corrente è molto semplice, sapendo qual è la directory attuale e dove si trova la directory si vuole andare. Per cambiare directory usate il comando cd (change directory). Ad esempio, per andare dalla directory /home/giulio a quella superiore, occorre salire di un livello con il comando cd ..

    linux-cd-directory-superiore

    Per salire ancora di un livello (da /home alla directory radice /), occorre digitare di nuovo cd ..

    linux-cd-directory-superiore1

     

    Per tornare alla home directory, basta digitare cd (senza argomenti), oppure cd ~ (carattere tilde):

    linux-cd-directory-home

    Per spostarsi in un percorso assoluto, ad esempio /usr, basta digitare cd /usr:

    linux-cd-percorso-assoluto

    L’informazione sulla directory corrente è memorizzata sulla variabile di ambiente $PWD, mentre la directory precedente viene letta dalla variabile di ambiente $OLDPWD. Con il comando cd – si ritorna alla directory precedente:

    linux-cd-ritorno-directory-precedente

    Per spostarsi in un percorso relativo (a partire cioè dalla directory corrente), ad esempio ./sorgenti, basta digitare cd ./sorgenti (oppure cd sorgenti):

    linux-cd-percorso-relativo

    Per salire su di due livelli, basta digitare il comando cd ../..

    linux-cd-sali-due-livelli

    Riepilogando:

    ComandoFunzione
    cdRiporta alla directory home
    cd ~Riporta alla directory home
    cd /Porta alla directory root di sistema
    cd /usr Porta nella directory /usr
    cd /home/giulio/sorgentiIndipendentemente dalla directory corrente, questo percorso assoluto porta direttamente alla sottodirectory sorgenti sotto /home/giulio/
    cd ..Porta alla directory superiore
    cd ~osPorta alla directory home dell'utente os, ammesso che si abbia dato il permesso di farlo
    cd ../../usr/Questo percorso relativo porta due directory sopra rispetto alla directory corrente e poi alla directory usr

    Le directory principali di un file system Linux

    Esiste una struttura gerarchica di directory standard, che può variare leggermente da distribuzione a distribuzione, ma più o meno le directory predefinite di qualsiasi distribuzione Linux sono le seguenti:

    DirectoryDescrizione
    /bincontiene i programmi essenziali per il sistema (tra cui la shell BASH e i comandi più comuni)
    /sbincontiene programmi utili per il sistema, anche se non indispensabili per il suo avvio (ad esempio contiene le utility per partizionare i dischi fissi).
    /bootcontiene i file per l’avvio de sistema, quindi i file del bootloader (GRUB o LILO) e il kernel Linux.
    /devcontiene 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.
    /etccontiene i file di configurazione dei programmi di sistema (ad esempio Xorg e Apt).
    /libcontiene le librerie essenziali, come glibc.
    /proccontiene 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 risparmio energetico)
    /rootè la directory home dell’utente root.
    /syssimile a /proc, andrà piano piano a sostituirla
    /tmpdirectory dei file temporanei
    /mntcontiene i punti di mount degli hard disk
    /usrcontiene eseguibili e librerie non essenziali per l’avvio del sistema (quindi praticamente tutti i nostri programmi, ma anche Xorg, GNOME, ecc.)
    /varcontiene altre cose tra cui i log del sistema e dei programmi
    /optcontiene programmi opzionali (ad esempio le versioni di sviluppo di programmi già installati in /usr ma che non vogliamo che si sovrappongano a queste ultime).

    Giulio Cantali – IT Consultant

    Creatore di Database Master, il primo percorso per diventare esperti di database

Lascia un commento

Se vuoi condividere la tua opinione, lascia un commento

Puoi usare questi tag e attributi: HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">