/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を提供することは現在良い解決策です。