/ binにシンボリックリンクとハードリンクが混在しているのはなぜですか?

/ binにシンボリックリンクとハードリンクが混在しているのはなぜですか?

私はシンボリックリンクとハードリンクの間の技術的な違いを理解し、実際に使用する問題であり、特に見た目に似た条件であるディレクトリで両方が使用されている理由がわかります/bin

私のシステムにリストされているもののいくつかは次のとおりです。

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

より見やすくするために、同じインデックスノードへのハードリンクをインデントします。したがってbzcmp、 の場合はシンボリックリンクを使用し、bzegrepの場合はハードリンクを使用します。bzfgrepbzlessbzip2bzcatbunzip2

どちらも、通常のファイル(ディレクトリではない)、ファイルシステムに常駐し、システムユーティリティであり、同じ作業であるbzipアーカイブを処理するようにも設計されています。この特別なケースでハード/シンボルリンクを使用する理由は純粋に歴史的なものですか、それとも何か抜けましたか?

私の質問を明確にするには:

はいいいえ尋ねる:

  • シンボリックリンクとハードリンクの技術的違い
  • 理論的には、それぞれの長所と短所

これらの問題はSOの他のスレッドで解決されました。私は特定の状況、つまり関連するシステムユーティリティのセットでなぜ他の決定がなされるのかを理解しようとしています。技術的には両方ともシンボリックリンクであっても、どちらもハードリンクであってもよい。どちらのオプションも機能します(そしてどちらの場合も、プログラムは呼び出しをどのように通過したかを把握できますargv[0])。ここの意図(ある場合)を理解したいと思います。

関連:

ベストアンサー1

ハードリンクとシンボリックリンクを使用する理由

この場合、シンボリックリンクよりもハードリンクを使用すると、3つの主な利点があります。

ハードリンク

  1. ハードリンクの場合、リンクはinodeを直接指します。
  2. ハードリンクには実行可能ファイルの複数のコピーがありますが、そのうちの1つのディスク領域のみを使用するのと同じです。
  3. 何も壊さずにハードリンクのすべての分岐の名前を変更することができます。

シンボリックリンク

  1. リンクはオブジェクトを指します(このオブジェクトはinodeを指します)。
  2. ファイルシステムにまたがる可能性がありますが、ハードリンクはできません。

一般リンクの利点

これらのリンクは、多くの実行ファイルが呼び出し方法によって異なる動作をするために存在します。たとえば、これら2つのコマンドはbzless実際にはbzmore1つの実行可能ファイルです。bzmore実行可能ファイルは、呼び出される名前によって異なる動作をします。

これにはいくつかの理由があります。以下はもっと明確なものです:

  1. 単一の実行可能ファイルを開発する方が、複数の実行可能ファイルを開発するよりも簡単です。
  2. ディスクスペースを節約
  3. より簡単な展開

なぜ両方とも使用されますか?

この特定のアプリケーションでは、どちらかを選択することは意味がありません。どちらも、単一の実行可能ファイルを再ロードできるようにエイリアスとして機能する機能を容易にします。これは実際にさまざまなプログラム開発者が活用している重要な機能です。

報告FHS(ファイルシステム階層標準)このように指定しても、どちらかを指定できます。

抜粋

/ bin / shが実際のBourneシェルではない場合は、実際のシェルコマンドへのハードリンクまたはシンボリックリンクである必要があります。

その理由は、shとbashが必ずしも同じように動作しない可能性があるためです。また、シンボリックリンクを使用すると、ユーザーは/ bin / shが実際のBourneシェルではないことを簡単に知ることができます。

...

...

gunzipとzcatプログラムが存在する場合は、gzipへのシンボリックリンクまたはハードリンクである必要があります。 /bin/csh は、/bin/tcsh または /usr/bin/tcsh へのシンボリックリンクです。

引用する

おすすめ記事