31.05.2013 Views

Comandi Bash shell - SisInf Lab

Comandi Bash shell - SisInf Lab

Comandi Bash shell - SisInf Lab

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CORSO DI FONDAMENTI DEI SISTEMI OPERATIVI<br />

A.A. 2012-2013<br />

(Prof. G. Piscitelli)<br />

Ad ogni file è associato un singolo ed unico i-node che memorizza la maggior parte delle informazioni restituite<br />

da stat (numero di link, dimensione, proprietario, allocazione sul disco, etc.) e i puntatori ai data block, in cui<br />

viene memorizzato il contenuto di un file. All’aumento delle dimensioni del file può corrispondere un aumento<br />

dei data block allocati per il file.<br />

Il data block di una directory viene detto directory block e contiene, per ogni file contenuto nella directory, una<br />

directory entry (#inode, filename) contenente il nome del file e il numero di i-node ad esso associato. La<br />

modifica del nome di un file viene effettuata sull'informazione memorizzata nel directory block.<br />

Un riferimento ad un file è detto link. Ogni file può avere un numero qualsiasi di link.<br />

UNIX ha due tipi di link: hard link e soft link. Entrambi possono essere creati con il comando ln.<br />

Hard link<br />

Un hard link è un puntatore all'i-node di un file. Un hard link è un elemento all’interno di una directory il cui<br />

numero di i-node corrisponde a quello di un altro file. In pratica, è possibile creare “un file” all’interno di una<br />

directory creando un puntatore ad un file già esistente. Un hard link eredita tutte le informazioni associate all'inode<br />

del file originale e non c'è più modo di distinguere tra l'hard link e il file originale.<br />

Le directory hanno un numero di link almeno pari a 2: un puntatore è memorizzato nella voce corrispondente<br />

contenuta dalla directory “padre”; un puntatore è contenuto nella stessa directory verso “.”.<br />

La maggior parte di implementazioni UNIX moderne non consente di creare ulteriori hard link a directory.<br />

Questo limite viene imposto per evitare ricorsioni infinite nel tentativo di attraversare un albero che parte da un<br />

hard link che punta alla propria directory padre. Inoltre, non è possibile effettuare un hard link con un file<br />

memorizzato su una partizione diversa da quella della directory in cui lo si vuole creare.<br />

Ogni volta che si crea un hard link ad un file, il link count per il file si incrementa di 1.<br />

Quando il comando rm riceve come argomento un hard link, il sistema decrementa il link count (nell’i-node del<br />

file) di 1. Se il link count non è 0, il sistema rimuove solo la directory entry del file cancellato. Il contenuto del<br />

file e altre directory entry per quel file (hard link) rimangono inalterati. Se il link count è 0, il sistema rimuove la<br />

directory entry per quel file, libera l’-inode del file e dealloca i data block che contenevano il file.<br />

SINTASSI: ln [opzioni] fileEsistente1 [fileEsistente2 ... fileEsistenteN] nuovoFile<br />

fileEsistenteX non può essere una directory.<br />

nuovoFile può essere una directory. In tal caso viene creato un hard link all'interno di nuovoFile a tutti i<br />

fileEsistenti indicati nel comando e i link hanno lo stesso nome dei file originari.<br />

Opzioni:<br />

-n Non crea il link se nuovoFile esistente già.<br />

Soft link o symbolic link<br />

Un soft link (o symbolic link) corrisponde ad un file che contiene, all’interno dell’unico data block ad esso<br />

associato, il percorso assoluto di un altro file. I soft link superano i limiti degli hard link in quanto consentono di:<br />

- creare collegamenti tra entità su filesystem diversi;<br />

- creare link a directory.<br />

Un soft link può essere utilizzato per creare puntatori a file o directory lasciando sempre ben chiara la distinzione<br />

tra il file originale e il link.<br />

Quando il comando rm riceve come argomento un soft link, cancella quest'ultimo e non il file a cui esso si<br />

riferisce.<br />

SINTASSI: $ ln -s pathnameAssolutofileEsistente nomeLink<br />

Esercitazioni comandi <strong>shell</strong> <strong>Bash</strong> (Ing. S. Giannini) Pagina 14

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!