在Linux中更改用戶默認shell的3種方法

外殼,或稱命令列介面,是Linux操作系統的關鍵組件之一,為使用者提供了與系統互動的強大方式。

在Linux系統上,每個使用者都與一個預設外殼相關聯,該外殼決定了他們與系統互動時使用的命令解譯器。

更改使用者的預設外殼可能是必要的,原因有很多,例如個人偏好或需要不同外殼提供的特定功能。

在本文中,我們將探討如何在Linux中更改使用者的預設外殼。外殼是一個接受並解釋命令的程序;Linux有幾個開源外殼,如bashshkshzshfish等,還有許多其他不那麼知名的外殼可供選擇。

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
Change User Shell using Usermod

現在,用戶“tecmint”的默認shell將更改為bash

2. chsh工具

使用chsh命令通過使用-s–shell選項來交互式地更改用戶的默認登錄shell,如下所示。

grep tecmint /etc/passwd
sudo chsh --shell /bin/sh tecmint
grep tecmint /etc/passwd
Change User Shell Using chsh

將“/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
Change User Shell in Passwd File

找到您想要更改默認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/