Inserisci Infobox

Introduzione al File System Linux

Le informazioni fondamentali per comprendere e gestire il file system e la logica delle directory su Linux

Introduzione a file e directory Unix
Autore: al - Ultimo Aggiornamento: 2003-11-28 19:33:54 - Data di creazione: 2003-11-28 19:33:54
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Il file system di un sistema Linux, come ogni Unix, ha una struttura gerarchica: tutti i suoi oggetti (file e directory) sono contenuti all'interno della root ( la directory principale, indicata semplicemente con "/" (barra) ) e lo stesso carattere / viene usato per separare i nomi delle directory ( Ad esempio /usr/bin/ indica la directory bin contenuta nella directory usr contenuta nella root (/).
La root contiente non soltanto TUTTE le altre directory di una partizione ma TUTTI i filesystem eventualmente montati sul sistema (partizioni e hard disk diversi, floppy, cdrom, condivisioni di rete ecc.).
Il principio è radicalmente diverso da quello presente nel mondo Windows, dove ogni device o risorsa ha un suo nome o lettera identificativa (A:, C:, D: ecc) al cui interno si trovano le directory del relativo filesystem.
Su molti Linux, ad esempio, i file contenuti in un floppy disk si trovano in una directory chiamata /mnt/floppy e non in qualcosa chiamato A: come su Windows. Il nome di questa directory, oltretutto, può cambiare ed essere decisa arbitrariamente dall'utente o da chi ha realizzato la distribuzione (ovviamente esistono metodi per sapere in quale directory viene montato qualsiasi dispositivo).

Esistono alcune notazioni standard Unix per indicare la directory corrente, la directory padre, la home directory ecc.
E' opportuno conoscere bene queste convenzioni in quanto sono comunemente utilizzate in attività sistemistiche:
/ Come sopra riferito, indica la root, la directory principale alla base di tutto il filesystem
/bin/ Indica la sottodirectory bin (una arbitraria), alla root
bin/ Indica la sottodirectory bin rispetto alla dir corrente. Notare che se il path inizia con una / indica un path assoluto, che inizia dalla root ( /, appunto). Se non inizia con / indica un path relativo alla directory in cui ci si trova.
. Indica la directory corrente
.. Indica la directory madre di quella in cui ci si trova
../bin/ Indica la sottodirectory bin che si trova allo stesso livello della dir corrente.
~ La home directory dell'utente corrente (coincide di default con /home/login_utente

Un path assoluto, quindi, avrà un simile aspetto: /usr/local/bin e sarà funzionante in qualsiasi directory in cui ci si trova.
Un path relativo ha aspetto simile a local/bin e indica directory diverse a seconda della directory in cui ci si trova. In questo caso local/bin coincide con /usr/local/bin solo se ci si trova in /usr/

Comandi comuni
I comandi di gestione dei file su Unix sono paragonabili agli equivalenti di altri sistemi operativi a riga di comando come DOS. Tutti questi comandi, come tradizione Unix, hanno varie opzioni che possono ampliare notevolmente le potenzialità del comando stesso.
ls Visualizza il contenuto di una directory (equivale a dir su Dos e in alcuni Linux esiste anche un alia di ls che si chiama proprio dir);
cd Cambia la directory corrente. Corrisponde all'omonimo cd su DOS.
cp Esegue la copia di uno o più file. Corrisponde al copy di DOS.
mv Esegue lo spostamente o la rinomicanzione di un file. Corrisponde a move e rename su DOS.
rm Cancella uno o più file (fare attenzione: su molti Unix e Linux non è previsto l'equivalente di un cestino: se un file viene cancellato risulta poi piuttosto complesso recuperarlo). Corrisponde al del di DOS.
mkdir e rmdir Rispettivamente vengono usati per creare e cancellare una directory vuota.
ln Viene usato per create un link, hard o soft (con l'opzione ln -s).

La struttura delle directory su Linux (Unix)
Autore: al - Ultimo Aggiornamento: 2003-11-24 20:55:36 - Data di creazione: 2003-11-24 20:55:36
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

La struttura delle directory in un sistema Linux ha molte caratteristiche comuni a quella di altri sistemi Unix.
Sotto vengono riportare le directory principale e più comuni su Unix diversi, altre directory possono avere nomi o funzionalità diverse in Unix diversi (e anche in distribuzioni Linux diverse).

/ Radice (root). La directory principale che contiene tutte le altre.
/root Home dell'utente root, da non confondere con la root ( / ), che è la directory principale e non una directory che si chiama /root
/boot Contiene tutte le immagini del kernel e file indispensabili al bootstrap del sistema
/etc Contiene i file di configurazione del sistema e dei programmi installati
/home Contiene le home directory degli utenti normali (tutti tranne l'utente root)
/usr Contiene binari, documentazione, librerie e sorgenti della maggior parte dei programmi (e i sorgenti del kernel)
/var Contiene tutti file che hanno informazioni dinamiche, che tendono a modificarsi con il tempo: log, file di pid e lock dei processi in esecuzione, directory di spool (stampa, mail...) ecc.
/proc File system virtuale, generato in tempo reale dal kernel. Contiene, come se fossero file e directory, dati dinamici sul sistema e sui processi
/dev Contiene file speciali, che corrispondono a dispositivi hardware o a funzionalità particolari. Tramite di essi si può accedere al relativo device hardware.
/sbin Contiene comandi e programmi riservati a root ( altri comandi sono in /usr/sbin/ )
/bin Contiene comandi e programmi base per tutti gli utenti (altri comandi sono in /usr/bin/ )
SWAP Non è una directory ma una partizione speciale, utilizzata come memoria virtuale.

Hard link e Symbolic link
Autore: al - Ultimo Aggiornamento: 2003-11-24 23:04:40 - Data di creazione: 2003-11-24 23:04:40
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

I sistemi Unix fanno largo uso di link: dei file speciali che sono semplici collegamenti o alias di file esistenti.
Servono per identificare lo stesso file o directory con nomi diversi, avendo anche path diversi.
Su Unix esistono due tipi di link: Hard link e Symbolic link.
L'effetto che hanno è lo stesso, ma la loro natura è diversa e si adattano a diversi utilizzi.
L'utilità dei link è varia:
- Se si devono modificare diversi file uguali, in diverse directory, con l'uso di link la modifica fatta su un file diventa immediatamente effettiva anche sugli altri file (link) (Es: la struttura  di /etc/rc.* ) .
- Se si devono poter gestire contemporaneamente diversi ambienti o programmi con diverse versioni, si può cambiare solo il puntamento del link usato per accedere a questi ambienti per poter switchare rapidamente da uno all'altro (es: /usr/src/linux )
- Se si devono gestire diverse alternative dello stesso comando, si può usare un link per referenziare il comando con un nome fisso e poi cambiare il puntamento per valutare in tempi brevi le diverse alternative (ex: Directory /etc/alternatives in RedHat Linux).

Hard Link
Sono di fatto una copia di una voce di directory, hanno nomi diversi ma puntano allo stesso inode e quindi condividono esattamente lo stesso dato (oltre agli stessi permessi, data di modifica, owner ecc.).
Dal momento che originale e link sono indistinguibili e condividono lo stesso inode, non si possono fare hard link fra file system diversi e, in genere su Unix, su directory (su Linux è possibile creare un hard link ad una directory tramite l'opzione speciale -d).
Pur essendo la gestione dei link comunque molto rapida da parte del kernel, gli hard link sono leggermente più "economici" in quanto risparmiano più spazio su disco (stesso i-node, stessi dati) e richiedono una lettura in meno sul file system (i symlink hanno i-node diverso e puntatore, che va letto, ad un altro file).

Symbolic Link o Symlink
Sono dei piccoli file che contengono un puntamento ad altri file o directory. Questi file hanno i-node autonomo e possono puntare a file di altri file system (sia locali, che di rete). Si possono facilmente visualizzare con un normale ls -l e se viene cancellato o spostato il file a cui puntano rimangono "stale": continuano ad esistere ma puntano a qualcosa che non esiste.
I symlink sono generalmente molto più utilizzati nell'amministrazione di sistemi Unix e corrispondono come concetto e come implementazione ai collegamenti (shortcut) del mondo Windows.
Un symlink appare come avente tutti i permessi aperti a tutti gli utenti, di fatto è trasparente rispetto a permessi e ownership e riflette quelli del file o directory a cui punta.

Utilizzare i file system
Autore: al - Ultimo Aggiornamento: 2003-11-28 20:22:21 - Data di creazione: 2003-11-28 20:22:21
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Per file system si intende l'astrazione (metodo e protocolli) con cui un sistema operativo organizza i file su un supporto fisico di memorizzazione ad accesso casuale (floppy, cdrom, memoria, hard disk...).
I sistemi operativi moderni tipicamente utilizzano un sistema gerarchico (diviso in directory e sottodirectory) e possono supportare nativamente uno o più diversi file system.
Linux grazie alla sua polivalenza permette di utilizzare quasi tutti i file system più diffusi, ma il suo file system "storico" è ext2.
Dal kernel 2.4.x è disponibile il supporto per un'evoluzione dell'ext2, l'ext3 che, oltre ad essere convertibile facilmente in ext2, ha il vantaggio di essere un journal file system (basato su un log di tutte le operazioni di scrittura su disco, che aumenta l'integrità e il controllo .

Prima di poter utilizzare un qualsiasi dispositivo con il proprio filesystem (es: CDROM, floppy, tape, condivisione di rete windows, directory nfs, partizione fat32 di un hard disk... ) questo deve essere formattato e montato in una subdirectory della root ( / ).
Una volta montato il filesystem risulta accessibile a programmi e utenti in modo trasparente e diventa parte integrante dell'albero delle directory sotto /.
Dopo l'uso il filesystem può essere smontato (operazione necessaria per espellere un CDROM o un floppy).
La directory su cui viene montato un filesystem può anche non essere vuota, ma nel momento in cui ci viene montato un file system, i dati ivi contenuti non sono più visibili fino a quando non si esegue l'umount.
La gestione di diversi file system all'interno dello stesso albero di directory (la root: /) permette l'astrazione dei device hardware da parte del sistema operativo: per i programmi e gli utenti che accedono a determinati file non è importante conoscere o sapere su che tipo di dispositivo risiedono e possono accedere e gestire tutti i file con gli stessi strumenti, a prescindere dall'hardware su cui sono registrati.

I permessi sui file Unix
Autore: al - Ultimo Aggiornamento: 2002-08-21 22:09:07 - Data di creazione: 2002-08-21 22:09:07
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Tutti i sistemi Unix hanno una gestione standard dei permessi sui file, che rispecchia la natura di sistema operativo multiutente.

I permessi possono essere di lettura, scrittura e esecuzione e vengono differenziati sulla base della natura dell'utente rispetto al file o directory:
- utente proprietario owner del file
- gruppo proprietario owner group del file
- gli altri utenti others, che sono l'owner e non appartegono all'owner group.
Il permesso di esecuzione è necessario per poter accedere a delle directory e, ovviamente, permette l'esecuzione di file (script shell, perl, php, cgi; programmi binari compilati).

Per visualizzare i permessi di un file basta usare il comando ls -l che per ogni file da un output simile a:
-rwxr-xr-- 1 mark admins 77266 Dec 13 17:18 /bin/command.sh
La prima colonna, composta da 10 caratteri, descrive i permessi sul file /bin/command.sh.
Il primo carattere (nell'esempio: -) identifica il tipo di file (directory, pipe, block o char device, symlink...);
I successivi 3 caratteri identificano i permessi in lettura/scrittura/esecuzione dell'owner di /bin/command.sh (in questo caso l'owner mark ha tutti i permessi sul file: rwx );
I successivi 3 identificano i permessi del gruppo owner di /bin/command.sh (in questo caso il gruppo admins ha permesso di lettura ed esecuzione sul file: r-x );
I successivi 3 identificano i permessi di tutti gli altri utenti del sistema (in questo caso hanno solo il permesso di lettura: r-- ).
Le successive colonne nell'output di ls -l indicano l'owner, il gruppo, la dimensione in byte, la data di ultima modifica e il nome del file.

Per modificare i permessi dei file si usa il comando chmod che usa una duplice sintassi per indicare i permessi:
read - lettura: Flag r in symbolic mode; Valore 4 in octal mode
write - scrittuta: Flag w in symbolic mode; Valore 2 in octal mode
execute - esecuzione: Flag x in symbolic mode; Valore 1 in octal mode

Privacy Policy