外殼,或稱命令列介面,是Linux操作系統的關鍵組件之一,為使用者提供了與系統互動的強大方式。
在Linux系統上,每個使用者都與一個預設外殼相關聯,該外殼決定了他們與系統互動時使用的命令解譯器。
更改使用者的預設外殼可能是必要的,原因有很多,例如個人偏好或需要不同外殼提供的特定功能。
在本文中,我們將探討如何在Linux中更改使用者的預設外殼。外殼是一個接受並解釋命令的程序;Linux有幾個開源外殼,如bash、sh、ksh、zsh、fish等,還有許多其他不那麼知名的外殼可供選擇。
Linux Bash 外殼
Bash(/bin/bash)是大多數(如果不是所有)Linux發行版上常用的外殼,通常是使用者帳戶的預設外殼。
在Linux中更改使用者的外殼有幾個原因,包括以下幾點:
- 將正常使用者登錄封鎖或停用在 Linux 中使用 nologin shell。
- 使用 shell 包裹腳本或程序來記錄使用者命令,然後再將其發送到 shell 以執行。在這裡,您將 shell 包裹指定為使用者的登錄 shell。
- 滿足使用者的需求(想要使用特定 shell 的使用者),尤其是那些具有管理權限的使用者。
在使用 useradd 或 adduser 工具創建使用者帳戶時,可以使用 --shell
標誌來指定使用者的登錄 shell 名稱,而不是在相應配置文件中指定的 shell。
A login shell can be accessed from a text-based interface or via an SSH from a remote Linux machine. However, if you log in via a graphical user interface (GUI), you can access the shell from terminal emulators like xterm, konsole, and many more.
列出 Linux 系統上可用的 shell
在 Linux 中,文件 /etc/shells 通常用於存儲系統上已安裝的有效登錄 shell 列表。此文件有助於識別哪些 shell 可供使用者使用命令(如 chsh)將其設置為默認 shell。
要查看 Linux 系統上可用的 shell 列表,您可以使用以下命令:
cat /etc/shells
示例輸出:
# /etc/shells: valid login shells /bin/sh /bin/bash /usr/bin/bash /bin/rbash /usr/bin/rbash /bin/dash /usr/bin/dash /usr/bin/tmux /usr/bin/screen
在繼續之前,請注意:
- A user can change their own shell to anything: which, however, must be listed in the /etc/shells file.
- 只有 root 可以運行未列在 /etc/shells 文件中的 shell。
- 如果帳戶具有受限制的登錄 shell,則只有 root 可以更改該使用者的 shell。
在 Linux 中查找當前 shell
在更改默認用戶的shell之前,重要的是要通過運行以下echo命令來確定當前shell,該命令顯示已登錄用戶的當前shell。
echo $SHELL /bin/bash
輸出顯示用戶目前正在使用Bash(/bin/bash)shell。
在Linux中更改默認Shell
現在讓我們討論三種不同的方法來更改Linux用戶的默認shell。
1. usermod工具
使用usermod命令修改存儲在/etc/passwd文件中的用戶帳戶詳細信息,並使用-s
或--shell
選項來更改用戶的登錄shell。
在此示例中,我們將首先檢查用戶tecmint的帳戶信息以查看其默認登錄shell,然後將其登錄shell從/bin/sh更改為/bin/bash,如下所示。
grep tecmint /etc/passwd sudo usermod --shell /bin/bash tecmint grep tecmint /etc/passwd

現在,用戶“tecmint”的默認shell將更改為bash。
2. chsh工具
使用chsh命令通過使用-s
或–shell選項來交互式地更改用戶的默認登錄shell,如下所示。
grep tecmint /etc/passwd sudo chsh --shell /bin/sh tecmint grep tecmint /etc/passwd

將“/bin/sh”替換為您想要設置的shell的實際路徑。例如,要將shell設置為sh,您將使用“/bin/sh”。
需要注意的是,對默認shell的更改通常在您下次登錄時生效。
上述兩種方法都修改了/etc/passwd文件中指定的shell,您可以像下面第三種方法那樣手動編輯。
3. 在/etc/passwd文件中更改用戶Shell
在這種方法中,只需使用您喜歡的命令行文本編輯器打開/etc/passwd文件,並更改特定用戶的shell。
sudo vi /etc/passwd OR sudo nano /etc/passwd

找到您想要更改默認shell的用戶對應的行。例如,如果該行看起來像這樣:
tecmint:x:1000:1000:John Doe:/home/tecmint:/bin/bash
最後一個字段,/bin/bash,代表默認shell(在本例中,Bash)。
要將shell字段的值更改為所需的shell,只需指定shell的路徑(/bin/zsh),如下所示。
tecmint:x:1000:1000:John Doe:/home/tecmint:/bin/zsh
編輯完成後,保存並關閉文件。
如何安裝另一個Shell?
與其他軟件包類似,像Zsh和Fish這樣的流行shell可以輕鬆地從您的發行版的倉庫中安裝,如下所示。
在Linux中安裝Zsh Shell
要在Linux上安裝Zsh,請使用適用於您的特定Linux發行版的以下適當命令。
sudo apt install zsh [On Debian, Ubuntu and Mint] sudo yum install zsh [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo emerge -a sys-apps/zsh [On Gentoo Linux] sudo apk add zsh [On Alpine Linux] sudo pacman -S zsh [On Arch Linux] sudo zypper install zsh [On OpenSUSE]
在Linux上安裝Fish Shell
要在Linux上安裝Zsh,請使用適合您特定Linux發行版的以下適當命令。
sudo apt install fish [On Debian, Ubuntu and Mint] sudo yum install fish [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo emerge -a sys-apps/fish [On Gentoo Linux] sudo apk add fish [On Alpine Linux] sudo pacman -S fish [On Arch Linux] sudo zypper install fish [On OpenSUSE]
請不要忘記閱讀這些相關主題:
在本文中,我們描述了在Linux中更改用戶Shell的各種方法。要與我們分享任何想法,請使用下面的評論部分。
Source:
https://www.tecmint.com/change-a-users-default-shell-in-linux/