Ieri stavo facendo una porcata, e sono incappato in un curioso problema
con TAR e symlink.
In pratica, mi sono accorto che il comando:
"tar cf" seguito dal comando "tar xpf" (faccio e poi estraggo
l'archivio) ha uno strano comportamento con i symlink.
A naso, mi viene da pensare (ma dovro` fare delle prove, nel caso) che
"tar cf" quando trova un symlink salvi il link e non il file linkato (il
man dice che "-h" salva il file linkato).
Quindi, quando estraggo con "tar xpf" il symlink di cui sopra, dovrei
estrarre "il link" cioe` un file che dentro contiene il nome del file a
cui punta, e NON IL SUO CONTENUTO. In effetti, quello che succede quando
il symlink esiste gia` sul disco di destinazione e` piu` strano.
Passiamo all'esempio pratico che forse e` piu` chiaro:
faccio un tar di un disco che contiene un symlink e un file da esso
puntato:
/vmlinuz -> /boot/kernel-2.4.26
ora, estraggo il tar (con xpf) su un disco che non e` vuoto, e contiene
GIA` un symlink cosi` fatto (e il relativo file da esso puntato):
/vmlinuz -> /boot/kernel-2.6.15
Il risultato che mi aspettavo era di trovare sul disco di destinazione,
dopo aver estratto il tar, un symlink uguale a quello di partenza,
cioe`:
/vmlinuz -> /boot/kernel-2.4.26
e di trovare dentro /boot due files: kernel-2.4.26 (estratto dal TAR) e
kernel-2.6.15 (presente da prima sul disco di destinazione).
Bene, cio` e` in parte falso.
Quello che trovo e` un symlink che come mi aspettavo e`
/vmlinuz -> /boot/kernel-2.4.26
e due files in /boot, uno chiamato kernel-2.4.26 e uno chiamato
kernel-2.6.15, pero` questi due files sono UGUALI nel contenuto,
entrambi contengono il kernel 2.6.15 (quello che era gia` presente da
prima nel disco di destinazione).
Questo mi fa pensare che tar abbia fatto un po` di casino quando ha
estratto il symlink. Immagino che dal momento che il file di nome
/vmlinuz esisteva gia`, in qualche modo tar abbia copiato il contenuto
del file /boot/kernel-2.6.15 (al quale puntava il link) sul file
/boot/kernel-2.4.26, e poi abbia modificato il link per puntare a
/boot/kernel-2.4.26.
Sul manuale non ho trovato informazioni a riguardo di questo
comportamento, che pero` e` potenzialmente distruttivo. Cercando nel
man, l'unica cosa che (col senno del poi) potevo provare era una
funzione che dice "unlink destination file before overwriting it", in
questo caso tar avrebbe cancellato il symlink prima di riscriverlo, e
forse non avrebbe incasinato il contenuto dei files puntati.
Idee?
--
Fabio "Kurgan" Muzzi
La diagnosi del tecnico:
Il Pc fa scherzi di dissolvenza durante l'utilizzo di excel.
|