Neden / bin'de sembolik ve hardlink karışımı var?


10

Simgeler ve hardlinkler arasındaki teknik farkı anlıyorum, bu pratikte kullanımları hakkında bir soru, özellikle her ikisinin de neden benzer koşullarda kullanıldığını merak ediyorum: /bindizin.

İşte benim sistemindeki bir parçası:

~$ ls -lai /bin
total 10508
32770 drwxr-xr-x  2 root root    4096 Jun 14 11:47 .
    2 drwxr-xr-x 28 root root    4096 Sep  6 13:15 ..
  119 -rwxr-xr-x  1 root root  959120 Mar 28 22:02 bash
   2820 -rwxr-xr-x  3 root root   31112 Dec 15  2011 bunzip2
  127 -rwxr-xr-x  1 root root 1832016 Nov 16  2012 busybox
   2820 -rwxr-xr-x  3 root root   31112 Dec 15  2011 bzcat
 6191 lrwxrwxrwx  1 root root       6 Dec 15  2011 bzcmp -> bzdiff
 5640 -rwxr-xr-x  1 root root    2140 Dec 15  2011 bzdiff
 5872 lrwxrwxrwx  1 root root       6 Dec 15  2011 bzegrep -> bzgrep
 3520 -rwxr-xr-x  1 root root    4877 Dec 15  2011 bzexe
 6184 lrwxrwxrwx  1 root root       6 Dec 15  2011 bzfgrep -> bzgrep
 5397 -rwxr-xr-x  1 root root    3642 Dec 15  2011 bzgrep
   2820 -rwxr-xr-x  3 root root   31112 Dec 15  2011 bzip2
 2851 -rwxr-xr-x  1 root root   10336 Dec 15  2011 bzip2recover
 6189 lrwxrwxrwx  1 root root       6 Dec 15  2011 bzless -> bzmore
 5606 -rwxr-xr-x  1 root root    1297 Dec 15  2011 bzmore

Daha iyi görünürlük için sabit bağlantıları aynı inode'a girintilendirdim. Yani sembolik bağ olması durumunda kullanılır bzcmp, bzegrep, bzfgrep, bzlesssöz konusu ve sabit bağlantılarını bzip2, bzcat, bunzip2?

Hepsi normal dosyalardır (dizinler değil), bir dosya sisteminde bulunur, sistem yardımcı programlarıdır ve aynı şeyle çalışmak için bile yapılmıştır: bzip arşivleri. Bu durumda sert bağlantıların / sembolik bağlantıların kullanım nedenleri tamamen tarihsel mi yoksa bir şey mi kaçırıyorum?

Sorumun açıklaması:

Ben değilim değil soran:

  • Semboller ve hardlinkler arasındaki teknik farklar
  • Her birinin teorik avantajları ve dezavantajları

Bu sorular SO ile ilgili diğer başlıklarda ele alınmıştır. Belirli bir durumda neden farklı kararlar verildiğini anlamaya çalışıyorum: ilgili sistem yardımcı programları grubu için. Teknik olarak, hepsi sembolik olabilir ya da hepsi hardlink olabilirdi, her iki seçenek de işe yarayacaktı (ve her iki durumda da bir program hala nasıl çağrıldığını çözebilir argv[0]). Varsa, burada niyeti anlamak istiyorum.

İlişkili:


Bence bu karar paket sahiplerine bağlı. fe gentoo çalıştırıyorum ve benim /binüçüncü sütununda ls -laiher zaman 1sadece yumuşak bağlantıları kullanmak gibi görünüyor. Hangi dağıtımı kullanıyorsunuz?
tekrar oynat

Ubuntu 12.04 kullanıyorum
Dmitry Pashkevich

1
İlk bakışta bir tür kural gibi görünmektedir: "ikili dosyalar için linkler, scriptler / sarmalayıcılar için semboller" .
peterph

Yanıtlar:


5

Neden sabit linkler ve Sembolik linkler kullanılır?

Bu senaryoda sembolik linklere göre hardlink kullanmanın başlıca 3 avantajı vardır.

Sabit bağlantılar

  1. Sabit bir bağlantıyla, bağlantı doğrudan inode işaret eder.
  2. Sabit bağlantılar, yürütülebilir dosyanın birden fazla kopyasına sahip olmak gibidir, ancak yalnızca birinin disk alanını kullanır.
  3. Sabit bağlantının her iki dalını hiçbir şey bozmadan yeniden adlandırabilirsiniz.

Sembolik bağlantılar

  1. Bağlantı nesneyi işaret eder (daha sonra sırayla inode işaret eder).
  2. Bunlar dosya sistemlerini kapsayabilirken, hardlinkler bunu yapamaz.

Genel olarak bağlamanın avantajları

Bu bağlantılar vardır çünkü birçok yürütülebilir dosya nasıl adlandırıldıklarına bağlı olarak farklı davranır. Örneğin 2 komut bzlessve bzmoreaslında tek bir çalıştırılabilir bzmore,. Yürütülebilir dosya, hangi adları çağırmak için kullanıldığına bağlı olarak farklı davranacaktır.

Bu çeşitli nedenlerle yapılır. İşte daha belirgin olanlardan bazıları:

  1. Birçok yerine tek bir yürütülebilir dosya geliştirmek daha kolay
  2. Disk alanından tasarruf sağlar
  3. Kolay kurulum

Neden ikisi de kullanılıyor?

Bu özel uygulamada ikisinden biri seçimi tartışmalıdır. Her ikisi de takma ad olarak hareket etme özelliğini kolaylaştırabilir, böylece tek bir yürütülebilir dosya aşırı yüklenebilir. Buradaki çeşitli programların geliştiricileri tarafından istismar edilen temel özellik budur.

Baktığımızda FHS (Dosya Sistemi Hiyerarşi Standardı) bile o da olabilir, bu şekilde belirtir.

alıntı

/ Bin / sh gerçek bir Bourne kabuğu değilse, gerçek kabuk komutuna sabit veya sembolik bir bağlantı olmalıdır.

Bunun arkasındaki mantık şudur ki sh ve bash aynı şekilde davranmayabilir. Sembolik bir bağ kullanımı, kullanıcıların / bin / sh'ın gerçek bir Bourne kabuğu olmadığını kolayca görmelerini sağlar.

...

...

Gunzip ve zcat programları mevcutsa, gzip'e sembolik veya sert bağlantılar olmalıdır. / bin / csh / bin / tcsh veya / usr / bin / tcsh öğesine sembolik bir bağlantı olabilir.

Referanslar


Evet, anlıyorum, teşekkürler, ama neden bazen semboller kullanılır, bazen de hardlinks kullanılır?
Açıkladığınız

@DmitryPashkevich - Tamam Cevabımı yeniden düzenledim, bunun daha iyi olup olmadığını bana bildirin.
slm

Belki aptalca bir soru soruyorum ama hala cevaplanmamış olduğunu hissediyorum :) Evet iki farklı bağlantı teknik farklılıkları ve avantajları / dezavantajları aşina. Belirli bir vakayı anlamaya çalışıyorum: Neden dizinimde HER İKİ hardlink ve sembolik görüyorum /bin/? Bu yardımcı programların geliştiricileri neden tek bir bağlantı türüne bağlı kalmadı ?
Dmitry Pashkevich

Orijinal sorumu (umarım) netleştirmek için
Dmitry Pashkevich

@DmitryPashkevich - ek içerik ekledi. Yardımcı olursa haberim olsun.
slm

5

Mevcut uygulamadan, hangi tür bağlantıyı kullanacağınızı söyleyen teknik olmayan bir kural olup olmadığını anlamaya çalışıyorsunuz. ( Teknik olmayan diyorum çünkü birini diğerinin üzerinde kullanmanın teknik nedenlerini zaten biliyorsunuz.)

Cevap, başka bir kural yok. Ubuntu'nun bzip2paketinden bahsettiğiniz bu örnek , bir çok geliştiricinin onları çok önceden düşünmeden karıştırdığını göstermeye gidiyor. Çünkü teknik farklılıklar dışında güçlü bir rehberlik yoktur ve bu farklılıklar küçüktür.

Şahsen, her zaman sembolik bağları kullanmayı tercih ederim, çünkü kendi kendini belgeleyen doğaları karşılığında küçük yüklerini ödemeye hazırım.

Diğer geliştiriciler sağladıkları küçük verimlilikler için zor bağlantılar seçeceklerdir.

Bu sorun, boşluklara karşı sekmeler veya dinamik ve statik yazım ya da Emacs vs vi gibi , kutsal bir savaşı kıvılcım çıkarmak için yeterince ilginç olmadığını kaydedin . Daha ilginç savaşlar gibi, her iki seçeneği de seçmek için nedenler vardır, ancak hangisini kullanacağınızı söyleyen biri yoksa, size daha anlamlı olanı seçersiniz.


1
Bakış açınızı paylaştığınız için teşekkürler! Simgelerin "kendini belgeleyen" doğasının sıklıkla göz ardı edilen bir şey olduğunu düşünüyorum
Dmitry Pashkevich
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.