Ändern der Standard-Shell unter Linux [geschlossen]

316

Wie ist es möglich, die Standard-Shell zu ändern? Der envBefehl sagt derzeit:

SHELL=/bin/tcsh

und ich möchte das in Bash ändern.

Mahmood
quelle
4
Dies ist eine gute Frage, die jedoch möglicherweise besser für die Linux-QS-Site geeignet ist.
BradleyDotNET
6
Setze

Antworten:

413

Versuchen Sie den Linux-Befehl chsh .

Der detaillierte Befehl lautet chsh -s /bin/bash. Sie werden aufgefordert, Ihr Passwort einzugeben. Ihre Standard-Login-Shell ist /bin/bashjetzt. Sie müssen sich abmelden und wieder anmelden, um diese Änderung zu sehen.

Folgendes wird aus der Manpage zitiert:

Der Befehl chsh ändert die Benutzeranmeldeshell. Dies bestimmt den Namen des anfänglichen Anmeldebefehls des Benutzers. Ein normaler Benutzer kann die Anmeldeshell nur für sein eigenes Konto ändern, der Superuser kann die Anmeldeshell für jedes Konto ändern

Dieser Befehl ändert die Standard-Anmeldeshell dauerhaft.

Hinweis: Wenn Ihr Benutzerkonto remote ist, z. B. bei der Kerberos-Authentifizierung (z. B. Enterprise RHEL), können Sie es nicht verwenden chsh.

Summer_More_More_Tea
quelle
10
chsh: can only change local entries; use ypchsh instead. Dann hat ypchsh keine -sOption
Mahmood
10
@ShaktiMalik Ich glaube, die Konfigurationsdatei ist /etc/passwd, aber ich habe sie nicht überprüft.
Summer_More_More_Tea
30
Sie müssen sich abmelden und wieder anmelden, um diese Änderung zu sehen.
Neil Traft
22
In meinem Fall hatte ich Root-Zugriff, wollte mich aber nicht mit Konfigurationen auf dem tatsächlichen Host herumschlagen. Ich habe exec /bin/bashzu ~/.profileund dies erlaubte mir , ohne dass Änderungen an den Server direkt zu bash einzuloggen. (Die ursprüngliche Standard-Shell war nur /bin/sh)
Paul Nelson Baker
2
@BCqrstoO Danke dafür. Aber was ist, wenn Sie exitBash eingeben? Werden Sie den Server direkt abmelden oder einfach die Bash beenden und in den sh und einen anderen exit, der zum Abmelden des Servers erforderlich ist?
Summer_More_More_Tea
148

Sie können die passwd-Datei direkt für den jeweiligen Benutzer ändern oder den folgenden Befehl verwenden

chsh -s /usr/local/bin/bash username

Dann abmelden und einloggen

Wüsteneis
quelle
8
Wahrscheinlich eine gute Idee, es zu versuchen, which bashbevor Sie den obigen Befehl aufrufen. Ihr Kilometerstand kann je nach Standort variieren. In meinem Fall wurde es in/bin/bash
Martin Haeberli
Ich kann auch hinzufügen, dass der chshBefehl Teil des util-linuxPakets ist. und chsh -s $(which bash) $USERsollte das gleiche wie oben ergeben.
Es gibt auch die -lOption: "Liste der Muscheln drucken".
Betlista
3
es war chsh -s /bin/bash usernamefür mich
Salvatorelab
Vielen Dank! Dies half mir beim Versuch, es für einen anderen Benutzer zu ändern
Tobias Feil
18

Sie sollten /etcwahrscheinlich irgendwo ein 'Skelett' /etc/skeletonhaben oder wahrscheinlich die Standardeinstellungen überprüfen/etc/default oder so. Dies sind Skripte, die Standardumgebungsvariablen definieren, die während einer Anmeldung festgelegt werden.

Wenn es nur für Ihr eigenes Konto ist: Überprüfen Sie die (versteckte) Datei ~/.profileund ~/.login. Oder generieren Sie sie, wenn sie nicht existieren. Diese werden auch beim Anmeldevorgang ausgewertet.

Arkascha
quelle
5
Plus 1 für die gezielte Beantwortung der Frage (THE Default Shell). Unter Red Hat Linux wird es in/etc/default/useradd
geedoubleya
@geedoubleya Können Sie angeben, was ein Unterschied zwischen Standard- und Anmeldeshell ist?
Betlista
1
Hi @Betlista Die Standard-Shell ist die Shell, die für eine Anmelde-Shell für neue Benutzer verwendet wird, wenn diese erstellt werden, es sei denn, eine bestimmte Shell wird als Argument angegeben.
Geedoubleya