Mengapa ada campuran symlink dan hardlink di / bin?

10

Saya memahami perbedaan teknis antara symlink dan hardlink, ini adalah pertanyaan tentang penggunaannya dalam praktiknya, khususnya saya ingin tahu mengapa keduanya digunakan dalam kondisi yang tampaknya serupa: /bindirektori.

Berikut adalah fragmen listing di sistem saya:

~$ 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

Saya membuat indentasi hardlink ke inode yang sama untuk visibilitas yang lebih baik. Jadi yang symlink digunakan dalam kasus bzcmp, bzegrep, bzfgrep, bzlessdan hardlinks dalam kasus bzip2, bzcat, bunzip2?

Mereka semua adalah file biasa (bukan direktori), berada di dalam satu sistem file, adalah utilitas sistem dan bahkan dibuat untuk bekerja dengan hal yang sama: arsip bzip. Apakah alasan penggunaan hardlinks / symlinks dalam kasus khusus ini murni historis atau apakah saya kehilangan sesuatu?

Klarifikasi pertanyaan saya:

Saya tidak bertanya tentang:

  • Perbedaan teknis antara symlink dan hardlink
  • Keuntungan dan kerugian teoretis masing-masing

Pertanyaan-pertanyaan ini telah ditanggapi di utas lain di SO. Saya mencoba memahami mengapa keputusan berbeda dibuat dalam kasus tertentu: untuk sekelompok utilitas sistem terkait. Secara teknis, mereka semua bisa saja merupakan symlinks atau mereka semua bisa berupa hardlinks, kedua opsi akan bekerja (dan dalam kedua kasus suatu program masih dapat mencari tahu bagaimana itu dipanggil melalui argv[0]). Saya ingin memahami maksud di sini jika ada.

Terkait:

Dmitry Pashkevich
sumber
Saya pikir itu tergantung pada pengelola paket untuk memutuskan. Saya menjalankan gentoo, dan di /binkolom ketiga saya ls -laiselalu 1jadi sepertinya hanya menggunakan tautan lunak. Distro apa yang Anda gunakan?
ulangan
Saya menggunakan Ubuntu 12.04
Dmitry Pashkevich
1
Pada pandangan pertama sepertinya ada beberapa jenis aturan: "hardlinks untuk binari, symlinks untuk skrip / pembungkus" .
peterph

Jawaban:

5

Mengapa menggunakan tautan keras vs tautan simbolik

Ada 3 keuntungan utama menggunakan hardlinks di atas tautan simbolik dalam skenario ini.

Tautan keras

  1. Dengan tautan keras, tautan menunjuk ke inode secara langsung.
  2. Hard link seperti memiliki banyak salinan yang dapat dieksekusi tetapi hanya menggunakan ruang disk satu.
  3. Anda dapat mengganti nama cabang dari tautan keras tanpa merusak apa pun.

Tautan simbolik

  1. Tautan menunjuk ke objek (yang kemudian pada gilirannya menunjuk ke inode).
  2. Mereka dapat menjangkau sistem file, sedangkan hardlink tidak bisa.

Keuntungan menghubungkan secara umum

Tautan ini ada karena banyak executable berperilaku berbeda berdasarkan bagaimana mereka dipanggil. Sebagai contoh 2 perintah bzlessdan bzmoresebenarnya merupakan satu executable bzmore,. Eksekusi akan berperilaku berbeda tergantung pada nama yang digunakan untuk memintanya.

Ini dilakukan karena berbagai alasan. Berikut adalah beberapa yang lebih jelas:

  1. Lebih mudah untuk mengembangkan satu executable daripada banyak
  2. Menghemat ruang disk
  3. Lebih mudah digunakan

Mengapa keduanya digunakan?

Pilihan keduanya, dalam aplikasi khusus ini, adalah moot. Entah dapat memfasilitasi fitur akting sebagai alias sehingga eksekusi tunggal dapat kelebihan beban. Itu benar-benar fitur kunci yang semakin dieksploitasi oleh para pengembang berbagai program di sini.

Dalam melihat FHS (Filesystem Hierarchy Standard) bahkan menspesifikasikannya dengan cara ini, bahwa itu bisa berupa.

kutipan

Jika / bin / sh bukan shell Bourne yang sebenarnya, itu harus berupa tautan keras atau simbolis ke perintah shell asli.

Alasan di balik ini adalah karena sh dan bash belum tentu berperilaku dengan cara yang sama. Penggunaan tautan simbolik juga memungkinkan pengguna untuk dengan mudah melihat bahwa / bin / sh bukanlah shell Bourne yang sebenarnya.

...

...

Jika program gunzip dan zcat ada, mereka harus simbolis atau tautan keras ke gzip. / bin / csh mungkin merupakan tautan simbolis ke / bin / tcsh atau / usr / bin / tcsh.

Referensi

slm
sumber
Ya saya mengerti itu, terima kasih, tetapi mengapa terkadang symlink digunakan, dan terkadang hardlink digunakan? Apa yang Anda gambarkan akan bekerja dengan cara yang sama dalam kedua kasus
Dmitry Pashkevich
@DmitryPashkevich - OK Saya sudah refactored jawaban saya, beri tahu saya kalau itu lebih baik.
slm
Mungkin saya mengajukan pertanyaan bodoh tapi saya merasa itu masih belum terjawab :) Ya saya akrab dengan perbedaan teknis dan kelebihan / kekurangan dari dua jenis tautan. Saya mencoba memahami kasus tertentu: mengapa saya melihat KEDUA hardlink dan symlink di /bin/direktori saya ? Mengapa pengembang utilitas ini tidak menggunakan satu jenis tautan?
Dmitry Pashkevich
Mengedit
@DmitryPashkevich - menambahkan beberapa konten tambahan. Beri tahu saya jika itu membantu.
slm
5

Tampaknya Anda mencoba mencari tahu, dari praktik yang ada, apakah ada aturan nonteknis yang memberi tahu Anda jenis tautan yang digunakan. (Saya katakan tidak teknis karena Anda sudah tahu alasan teknis untuk menggunakan salah satu dari yang lain.)

Jawabannya adalah, tidak ada aturan lain. Contoh ini Anda tunjukkan dari bzip2paket Ubuntu hanya untuk menunjukkan bahwa banyak pengembang mencampurkannya tanpa banyak pemikiran. Ini karena tidak ada pedoman yang kuat selain perbedaan teknis, dan perbedaan itu kecil.

Secara pribadi, saya lebih suka menggunakan symlink, selalu, karena saya bersedia membayar biaya overhead kecil mereka dengan imbalan sifat mendokumentasikan diri mereka.

Pengembang lain akan memilih tautan keras untuk efisiensi kecil yang mereka berikan.

Masalah ini sangat mirip spasi vs tab atau pengetikan dinamis vs statis atau Emacs vs vi , kecuali bahwa itu tidak cukup menarik untuk memicu perang suci . Seperti pertempuran yang lebih menarik, ada alasan untuk memilih salah satu opsi, tetapi kecuali jika Anda memiliki seseorang yang memberi tahu Anda mana yang harus digunakan, Anda harus memilih yang lebih masuk akal bagi Anda.

Warren Young
sumber
1
Terima kasih telah berbagi perspektif Anda! Saya pikir sifat "mendokumentasikan diri" dari symlink adalah sesuatu yang sering diabaikan
Dmitry Pashkevich