implementazione del file system

22
1.1 Implementazione del file system Una possibile visualizzazione del file system di un sistema Unix.

Upload: kamali

Post on 23-Jan-2016

57 views

Category:

Documents


0 download

DESCRIPTION

Implementazione del file system. Una possibile visualizzazione del file system di un sistema Unix. Implementazione dei files. Allocazione di un file come lista concatenata di blocchi di memoria. Non è il metodo usato in un sistema UNIX. Index Node (inode). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Implementazione del file system

1.1

Implementazione del file system

Una possibile visualizzazione del file system di un sistema Unix.

Page 2: Implementazione del file system

1.2

Implementazione dei files

Allocazione di un file come lista concatenata di blocchi di memoria. Non è il metodo usato in un sistema UNIX

Page 3: Implementazione del file system

1.3

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 file1File: `file1'Size: 123 Blocks: 8 IO Block: 4096 Regular FileDevice: 306h/774d Inode: 32787 Links: 2Access:(0644/-rw-r--r--)Uid:(501/lferrari)Gid:(501/

docenti)Access: 2003-03-31 12:58:37.000000000 +0200Modify: 2003-03-31 12:58:25.000000000 +0200Change: 2003-04-04 19:05:14.000000000 +0200

Page 4: Implementazione del file system

1.4

Implementazione dei files

Un esempio di inode: contiene soltanto i primi n indirizzi dei blocchi del file.

Page 5: Implementazione del file system

1.5

Un inode UNIX

Page 6: Implementazione del file system

1.6

Implementazione delle directories È in realtà l’inode di un file che viene memorizzato in una

directory accanto al nome del file. Quindi, essenzialmente, le directories sono semplici tabelle che associano i nomi dei files con gli inode. Ogni coppia costituita da file name e inode in una directory viene chiamata un link.

games

mail

news

work

inode

inode

inode

inode

Page 7: Implementazione del file system

1.7

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 file12004 -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

Page 8: Implementazione del file system

1.8

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 7 14:22 fileln$ cd$ rm fileln$ ls -l ~/didattica/corsi/-rw-rw-r-- 1 lferrari lferrari 8 apr 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.

Page 9: Implementazione del file system

1.9

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.hlrwxrwxrwx 1 lferrari lferrari 20 apr 7 14:46stdio.h -> /usr/include/stdio.h

$ ln -s ~/didattica/corsi/fileln file$ ls -l filelrwxrwxrwx 1 lferrari lferrari 37 apr 7 14:50file -> /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

Page 10: Implementazione del file system

1.10

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.

Page 11: Implementazione del file system

1.11

Attributi di un file Le informazioni riguardanti un file possono essere

ottenute utilizzando il comando ls –l.$ ls -ltotale 28drwxrwxr-x 4 lferrari lferrari 4096 mar 27 16:52 Desktop/drwxrwxr-x 2 lferrari lferrari 4096 mar 21 17:35 didattica/drwxr-xr-x 2 lferrari lferrari 4096 mar 14 19:21 Documents/-rwx------ 1 lferrari lferrari 1999 mar 31 13:25 file*-rw-r--r-- 1 lferrari lferrari 123 mar 31 12:58 file1drwxrwxr-x 2 lferrari lferrari 4096 mar 21 17:35 ricerca/drwx------ 2 lferrari lferrari 4096 mar 14 18:50 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.

Page 12: Implementazione del file system

1.12

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

Page 13: Implementazione del file system

1.13

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

Page 14: Implementazione del file system

1.14

Permessi L’output del comando ls -l mostra i permessi per un

file/directory$ ls -ldrwxrwxr-x 4 lferrari lferrari 4096 mar 27 16:52 Desktop/drwxr-xr-x 2 lferrari lferrari 4096 mar 14 19:21 Documents/-rwx------ 1 lferrari lferrari 1999 mar 31 13:25 file*-rw-r--r-- 1 lferrari lferrari 123 mar 31 12:58 file1drwxrwxr-x 2 lferrari lferrari 4096 mar 21 17:35 ricerca/drwx------ 2 lferrari lferrari 4096 mar 14 18:50 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-- ( file1)

Page 15: Implementazione del file system

1.15

Permessi per le directories I permessi per le directories sono diversi dai

permessi per i files. Nelle righe seguenti:

drwxrwxr-x 4 lferrari lferrari 4096 mar 27 16:52 Desktop/drwxr-xr-x 2 lferrari lferrari 4096 mar 14 19:21 Documents/drwx------ 2 lferrari lferrari 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.

Page 16: Implementazione del file system

1.16

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 rw- r-- --- chmod 754 file1 rwx r-x r-- chmod 664 file1 rw- rw- r--

Page 17: Implementazione del file system

1.17

Cambiare le impostazioni dei permessi

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.

Chi Azione Permesso

u = utente pr. + = aggiung. r = lettura

g = gruppo - = cancellare w = scrittura

o = altri = = assegn. x = esecuz.

a = tutti

Page 18: Implementazione del file system

1.18

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 “lferrari”

$ newgrp informatica $ date > ~/test2 … crea “test2” da una shell del gruppo

“informatica”

^D$ ls –lg test*

-rw-r--r-- 1 lferrari 30 mar 27 16:52 test1-rw-r--r-- 1 informatica 30 mar 27 16:52 test2

Page 19: Implementazione del file system

1.19

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/ 1023/ 1089/ 1111/ … 1839/ … 2289/ …$ psPID TTY TIME CMD

1839 pst/2 00.00.00 bash 2289 pst/2 00.00.00 ps

Una directory di proc raggruppa le informazioni appropriate riguardanti quel processo (command line, environ strings, status, …). $ cd 1839 ; ls

cmdline cwd environ exe fd maps mem mounts stat statm status

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.

Page 20: Implementazione del file system

1.20

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

Page 21: Implementazione del file system

1.21

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

Page 22: Implementazione del file system

1.22

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 -cvf logfile.tar logs.* tar -tvf logfile.tar tar -xvf logfile.tar tar -cvzf logfile.tar.gz logs.*