Microsoft's Internet Explorer browser has no built-in vector graphics machinery required for "loss-free" gradient background themes.
Please upgrade to a better browser such as Firefox, Opera, Safari or others with built-in vector graphics machinery and much more. (Learn more or post questions or comments at the Slide Show (S9) project site. Thanks!)
In un sistema GNU/Linux, l’accesso ai supporti di memorizzazione di massa (harddisk, cdrom/dvrom, usbpen, etc.) è gestito attraverso i cosidetti device.
I device sono veri e propri file attraverso i quali è possibile gestire la lettura/scrittura da/su i supporti di memorizzazione di massa.
I file di tipo device sono collocati per convenzione in una precisa posizione del
sistema: la cartella /dev/
.
Il sistema GNU/Linux è in grado di gestire molti tipi di supporti tra cui:
Questi supporti possono essere inizializzati con differenti tipi di filesystem, anche con quelli che non appartenentono propriamente al mondo UNIX (ad esempio: FAT16, FAT32, NTFS).
Questo rende possibile la convivenza e interoperabilità tra il sistema operativo GNU/Linux e gli altri sistemi all’interno della stessa macchina.
Il supporto di memorizzazione di massa principale del sistema è il disco rigido (harddisk o hd per il seguito). Il canale hardware di comunicazione tra il sistema e l’harddisk si dice interfaccia.
Le interfacce di comunicazione più diffuse sono di tipo:
Il sistema GNU/Linux utilizza una convenzione sui nomi dei device per distinguere tra i vari tipi di supporti di memorizzazione. In particolare:
Il termine filesystem (fs) si riferisce a due aspetti differenti del processo di memorizzazione su supporto.
Si può intendere per filesystem il modo con cui i dati vengono fisicamente registrati all’interno del supporto oppure l’organizzazione dei file all’interno del supporto.
Un filesystem è normalmente associato ad un supporto di memorizzazione.
Tale supporto di memorizzazione può essere un normale hd collegato direttamente alla macchina ma non solo.
La forza di un sistema GNU/Linux (e Unix in generale) consiste nella capacità di gestire filesystem anche non fisicamente vicini alla macchina in uso. Questi filesystem si dicono di rete.
Nel gergo di Unix i fs possono essere montati e smontati.
I due termini si riferiscono al processo di collegamento/scollegamento del fs da montare all’interno della struttura del fs in uso.
Ad esempio, quando si inserisce un cd-rom all’interno di una macchina
Ubuntu Desktop GNU/Linux, il supporto viene automaticamente
montato. Cioè, il contenuto del supporto viene innestato all’interno
di una particolare cartella del fs in uso (/media/
).
A quel punto, per navigare all’interno del cd-rom basterà spostarsi
nella cartella /media/cdrom
utilizzando il consueto comando cd
.
Il supporto di filesystem differenti è trasparente per l’utente.
Cioè, è possibile navigare ed effettuare operazioni all’interno di diversi fs utilizzando sempre gli stessi comandi di shell, con l’illusione di operare all’interno di una struttura con delle caratteristiche omogenee.
Analogamente, se si monta un fs di rete, non ci si preoccuperà della posizione fisica del supporto o delle sue caratteristiche hardware. Ci si comporterà come se il fs montanto fosse relativo ad un supporto installato sulla macchina in uso (locale).
Il sistema GNU/Linux è in grado di operare su una grande varietà di fs, locali e di rete.
Alcuni dei fs supportati sono:
Un fs journaled ha la caratteristica di essere particolarmente stabile rispetto a malfunzionamenti improvvisi della macchina.
Il filesystem ext2
è uno dei più diffusi fs del mondo GNU/Linux.
Questa diffusione è dovuta alle sue buone prestazioni e alla sua grande stabilità.
Tuttavia, il filesystem ext2
non è dotato di journaling.
Il filesystem ext3
rappresenta la naturale evoluzione di ext2
.
Rispetto a questo ext3
aggiunge le caratteristiche di
ext2
: è possibile aggiornare un filesystem ext2
in ext3
senza perderne i dati, un filesystem ext3
può essere montato
come filesystem ext2
L’11 Ottobre 2008 è stata rilasciata la versione 4 (stabile) di ext
:
ext4
.
Il filesystem ext4
presenta varie innovazioni tra cui:
ext3
A differenza dei sistemi Microsoft, i sistemi GNU/Linux (e Unix) non
si servono delle estensioni dei file per identificare il contenuto e
la tipologia dello stesso. Per questo motivo, un file di testo non
necessariamente deve avere un estensione txt
(come in Windows) per
essere interpretato come tale.
I file nascosti sono identificati da un punto prefisso al nome del file.
I file nascosti non sono visibili nell’output del comando ls
a meno
che non si utilizzi l’opzione -a
(--all
):
andrea@ganimoide:~/cartella$ touch .nascosto andrea@ganimoide:~/cartella$ ls -l totale 0 andrea@ganimoide:~/cartella$ ls -la totale 8 drwxr-xr-x 2 andrea andrea 4096 2009-01-28 08:24 . drwxr-xr-x 59 andrea andrea 4096 2009-01-28 08:24 .. -rw-r--r-- 1 andrea andrea 0 2009-01-28 08:25 .nascosto
Il comando touch
crea un file vuoto di nome .nascosto
. Questo file
.nascosto
non compare nell’output del comando ls -l
. Quando al
comando ls
si aggiunge l’opzione -a
ecco comparire tutti i file
nascosti.
Notare che sono considerati nascosti anche i file ..
e .
mkfs
Al fine di inizializzare un filesystem su una partizione esistente
è presente un tool (o meglio un gruppo di tool) chiamato mkfs
:
andrea@ganimoide:~$ mkfs Usage: mkfs [-V] [-t fstype] [fs-options] device [size]
L’ fstype se non specificato sarà ext2/ext3, in altre parole mkfs senza parametri, mke2fs e mkfs.ext2/mkfs.ext3 sono sinonimi.
andrea@ganimoide:~$ dd if=/dev/zero of=TEST.img bs=1k count=10000 andrea@ganimoide:~$ sudo losetup -a andrea@ganimoide:~$ sudo losetup /dev/loop0 TEST.img andrea@ganimoide:~$ sudo losetup -a andrea@ganimoide:~$ sudo mkfs -t ext3 -j -L MYDISK /dev/loop0 [....] andrea@ganimoide:~$ sudo mount /dev/loop0 /mnt/tmp/ andrea@ganimoide:~$ mount andrea@ganimoide:~$ df -h [...] andrea@ganimoide:~$ sudo umount /mnt/tmp/ andrea@ganimoide:~$ sudo losetup -d /dev/loop0
Anche lo swap, essendo organizzato secondo un particolare tipo di filesystem, richiede l’inizializzazione mediante un apposito tool: mkswap.
rpl@ubik:~/Projects/ALCA/MasterOpenSource$ mkswap mkswap: error: Nowhere to set up swap on? Usage: mkswap [-c] [-v0|-v1] [-pPAGESZ] [-L label] [-U UUID] /dev/name [blocks]
I comandi swapon e swapoff consentono poi l’abilitazione e disabilitazione di uno spazio di swap inizializzato.
andrea@ganimoide:~$ dd if=/dev/zero of=TEST.img bs=1k count=10000 andrea@ganimoide:~$ sudo losetup /dev/loop0 TEST.img andrea@ganimoide:~$ sudo mkswap /dev/loop0 [...] andrea@ganimoide:~$ sudo swapon /dev/loop0 andrea@ganimoide:~$ cat /proc/swaps [...] andrea@ganimoide:~$ sudo swapoff /dev/loop0 andrea@ganimoide:~$ sudo losetup -d /dev/loop0
df
e du
I comandi df
e du
mostrano rispettivamente lo spazio disponibile e
lo spazio utilizzato sul supporto.
Il comando sotto mostra le informazioni relative allo spazio libero sul fs in uso.
andrea@ganimoide:~$ df . -h File system Dimens. Usati Disp. Uso% Montato su /dev/sda3 90G 6,3G 79G 8% /
Il comando du
permette di conoscere lo spazio utilizzato da file e
cartelle.
andrea@ganimoide:~$ du -sh src/ 275M src/
Nell’esempio sopra il comando du
viene istruito per visualizzare in
formato leggibile (-h
) lo spazio utilizzato dalla cartella src/
e
dalle cartelle in essa contenute. Inoltre, non viene visualizzata la
dimensione di ogni sottocartella (-s
).
Esercizio:
Ipotizza l’output del comando du -h | sort -nr | less
Nel seguito della lezione sarà necessario inviare comandi che interagiscono con le componenti hardware del sistema (interazione a basso livello).
Affinchè il sistema consenta l’esecuzione di questo tipo di operazioni, l’utente deve essere accreditato come amministratore.
L’utente amministratore (o superuser, o root ) ha il controllo completo del sistema e può eseguire qualuque tipo di operazione su di esso.
Il sistema Ubuntu GNU/Linux permette di inviare comandi con privilegi di amministratore anche ad utenti che hanno avuto accesso al sistema non accreditandosi con tale privilegio.
Naturalmente, questi utenti devono risultare all’interno di una lista di ‘privilegiati’ e devono essere dotati di una password di amministrazione.
Il comando attualmente più utilizzato allo scopo di eseguire un
comando come amministratore è sudo
:
andrea@ganimoide:~$ sudo cat /etc/shadow
Il comando visualizza le informazioni relative alle password degli utenti.
fsck
fsck
è un tool di fondamentale importanza per verificare l’integrità
del fs.
In un sistema Ubuntu GNU/Linux il comando fsck
è declinato per tutti
i tipi di fs supportati dal sistema. Cioè, esiste un comando fsck
specifico per ogni tipo di fs (analogamentente a mkfs
).
Ad esempio, per effettuare un controllo di un fs di tipo FAT32
corrispondente device /dev/sdb1
si invia il seguente comando:
andrea@ganimoide:~$ sudo fsck.vfat /dev/sdb1 dosfsck 2.11, 12 Mar 2005, FAT32, LFN /dev/sdb1: 76796 files, 1511010/1951740 clusters
Il comando fsck.vfat
esegue un controllo sui fs di tipo FAT32.
Poichè il comando deve interagire con le componenti hardware del
sistema è necessario lanciarlo con permessi di amministratore
( sudo
).
Nota che è consigliabile non eseguire il controllo su un fs montato.
Un supporto di memorizzazione può essere suddiviso in partizioni.
Le partizioni sono aree (volumi logici) che suddividono virtualmente lo spazio fisico del supporto.
Ad ogni partizione può essere associato un filesystem.
Il sistema GNU/Linux utilizza una particolare convenzione per identificare le differenti partizioni presenti sul supporto.
Ad esempio, le prime 3 partizioni presenti sul disco /dev/hda
sono
identificate con un numero progressivo postposto al nome del device:
Notare che /dev/hda1
, /dev/hda2
, /dev/hda3
sono essi stessi
device.
Su di essi, quindi, possono essere eseguite le normali operazioni di controllo.
fdisk
è un software che permette di gestire (creare, cancellare,
modificare) le partizioni in un sistema GNU/Linux.
Il comando fdisk
opera a livello di periferiche hardware (supporti
di memorizzazione) per questo motivo è necessario lanciarlo con
privilegi di amministratore ( sudo
).
andrea@ganimoide:~$ sudo fdisk /dev/sdb The number of cylinders for this disk is set to 30560. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Comando (m per richiamare la guida):
L’argomento passato al comando fdisk
è il nome del device sul quale
si vogliono effettuare le operazioni di partizionamento.
Il software fdisk
interagisce con l’utente attraverso i comandi che
esso gli impartisce da tastiera.
Per visualizzare l’elenco dei comandi disponibili l’utente può premere il tasto m seguito da invio.
Per visualizzare l’elenco delle partizioni disponibili sul device si preme il tasto p seguito da invio:
Comando (m per richiamare la guida): p Disco /dev/sdb: 8011 MB, 8011120640 byte 16 testine, 32 settori/tracce, 30560 cilindri Unità = cilindri di 512 * 512 = 262144 byte Identificativo disco: 0x00000000 Dispositivo Boot Start End Blocks Id System /dev/sdb1 * 1 30560 7823344 c W95 FAT32 (LBA)
L’output visualizza la tabella delle partizioni con le relative informazioni.
Come si vede, tra le informazioni riportate compare:
/dev/sdb1
)I comandi n e d aggiungono e rimuovono una partizione. fdisk
non
registra immediatamente i cambiamenti sulla tabella delle
partizioni. La modifica effettiva avviene inviando il comando w.
Essendo le informazioni contenute nei supporti di memorizzazione indispensabili nella fase di avvio del sistema, è necessario che quest’ultimo conosca quali device montare durante questa fase.
Tali informazioni sono contenute nel file di testo /etc/fstab
:
/dev/sda1 / ext3 defaults 1 1 /dev/sda5 /boot ext3 defaults 1 2 /dev/sda9 /home ext3 defaults 1 2 /dev/sda6 /root ext3 defaults 1 2 /dev/sda10 /tmp ext3 defaults 1 2 /dev/sda8 /usr ext3 defaults 1 2 /dev/sda7 /var ext3 defaults 1 2 /dev/sda11 swap swap defaults 0 0 /dev/fd0 /mnt/floppy ext3 noauto,users 0 0 /dev/hdc /mnt/cdrom iso9660 noauto,ro,users 0 0 /dev/hdd /mnt/zip vfat noauto,users 0 0 fs1.domain.org:/share /fs1 nfs defaults 0 0
Come si vede, il file presenta una struttura tabulare composta da sei colonne e da tante righe quanti sono i supporti da inizializzare.
Le informazioni registrate nelle colonne di fstab
sono:
ext3
, ext2
,
vfat
, swap
, etc.)dump
(ormai caduto in disuso)I filesystem possono essere anche montati “a caldo” tramite il comando
mount
.
Il comando mount
innesta il fs presente sul device all’interno del
fs di root. In questo modo l’utente può operare su unica struttura di
file e cartelle senza preoccuparsi della posizione fisica degli
stessi.
Ad esempio, per montare un CD-ROM, dopo averlo inserito nel drive, si utilizza il seguente comando:
andrea@ganimoide:~$ mount /dev/scd0
Notare che il comando eseguito con 1 solo parametro consulta automaticamente
il file fstab
del sistema per ricavarne i restanti. Infatti, senza che l’utente l’abbia specificato
esplicitamente, mount
innesterà il fs del CD-ROM nella cartella
/media/cdrom, così come indicato da fstab
.
Notare come il comando mount
normalmente richiederebbe privilegi
di amministratore. Eppure, nell’esempio sopra, il comando è stato
inviato senza utilizzare sudo
. Questo è dovuto all’opzione user
presente nel file fstab
in corrispondenza del device /dev/scd0
.
Per chiarezza riportiamo l’estratto del file fstab
:
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0
Come si è verificato i device file sono particolari file che identificano molte delle periferiche hardware a cui ha accesso il sistema (ma anche altre periferiche virtuali , come loop ad esempio ).
Ma cosa mette in relazione tra loro il device file e il particolare driver che lo dovrà gestire?
brw-rw---- 1 root disk 8, 0 Feb 9 17:53 /dev/sda brw-rw---- 1 root disk 8, 1 Feb 9 17:54 /dev/sda1 brw-rw---- 1 root disk 8, 2 Feb 9 17:53 /dev/sda2 brw-rw---- 1 root disk 8, 3 Feb 9 17:53 /dev/sda3 brw-rw---- 1 root disk 8, 5 Feb 9 17:54 /dev/sda5 crw-rw----+ 1 root audio 116, 10 Feb 9 17:54 /dev/snd/controlC0 crw-rw----+ 1 root audio 116, 9 Feb 10 19:36 /dev/snd/pcmC0D0c crw-rw----+ 1 root audio 116, 8 Feb 10 20:29 /dev/snd/pcmC0D0p crw-rw----+ 1 root audio 116, 7 Feb 9 17:54 /dev/snd/pcmC0D1c
Ad ogni device file vengono associati due codici identificatifi:
Inoltre i device file possono essere di 2 tipi:
I sistemi Unix sono i sistemi multiutente per eccellenza.
Il sistema GNU/Linux eredità pienamente questa caratteristica.
Un sistema multiutente può essere condiviso, simultaneamente, da più utenti, fisici e no (anche un processo può essere utente del sistema).
In un sistema multiutente è possibile attribuire a ciascun utilizzatore particolari privilegi.
Ad esempio, in un sistema utilizzato da più persone fisiche:
Non solo. Potrebbero verificarsi situazioni in cui un documento può essere letto da tutti ma modificato solo dall’utente che ne è proprietario.
Un sistema multiutente come GNU/Linux permette di gestire queste e altre situazioni.
Le informazioni relative ai privilegi assegnati ad ogni utente sono codificate all’interno del filesystem.
Per avere immediatamente un primo riscontro, osserviamo l’esempio che segue:
andrea@ganimoide:~/cartella$ touch documento andrea@ganimoide:~/cartella$ ls -l totale 0 -rw-r--r-- 1 andrea andrea 0 2009-01-28 15:23 documento
Il comando touch
crea un file vuoto di nome documento
.
Tramite il comando ls -l
si verifica che effettivamente il file sia
stato creato e si visualizzano alcune informazioni su di esso.
In particolare, siamo interessati alla stringa -rw-r--r--
che va
sotto il nome di access mode bits.
Gli access mode bits rappresentano i permessi associati al file
documento
.
Notare le due colonne contenenti la stringa andrea andrea
.
Come vedremo nella prossima slide esse rappresentano rispettivamente il nome del proprietario del file e il gruppo al quale il file appartiene.
-rw-r--r-- 1 andrea andrea 0 2009-01-28 15:23 documento
Gli access mode bits del file documento
fanno riferimento a tre
categorie: owner, group, all.
owner rappresenta il proprietario del file. Nell’esempio, poichè a
creare il file documento
è stato l’utente andrea
è logico che egli
risulti, per il sistema, il proprietario del file.
group rappresenta il gruppo che possiede il file. Nell’esempio, il nome del gruppo corrisponde con il nome del proprietario. Infatti, ad ogni utente del sistema corrisponde un gruppo con lo stesso nome.
all rappresenta tutti gli utenti diversi da owner. Ovviamente,
questa informazione non viene riportata esplicitamente dall’output di
ls
poichè non avrebbe senso elencare tutti gli utenti diversi da
andrea
.
Ricordiamo che per ottenere la lista di tutti gli utenti accreditati sul sistema si può eseguire il comando:
andrea@ganimoide:~$ cat /etc/passwd | cut -d: -f1
Esercizio:
Visualizza sul terminale l’elenco di tutti i gruppi presenti sul sistema
accedendo al file /etc/group
-rw-r--r-- 1 andrea andrea 0 2009-01-28 15:23 documento
Gli access mode bits associati al file documento
individuano i
privilegi delle categorie owner, group e all sul file.
Questi privilegi consistono nella possibilitò data a ciascuna
categoria di leggere ( r
), modificare ( w
) ed eseguire ( x
) il
file.
Nell’esempio, il proprietario del file può leggerlo e modificarlo ma
non può eseguirlo. Gli access mode bits contengono, infatti, le
lettere r
e w
(le prime a partire da sinistra) in corrispondenza
della categoria owner. D’altra parte, il simbolo x
non è presente,
per cui andrea
non può eseguire il file.
Il gruppo a cui è associato il file ( andrea
), può solo leggerlo. Non
sono presenti, infatti, i simboli di modifica/scrittura ( w
) e di
esecuzione ( x
).
Infine, tutti gli altri utenti ( categoria all ) possono solo leggere
il file. Infatti, neanche in corrispondenza di questa categoria sono
presenti i simboli w
e x
.
Gli access mode bits sono in tutto 12. Nove di questi gestiscono la lettura, modifica ed esecuzione dei file in relazione alla categorie owner, group e all.
I rimanenti 3 bit (suid, guid e sticky) sono utili, come vedremo in seguito, in alcuni casi particolari.
Nella slide precedente abbiamo visto come si associano i privilegi ad un file. Come si ragiona nella gestione dei permessi sulle cartelle?
andrea@ganimoide:~/cartella$ mkdir sottocartella andrea@ganimoide:~/cartella$ ls -l totale 4 drwxr-xr-x 2 andrea andrea 4096 2009-01-28 15:58 sottocartella
Nell’esempio sopra, l’utente andrea
ha creato una cartella
sottocartella
all’interno di cartella
. Il comando ls
mostra i
permessi sulla cartella.
Innanzitutto, notiamo la lettera d
prefissa agli access mode
bits. Essa sta per directory e serve ad indicare che il file
sottocartella
è un file di tipo directory.
Per quanto riguarda i permessi, valgono le stesse considerazioni fatte
nella slide precedente con qualche differenza nell’interpretazione
delle lettere. La lettera x
sta ad indicare la possibilità di
attraversare la sottocartella
. Possibilità che, come si vede, è
data a tutti gli utenti.
I file contenuti in una directory per cui non si possiere il permesso di esecuzione ( x
)
non saranno accessibili (anche se abbiamo i permessi di lettura sul file in particolare),
mentre mancando il permesso di lettura ( r
) sulla cartella sarà possibile accedere
ai file solo conoscendone il nome.
Gli access mode bits contengono altre informazioni utili in alcuni
casi particolari. Queste informazioni sono contenute nei bit SUID
,
GUID
, Sticky
.
Il bit SUID
si applica esclusivamente ai file eseguibili e non alle
cartelle. Quando è associato ad un file eseguibile il cui proprietario
è root
, esso consente a qualunque utente di eseguire il file pur non
avendone i privilegi. Questo consente ad un utente senza privilegi da
amministratore di acquisire tali permessi seppur limitati
all’esecuzione di un particolare comando.
Il bit GUID
si comporta come SUID
nel caso dei file
eseguibili. Esso si applica anche alle cartelle, modificando il
criterio con il quale viene stabilita la proprietà dei file creati
all’interno di esse. In particolare, quando il bit GUID
è acceso per
una particolare cartella, tutti i file che verrano creati in essa
apparterranno automaticamente al gruppo proprietario della cartella e
non al gruppo dell’utente che crea i file.
Il bit Sticky
, quando applicato ad una cartella, limita la
possibilità di eliminare i file in essa contenuti al solo utente che
li ha creati (restricted deletion flag: utilizzato sulle directory
world-writable come /tmp ).
I comandi chown
e chgrp
consentono, rispettivamente, di modificare
proprietario ( owner ) e gruppo ( group ) di file e cartelle.
Ad esempio, il comando:
andrea@ganimoide:~$ chgrp luca documento
cambia il gruppo che possiede il file documento
Se usato insieme all’opzione -R
, chgrp
modifica ricorsivamente
il gruppo di tutti i file e cartelle contenuti nella cartella in cui
viene eseguito il comando.
La sintassi di chown
è simile a quella di chgrp
.
Per completezza, riportiamo un esempio:
andrea@ganimoide:~$ chown luca documento
Esercizio:
Quale risultato vi aspettate dall’esecuzione del precedente esempio?
Il comando chmod
consente di modificare gli access mode bits. In
questo modo è possibile impostare i permessi di lettura, scrittura ed
esecuzione dei file.
andrea@ganimoide:~/cartella$ chmod a+w documento andrea@ganimoide:~/cartella$ ls -l totale 4 -rw-rw-rw- 1 andrea andrea 0 2009-01-28 18:50 documento
L’esempio sopra mostra come utilizzare il comando chmod
per
concedere a tutti gli utenti del sistema il permesso di scrittura sul
file documento
. Poichè il permesso di lettura era già presente, in
totale il file risulta leggibile e modificabile da tutti.
Altri esempi sono:
chmod a-rw
: elimina i permessi di lettura/scrittura per tutti gli
utentichmod u+rw
: concede i permessi di lettura/scrittura solo al
proprietario del filechmod g+rw
: concede i permessi di lettura/scrittura al gruppoCome per i comandi chown
e chgrp
, anche chmod
consente la
modifica ricorsiva dei permessi tramite l’opzione -R
.
Oltre alla sintassi mnemonica che fa uso degli operatori +
/-
e
r
, w
, x
, u
, g
, a
. etc. chmod
prevede l’uso di una
sintassi compatta basata sulla numerazione ottale.
In pratica, l’argomento che viene passato a chmod
è un numero di 4
cifre che rappresenta in maniera sintetica i permessi da associare al
file.
La prima cifra rappresenta i bit SUID
, GID
, sticky
.
La seconda cifra rappresenta i bit relativi a owner.
La terza cifra rappresenta i bit relativi a group.
La quarta cifra rappresenta i bit relativi a all.
Ciascuna delle 4 cifre può assumere solo i valori da 0 a 7. Al valore 4 corrisponde il permesso di lettura; al valore 2 il permesso di scrittura; al valore 1 il permesso di esecuzione; al valore 0 alcun permesso. Questi permessi si possono combinare sommando i rispettivi valori.
Vediamo qualche esempio:
chmod 0600 documento
: rende il file leggibile/modificabile solo
da ownerchmod 0660 documento
: rende il file leggibile/modificabile da
owner e groupI file di tipo link costituiscono un aspetto molto importante dei fs Unix in generale e GNU/Linux in particolare.
Un link permette di collegare un file ad un altro file o a una cartella.
Si dice che un link punta ad un file o ad una cartella.
Per mezzo dei link è possibile:
I link si suddividono di solito in due tipologie:
Supponiamo di amministrare un server accessibile mediante SSH e basato su GNU/Linux.
SFTP è un servizio fornito dal demone sshd che permette a più utenti di prelevare e immettere file da una posizione centralizzata.
Nel caso in esame, ogni utente del sistema possiede una sua cartella
personale (es: /home/utente
), all’interno della quale egli può
trasferire i propri file ( upload ).
Il sistema può essere configurato in maniera tale che esista una cartella
condivisa da tutti gli utenti. Supponiamo che questa cartella sia
posizionata in /srv/ftp
.
Al fine di consentire ad ogni utente un veloce accesso alla cartella condivisa, l’uso dei link diventa fondamentale.
Infatti, si può pensare di realizzare un link all’interno della
cartella dell’utente che punti alla cartella /srv/ftp
.
In questo modo, ogni utente può scaricare i file condivisi mediante un path più facilmente raggiungibile e memorizzabile.
Il comando per creare link simbolici e hard link è ln
.
andrea@ganimoide:~/cartella$ ln -s /var/log/messages messages andrea@ganimoide:~/cartella$ ls -l totale 4 -rw------- 1 andrea andrea 0 2009-01-28 19:14 documento lrwxrwxrwx 1 andrea andrea 17 2009-01-29 10:51 messages -> /var/log/messages drwxr-xr-x 2 andrea andrea 4096 2009-01-28 15:58 sottocartella
Il comando ln
utilizzato con l’opzione -s
crea un link
simbolico. Il nome del link è il secondo argomento del comando. Il
file o la cartella a cui il link punta è il primo argomento del
comando.
Notare l’output del comando ls -l
. La presenza del link è
esplicitamente indicata dal simbolo ->
a sinistra del nome del link.
Nell’esempio, il comando crea un link “locale” al file di log
/var/log/messages
.
In questo modo l’utente può visualizzare il contenuto di messages
senza preoccuparsi di immettere il percorso completo del file:
andrea@ganimoide:~/cartella$ tail messages
Un hard link è un puntatore ad un file già presente su un filesystem.
L’ hard link si differenzia dal soft link in quanto continua a puntare verso lo stesso file anche quando il file originale viene rimosso.
andrea@ganimoide:~$ echo "test" > file andrea@ganimoide:~$ ls -l total 4 -rw-r--r-- 1 rpl rpl 5 Jan 30 01:12 file andrea@ganimoide:~$ ln file hardlink1 andrea@ganimoide:~$ ln file hardlink2 andrea@ganimoide:~$ ls -l total 12 -rw-r--r-- 3 rpl rpl 5 Jan 30 01:12 file -rw-r--r-- 3 rpl rpl 5 Jan 30 01:12 hardlink1 -rw-r--r-- 3 rpl rpl 5 Jan 30 01:12 hardlink2 andrea@ganimoide:~$ stat hardlink1 File: `hardlink1' Size: 5 Blocks: 8 IO Block: 4096 regular file Device: 809h/2057d Inode: 313967 Links: 3 Access: (0644/-rw-r--r--) Uid: ( 1002/ rpl) Gid: ( 1003/ rpl) Access: 2009-01-30 01:12:35.000000000 +0100 Modify: 2009-01-30 01:12:35.000000000 +0100 Change: 2009-01-30 01:12:46.000000000 +0100
Bisogna notare come la seconda colonna dell’output di ls -l ci indichi il numero di hard link che puntano verso il file, il comando stat esplicità tale informazione.
Lo spazio occupato da tale file non viene considerato libero fino a quando l’ultimo hard link non è stato rimosso.
La stragrande maggioranza delle implementazioni dello standard Posix non consentono la creazione di hard link di directory, ne di file presenti su filesystem diversi da quelli su cui si intende creare un hard link.
In questi casi si possono al contrario utilizzare i soft link (o link simbolici).
I comandi come cp
a tar
possono essere istruiti, tramite
specifiche opzioni, a seguire o meno i link.
Nell’ambito delle operazioni sui file, Seguire un link significa sostituirla con i file a cui esso punta.
andrea@ganimoide:~$ ls -l dir1 total 13 lrwxrwxrwx 1 andrea andrea 19 Jan 4 02:43 file1 -> /file1 -rw-r--r-- 1 andrea andrea 10240 Dec 12 17:12 file2 andrea@ganimoide:~$ cp -r dir1 dir2 andrea@ganimoide:~$ ls -l dir2 total 3117 -rw-r--r-- 1 andrea andrea 3164160 Jan 4 02:43 file1 -rw-r--r-- 1 andrea andrea 10240 Jan 4 02:43 file2 andrea@ganimoide:~$ cp -rd dir1 dir3 andrea@ganimoide:~$ ls -l dir3 total 13 lrwxrwxrwx 1 andrea andrea 19 Jan 4 02:43 file1 -> /file1 -rw-r--r-- 1 andrea andrea 10240 Jan 4 02:43 file2
Nell’esempio sono riportati due utilizzi di cp
.
Nel primo caso viene effettuata una copia ricorsiva del contenuto
della cartella dir1
su dir2
. Come si vede, il comando segue il
link copiando in dir2
il file a cui esso punta.
Nel secondo caso, invece, viene usata l’opzione -d
. Questa opzione
segnala a cp
di non seguire il link. Infatti, nella cartella di
destinazione viene copiato il link e non il file a cui esso punta.
Come abbiamo visto, il comando ls -l
ci consente di avere un
riscontro visivo sui file puntati da un link.
andrea@ganimoide:~/cartella$ ls -l | grep ^l lrwxrwxrwx 1 andrea andrea 9 2009-01-29 17:59 link_a_documento -> documento
L’operazione inversa, cioè scoprire quali link puntano ad un
determinato file, si esegue utilizzando il comando find
:
andrea@ganimoide:~/cartella$ ls -l totale 4 lrwxrwxrwx 1 andrea andrea 9 2009-01-29 18:04 altro_link_a_documento -> documento -rw------- 1 andrea andrea 0 2009-01-28 19:14 documento lrwxrwxrwx 1 andrea andrea 9 2009-01-29 17:59 link_a_documento -> documento drwxr-xr-x 2 andrea andrea 4096 2009-01-29 17:45 sottocartella andrea@ganimoide:~/cartella$ find -lname documento ./altro_link_a_documento ./link_a_documento
Esercizio:
Spiegate il funzionamento del comando dato nel primo esempio (ls -l |
grep ^l
).
Esiste uno standard che definisce la struttura del filesystem di un sistema GNU/Linux. Questo standard prende il nome di Filesystem Hierarchy Standard (FHS).
Lo standard prevede un’organizzazione delle cartelle di questo tipo:
/bin
: contiene i file eseguibili dei comandi tipo cp
, ln
,
ls
, mkdir
, etc./dev
: contiene i device files necessari per accedere ai supporti
di memorizzazione, alle partizioni, etc./etc
: contiene i file di configurazione del sistema/lib
: contiene le librerie di sistema e i moduli del kernel/mnt
e /media
: rappresentano il punto di innesto delle
periferiche di memorizzazione/root
: è la cartella personale dell’utente root
/sbin
: contiene alcuni comandi di sistema come fdisk
, fsck
,
mkfs
/boot
: contiene i file relativi al boot loader/home
: contiene le cartelle personali degli utenti del sistema/opt
: contiene i software non mantenuti dal distributore del sistema/tmp
: contiene i file temporanei/usr
: contiene i file condivisi, la documentazione, i file
relativi ai pacchetti installati sul sistema/var
: contiene i file di log, le mail, e i file di spoolNell’esempio sotto viene riportata la struttura delle cartelle montate
su /
di un sistema Ubuntu GNU/Linux:
andrea@ganimoide:~$ ls / bin cdrom etc initrd.img lib media opt root srv tmp var vmlinuz.old boot dev home initrd.img.old lost+found mnt proc sbin sys usr vmlinuz
Come più volte abbiamo visto nel corso delle lezioni precedenti,
find
è il comando che di solito si utilizza per ricercare file
all’interno del fs.
Un altro comando utile in questo senso è locate
:
andrea@ganimoide:~$ locate documento /home/andrea/cartella/documento
Come si vede, l’utilizzo di locate
è molto semplice: si fa seguire
al comando la parola chiave da ricercare.
Il comando locate
ricerca le informazioni all’interno di un database
che viene aggiornato periodicamente per mezzo del comando updatedb
.
Il vantaggio di usare locate
al posto di find
consiste nella
maggiore velocità del primo.
Il comando, infatti, non effettua una ricerca in tempo reale sul filesystem bensì all’interno del database.
Ovviamente, lo svantaggio è che il comando locate
non registra
immediatamente le modifiche al filesystem.