Questa guida fa parte di un’altra guida sul mio blog (anche se più recente) che cerca di riassumere tutto ciò che deve sapere un utente (windows principalmente) che si avvicina a Linux 🙂

Una delle più grosse differenze che un nuovo utente Linux incontra è il file-system di Linux; per capire di cosa parlo devo prima spiegare brevemente che cosa sia il filesystem.

Tutti i dati, programmi, immagini, documenti, ecc che avete sul vostro hard disk sono memorizzati in una sequenza di bit (tanti “0” e “1”), ogni bit ha un indirizzo preciso sul disco; immaginatelo come un enorme armadio con molti cassetti.. ogni cassetto contiene un po’ di bit, su ogni cassetto c’è un etichetta, un numero, che è il suo indirizzo, considerate che il vostro disco fisso contiene una quantità spropositata di bit, senza un qualche tipo di indice sarebbe un po’ problematico trovare un particolare documento, inoltre una rappresentazione di quel tipo (tutto mischiato insieme) diventerebbe ingestibile, immaginatevi una cartella contenente TUTTI i file del vostro disco.

Ecco a cosa serve il filesystem: parte del vostro disco (in genere un 10-20%) viene utilizzata per tenere l’indice dei file che ci sono sul vostro disco, dove si trovano, come si chiamano, in quale directory si trovano!

Le directory appunto… sono un’astrazione che aiuta l’utente ad organizzarsi meglio.

Esempi di filesystem: ext2, ext3, Reiser (Linux), hfs (mac), fat32, ntfs (windows), ISO9960, UDF (CD-ROM e DVD), ecc…

Ora che avete una vaga idea di cosa sia un filesystem posso spiegarvi oltre.. In windows ogni partizione (o disco) viene rappresentata da una lettera (chiamata “unità”), questa rappresentazione è solo un modo di mostrarvi il contenuto dei vostri dischi, e non è neppure il modo più efficiente anche se è intuitivo.

Versione corrente: 1.1.0 (24 aprile 2007)

*** LOG AGGIORNAMENTI ***

26/11/2008 – 1.1.1

  • Consigliati diversi manuali

24/04/2007 – 1.1.0

  • introdotto le versioni
  • specificato meglio cosa sono /proc e /sys (filesystem virtuali)
  • introdotto il link alla mia guida per chi si avvicina a Linux 🙂 di cui questo articolo fa parte

*************

Su Linux (ma dovrei dire Unix in generale) ogni cosa è un file, proprio qualsiasi cosa, anche il vostro lettore CD è trattato come un file, la stampante ecc.. ecc… non ci sono “lettere di unità” è come se fosse tutto in un unico disco, come se ci fosse solo l’unità “C” su windows, con la differenza che all’interno c’è TUTTO, tutti i dischi che avete, tutte le partizioni, tutte le periferiche, perfino la vostra ram!!!

Come sapete le directory sono rappresentate con una struttura ad “albero”, una struttura a cui vi siete già abituati, dentro ad una directory (o cartella) trovate dei file (foglie), e altre directory (rami) che a loro volta possono contenere altri file e directory…

Su Linux essendoci un solo albero la sua base (la radice) ha un nome… e si chiama appunto “root” oppure “/” (che significa appunto “radice” in inglese).

ATTENZIONE: per ragioni storiche, e scelte infelici, la parola “root” viene utilizzata per indicare la radice del file system E l’utente amministratore (utente root), non sono la stessa cosa e non centrano nulla l’uno con l’altro! In questa piccola guida mi riferirò a “root” come la radice del nostro filesystem salvo dove diversamente specificato.

quando si scrive un “path” (percorso) come “/home/daniele/download/documenti.zip” si intende: partendo dalla root “/”, all’interno della cartella “home”, al cui interno c’è la cartella “daniele” al cui interno c’è la cartella “download” al cui interno c’è il file “documenti.zip”. E’ esattamente la stessa cosa su windows. Se non usate la console (terminale, o su windows prompt di msdos) non ve ne accorgete, cliccate sui file e le directory e non scrivete mai un path direttamente, viene fatto dal vostro sistema in modo trasparente, senza che voi ve ne accorgiate.

Andiamo ad analizzare quali directory troviamo nella root e che significato hanno (per informazioni più dettagliate lanciate da un terminale il comando man hier):

  • bin: cartella contenente gli eseguibili di base del vostro sistema, quelli che vi servono a controllare il sistema operativo insomma, se usate la parte grafica e non conoscete la console li utilizzerete senza saperlo. (gli eseguibili dei programmi che installate in seguito, compresa la parte grafica, si trovano altrove, ad esempio in /usr/bin )
  • boot: in questa cartella c’è tutto quello che serve ad avviare la vostra Linux, in particolare il kernel compilato (che è la prima cosa che viene caricata in memoria e mandata in esecuzione) e le impostazioni del vostro bootloader (grub, lilo), cioè quel programma che vi permette all’accensione del computer di scegliere cosa volete avviare (Linux, windows, osx, versione particolare di Linux ecc)
  • dev: qui dentro ci sono tutti i file che rappresentano le periferiche collegate al vostro computer, ad esempio /dev/dvd potrebbe essere il vostro lettore dvd, /dev/hda o /dev/sda potrebbe essere il vostro disco fisso, che poi viene “montato” in una directory a piacere, ma questo lo vediamo dopo, /dev/dsp è la vostra scheda audio, e così via….
  • etc: qui dentro ci sono tutti i file di configurazione “globale” del vostro sistema operativo e dei programmi installati; cosa intendo con “globale”? ogni utente può crearsi le sue personali configurazioni su diversi aspetti (i più banali ad esempio possono essere lo sfondo o le impostazioni dei vostri temi) ma qui dentro trovate tutte le configurazioni predefinite o che riguardano l’intero sistema e che è meglio l’utente normale non vada a toccare, ecco perché “globali”. Dentro “etc” ci sono tutti file di testo, tutta la configurazione del sistema è descritta da file di testo che quindi potete facilmente guardare e modificare con qualunque editor ( e non è cosa da poco ). Per fare un esempio, i file di configurazione del server X (quel programma che vi permette sui sistemi Unix di avere un interfaccia grafica al vostro sistema) si trovano in /etc/X11/ e il file principale di configurazione in /etc/X11/xorg.conf .
  • home: (casa) qui dentro ci sono tutte le cartelle personali degli utenti, se il computer lo utilizzate solo voi ci sarà in genere una sola cartella, con il vostro nome utente… (ad esempio nel mio sistema la cartella /home/daniele/), la vostra cartella personale è il vostro spazio, dove voi avete pieno controllo del contenuto e potete fare quel che vi pare, qui dentro ci sarà il vostro Desktop, le vostre impostazioni personali (di cui parlavo prima), i vostri file, ecc…
  • lib e lib64: qui ci sono le librerie di sistema, non entrerò nel dettaglio, comunque qui dentro vanno a posizionarsi anche i driver delle periferiche e quelle parti del sistema che vengono chiamati “moduli del kernel”.
  • media: di default questa è una cartella vuota, alcune distribuzioni “montano” in automatico qui dentro i dischi, o le chiavette usb che vengono collegate al sistema
  • mnt: altra cartella vuota nata per fornire da contenitore a dischi e quant’altro che si voglia montare, come “media”
  • opt: in questa cartella si installano generalmente alcuni programmi “secondari”, è poco utilizzata, io la uso per installare i giochi (vedremo dopo perché è comodo avere una cartella per programmi secondari)
  • proc: questa è una cartella piena di file “speciali” che servono a dare (e manipolare in alcuni casi) informazioni in tempo reale sul vostro sistema, ad esempio sulla temperatura del vostro processore, se il vostro monitor è acceso o spento ecc… ecc.. Si tratta di un filesystem “speciale” (o virtuale) chiamato procfs.. esso non occupa nessuno spazio sul disco rigido ma solo un bassissimo utilizzo di RAM 🙂 maggiori informazioni qui
  • root: questa cartella (/root/) è la cartella principale dell’utente root (amministratore) che è separata dagli altri utenti (cartella home) per motivi di sicurezza
  • sbin: come bin ma con eseguibili “pericolosi” che può eseguire solamente l’amministratore di sistema (l’utente root)
  • sys: utilizzo simile a “proc”, il filesystem virtuale stavolta si chiama sysfs, e potete trovare maggiori informazioni (in inglese) qui
  • tmp: come dice il nome, cartella temporanea, è utilizzata dal sistema e può essere utilizzata anche dagli utenti, il suo contenuto viene in genere ripulito all’avvio del computer
  • usr: qui dentro ci sono quasi tutti i programmi installati sul computer, compresi quelli di base, le loro configurazioni però sono altrove, in /etc/ o nella cartella dell’utente, gli eseguibili (o i collegamenti) per avviarli sono tutti (o quasi) raggruppati in /usr/bin/ o /bin/
  • var: questa cartella è una specie di cartella temporanea, serve però a quei programmi che per natura hanno bisogno di uno spazio temporaneo molto variabile, viene ad esempio utilizzata dal gestore dei pacchetti di debian, quel programma che serve ad aggiornare il vostro sistema, i pacchetti scaricati vengono memorizzati qui dentro.

adesso dovreste aver capito dove si trovano le varie parti del sistema.. ancora però non vi ho spiegato una cosa, dove sono i corrispondenti delle lettere C:, D: ecc di windows?

la risposta è… dove decide l’utente (o meglio, l’amministratore)

mi spiego…

esiste un file, /etc/fstab, in cui sono contenute le informazioni su come e dove montare un disco (o una sua partizione), ve ne riporto qui un esempio esclusivamente per chiarezza, non preoccupatevi se non capite il contenuto (se volete più informazioni lanciate da un terminale il comando man fstab)

# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda5 / ext3 defaults,errors=remount-ro 0 1
/dev/hda6 /home ext3 defaults 0 2
/dev/hda7 none swap sw 0 0
/dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0

/dev/hda1 /media/win-disk vfat rw,uid=1000,gid=1000 0 0

la riga evidenziata dice: monta la partizione 6 del disco “hda“(*) in /home, il filesystem è di tipo “ext3”, usa le opzioni di default e i numeri seguenti definiscono l’ordine con cui effettuare un check del disco durante il montaggio (i dischi su Linux vengono automaticamente analizzati alla ricerca di errori ogni 30 montaggi)

(*) hda = hard disk IDE A, i dischi sono numerati con le lettere hda, hdb, hdc; invece se un disco è SCSI, o un supporto come chiavetta o disco esterno collegato tramite USB, viene chiamato /dev/sda, il secondo connesso /dev/sdb e così via..

questo file viene creato in maniera più o meno automatica quando installate il vostro sistema (e anche creandolo non vi accorgerete della sua esistenza), ma potete ovviamente manipolarlo in seguito, se lo sapete fare..
in poche parole questo file definisce dove “montare” le varie partizioni dei vostri dischi e lettori/masterizzatori cdrom/dvd; questo significa che potete distribuire il sistema su più dischi o partizioni

ad esempio potreste voler montare un disco in /usr/, su quel disco risiederanno tutti i programmi del sistema, su un altro /home/, questo disco conterrà tutti i dati utenti, su un altro ancora (molto piccolo) potreste voler montare /boot/ (per questioni di sicurezza), e così via.. potete montare un disco “dove vi pare”… potreste ad esempio collegare un nuovo disco da 500 GB che vi siete comprati e montarlo in /home/daniele/download/ in questo modo quando metterete (o scaricherete) qualche file nella cartella “download” utilizzerete il disco da 500 GB e non consumerete spazio al resto del sistema.. è chiaro il funzionamento? se non lo è lasciatemi un commento chiedendomi cosa non vi è chiaro.

questa parola “montare“: abbiamo visto prima che /dev/hda è un file che rappresenta un disco fisso, in particolare /dev/hda1 e /dev/hda2 sono file che rappresentano la prima e la seconda partizione del disco hda, questo file non può essere utilizzato come voi siete abituati ad utilizzare un disco, non finché non lo “montate” da qualche parte, ovvero dite ad esempio: per favore montami la partizione /dev/hda1 in un posto che decido io, ad esempio /media/partizione1/, da quel momento in avanti dentro a /media/partizione1/ vedrete il contenuto della prima partizione e potrete modificarlo, non preoccupatevi montaggio (e smontaggio) sono operazioni trasparenti, però ora forse capite cosa significa quando (anche su windows) dovete prima “smontare”, o “scollegare” per utilizzare la terminologia di windows, una chiavetta usb… questo è necessario per evitare di perdere dei dati sulla chiavetta…

L’utilità è grande.. se mettete ad esempio la directory /home/ su un disco separato dal resto del sistema potrete utilizzarla da diverse installazioni di Linux, potrete salvarvi quel solo disco per avere il backup dei propri dati e di tutte le configurazioni. Non è finita, potete anche utilizzare questo meccanismo di astrazione per “montare” partizioni di rete, ovvero partizioni condivise da altri computer che avete collegati in rete, questo significa che, con qualche piccola perdita di velocità nei trasferimenti, potete installare i programmi su un solo hard disk di tutti i computer che avete in rete ed utilizzarli anche da tutti gli altri computer in modo trasparente… 🙂 oppure potete avere un computer (server) centrale in cui ci sono le cartelle utenti di tante persone e, a prescindere da quale computer utilizzate, vi ritroverete il vostro personale sistema, personalizzato da voi e con tutti i vostri file… Insomma.. è molto comodo!

I Nomi dei file

su Linux/Unix potete usare qualunque carattere per i nomi dei file.. potete addirittura chiamare un file ” ” (spazio)

maiuscole e minuscole sono diverse: pippo è diverso da PIPPO che è diverso da Pippo che è diverso da piPPo e così via..

creare un file che si chiama “miçro$oft f@` {§chiFò}” è possibile e perfettamente permesso oltre che essere una frase stupida ma che può essere dimostrata in molti modi!

ai filesystem windows questo non piace quindi occhio quando passate dei file con questi nomi su macchine con filesystem windows… non so cosa succeda ma nella migliore delle ipotesi non potranno visualizzarli

I permessi di un file system Unix / Linux

Si parla delle autorizzazioni di accesso ad un file o una directory che ogni utente del sistema possiede, i permessi ci sono anche su windows, sono solo diversi. Ad esempio se su windows (senza essere amministratori) provate a cambiare qualcosa in C:/windows/ vi verrà dato “accesso negato”.

Su Linux (o Unix in generale) ogni file e ogni directory hanno dei permessi ed un utente che “possiede” il file/directory, quest’utente è chiamato owner (il possessore) secondo lo standard POSIX per chi vuole approfondire.

Ad esempio se l’utente “daniele” possiede il file “pippo.txt” potrà fare di questo file quel che desidera, anche cambiarne i permessi.

ma vediamoli questi permessi (se volete approfondire lanciate da un terminale il comandi man chmod, per i permessi)

  • lettura: possibilità di leggere il contenuto di un file (read / r) – per directory significa la possibilità di leggerne il contenuto
  • scrittura: possibilità di scrivere in un file o di cancellarlo (write / w) – per directory significa la possibilità di creare all’interno altri file e directory
  • esecuzione: possibilità di eseguire un file, questo è radicalmente diverso da windows, su windows ogni file può essere eseguito, basta che abbia estensione .exe o .com (o altre che non elenco). Su Linux l’estensione non conta, un file può essere eseguito sono se ha il permesso di esecuzione, ed in particolare un utente può eseguire quel file solo se quell’utente ha il permesso di eseguirlo. (eXecute / x) – per le directory significa la possibilità di potervi “entrare” (leggere il contenuto ed entrare in una directory sono cose differenti)

questa terna di permessi viene descritta 3 volte:

  • permessi dell’utente proprietario del file (anche se il proprietario di un file non ha il permesso di leggerlo o scriverlo può comunque cambiare questi permessi, quindi proteggere un proprio file da scrittura serve solo ad evitare di modificarlo accidentalmente)
  • permessi del gruppo a cui appartiene il file: ogni utente fa parte di un certo numero di gruppi, ad esempio: il file /dev/dvd sarà di proprietà dell’utente “root” e del gruppo “cdrom”, se l’utente “daniele” non fa parte del gruppo “cdrom” non potrà utilizzare il lettore dvd.
  • permessi per tutti gli altri

l’utente root (amministratore) può però cambiare qualunque di questi permessi o anche il proprietario e il gruppo di ogni file, una sorta di “Dio” del filesystem… In genere tutti i file di sistema e configurazione globali sono di proprietà di root e non hanno il permesso di scrittura per tutti gli altri, così l’utente “daniele” non può far casino neanche volendo… ecco perché è pericoloso utilizzare l’utente root se non si sa cosa sta facendo
quindi ricapitolando:

ogni file ha un proprietario (un utente che possiede il file) ed un gruppo di appartenenza, per entrambi e per tutti gli altri si possono definire i permessi come lettura,scrittura,esecuzione; l’utente root può fare quello che vuole. Se l’utente “daniele” non vuole che l’utente “matteo” possa vedere i suoi file nella cartella “personale” gli basterà togliere ad “altri utenti” tutti i permessi, se però “matteo” ha la password di root potrà comunque accedere a quei file se lo desidera.

per mostrarvi questo meccanismo vediamo un comando da terminale:

$ ls -l

totale 8
drwxr-xr-x 2 daniele daniele 4096 2007-03-04 14:08 directory-di-daniele
drwxr-x— 2 root root 4096 2007-03-04 14:11 directory-non-accessibile-dagli-utenti
rw-r–r– 1 root root 0 2007-03-04 14:10 file-dell-utente-root-che-gli-altri-non-possono-modificare
rw-r—– 1 root root 0 2007-03-04 14:11 file-dell-utente-root-che-gli-altri-non-possono-osservare
rw-r–r– 1 daniele daniele 0 2007-03-04 14:08 file-di-daniele
rw-rw-r– 1 daniele users 0 2007-03-04 14:09 file-di-tutti-gli-utenti-creato-da-daniele

Non spaventatevi, tutti i permessi si possono vedere e modificare anche dall’ambiente grafico con pochi click del mouse.. questo è solo un esempio 🙂 Potrete fare tutto cliccando con il tasto destro su un file e modificando i permessi con qualche click… qui un esempio riferito al file manager Nautilus ( uno dei programmi per gestire i file, equivalente di windows ad esplora risorse, e predefinito di Gnome)

Permessi in Nautilus

che corrisponde a..

$ ls -l ascia.txt
-rw-r–r– 1 daniele daniele 3152 2007-02-03 20:25 ascia.txt

I file o directory nascoste invece sono determinate dal nome stesso dei file: se iniziano con un punto “.” sono considerati nascosti, nella directory /home/daniele/ per esempio tutti i file di configurazione sono preceduti da un “.” e creati in modo automatico quando eseguite per la prima volta un programma dal vostro utente.. nella cartella .mozilla-thunderbird/ ci sarà ad esempio tutta la vostra posta e le impostazioni se state utilizzando Thunderbird come client di posta, in .mozilla/ ci saranno quelle di Firefox, in .gnome/ quelle di gnome e via così…

NOTA: alcuni desktop manager considerano “nascosti” anche i file che terminano con una tilde “~”, questi file sono file di Backup, e non esattamente “file nascosti”. Ad esempio tutte le volte che aprite un file con “gedit”, l’editor di testo predefinito di gnome (in windows c’è notepad, ma non è lontanamente potente quanto gedit in gnome) , il programma crea una copia di backup del file aggiungendo una tilde alla fine del nome, se ad esempio il file che state aprendo si chiama esempio.txt creerà una copia che si chiama esempio.txt~ .

I link

Parto di nuovo da windows, perché presumo che questa guida possa servire principalmente ad un utente che arriva da windows..

I link in windows sono decisamente meno potenti di quanto non lo siano su Linux… su windows quando create e cliccate un link il sistema non farà altro che sostituire la posizione (path, percorso) “vera” della cartella o del file al link e quindi voi aprirete quel file o quella cartella nella posizione originale.

Su Linux (Unix) la cosa è differente grazie al modo in cui sono organizzati i file nel filesystem e per farvelo capire vi farò un piccolo esempio:

supponiamo di inserire sempre un disco esterno usb che in automatico viene montato in /media/disco-esterno/, e supponiamo che questo disco venga utilizzato come disco su cui noi scarichiamo i file.. possiamo creare un link a /media/disco-esterno/ in /home/daniele/download/ ed utilizzarlo in tutto e per tutto come se la sua posizione fosse effettivamente quella definita dal nostro link, questo vuol dire che potremo impostare un programma perché scarichi automaticamente in /home/daniele/download/canzoni/ per esempio, su windows questo non lo potete fare sfruttando i link. E’ come se il link fosse la directory stessa. Si comprende pienamente solo provandolo.

Per essere più precisi esistono 2 tipi di link nei filesystem Unix, i soft link e gli hard link, con entrambi è possibile fare quanto appena descritto:

  • soft link: collegamenti soffici letteralmente ma più correttamente collegamenti simbolici, il link è come se fosse il file o la directory stessa, ma se cancello il file originale il link resterà “rotto” non punterà più ad una posizione valida e sarà inutile
  • hard link: collegamento duro letteralmente, il link è a tutti gli effetti un secondo (o terzo, quarto…) nome del file/directory, è il file stesso! Mi spiego.. se create un hard link del file pippo e chiamate questo hard link pluto, cancellando a quel punto “pippo” non cancellerete il file, cancellerete solo uno dei suoi hard link, il file sarà comunque accessibile da “pluto“. Un hard link è a tutti gli effetti un “diverso nome” da dare allo stesso file, e per cancellare un file che ha degli hard link è necessario cancellare TUTTI gli hard link!

Per più informazioni sui link date da terminale il comando man ln.

Spero che tutta questa guida aiuti qualcuno, non fatevi problemi a dirmi se non è chiara in qualche punto qui nei commenti.

Manuali utili all’approfondimento:

Praticamente tutti i comandi hanno dei manuali, talvolta esistono manuali anche di file di configurazioni o semplicemente di aspetti del sistema. Alcuni, in genere i principali, sono tradotti in più lingue, italiano compreso, altri si trovano solo in lingua inglese. Alcune distribuzioni richiedono di installare i manuali in italiano per poter consultare quelli tradotti nella nostra lingua. (per distribuzioni debian ed ubuntu ad esempio il pacchetto con le traduzioni si chiama: manpages-it).
Lanciate da terminale i seguenti comandi (q per uscire, le frecce per scorrere):

  • man hier — descrizione della gerarichia del filesystem
  • man proc — [eng] descrizione del pseudo filesystem proc e della sua gerarchia
  • man fstab — descrizione del file /etc/fstab
  • man mount — descrizione del comando mount e delle sue opzioni
  • man chmod — descrizione del comando chmod per cambiare i permessi ai file con spiegazione di ogni permesso
  • man ln — descrizione dei link Unix e come crearli
  • man ls — descrizione del comando ls per elencare i file in una cartella (comando utilizzato in questa guida)

Articoli Simili

Sunto dell’organizzazione delle directory su sistemi Unix- su Illusionblog