Warum ist $ das Standardsymbol für eine Benutzer-Shell und # das Standardsymbol für eine Root-Shell?

10

Wenn Sie eine Standard-Bash-Shell auf einem Server betreiben, endet die PS1-Eingabeaufforderung standardmäßig mit einem $ für Nicht-Root-Benutzer und einem # für Root.

IE:

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

Warum ist das?

Jack
quelle
Historisch oder direkter?
Jeff Schaller

Antworten:

15

In der Vergangenheit wurde die ursprüngliche Bourne-Shell / bin / sh $als normale Eingabeaufforderung und #für die Eingabeaufforderung des Root-Benutzers verwendet (und csh wurde verwendet %). Dies machte es ziemlich einfach zu erkennen, ob Sie als Superuser ausgeführt wurden oder nicht.

# ist auch das Kommentarzeichen, sodass jeder, der blind Daten erneut eingibt, keine echten Befehle ausführen würde.

Moderne Shells (z. B. ksh, bash) setzen diese Unterscheidung fort $und #obwohl es weniger wichtig ist, wenn Sie kompliziertere Werte wie Benutzername, Hostname, Verzeichnis festlegen können :-)

Stephen Harris
quelle
Können Sie ein Beispiel dafür geben, wie #das Kommentieren verhindert, dass jemand echte Befehle ausführt, wenn er blind Daten erneut eingibt?
John Gowers
5
Was passiert, wenn Sie die gesamte Zeile ausschneiden und einfügen # reboot- antworten Sie ... nichts, denn das #ist ein Kommentar.
Stephen Harris
9

Tradition.

Der POSIX-Standard sagt (meine Betonung):

PS1

Diese Variable wird für interaktive Eingabeaufforderungen verwendet. In der Vergangenheit hatte der "Superuser" die Eingabeaufforderung "#". Da Berechtigungen nicht monolithisch sein müssen, ist es schwierig zu definieren, welche Berechtigungen die alternative Eingabeaufforderung verursachen sollen. Ein ausreichend leistungsfähiger Benutzer sollte jedoch durch eine alternative Eingabeaufforderung an diese Leistung erinnert werden.

Siehe auch diese Antwort auf praktisch dieselbe Frage im SuperUser-Forum.

Kusalananda
quelle
Weitere Informationen finden Sie unter Begründung> C. Begründung für Shell & Dienstprogramme> 2. Shell-Befehlssprache; Ich musste nur einen Verweis darauf für etwas anderes finden :)
forquare
1
@forquare Danke. Ich habe jetzt einen richtigen Link hinzugefügt.
Kusalananda