[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]