Linux Benutzername @ Server verschwindet nach dem Anmelden als root

2518
random

Auf meinem Linux-Server habe ich mich als root-Benutzer angemeldet, um auf einige Dateien zuzugreifen: su root ... Nachdem ich die Dateien überprüft hatte, meldete ich mich wieder als mein Hauptbenutzer su Benutzername an . In meinem Terminalfenster steht jetzt server ~: anstelle von username @ server ~: links von der Kommandozeile. Gibt es eine Möglichkeit, wie ich das wieder normalisieren kann?

3

6 Antworten auf die Frage

12
Ry4an Brase

Führen Sie einige exitBefehle aus. Sie su roothaben eine Subshell gestartet, in der Sie root sind, und Sie haben su usereine andere gestartet. Durch das Tippen exitwerden diese Subshells beendet und Sie werden wieder an den Ausgangspunkt zurückkehren - eine Ebene tief.

Es hat mich gerade aus meiner Remote-Verbindung herausgenommen ... aber ich denke, dass ich in einer Subshell bin. Gibt es einen Befehl für mich, um alle Subshells anzuzeigen, die ich ausgeführt habe? vor 14 Jahren 0
Mit "echo $ SHLVL" können Sie die Ebene der Subshell sehen. Mark van Lent vor 14 Jahren 2
6
Michael Aaron Safyan

Sie müssen nur die Aufforderung ändern. Sie können den folgenden Befehl verwenden:

export PS1 = "\ u @ \ h \ w:" 

Ich persönlich bevorzuge das Folgende als meine Aufforderung, aber das ist nur ich:

export PS1 = "[\ u @ \ h \ w] \ $" 

Sie können die Änderung Ihrer Eingabeaufforderung verhindern, indem Sie die Anweisung den entsprechenden bashrc-Dateien hinzufügen. Siehe auch Bash Shell PS1: 10 - Beispiele für eine Linux-Eingabeaufforderung wie Angelina Jolie für weitere Informationen zu PS1.

Warum sollte ein Benutzerwechsel meine Eingabeaufforderung ändern? Dies scheint eher eine Problemumgehung als ein Fix zu sein. vor 14 Jahren 0
Da an der Eingabeaufforderung als WAS Benutzer angegeben wird, den Sie gerade betreiben, würde die Eingabeaufforderung beispielsweise wie folgt aussehen: root @ myserver: Wenn Sie als Root-Benutzer oder als someuser @ myserver: arbeiten, wenn Sie unter den Berechtigungsnachweisen eines Benutzers arbeiten. Luke vor 14 Jahren 0
David: Ansagen sind nicht global; Sie sind benutzerspezifisch. Daher können Benutzer geändert werden, um die Aufforderung zu ändern. Insbesondere hat der Root-Benutzer oft eine generische Eingabeaufforderung, die sehr einfach ist. Was Michael hier vorgeschlagen hat, ist genau der richtige Weg, um Ihr Problem anzugehen. Es ist überhaupt kein Workaround. vor 14 Jahren 0
Da sie benutzerspezifisch sind, warum sollte der Benutzer zum Rootbenutzer wechseln und die Eingabeaufforderung für den Benutzer "david" ändern? Ich verstehe, dass ich, wenn ich mich in der Sub-Shell für den Root-Benutzer befinde, eine andere Eingabeaufforderung hätte, aber sobald ich die Subshell verlasse, verstehe ich nicht, warum die Eingabeaufforderung für den Benutzer David geändert wird. Haben Sie nicht gerade gesagt, dass sie unabhängig voneinander sind? Ich bin definitiv ein Noob bei Linux und würde es begrüßen, wenn jemand den Fehler in meiner Logik hier erklären könnte. vor 14 Jahren 0
Während diese Antwort richtig ist, wie Bash-Eingabeaufforderungen geändert werden sollen, verfehlt der Punkt, dass nach einem "su" zu Ihrem eigenen Benutzer "zurückgeschaltet" werden soll. In der Regel möchten Sie einfach die `su`-Shell beenden und nicht eine andere starten ein. vor 14 Jahren 1
1) Die Eingabeaufforderung wird von ENV-Variablen bestimmt (wie oben). 2) `su` startet eine Subshell und löscht ihre übergeordneten ENV-Variablen. 3) Die untergeordnete Subshell erbt ENV-Variablen vom Initialisierungsskript für den Benutzer, der die Shell als (david) ausführt. Kent Fredric vor 14 Jahren 0
5
earl

suwechselt die Benutzer durch das Laichen einer neuen (Sub-) Shell. Wenn Sie sich also angemeldet haben, haben Sie eine Shell gestartet. Mit dem ersten suroot haben Sie eine Subshell als root gestartet. Der nächste suneben Ihrem Benutzer startete eine weitere Subshell. Beachten Sie, dass in diesem Moment drei Shells laufen. Anstatt suIhren Benutzer von der Rootshell zu erreichen, exitwerden Sie Ihre Probleme lösen.

Wenn Sie pstreeinstalliert haben, pstree -hwird Ihnen eine grafische Darstellung der Vorgänge angezeigt.

Das heißt: -sshd --- sshd --- sshd --- bash --- pstree. Wenn ich die Root-Sub-Shell eingebe, erhalte ich: -sshd --- sshd --- sshd --- bash --- su --- bash --- pstree. Da es in der ersten Lesung nur eine Bash gibt, kann ich davon ausgehen, dass ich mich nicht in einer Sub-Shell befinde? vor 14 Jahren 0
Genau. Um aus einer unnötigen Subshell herauszukommen, genügt es, "exit" zu verlassen, bis nur noch eine "bash" übrig ist. vor 14 Jahren 0
4
Greg Hewgill

Ihre Eingabeaufforderung scheint in der Regel durch eine Ihrer Shell-Startdateien festgelegt zu sein, die nicht ausgeführt wird, wenn Sie suvon root zu Ihrem Benutzer wechseln. Wenn Sie bash verwenden, kann es sein, dass Sie man bashim Abschnitt INVOCATION aufklären. Es gibt mehrere Startdateien, die von bash gelesen werden können, einschließlich:

  • /etc/profile
  • ~/.bash_profile
  • ~/.bash_login
  • ~/.profile
  • ~/.bashrc

Die PS1Umgebungsvariable ist nur eine Umgebungsvariable und kann abhängig von der Kombination der oben genannten Dateien gesetzt werden.

Der suBefehl verfügt über einen -l(oder --login) Schalter, der einfach so gekürzt werden kann, -dass die neue Shell eine Login-Shell wird. Das ist wahrscheinlich was Sie wollen:

su - david 

Ich benutze immer sudiese Option.

Das ist richtig. Ein einfaches su würde die Startdateien nicht aufrufen, während su - würde. Ich wusste nicht, su - ist kurz für su-l! Danke Greg für die Info. alok vor 14 Jahren 0
Für Sudo-Leute ist "Sudo -i" * immens * praktisch Kent Fredric vor 14 Jahren 0
1
Jim Schubert

Wenn dies eine Bash-Shell ist, versuchen Sie Folgendes:

source ~/.bashrc 

Wenn das nicht funktioniert, laufen Sie echo $PS1und sehen, was sich geändert hat.

. ~ / .bashrc macht dasselbe Robert Swisher vor 14 Jahren 0
1

suselbst erstellt keine neue Sitzung der Shell. Deshalb wird die Shell nicht wie üblich eingerichtet. jedoch,

su - 

startet eine neue Login-Sitzung