Shell 基本操作

查看終端默認嘅 Shell

echo $SHELL
/bin/bash

如果你喺當前終端中啟動咗一個新嘅 Shell(例如從 Bash 切換到 Zsh), 呢個命令顯示嘅仍然係默認嘅登錄 Shell,呢個配置係存放喺 /etc/passwd 裡面嘅。

grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash

喺 macOS 中,默認嘅 Shell 信息通常係存儲喺用戶賬戶設置中嘅,而唔係 /etc/passwd 文件中。 從 macOS Catalina(10.15)開始,默認嘅 shell 已更改為 zsh,之前嘅默認 Shell 係 bash。 可以通過以下方法查看默認 shell。

dscl . -read /Users/$(whoami) UserShell
UserShell: /bin/zsh

查看緊運行嘅 Shell

$0 喺 Shell 中運行返回 Shell 名稱,喺腳本中運行返回腳本名稱/路徑。

echo $0
-bash

前面嘅連字符 - 表示該 Shell 係用戶嘅登錄 Shell。

亦可以通過 ps 命令查看進程狀態。

ps -p $$
    PID TTY          TIME CMD
  17216 pts/0    00:00:00 bash

如果你喺當前終端中啟動咗一個新嘅 Shell(從 Bash 切換到 Sh),上面嘅兩種方法會顯示 sh

查看支持嘅 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
/usr/bin/tmux
/usr/bin/screen

修改默認嘅 Shell

修改成功後,/etc/passwd 中嘅內容會隨之更新。

chsh

修改當前用戶嘅登錄 Shell 會要求輸入用戶密碼。

chsh -s /bin/bash

使用 root 用戶或者 sudo 仲可以修改其他用戶嘅登錄 Shell。

sudo chsh -s /bin/bash kuga

注意:如果我哋輸入一個唔存在嘅 Shell。

chsh -s /bin/foo
chsh: /bin/foo is an invalid shell

佢會檢查輸入嘅 Shell 係咪喺 /etc/shells 文件中,防止因為輸入咗唔合法嘅 Shell 而導致登錄失敗。

usermod

使用呢個命令需要 root 用戶或者擁有 sudo 權限嘅用戶。

sudo usermod -s /bin/dash kuga

注意

usermod 唔會檢查 Shell 嘅合法性,唔建議使用。

sudo usermod -s /bin/notexist kuga

上面嘅命令唔會報錯,但會導致 kuga 用戶無法登錄。

添加 sudo 權限

查看 sudo 組嘅成員列表。

getent group sudo

畀用戶添加 sudo 組嘅權限,需要 root 執行。

usermod -aG sudo username

唔好直接編輯 passwd

如果唔小心寫錯配置,好有可能會導致成個系統無法登錄。

盡量唔好使用 root

我就係唔小心把 root 嘅登錄 Shell 改成咗 zsh, 但 Ubuntu 並冇安裝 zsh,所以 root 就登唔上去。 好彩我另外一個用戶有 sudo 權限,仲可以正常登錄, 我先成功把 root 嘅 Shell 改返嚟。 如果運氣唔好,冇 sudo 權限嘅用戶,咁就麻煩咗。

sudo chsh -s /bin/bash root