Was ist der Unterschied zwischen „su -“ und „bash -l“?

Was ist der Unterschied zwischen „su -“ und „bash -l“?

Was ist der Unterschied zwischen su -und bash -l?

Ich habe dieses Problem:

:/etc/profile.d # su -
Anzeige „Standardanzeige“ kann nicht geöffnet werden
Verzeichnis: /root
Do, 28. Nov. 2013, 11:23:57 Uhr MEZ

Nun versuche ich herauszufinden, warum diese Meldung auftritt.

:~ # Abmelden
:/etc/profile.d # bash -x -l
+ test -f /proc/mounts
+ case "`/bin/ls -l /proc/$$/exe`" in
++ /bin/ls -l /proc/17167/exe
+ ist=bash
+ lesen -t 1 ar
...

In der zweiten Ausgabe fehlt die Meldung „Anzeige kann nicht geöffnet werden“. Was ist also der Unterschied?

Antwort1

Der erste Befehl meldet Sie als Root an. Die Option -bedeutet su Manpage:

-l, --login Bietet eine Umgebung, die der Umgebung ähnelt, die der Benutzer erwarten würde, wenn er sich direkt angemeldet hätte.

Der zweite Befehl bash -l,nichtmelden Sie sich als root an. Es stimmt, dass die -lOption bedeutet (wieder aus dem bash Manpage):

-l Bash so agieren lassen, als wäre es als Login-Shell aufgerufen worden

Dies bezieht sich jedoch auf einen different user, in diesem Fall auf Sie selbst und nicht auf root. Der bash -lBefehl verwaltet also das MIT-Magic-Cookie, das die Steuerung Ihrer X-Sitzung ermöglicht, während der su -cdazu nicht in der Lage ist und Sie, da Sie nicht über das entsprechende MIT-Magic-Cookie verfügen, die Steuerung der X-Sitzung nicht übernehmen können.

Wenn Sie dieses Problem umgehen möchten, fügen Sie diese Anweisung ein

  export XAUTHORITY=/home/your_name/.Xauthority

in der Datei /root/.bashrc, und Sie können GUIs als Root öffnen, selbst wenn Sie „su“ verwenden, anstatt eine richtige Anmelde-Shell zu verwenden.

verwandte Informationen