chsh 命令本身並不複雜,它的功能比較單一,就是負責檢視(顯示)和修改我們系統的登入 Shell。想修改登入 Shell,首先要知道我們的系統安裝了哪些 Shell。這裡有兩種方法可以檢視。
方法一:
[[email protected] ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
方法二:
[[email protected] ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
其實
chsh -l
命令本質上也是去檢視 /etc/shells 檔案。
檢視當前正在使用的 Shell
使用一個環境變數,就可以檢視到當前正在使用的 Shell 啦:
[roc[email protected] ~]$ echo $SHELL
/bin/bash
注意:SHELL一定要大寫。可以看到,我們目前使用的 Shell 是 bash。
聽說 zsh 不錯,於是我們就通過在命令列執行 zsh 命令切換到了 zsh 環境。可是,為什麼檢視當前 Shell 型別仍然是 /bin/bash 呢?
[[email protected] ~]$ zsh
[[email protected]]~% echo $SHELL
/bin/bash
[[email protected]]~%
請注意,我們雖然執行了 zsh,但是所謂“當前的 Shell”是一個大環境的概念,是針對一個已登入的使用者而言的。而我們執行 zsh 只是啟動了一個 zsh 的直譯器程式而已,並沒有改變大環境。如果想改變“當前的 Shell”,那麼還是要求助於 chsh 才可以。
將 Shell 環境真正切換到 zsh
[[email protected] ~]$ chsh -s /bin/zsh
Changing shell for roc.
Password:
Shell changed.
使用 chsh 命令的
-s
選項就可以修改登入的 Shell 了。
如果我們這時候滿懷欣喜地執行 echo $SHELL,就會發現然輸出的仍是 /bin/bash。這是因為 chsh 改變的是我們登入 Shell 的設定,我們必須退出再重新登入 Shell,才可以完全投入到 zsh 的懷抱。
真是一波三折,退出並重新登入後,終於看到了我們想要的 /bin/zsh 了:
[[email protected]]~% echo $SHELL
/bin/zsh
chsh -s 到底修改了哪裡
chsh -s
其實修改的就是 /etc/passwd 檔案中和我們所登入的使用者名稱相對應的那一行。現在我們來檢視一下:
[[email protected]]~% cat /etc/passwd|grep ^roc
roc:x:1001:1001::/home/roc:/bin/zsh
可以發現,輸出內容的最後部分已經變成了 /bin/zsh 了。重新啟動系統的時候,Linux 就會讀取這一命令來啟動新的 Shell。
好了,我們要恢復正常的工作環境,把 Shell 修改回我們熟悉的 /bin/bash 了:
[[email protected]]~% chsh -s /bin/bash
Changing Shell for roc.
Password:
Shell changed.