Ich habe einen gehosteten Debian-Server. Wenn ich mich über ssh anmelde, werde ich mit einer sh-Umgebung begrüßt. Wie ändere ich es, damit ich in einer Bash-Umgebung anfange?
Ich habe einen gehosteten Debian-Server. Wenn ich mich über ssh anmelde, werde ich mit einer sh-Umgebung begrüßt. Wie ändere ich es, damit ich in einer Bash-Umgebung anfange?
Antworten:
Als normaler Benutzer können Sie Ihre Standardanmeldeshell mit dem chsh
Befehl ändern . Hier ist ein Beispiel:
chsh -s /bin/bash
Eine andere Möglichkeit ist die Verwendung von usermod als root:
usermod -s /bin/bash username
adduser
, sollte es standardmäßig auf bash eingestellt sein. Die Standardeinstellung ist in konfiguriert /etc/adduser.conf
. Andernfalls geben Sie die Shell explizit mit an useradd
.
Sie bearbeiten, /etc/passwd
wo der letzte Eintrag die Standard-Shell ist. Mach es /bin/bash
.
Alternativ können Sie die Systemvorgabe ändern, dass Sie /bin/sh
nicht bash sind.
/bin/sh
sein /bin/dash
. Und für das, was es wert ist, sind die beiden anderen Antworten identisch und erreichen dasselbe Ziel mit unterschiedlichen Mitteln. Wie auch immer.
/etc/passwd
werden dringend empfohlen. Ein Bearbeitungsfehler kann die Anmeldung für alle Benutzer unterbrechen und zur Reparatur ein Wiederherstellungsmedium oder einen Start im Einzelbenutzermodus erforderlich machen. Es gibt Werkzeuge wie zum Beispiel usermod
zum Wechseln /etc/passwd
.
/etc/passwd
.
/bin/bash
und /bin/sh
Ausführung identisch sind --posix
, kann zu unerwünschten Ergebnissen führen.
/bin/bash
ganzen Jahre auf allen Maschinen als meine Muschel verwendet. Sie brauchen ein konkreteres Argument.
Die Standard-System-Shell /bin/sh
in den letzten Ubuntu-Versionen ist konfiguriert /bin/dash
. Durch einfaches Ausführen des folgenden Befehls:
sudo dpkg-reconfigure dash
Sie können es auf den alten Standardwert von zurücksetzen /bin/bash
.
Auf diese Weise können Sie den gewünschten Effekt erzielen, bash
indem Sie eine interaktive Shell verwenden, ohne die Benutzereinstellungen zu ändern (Nein chsh
oder usermod
). Dies funktioniert für alle Benutzer, für die derzeit die Shell festgelegt ist /bin/sh
.
Dies hat nur einen kleinen Nachteil: Die Startzeit von Ubuntu kann sich geringfügig verlängern, da dash
weniger Arbeitsspeicher zum Laden und etwas schneller zum Ausführen benötigt wird (kein Wunder, da die Funktionen hier so begrenzt sind). Ich denke jedoch, dass es ziemlich schwierig sein wird, diesen Effekt zu messen, insbesondere für die Hosting-Umgebung.
Außerdem ist es manchmal ärgerlich, Shell-Skripte zu sehen, die nicht ordnungsgemäß funktionieren, da sie einige bash
erweiterte Funktionen verwenden, die von nicht unterstützt werden dash
. Wenn Sie dieses Rezept verwenden, stellen Sie sicher, dass dies nicht geschieht.
Weitere Informationen finden Sie im Ubuntu-Wiki zu diesem Problem .
/bin/sh
wird als Interpreter für POSIX-kompatible Shell-Skripte verwendet - es ist nicht unbedingt die beste interaktive Shell. Wenn Sie bash
Ihre System-Shell sein möchten , sollten Sie Ihre bevorzugte Login-Shell mithilfe von chsh
oder durch geeignete adduser
Aufrufe festlegen . using dpkg-reconfigure
ist eine schlechte Wahl, wenn userA zsh und userB bash haben möchte und beide darauf bestehen, / bin / sh als Standardshell zu haben.
zsh
, und BenutzerB für bash
, haben sie es. Wenn userC so konfiguriert ist, sh
wird er haben bash
, was ohnehin der aktuelle Ubuntu-Standard für neue Benutzer ist
dpkg-reconfigure zsh
zu Satz zsh
als / bin / sh und dann dpkg-reconfigure dash
auf Set dash
als / bin / sh , die Art eines Deadlocks ist; Ich sage hauptsächlich, dass es vorzuziehen ist, die Login-Shell auf die Shell zu setzen, die man verwenden möchte, anstatt durch Rahmen zu gehen, um / bin / sh zu einer guten Login-Shell zu machen.
dpkg-reconfigure dash
das sh
deuten kann bash
, anstatt verkrüppelt dash
. Alle anderen Shells bleiben erhalten.
Für den Fall, dass Sie versuchen, ein freigegebenes Konto zu verwenden (aus welchem Grund auch immer) und die Standard-Shell nicht ändern können, können Sie ausführen
ssh -t <user@hostname> bash -l
Wenn Sie Ihre Umgebung von einer anderen Shell fernhalten müssen, können Sie diese Shell zuerst ausführen. beispielsweise
ssh -t <user@hostname> ksh -c bash -l
-l
Option?