Cp -l veya ln ile hardlinking arasında bir fark var mı?


15

Ben rsync ve hardlink kullanarak bir yedekleme düzeni uyguluyorum. Ben hardinks yapmak için rsync ile link-dest kullanabilirsiniz biliyorum, ama "link-dest" rsync uygulanmadan önce "cp -l" kullanarak söz gördüm. Bildiğim diğer bir hardlinking yöntemi "ln" dir.

Yani sorum şu: Meraktan: “cp -l” kullanarak “ln” kullanarak hardlinks yapmanın bir farkı var mı?


Bağlantılar ayırt edilemez.
rici

Fark yok mu demek istiyorsun? Bunlar birbirinin yerine kullanılabilir mi?
twan163

Kendimi küçük bir test yaptım ama ilk bakışta ikisi arasında hiçbir fark göremedim.
twan163

cp: illegal option -- lcp'nin l seçeneği olduğundan emin misiniz?
Tom

Yanıtlar:


16

Her ikisinin sonuçları aynı olmalıdır, çünkü orijinal dosyaya sabit bir bağlantı oluşturulur.

Fark, amaçlanan kullanımdadır ve bu nedenle her komut için kullanılabilir olan seçenekler arasındadır. Örneğin, cpözyineleme kullanabilir , ancak lnşunları yapamaz:

cp -lr <src> <target>

içindeki <target>tüm dosyalara sabit bağlantılar oluşturur <src>. (yeni dizinler oluşturur; bağlantılar değil) Sonuç, altındaki dizin ağacı yapısının altındakilerle <target>aynı görünmesi olacaktır <src>. cp -r <src> <target>İkincisini kullanmanın her bir dosyayı ve klasörü kopyalayıp her birine yeni bir değer vermesi farklıdır, inodeoysa eski sadece dosyalarda sabit bağlantılar kullanır ve bu nedenle Linkssayılarını artırır .

Örneğinizde olduğu gibi tek bir dosyayı kopyalamak için kullanıldığında, sonuçlar aynı olacaktır.


doğru anlıyorsam, "cp -lr" tüm dosyalar için hardlinks oluşturur, ancak <target> içinde eksik dizinler varsa, bunlar yeni olarak oluşturulur (yani <target> dizinlerine hardlinks olmaz)?
twan163

Evet doğru. Dizinlere sabit bağlantılar oluşturamazsınız. Bu nedenle, dosya / dizin yapısını korumak için 'gerçek' dizinler içindeki dosyalar için sabit bağlantılar haline gelir.
GarethTheRed

"cp -lr" davranışı ile ilgili: dosyalar için hardlinkler ... dizinler için yeni dizinler. biraz garip görünüyor ama sanırım bu "garip" davranış kısıtlamaların bir yan etkisidir (dizinlerin hardline'ları olamaz). ||| ayrıca referans için FYI burada askubuntu gelen directoreis ref1 ve unix.stackexchange gelen ref2 için izin verilmeyen hardlinks hakkında bilgi için bazı bağlantılar .
Trevor Boyd Smith

2

Bağlantı ardından az sistem çağrıları kullanır ln ve nihayet cp :

$ strace link f.txt g.txt | wc --lines
282

$ strace ln --symbolic f.txt g.txt | wc --lines
311

$ strace ln f.txt g.txt | wc --lines
334

$ strace cp --symbolic f.txt g.txt | wc --lines
394

$ strace cp --link f.txt g.txt | wc --lines
410
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.