這裡介紹如何在 Linux 中查詢自己帳號預設的登入 shell 設定,並使用 chsh 指令修改預設的 shell。

shell 是介於使用者與 Linux 系統之間的介面,而在 Linux 中常見的 shell 有好多種,例如 shcshtcshbash 等,一般的使用者可以自由選擇偏好的 shell 來使用。

查詢目前 Shell 與設定

使用者預設的 shell 設定,都寫在 /etc/passwd 這個檔案中,若要查詢自己的預設 shell,可以執行:

# 查看登入預設的 shell 設定值
grep `whoami` /etc/passwd | cut -d: -f7
/bin/bash

若想知道目前正在使用的 shell 是哪一個,可以查看 $0 這個特殊的環境變數:

# 查看目前的 shell 名稱
echo $0
bash

$0 這個特殊變數會包含目前執行程式的名稱,直接在 shell 的命列列底下查看這個變數的話,就會顯示目前正在執行的 shell 名稱。

我們也可以使用 ps 來查看目前使用中的 shell:

# 查看目前的 shell 名稱
/bin/ps -p $$
   PID TTY          TIME CMD
 81598 pts/0    00:00:00 bash

SHELL 這個環境變數也會記錄登入 shell 的名稱:

# 查看目前的 shell 名稱
echo $SHELL
/bin/bash

如果在登入 Linux 之後,又在命令列中執行其他的 shell 時,SHELL 變數的內容就不一定會是目前正在使用的 shell,有可能會是登入預設的 shell,若遇到這樣的狀況,建議改用 $0 的方式來判斷。

查詢系統上可用的 Shell

/etc/shells 這個檔案中會列出系統上所有可用的 shell,從這個檔案裡就可以知道有哪些 shell 可用:

# 列出系統上所有可用的 shell
cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

另一個方式是使用 chsh 加上 -l 參數列出可用的 shell,結果也是相同的:

# 列出系統上所有可用的 shell
chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

更改預設的 Shell 設定

若要更改自己帳號登入預設的 shell,可以使用 chsh 指令,並以 -s 參數指定新的 shell:

# 更改登入預設的 shell 設定
chsh -s /bin/bash

更改預設 shell 時,會要求輸入自己帳號的密碼,經過認證後即可更改預設的 shell。更改完成後,下次登入系統時,就會使用新的 shell 了。

參考資料:nixCraftStackOverflowTecmint