Implementazione del file system
Una possibile visualizzazione del file system di un
sistema Unix.
1.1
Implementazione dei files
Allocazione di un file come lista concatenata di blocchi di memoria.
Non è il metodo usato in un sistema UNIX
1.2
Index Node (inode)
 A ciascun file di qualunque tipo, memorizzato in una
partizione del disco, viene associato un numero (detto il suo
inumber) che è di fatto l’indice di un elemento di un array
memorizzato sul disco.
 Ciascun elemento dell’array è un inode che memorizza le
informazioni di tipo amministrativo riguardanti un singolo file
(come ad esempio, nel momento in cui il file viene creato,
chi è l’autore e dove sono memorizzati i blocchi di dati di
questo file sulla partizione del disco). Queste informazioni
possono essere visualizzate usando il comando stat:
 $ stat file1
File: `file1'
Size: 123 Blocks: 8 IO Block: 4096
Regular File
Device: 306h/774d
Inode: 32787
Links: 2
Access:(0644/-rw-r--r--)Uid:(501/lferrari)Gid:(501/docenti)
Access: 2003-03-31 12:58:37.000000000 +0200
Modify: 2003-03-31 12:58:25.000000000 +0200
Change: 2003-04-04 19:05:14.000000000 +0200
1.3
Implementazione dei files
Un esempio di inode: contiene soltanto i primi n indirizzi dei
blocchi del file.
1.4
Un inode UNIX
1.5
Implementazione delle directories
 È in realtà l’inode di un file che viene memorizzato in una
directory accanto al nome
essenzialmente, le directories sono
associano i nomi dei files con gli
costituita da file name e inode in
chiamata un link.
del file. Quindi,
semplici tabelle che
inode. Ogni coppia
una directory viene
games
mail
inode
news
work
inode
inode
inode
1.6
Collegamenti ai files
 Un link è un puntatore a un altro file. Si ricordi che una directory
non è altro che una lista di nomi e inode di files.
 Un elemento di una directory può essere un hard link, nel quale
l’inode punta direttamente a un altro file. Quando viene creato un
hard link, questo acquista lo stesso inumber del file linkato.
 L’utility ln crea un link tra files.
 $
cat > file
Hello ! ^D
$ ls -l file
-rw-rw-r-- 1 lferrari lferrari 8 apr 7 14:22 file
$ ln file fileln
$ ls -li file*
12004 -rw-rw-r-- 2 lferrari lferrari 8 apr 7 14:22 file
12004 -rw-rw-r-- 2 lferrari lferrari
8 apr
7 14:22
fileln
$ rm file
$ ls -l fileln
-rw-rw-r-- 1 lferrari lferrari 8 apr 7 14:22 fileln
1.7
Collegamenti ai files
 Se l’ultimo argomento è il nome di una directory,
allora l’hard link viene creato nella directory a tutti i
filenames specificati.
$ mkdir ~/didattica/corsi
$ ln file* ~/didattica/corsi
$ ls -l
-rw-rw-r-- 2 lferrari lferrari 8 apr
$ cd
$ rm fileln
$ ls -l ~/didattica/corsi/
-rw-rw-r-- 1 lferrari lferrari 8 apr
7 14:22 fileln
7 14:22 fileln
 Non si può creare un hard link da un file su un file
system ad un file su un altro (diverso) file system.
Per aggirare questo problema, si può invece creare
un link simbolico.
1.8
Collegamenti ai files
 Di default, ln crea hard links; usando l’opzione “-s”, crea
invece links simbolici (o “soft”).
 $ ln -s /usr/include/stdio.h stdio.h
$ ls -l stdio.h
lrwxrwxrwx 1 lferrari lferrari 20 apr
stdio.h -> /usr/include/stdio.h
7 14:46
 $ ln -s ~/didattica/corsi/fileln file
$ ls -l file
lrwxrwxrwx 1 lferrari lferrari 37 apr 7 14:50
file -> /home/lferrari/didattica/corsi/fileln
$ rm ~/didattica/corsi/fileln
$ ls –l file
lrwxrwxrwx
1 lferrari lferrari 37 apr 7 14:50
file -> /home/lferrari/didattica/corsi/fileln
$ cat file
cat: file: No such file or directory
1.9
Attributi di un file
 I timestamp: a ciascun file sono associate tre date:
 La data di creazione
 La data dell’ultima modifica
 La data dell’ultimo accesso
 Il proprietario: ogni file è di proprietà di un utente del
sistema.
 Il gruppo: a ogni file è anche associato un gruppo di utenti.
Il gruppo di utenti più comune si chiama “users”, ed è
spesso condiviso da tutti gli utenti del sistema.
 I permessi: a ogni file sono associati dei permessi, che
stabiliscono chi può accedere a quel file, o cambiarlo, o, nel
caso di programmi, eseguirlo. Ciascuno di questi permessi
può essere assegnato separatamente al proprietario, al
gruppo e a tutti gli altri utenti.
1.10
Attributi di un file
 Le informazioni riguardanti un file possono essere
ottenute utilizzando il comando ls –l.
$ ls -l
totale 28
drwxrwxr-x
drwxrwxr-x
drwxr-xr-x
-rwx------rw-r--r-drwxrwxr-x
drwx------
4
2
2
1
1
2
2
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
4096
4096
4096
1999
123
4096
4096
mar
mar
mar
mar
mar
mar
mar
27
21
14
31
31
21
14
16:52
17:35
19:21
13:25
12:58
17:35
18:50
Desktop/
didattica/
Documents/
file*
file1
ricerca/
tmp/
 In aggiunta al nome di ciascun file, mostra il tipo di file, i
permessi, il numero di hard links, il nome del proprietario, il
nome del gruppo, la dimensione in bytes, e un timestamp,
di solito la data dell’ultima modifica.
1.11
Permessi
 Tutto in UNIX è gestito tramite files, perfino l’accesso alle
periferiche (tramite i files in '/dev') quali stampanti, modem,
schede audio ecc. Se non si hanno i permessi relativi a un
file che rappresenta una periferica, non si può utilizzare
quella periferica.
 Il primo concetto riguardante i permessi è quello di
possesso. Il comando chown imposta il proprietario di files
e directories (che, di default, è colui che ha creato il file o la
directories). Di solito, quando si possiede un file, si può fare
ciò che si desidera con quel file.
 Spesso più di un account necessita di accedere a un file o
a una periferica. Cambiare il possesso di tale file ogni volta
che qualcun’altro ha bisogno di accedervi sarebbe
perlomeno molto spiacevole. Questo è il motivo per cui il
possesso è fornito non solo per singoli accounts ma anche
per gruppi. I gruppi sono definiti in /etc/group, un elemento
di questo file si presenta così:
 group_name:x:group_ID:group_member
1.12
Permessi
 Per vedere la lista dei gruppi dei quali il proprio account
corrente è membro, si usa il comando
 $ groups
 Quindi, se si è membri di un gruppo e quel gruppo possiede
dei permessi riguardanti un file, si può lavorare su quel file,
anche se non se ne è proprietari.
 In media un sistema UNIX ha qualcosa come 60.000 files,
e spesso di più. La maggioranza di essi deve poter essere
accessibile a tutti gli utenti del sistema, in un modo o
nell’altro. Un modo per ottenere ciò potrebbe essere quello
di creare un gruppo 'catch-all' che contenga tutti gli
accounts del sistema e assegni tutti i file da condividere a
questo gruppo.
 Pertanto, possiamo dividere i permessi sui files in 3
categorie:
 Permessi del proprietario
 Permessi di gruppo
 Permessi per tutti gli altri
1.13
Permessi
 L’output del comando ls -l mostra i permessi per un
file/directory
$ ls -l
drwxrwxr-x
drwxr-xr-x
-rwx------rw-r--r-drwxrwxr-x
drwx------
4
2
1
1
2
2
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
lferrari
4096
4096
1999
123
4096
4096
mar
mar
mar
mar
mar
mar
27
14
31
31
21
14
16:52
19:21
13:25
12:58
17:35
18:50
Desktop/
Documents/
file*
file1
ricerca/
tmp/
dove l’etichetta 'r' sta per lettura, 'w' per scrittura e 'x' per
esecuzione.
 Il primo campo ha tre opzioni, d, l o -, ove d indica una
directory, l un link simbolico, e - un file. Gli altri nove campi
indicano i permessi per il proprietario, i permessi di gruppo
e i permessi per tutti gli altri.
 Owner | Group | Others = rw- | r-- | r-1.14
( file1)
Permessi per le directories
 I permessi per le directories sono diversi dai
permessi per i files. Nelle righe seguenti:
drwxrwxr-x 4 lferrari lferrari
drwxr-xr-x 2 lferrari lferrari
drwx------ 2 lferrari lferrari
4096 mar 27 16:52 Desktop/
4096 mar 14 19:21 Documents/
4096 mar 14 18:50 tmp/
 r indica che il contenuto della directory può essere
elencato
 w indica che il contenuto della directory può essere
cambiato (copiare, spostare, creare nuovi files)
 x indica che gli utenti possono eseguire il comando "cd"
relativamente a quella directory, nonchè leggere,
scrivere, eseguire programmi e fare ricerche nella
directory.
1.15
Cambiare le impostazioni dei permessi
 Il comando chmod permette di cambiare le impostazioni dei
permessi di un file/directory. Occorre specificare 3 cifre col
comando chmod. Tali cifre stabiliscono su quali permessi si
andrà ad agire. La prima cifra determina i permessi per il
proprietario, la seconda cifra determina i permessi per il
gruppo, e la terza per gli altri.
 Per cambiare i permessi relativi al file “file1” digitare:
 chmod XYZ file1
ove XYZ rappresenta una terna di cifre, ad es. 666
 Ciascuna cifra è la somma di 4 per il permesso di lettura, 2
per il permesso di scrittura e 1 per il permesso di
esecuzione.
user group others
 chmod 640 file1
 chmod 754 file1
 chmod 664 file1
rwrwx
rw1.16
r-r-x
rw-
--r-r--
Cambiare le impostazioni dei permessi
Chi
Azione
Permesso
u = utente pr. + = aggiung. r = lettura
g = gruppo
- = cancellare w = scrittura
o = altri
= = assegn. x = esecuz.
a = tutti
 chmod a+rw hello.c
 chmod o-w hello.c
 chmod og+rx prog*
 chmod g=rw rep*
 chmod +w *
 L’opzione -R cambia uno dopo l’altro i permessi di una
directory e dei suoi contenuti.
1.17
Cambiare i gruppi
 Se si è membri di parecchi gruppi e si crea un file, qual è il
gruppo di appartenenza del file? Sebbene si possa essere
membri di più gruppi, soltanto uno di essi è il proprio
gruppo effettivo in ogni ben preciso istante. Quando un
processo crea un file, tale file viene immediatamente
assegnato al proprio gruppo effettivo.
 L’amministratore del sistema sceglie quale dei gruppi di
ciascuno verrà usato come gruppo effettivo della propria
shell di login. In ogni caso, ognuno può creare una shell
con un gruppo effettivo diverso usando l’utility newgrp.
$
date
>
~/test1
…
crea
“test1”
da
una
shell
del
gruppo
$ newgrp informatica
$ date > ~/test2 …
crea
“test2”
da
una
shell
del
gruppo
“lferrari”
“informatica”
^D
$ ls –lg test*
-rw-r--r-- 1 lferrari
-rw-r--r-- 1 informatica
30 mar 27 16:52 test1
30 mar 27 16:52 test2
1.18
Il file system proc di Linux
 Il file system proc non memorizza dati, piuttosto esso crea una
directory per ogni processo. Il nome della directory è il PID del
processo.
 $ cd /proc ; ls
1/
$ ps
PID
1839
2289
1023/
1089/
TTY
pst/2
pst/2
1111/
… 1839/ … 2289/ …
TIME
00.00.00
00.00.00
CMD
bash
ps
 Una directory di proc raggruppa le informazioni appropriate riguardanti
quel processo (command line, environ strings, status, …).
 $ cd 1839 ; ls
cmdline
status
cwd
environ
exe
fd
maps
mem
mounts stat
statm
 Pertanto, le directory di proc contengono molte informazioni sulla CPU,
sulle partizioni del disco, sulle periferiche, ... In molti casi, i file di proc
sono utilizzati nei programmi.
 pstree: mostra le dipendenze fra tutti i processi attivi.
 kill: termina un processo.
1.19
Mounting
 Il sistema operativo attacca un file system fisico al proprio
file system virtuale tramite il comando mount. Questa
operazione è detta mounting e la sintassi del comando
relativo è:
 $ mount –t
type device mount-point
 Esempi: $ mount –t ext2 /dev/hda6 /
La partizione di tipo ext2 viene chiamata hda6. (hd per hard drive, a
per il primo di questi, e 6 per la sesta partizione). La documentazione
delle periferiche è in /usr/src/linux/Documentation/devices.txt.
 $ mount –t vfat /dev/hda1 /mnt/windows
 $ mount –t msdos /dev/fd0 /mnt/floppy
 $ mount –t iso9660 /dev/hdc /mnt/cdrom
 Il comando mount è usato dal superutente (root). Il sistema
operativo esegue mount –a durante il boot. Questo
comando monta i file systems elencati in /etc/fstab.
 Si può smontare un file system usando umount.
 umount /mnt/floppy
1.20
Comprimere i files
 I tipi di file compresso in Linux sono:
 file.Z – compressi con compress:
$ compress file1
$ uncompress file1.Z
 file.z, file.gz – compressi col programma zip di GNU: zip, gzip.
$ gzip huge_file
$ gunzip huge_file.gz
 file.bz2 – compressi con bzip2
$ bzip2 huge_file
$ bunzip2 huge_file.bz2
 Si può visionare un file in un archivio compresso senza estrarlo,
tramite zcat o bzcat.
 $ zcat huge_file.gz
 $ bzcat huge_file.bz2 1.21
Archiviare i files
 Si può usare tar per immagazzinare i files in un archivio, per estrarli
da un archivio e per fare altre manipolazioni. La sintassi di tar è:
 $ tar options tarfilename filelists
 Alcune opzioni sono:
 -c creare un archivio
 -x estrarre da un archivio
 -t elencare i contenuti di un archivio
 -v visualizza informazioni aggiuntive
 -u aggiunge i files nuovi o modificati a un archivio esistente
 -f usa “tarfilename” come filename dell’archivio (il nome di “tarfilename”
è /dev/rmt0 di default)
 Esempio:




tar
tar
tar
tar
-cvf logfile.tar logs.*
-tvf logfile.tar
-xvf logfile.tar
-cvzf logfile.tar.gz logs.*
1.22
Scarica

La gestione dei files - Dipartimento di Ingegneria dell`Informazione