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.