[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
Negli ambienti Unix, lo spostamento e il cambiamento del nome di file e directory sono la stessa cosa. Un'altra particolarità dei sistemi operativi Unix è la possibilità di gestire i collegamenti a file e directory.
Lo spostamento di file e directory avviene per mezzo di mv. Per esercitarsi con questo comando si preparano alcuni file e alcune directory.
$ touch alfa[Invio]
$ touch beta[Invio]
$ mkdir gamma[Invio]
Come sempre è bene controllare.
$ ls -l[Invio]
... -rw-rw-r-- 1 tizio tizio 0 Dec 25 12:46 alfa -rw-rw-r-- 1 tizio tizio 0 Dec 25 12:46 beta drwxrwxr-x 2 tizio tizio 1024 Dec 25 12:46 gamma ... |
Si procede rinominando il file alfa in modo che diventi omega.
$ mv alfa omega[Invio]
$ ls -l[Invio]
... -rw-rw-r-- 1 tizio tizio 0 Dec 25 12:46 omega ... |
Volendo spostare una serie di file e directory in gruppo, è necessario che la destinazione sia una directory. Con il comando seguente si spostano i due file creati poco prima nella directory gamma/.
$ mv omega beta gamma[Invio]
$ ls -l gamma[Invio]
-rw-rw-r-- 1 tizio tizio 0 Dec 25 12:46 beta -rw-rw-r-- 1 tizio tizio 0 Dec 25 12:46 omega |
Generalmente, lo spostamento (o il cambiamento di nome) non fa differenza tra file normali e directory.
$ mv gamma /tmp[Invio]
Il comando precedente sposta la directory gamma/ in /tmp/.
È importante tenere presente che il comando mv non può cambiare una serie di nomi in modo sistematico. Per esempio, non si può cambiare *.mio in *.tuo.
La creazione di un collegamento è un'operazione simile alla copia, con la differenza che invece di creare un duplicato di file e directory, si genera un riferimento agli originali. Ne esistono due tipi: collegamenti simbolici e collegamenti fisici (questi ultimi conosciuti di solito come hard link). In questa esercitazione vengono mostrati solo collegamenti simbolici.
$ pwd[Invio]
/home/tizio |
Il comando utilizzato per creare questi collegamenti è ln; dal momento che si intendono mostrare solo quelli simbolici, viene usata sempre l'opzione -s.
Per esercitarsi con questo comando si preparano alcuni file e directory.
$ touch uno[Invio]
$ touch due[Invio]
$ mkdir tre[Invio]
Come sempre è bene controllare.
$ ls -l[Invio]
... -rw-rw-r-- 1 tizio tizio 0 Dec 25 12:46 due drwxrwxr-x 2 tizio tizio 1024 Dec 25 12:46 tre -rw-rw-r-- 1 tizio tizio 0 Dec 25 12:46 uno |
Come già si accenna all'inizio, la creazione di un collegamento è un'operazione simile alla copia.
$ ln -s uno uno.bis[Invio]
Con il comando mostrato sopra, si ottiene un collegamento simbolico, denominato uno.bis, al file uno.
$ ls -l[Invio]
... lrwxrwxrwx 1 tizio tizio 3 Dec 25 12:47 uno.bis -> uno |
Da questo momento si può fare riferimento al file uno utilizzando il nome uno.bis.
La creazione di un collegamento a una directory può avvenire nello stesso modo visto per i file (a patto che si tratti di collegamenti simbolici).
$ ln -s /tmp miatemp[Invio]
Se il comando appena visto ha successo si può raggiungere la directory /tmp/ anche attraverso il riferimento miatemp.
La creazione di un gruppo di collegamenti con un solo comando, può avvenire solo quando la destinazione (l'ultimo nome sulla riga di comando) è una directory. In questo modo si ottiene la creazione di una serie di collegamenti al suo interno.
$ ln -s /home/tizio/uno* /home/tizio/due tre[Invio]
In questo caso, si generano una serie di collegamenti per tutti i file i cui nomi iniziano per uno e anche per il file due nella directory tre/.
$ ls -l tre[Invio]
lrwxrwxrwx 1 tizio tizio 15 Dec 25 15:21 due -> /home/tizio/due lrwxrwxrwx 1 tizio tizio 15 Dec 25 15:21 uno -> /home/tizio/uno lrwxrwxrwx 1 tizio tizio 19 Dec 25 15:21 uno.bis -> /home/tizio/uno.bis |
Si può osservare che è stato creato anche un collegamento che punta a un altro collegamento.
Se si cancellano questi collegamenti simbolici nella directory tre/, si può provare a vedere cosa può accadere se non si indica un percorso assoluto:
$ rm tre/*[Invio]
Intuitivamente si può ritenere che possa essere corretta la creazione dei collegamenti simbolici in questo modo:
$ ln -s uno* due tre[Invio]
Se però si va a controllare il contenuto della directory tre/, si può notare una cosa strana: i collegamenti simbolici puntano a loro stessi.
$ ls -l tre[Invio]
lrwxrwxrwx 1 tizio tizio 15 Dec 25 15:25 due -> due lrwxrwxrwx 1 tizio tizio 15 Dec 25 15:25 uno -> uno lrwxrwxrwx 1 tizio tizio 19 Dec 25 15:25 uno.bis -> uno.bis |
Inizialmente è difficile capire questa cosa. Conviene provare in modo ancora diverso:
$ rm tre/*[Invio]
$ ln -s ./uno* ./due tre[Invio]
$ ls -l tre[Invio]
lrwxrwxrwx 1 tizio tizio 15 Dec 25 15:30 due -> ./due lrwxrwxrwx 1 tizio tizio 15 Dec 25 15:30 uno -> ./uno lrwxrwxrwx 1 tizio tizio 19 Dec 25 15:30 uno.bis -> ./uno.bis |
Se non è ancora chiaro, si provi questo:
$ rm tre/*[Invio]
$ ln -s nero/marrone rosso/arancio giallo/verde tre[Invio]
$ ls -l tre[Invio]
lrwxrwxrwx 1 tizio tizio 15 Dec 25 15:35 marrone -> nero/marrone lrwxrwxrwx 1 tizio tizio 15 Dec 25 15:35 arancio -> rosso/arancio lrwxrwxrwx 1 tizio tizio 19 Dec 25 15:35 giallo -> giallo/verde |
Si intende che i file nero/marrone, rosso/arancio e giallo/verde non esistono; tuttavia, i collegamenti simbolici vengono creati ugualmente.
Lo spostamento di file e directory avviene in modo simile alla copia, solo che l'origine viene rimossa. Lo spostamento di directory attraverso unità di memorizzazione differenti non è possibile. Lo spostamento erroneo può essere dannoso: se non si fa attenzione si può sovrascrivere qualcosa che ha già lo stesso nome dei file o delle directory di destinazione. Questo è lo stesso tipo di problema che si rischia di incontrare con la copia.
I collegamenti a file e directory permettono di definire percorsi alternativi agli stessi. I collegamenti simbolici vengono creati analizzando i nomi senza verificare che appartengano effettivamente a file o directory reali.
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome spostamenti_e_collegamenti_di_file_e_directory.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]