Sabit bağlantıların kaldırılması


22

El kitabının tarkomut sayfasında, sabit bağlantıları izlemek için bir seçenek listelenmiştir.

-h, --dereference
      follow symlinks; archive and dump the files they point to

--hard-dereference
      follow hard links; archive and dump the files they refer to

Nasıl yok tarbir dosya sabit bağlantı olduğunu biliyoruz? Bunu nasıl takip ediyor?

Ya bu seçeneği seçmezsem? Nasıl zor kabul edilmez ?

Yanıtlar:


24

Varsayılan olarak, tarsabit bağlantıları olan bir dosyayı arşivlemeyi söylerseniz ve arşivlenecek dosyalar arasında bu türden birden fazla bağlantı bulunursa , dosyayı yalnızca bir kez arşivler ve ikincisini (ve diğer adları) sabit bağlantılar olarak kaydeder. Bu, o arşivi çıkardığınızda, sabit bağlantıların geri yükleneceği anlamına gelir.

Eğer kullanırsanız --hard-dereferenceseçeneği, o zaman targelmez değil sabit bağlantıları korumak. Bunun yerine, aynı içeriğe ve meta verilere sahip olan bağımsız dosyalar olarak değerlendirir. Arşivi çıkardığınızda, dosyalar bağımsız olacaktır.

Not: Önce dosyanın link sayısını kontrol ederek sabit bağlantıları tanır. Her dosyanın dosya numarasını ve inode'unu birden fazla bağlantıyla kaydeder ve aynı dosyanın tekrar arşivlendiğini tespit etmek için bunu kullanır. (Kullandığınızda --hard-dereference, bunu yapmaz.)


7

Sabit linkli bir dosyayı, sabit linkli olmayan bir dosyadan "link sayımı" ile ayırt edebilirsiniz. Bunu komut satırından almanın iki yolunu görüyorum:

% stat original
  File: ‘original’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 804h/2052d      Inode: 932815      Links: 2
Access: (0644/-rw-r--r--)  Uid: (  500/ bediger)   Gid: ( 1000/ bediger)
Access: 2012-07-13 22:13:52.317101530 -0600
Modify: 2012-07-13 22:13:52.317101530 -0600
Change: 2012-07-13 22:14:08.050894536 -0600
 Birth: -

Veya

1010 % ls -li 
total 0
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 original
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 secondary

Bu "bediger" öncesi yalnız '2' olan link sayısı. Her iki dosya adının da 932815 numaralı inode numarasına sahip olduğuna dikkat edin.

Bu komutların her ikisinin de bağlantı sayısını, stat()sistem çağrısı tarafından doldurulan struct stat'ın st_nlink alanından aldığından eminim .

Söyleyebileceğim kadarıyla, iki farklı dosya adına sahip tek bir dosya almak yerine (yukarıdaki örnekte olduğu gibi) her biri tek bir dosya adına sahip iki dosya elde taretmek --hard-dereferenceanlamına geliyor. tarmuhtemelen her dosyadaki bağlantı sayısını kontrol eder ve çıkartırken varsayılan olarak, sabit dosya verisi için sahip olduğu ikinci dosya adında bir zor bağlantı oluşturur. --hard-dereferenceArşiv oluşturmada çağrıldığında , çıkartma çağrısı tarçalıştırıldığında ikinci dosya adı için tamamen yeni bir dosya oluşturuyor gibi görünüyor .


Şimdi anlıyorum ki 'sıkı bağlantıları takip et' yanlış ifade. Teşekkür ederim. Peki ya aynı iki dosyadan biri arşivlenmezse? Bu gibi durumlarda bağlantı sayısı yanıltıcıdır.
musa

2
"İki özdeş dosya" değil, iki isimle bir dosya. Hangi dosya katranının aynı olmadığı için arşivlememesi önemli değildir. Varsayılan olarak, tar muhtemelen sadece ikinci dosya adından ilk dosyaya, tıpkı dosya sisteminin yaptığı gibi "işaretleyiciyi" tutar.
Bruce Ediger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.