Was ist der Unterschied zwischen "su" mit und ohne Bindestrich?

87

Ich bin ganz neu in Linux - Terminal und ich bin nicht ganz sicher , was der Unterschied zwischen sumit einem Bindestrich und suohne Bindestrich ist, zum Beispiel: su - usernamevs su username.

Ich habe in die Dokumentation geschaut, aber dort wurde dies nicht erwähnt. Könnte mir bitte jemand helfen?

user574183
quelle
Eine "Login-Shell" bedeutet oft eine interaktive Shell. Dies ist im Gegensatz zu einer Shell, die nur ein Skript ausführt und beendet.
Shahbaz
6
Es ist genau dort in der gleichen Manpage, auf die Sie verlinken : " -, -l, --login: mache die Shell zu einer Login-Shell "
ArjunShankar
1
Sie müssen nicht einmal googeln, sondern nur tippen su --help.
Art Shayderov
1
Bemerkenswert: Dies ist besonders nützlich, wenn Sie als root angemeldet sind, da Sie ohne den Hypen eine neue Login-Shell starten, $PATHnicht aktualisiert werden und daher nicht in der Lage sind, nur root-Binärdateien in /sbinund/usr/sbin
Garrett

Antworten:

85

Der Unterschied zwischen „-“ und „kein Bindestrich“ ist , dass letztere hält die bestehende Umgebung (Variablen, usw.); Ersteres erstellt eine neue Umgebung (mit den Einstellungen des tatsächlichen Benutzers, nicht Ihrer eigenen).

https://wiki.archlinux.org/index.php/Su

Der Bindestrich hat zwei Auswirkungen:

1) wechselt vom aktuellen Verzeichnis in das Home-Verzeichnis des neuen Benutzers (z. B. zu / root im Fall des Root-Benutzers), indem er sich als dieser Benutzer anmeldet

2) Ändert die Umgebungsvariablen in die des neuen Benutzers, wie durch dessen ~ / .bashrc vorgegeben. Das heißt, wenn das erste Argument für su ein Bindestrich ist, werden das aktuelle Verzeichnis und die aktuelle Umgebung so geändert, wie es zu erwarten wäre, wenn sich der neue Benutzer tatsächlich bei einer neuen Sitzung angemeldet hätte (anstatt nur eine vorhandene Sitzung zu übernehmen).

paulsm4
quelle
Diese Site -> admon.org/difference-between-login-shell-and-non-login-shell besagt, dass bei Verwendung ohne Bindestrich die Dateien / etc / profile und ~ / .bash_profile nicht ausgeführt werden. Welche Bedeutung haben diese beiden Dateien für die Benutzerumgebung?
Benutzer574183
2
Diese beiden Dinge sind die Dateien, die die Benutzerumgebung festlegen :) Wenn Sie sie nicht ausführen, bleibt Ihre ursprüngliche Umgebung erhalten. Wenn Sie sie ausführen (mit "-"), muss Ihre Umgebung mit dem Benutzer identisch sein, dem Sie "angehören". Der Bindestrich ist normalerweise das, was Sie wollen - ich verwende "-" gewöhnlich, wenn ich "su".
paulsm4
Ist die Reihenfolge der Ausführung wirklich wichtig? Ich frage dies, weil auf dieser Site erwähnt wurde, dass die beiden Dateien / etc / bashrc ~ / .bashrc in umgekehrter Reihenfolge ausgeführt werden, wenn sie sich in einer Shell ohne Anmeldung befinden. Jemand bitte helfen Sie mir
user574183
1
@ user574183 natürlich, zB wenn einer etwas gesetzt hat, aber der andere etwas nicht gesetzt hat oder auf etwas anderes gesetzt hat
fikr4n
3

su -Startet eine Login-Shell für root. Die Unterschiede zu einer normalen Shell finden Sie beispielsweise auf dieser Site .

Lars Kotthoff
quelle
2
Das ist wahr, aber es ist nicht die Frage :)
paulsm4
Das ist falsch, Sie können su mit einem Bindestrich ausführen und eine Shell für einen anderen Benutzer starten lassen. Führen Sie Folgendes aus und sehen Sie sich die Ausgabe ansudo su - "testuser" -c "whoami"
David Hergert
@DavidHergert Ja, und ohne einen Benutzernamen öffnet es eine Shell für root.
Lars Kotthoff
@ LarsKotthoff - ok, sorry, so wie es formuliert wurde, klang es so, als ob der Bindestrich es zu einer Root-Shell macht, nicht die Tatsache, dass ein Benutzer standardmäßig root ist. Sogar meine ortsansässige SA hat mich diesbezüglich verwirrt. :)
David Hergert