zshは/usr/binの下にあるか、/binの下にあります。違いは何ですか?

zshは/usr/binの下にあるか、/binの下にあります。違いは何ですか?

/etc/shellszshには にインストールされていると記載されていますが、/bin/zshにもインストールされています/usr/bin/zsh

brgr@envy17:~$ cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen
/bin/zsh        <--
/usr/bin/zsh    <--

インターネットのいずれかを使用することをお勧めします/usr/bin/

私の質問は:なぜですか?この2つの違いは何ですか? Bashが1つのパス(/bin/bash)にのみインストールされるのはなぜですか?

答え1

の内容はやや/etc/shells静的で、システムにインストールされている特定のシェルの存在とは無関係です。

ファイルに2つのエントリがあるという事実は、/etc/shellsユーザーが2つのいずれかをシェルとして/bin/zsh指定した場合、コンサルティングデーモン(たとえば、ほとんどのFTPデーモン)で両方のエントリが「有効」であると見なされることを意味します。/usr/bin/zsh/etc/passwd/etc/shells

パス($ PATH)で最初に使用可能なzshを表示するには、次のようにwhichコマンドを使用できます。

which zsh

または、追加情報(コマンドのバイナリ、ソースファイル、およびマニュアルページファイル)を表示するwhereis:

whereis zsh

答え2

1つは別のものへのシンボリックリンク(またはハードリンク)ですが... 2つは同じファイルです。

答え3

存在するとき/bin/zsh追加存在の主な目的/usr/bin/zsh移植性すべてのスクリプトを編集する必要がないという意味で」シェルボーンいいですね。使用するとzsh解決できます/usr/bin/zsh

zsh考慮されない基準ソフトウェアを使用していますが、ますます多くの人がそれを使用しています。ハードコアシステム管理者も同様です。これが、より多くのディストリビューションがそれをそこに入れる傾向がある理由です/bin/zsh

家に近いです。質問ではありませんzsh特徴これは、Linux(または歴史的にUnix)システムが定義された状態で起動することを保証する必要があります。

/bin代わりに、ルートファイルシステムに常駐するように定義されています/usr/bin

後者の場合、オプションには別のディスク(パーティション)または別のシステムに配置し、NFSまたは他のネットワーク手段を介してマウントすることが含まれます。

これにより、ネットワークをサポートせずにシステムを起動したり、ネットワークが予期せず中断されたり、ディスクがクラッシュしたり、ファイルシステムが破損したり、何もインストールせずにシングルユーザーモードで起動したりしても、その中/binのファイルにアクセスできます。

/libにも同様に適用されます/usr/lib。実際、それ以上のものは/usr基本システムにとって重要ではないと考えられています(X11は通常、/usrポイントのどこかで見つけることができます。これがルートの$ HOMEではない理由でもあります/home/root。)/homeルートファイルシステム。

システムディスクが損傷している場合はどうすればよいですか?それとも、ルートファイルシステムが破損していますか?もしそうなら、おそらくカーネルをロードすることはできません。

上記のほとんどは、今日のシステムではそれほど重要ではありません。 NFS マウント/usr/*ファイルシステムは、ディスク容量が安く使用可能なため不要です。

多くのインストールでは、OSイメージも別の/bootファイルシステムにマウントされているため、カーネルをロードしてもルートファイルシステムがマウントされるという保証はありませんが、現在のinitrd初期ルートファイルシステムカーネルの起動が機能しています(zshほとんどの場合、オンが失われます)。場合)。

また、ブランチを含む大規模なルートファイルシステムを持つことが一般的な慣行であり/usr、これはインストールを複製する際にいくつかの利点があります。

/binしたがって、(など)を区別する従来の考慮事項はやや/usr/bin古いですが、最近のシステムではまだ実装されています。

(これは付随的な話に近いですが、これは本当です)

答え4

互換性上の理由で。一部のスクリプトは/usr/binを使用し、他のスクリプトは/binを使用します。一部のディストリビューションでは、/sbin と /bin はもはや意味がないので、すべてを /usr/bin に移動したいと考えています。 1つの例外はbashです。#!/bin/bash過去数十年にわたって多数のスクリプトで使用されてきたので、シンボリックリンクとの互換性のために/ bin / bashを提供することは現在良い解決策です。

関連情報