erlug
[Top] [All Lists]

[Erlug] Tar e i symlink

To: ERlug - Lista Pubblica <erlug@xxxxxxxxxxxxxx>
Subject: [Erlug] Tar e i symlink
From: Fabio Muzzi <kurgan@xxxxxxxxxx>
Date: Sun, 26 Mar 2006 13:04:19 +0200
  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.

<Prev in Thread] Current Thread [Next in Thread>