なぜ $ がユーザー シェルのデフォルト シンボルで、 # がルート シェルのデフォルト シンボルなのでしょうか?

なぜ $ がユーザー シェルのデフォルト シンボルで、 # がルート シェルのデフォルト シンボルなのでしょうか?

サーバー上で標準の bash シェルを操作すると、PS1 プロンプトはデフォルトで、非 root ユーザーの場合は $ で終わり、root の場合は # で終わります。

例えば:

ubuntu@server:~$ sudo su
root@server:/home/ubuntu#

どうしてこれなの?

答え1

歴史的に、オリジナルの /bin/sh Bourne シェルは、$通常のプロンプトとして を使用し、#ルート ユーザーのプロンプトとして を使用します (csh は を使用します%)。これにより、スーパーユーザーとして実行しているかどうかを簡単に判断できました。

#はコメント文字でもあるため、盲目的にデータを再入力しても実際のコマンドは実行されません。

より新しいシェル (例: ksh、bash) では、この と の区別が継続されます$が、#ユーザー名、ホスト名、ディレクトリなどのより複雑な値を設定できる場合は、それほど重要ではありません :-)

答え2

伝統。

POSIX標準では(強調は筆者):

プレイステーション1

この変数は対話型プロンプトに使用されます。歴史的に、「スーパーユーザー」には というプロンプトがありました#。権限は単一である必要はないため、どの権限で代替プロンプトが表示されるかを定義するのは困難です。ただし、十分な権限を持つユーザーには、代替プロンプトを表示してその権限を思い出させる必要があります。

参照この答えSuperUser フォーラムでもほぼ同じ質問が寄せられています。

関連情報