Ben kullanarak arasındaki farkı anlamaya çalışıyorum ln -s
ve mount --bind
. Temel senaryoda, ikisini de bir dizine başka bir yerden erişmek için kullanabilirim. Hangi senaryolarda bu ikisi farklı davranacak?
Ben kullanarak arasındaki farkı anlamaya çalışıyorum ln -s
ve mount --bind
. Temel senaryoda, ikisini de bir dizine başka bir yerden erişmek için kullanabilirim. Hangi senaryolarda bu ikisi farklı davranacak?
Yanıtlar:
En az iki durumda farklı davranacaklar:
A
başka bir şeyin ( B
) bulunduğu bir şeyin ( ) sembolik bağlarına uzanır . Bağlantı B
, orijinal ( A
) yerine mount target ( ) içeriğini gösterir .Ayrıca, bir dizini veya dosyayı mevcut bir dizine veya dosyaya bağlayarak orijinal içeriği maskeleyebilirsiniz (orijinal başka bir yere monte edilmediği sürece orijinal içerikleri erişilemez duruma getirir). Sembolik bir bağlantı, orijinalin taşınmasını veya silinmesini gerektirir.
Eh, ln -s
sembolik bir bağlantı mount --bind
oluştururken oysa bir bağ oluşturur.
Sembolik bir bağlantı özel bir dosya türüdür. Bunu yaparsanız ln -s /var/target /var/link
, içinde /var/link
" /var/target
" yolunu içeren bir dosya olacaktır . Sembolik bir link ile normal bir dosya arasındaki tek fark, bir program sembolik bir link üzerinde bir işlem yapmaya çalıştığında, işlemin genellikle dosya yerine hedef üzerinde gerçekleştirilmesidir. Yani şimdi yaparsanız ls /var/link
, ls
program için bir dizin listesi almaya çalışacak /var/link
, ancak aslında bunun için bir dizin listesini alacak /var/target
.
Sembolik bağlantılar yine de sadece dosyalardır. Yeniden adlandırılabilir ve silinebilir ve tüm bu caz. Aradığınız (ya da bu konuda sıradan bir dosya,) sembolik bir bağlantı oluşturmak olamayacağını Not /var/link
zaten adlı bir dosya varsa /var/link
; Önce ondan kurtulman gerekir.
Bağlama bir dosya değil; Çekirdeğin hafızada tuttuğu bir sicil. Bunu yaparsanız mount --bind /var/target /var/mount
, çekirdek /var/mount
şimdi yeni bir isim olduğu gerçeğini kaydeder /var/target
. (Ayrıntıları bilmiyorum; özellikle, bir alt dizine bir şey yerleştirmenin /var/target
de gösterilmesini sağlayacağını mı /var/mount
yoksa neden veya neden olmadığını mı bilmiyorum. Bu cevaba yapılan düzenlemeler takdir edilecektir.) bunu yaparsanız ls /var/mount
, aynı şey yaptığın gibi olur ls /var/target
, çünkü /var/mount
ve /var/target
aynı dizin vardır.
Bağlar dosya değil. Yeniden adlandırmaya veya silmeye çalışırsanız ne olacağını bilmiyorum /var/mount
. Eğer bir şey monte edemez Not /var/mount
sürece zaten bir dizin var /var/mount
.
ln -s ../../myfile .
. Bunu başka bir dizine taşırsanız, göreceli bir bağlantı olduğundan başka bir yere işaret eder. Bir alt ağacı yedeklemeniz gerekiyorsa ve yine de bağlantıların yedeklemede çalışmasını istiyorsanız, bu yararlı olabilir.
Ek olarak, ln -s yeniden başlatmaya devam eder; mount --bind bunu kalıcı kılmak için / etc / fstab dosyasını düzenlemediğiniz sürece yapmaz.
Diğer cevaplara ek olarak. Sistem, dizine sabit bağlantı izin vermiyor:
# ln mydir mpoint
ln: `mydir': hard link not allowed for directory
Bağlama, aynı bağlantı düğümü için iki ya da daha fazla isim gibi sert bağlantılar oluşturmanıza izin verir :
# mount -B mydir/ mpoint/
# ls -d -i *
807175 mpoint/ 807175 mydir/
(Eski rsync sürümü ile anlık görüntü yedeklemesi için yardımcı olabilir.)
Ayrıca, bu bağlantının tamamlanmadığını unutmayın:
# mount -B -oro mydir/ mpoint/
mount: warning: mpoint/ seems to be mounted read-write.
# mount | grep mpoint
/root/learn/mydir on /root/learn/mpoint type none (rw,bind)
Bu nedenle, ro seçeneği sorduğum halde, hala okuma ve yazma işlemi yapılıyor (salt okunur).
rm -r
bir üstündemount --bind
. A ileln
bağlantıyı kaldırır, a için ise hedef üzerinde--bind
çalışanla aynı etkiye sahiptirrm -r
. Sunuculardan birini yeniden kurmadan kısa süre önce bulduğum kadar iyi değil ...