Zmiana domyślnej powłoki w systemie Linux [zamknięte]

317

Jak można zmienić domyślną powłokę? Obecnie envpolecenie mówi:

SHELL=/bin/tcsh

i chcę to zmienić na Bash.

mahmood
źródło
4
To dobre pytanie, ale może być bardziej odpowiednie dla witryny kontroli jakości Linux.
BradleyDotNET
6
ustaw to w / etc / passwd
resultsway

Odpowiedzi:

414

Wypróbuj polecenie linux chsh.

Szczegółowe polecenie to chsh -s /bin/bash. Poprosi Cię o podanie hasła. Domyślna powłoka logowania to /bin/bashteraz. Musisz się wylogować i zalogować ponownie, aby zobaczyć tę zmianę.

Ze strony podręcznika cytowano:

Polecenie chsh zmienia powłokę logowania użytkownika. Określa nazwę początkowej komendy logowania użytkownika. Normalny użytkownik może zmienić powłokę logowania tylko dla swojego konta, administrator może zmienić powłokę logowania dla dowolnego konta

To polecenie zmieni trwale domyślną powłokę logowania.

Uwaga: jeśli twoje konto użytkownika jest zdalne, na przykład przy uwierzytelnianiu Kerberos (np. Enterprise RHEL), nie będziesz mógł z niego korzystać chsh.

Summer_More_More_Tea
źródło
10
chsh: can only change local entries; use ypchsh instead. Zatem ypchsh nie ma żadnej -sopcji
mahmood
10
@ShaktiMalik Myślę, że plik konfiguracyjny jest /etc/passwd, ale nie sprawdziłem go dwukrotnie.
Summer_More_More_Tea
30
Musisz się wylogować i zalogować ponownie, aby zobaczyć tę zmianę.
Neil Traft
22
W moim przypadku miałem dostęp do konta root, ale nie chciałem zadzierać z żadną konfiguracją na rzeczywistym hoście. I dodaje exec /bin/bashsię ~/.profile, co pozwoliło mi, aby zalogować się bezpośrednio do bash bez dokonywania jakichkolwiek zmian na serwerze. (Oryginalna domyślna powłoka była właśnie /bin/sh)
Paul Nelson Baker
2
@BCqrstoO Dziękuję za to. Ale co, jeśli wpiszesz exitbash? Czy wylogujesz się bezpośrednio z serwera, czy po prostu wyjdziesz z basha i przejdziesz do sh, a inny exitwymagany do wylogowania z serwera?
Summer_More_More_Tea
148

Możesz zmienić plik passwd bezpośrednio dla konkretnego użytkownika lub użyć poniższego polecenia

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

Następnie wyloguj się i zaloguj

Pustynny lód
źródło
8
Prawdopodobnie dobrym pomysłem jest wypróbowanie which bashprzed wywołaniem powyższego polecenia; Twój przebieg może się różnić w zależności od lokalizacji. W moim przypadku znaleziono go w/bin/bash
Martin Haeberli
Mogę również dodać, że chshpolecenie jest częścią util-linuxpakietu; i chsh -s $(which bash) $USERpowinien dać wynik taki sam jak powyżej.
Istnieje również -lopcja: „wydrukuj listę powłok”.
Betlista
3
to było chsh -s /bin/bash usernamedla mnie
Salvatorelab
Dziękuję Ci! Pomogło mi to, gdy próbowałem go zmienić dla innego użytkownika
Tobias Feil,
18

/etcPrawdopodobnie powinieneś mieć gdzieś szkielet /etc/skeleton, lub sprawdzić ustawienia domyślne, prawdopodobnie /etc/defaultczy coś. Są to skrypty definiujące standardowe zmienne środowiskowe ustawiane podczas logowania.

Jeśli dotyczy to tylko Twojego konta: sprawdź (ukryty) plik ~/.profilei ~/.login. Lub wygeneruj je, jeśli nie istnieją. Są one również oceniane przez proces logowania.

arkascha
źródło
5
Plus 1 za konkretną odpowiedź na pytanie (domyślna powłoka). W systemie Red Hat Linux jest to określone w/etc/default/useradd
geedoubleya
@geedoubleya Czy możesz określić, jaka jest różnica między domyślną a powłoką logowania?
Betlista,
1
Cześć @Betlista Domyślną powłoką jest powłoka używana dla powłoki logowania nowego użytkownika podczas ich tworzenia, chyba że jako argument podano konkretną powłokę.
geedoubleya