更改Linux預設Shell


更改Linux中的預設shell很簡單,它允許您根據需要使用任何shell。大多數Linux系統的預設shell是'bash',您可以將其替換為其他shell,例如sh、fish、dash、zsh等。在Linux中,您可能有很多原因需要更改預設shell;一些主要原因如下:

  • 使用nologin shell停用或阻止普通使用者登入。

  • 更改共享網路上的預設shell以滿足使用者的特定需求。這與許多管理許可權相關聯。

  • shell包裝器程式/指令碼會延遲使用者命令的執行,直到使用者登入。在這種情況下,對於shell包裝器,使用者登入是特定於shell的。

在Linux中更改使用者shell的方法有很多。在本指南中,我們將瞭解更改Linux系統預設shell的所有可用方法。

如何在Linux中更改預設Shell

首先必須知道系統中安裝了哪個Linux shell才能更改預設shell。在Linux中,'etc/shells'檔案包含所有可用shell的資訊,因此您可以使用以下cat命令列出所有shell詳細資訊:

~$: cat /etc/shells
# /etc/shells: valid login shells 
/bin/sh 
/bin/bash 
/usr/bin/bash 
/bin/rbash 
/usr/bin/rbash 
/usr/bin/sh 
/bin/dash 
/usr/bin/dash 

上面列表中包含的所有shell都可以在Linux系統中使用,您可以將它們中的任何一個替換為您的預設shell。此外,如果您想更改此列表中未列出的其他shell,則必須單獨安裝它。

首先,您必須找到當前的shell才能首先更改使用者shell。在Linux中,/etc/passwd檔案儲存使用者帳戶的基本資訊。登入時需要此資訊,您還可以從中獲取與shell相關的資訊。您可以執行以下任何命令來找出您的當前shell:

~$: grep "^${USER}" /etc/passwd
prateek:x:1000:Prateek Jangid,,,:/home/prateek:/bin/bash

或者,

~$: grep `whoami` /etc/passwd
prateek:x:1000:Prateek Jangid,,,:/home/prateek:/bin/bash

或者,

~$: echo $SHELL
/bin/bash

或者,

~$: grep "^${USER}" /etc/passwd
 PID  TTY     TIME CMD
2357 pts/0  00:00:00 bash

正如您在上面的輸出中看到的,當前shell是'bash',因此我們將使用各種方法將'bash' shell更改為'sh' shell。

chsh命令

當您沒有root許可權但想更改預設shell時,此命令非常有用。您通常不需要root帳戶即可使用chsh實用程式。

此命令透過修改/etc/passwd檔案來更改使用者的shell。您可以使用-s選項更改shell:

~$: chsh -s <New_Shell>

例如,讓我們透過以下命令將bash更改為sh:

~$: chsh -s /bin/sh

usermod命令

usermod命令可以更改系統帳戶檔案。您可以使用此命令列修改/etc/passwd檔案並更改使用者的shell。使用usermod命令,您可以使用--shell或-s選項更改使用者的登入shell。

~$: sudo usermod --shell <New_Shell> 

現在讓我們透過usermod命令將bash替換為sh作為預設shell:

~$: sudo usermod --shell /bin/sh

注意 - 我們在上述方法中更改了當前使用者的預設shell。但是,您也可以更改其他使用者的shell。因此,以下是可以使用的命令,您需要在其中輸入其他使用者的使用者名稱:

~$: chsh -s <New_Shell> <Username>
~$: sudo usermod --shell <New_Shell> <Username>

從/etc/passwd檔案

系統透過上述命令自動修改/etc/passwd檔案以更改預設shell。如果您不想使用這些命令並手動編輯/etc/passwd檔案,則可以透過執行以下命令來實現:

~$: nano /etc/passwd

執行上述命令後,終端將開啟/etc/passwd,現在相應地進行更改。

GNU nano 6.2                      /etc/passwd * 
root:x:0:0:root:/root /bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync 
games:x:5:60: games:/usr/games:/usr/sbin/nologin

正如您所看到的,當前shell是/bin/bash,您可以將其替換為任何shell(sh、zsh、dash)。在這裡,我們將/root /bin/bash更改為/root /bin/bash。

GNU nano 6.2                      /etc/passwd * 
root:x:0:0:root:/root /bin/sh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync 
games:x:5:60: games:/usr/games:/usr/sbin/nologin

手動更改shell後,儲存檔案並退出。手動編輯/etc/passwd檔案允許您同時更改多個使用者的預設shell,這也很方便。

請注意,儲存此檔案不會對更改的預設shell進行任何驗證。因此,請確保您的shell命令路徑有效。否則,下次登入系統時可能會遇到一些問題。

結論

在本指南中,我們解釋瞭如何使用三種方法更改預設shell。在這裡,我們使用了usermod和chsh實用程式來直接更改當前使用者的預設shell。此外,如果您想更改其他使用者的shell,則必須單獨定義使用者名稱。

您還可以透過編輯etc/passwd檔案來一次手動更改多個使用者的預設shell。因此,使用此方法時,必須特別注意您仍然需要輸入正確的shell。因此,您可以使用上述任何方法更改Linux中的預設shell。

更新於:2023年5月18日

1K+ 瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.