如何使用 chsh 在 Linux 上更改默認 Shell
已發表: 2022-01-29 Bash 不是唯一的 Linux shell。 嘗試其他 shell 很容易,例如非常流行的 Zsh。 當您找到您喜歡的一個時,使用chsh
命令將其設置為您的默認 shell。 我們會告訴你怎麼做。
為什麼外殼很重要
Shell 位於您和操作系統之間。 它在終端窗口內提供環境,允許您鍵入命令和運行程序。 Shell 檢查您的輸入並確定您想要什麼。 如果它可以自己執行您的出價,它就會這樣做。 如果它需要外部幫助,它會搜索路徑並找到可以按照您的要求執行任何操作的程序。
Linux 上有許多不同的 shell 可用。 它們都允許您執行相同的核心任務:探索文件系統、處理文件、啟動程序和運行腳本。 然而,他們每個人都以自己的方式執行這些任務,並且有自己的特點和特質。
外殼往往是由希望事物以特定方式表現的人設計的。 如果您的想法與該設計師的想法一致,那麼該外殼可能很適合您。 另外,在 Linux 上嘗試新的 shell 很容易。
在大多數 Linux 發行版中,包括 Ubuntu,默認 shell 是bash
。 它做得很好,而且非常有能力。 但是,另一個 shell 可能會提供一種節省時間的差異,這會對您的工作流程產生重大影響。 不看你永遠不知道!
相關:什麼是 ZSH,為什麼要使用它而不是 Bash?
一桶貝殼
我們之前已經介紹過不同的 Linux shell,但這裡快速介紹一下最常見的:
- bash: Bourne Again shell 是許多發行版中的默認設置。
- rbash:這個受限的
bash
shell 為在其中運行的人員或腳本提供了最少的功能。 - ash: Almquist shell 是 bash 的輕量級版本。
- 破折號: Debian Alquist Shell 是 Ubuntu 中的默認 shell 腳本。 雖然
bash
是默認的登錄和交互式 shell,但dash
用於運行系統進程,因為它比bash
輕得多。 - zsh: Z shell 是
bash
系列 shell 的現代版。 它提供了巧妙的改進,例如命令拼寫檢查和建議的更正。 - fish:這個友好的交互式 shell 是從頭開始編寫的,不是從任何其他 shell 家族派生的。 它旨在對用戶友好。 在它的許多其他好處中,fish 根據您的歷史記錄和當前文件夾的內容提供命令建議,類似於預測文本。
- ksh: KornShell 提供了一種特別強大的腳本語言。
相關: Bash、Zsh 和其他 Linux Shell 之間有什麼區別?
列出已安裝的 Shell
要查看您的計算機上安裝了哪些 shell,請使用此命令。 它只是列出了/etc/shells
文件的內容:
貓 /etc/shells
我們已經提到了bash
、 dash
和rbash
,但是sh
是什麼?
sh
是 Thompson shell,早在 1971 年就由貝爾實驗室的 Ken Thompson 編寫而成。 它不再維護,並且早已被現代 shell 所取代。 包含它純粹是為了保持與舊腳本的兼容性,這些舊腳本仍然具有以下內容作為其第一行:
#!/bin/sh
這指示系統使用sh
shell 來執行腳本。 你的機器上真的有那個古老的 shell,它是否被用來運行你的腳本? which
命令將告訴我們當您鍵入命令時實際運行的是哪個程序。
讓我們看看當你輸入sh
時會運行什麼:
哪個噓
這似乎找到了一個二進製文件。 但是,如果我們再深入一點,我們會發現它是一個實際指向dash
的符號鏈接,它是用於執行腳本的輕量級 shell:
ls -l /bin/sh
這是為希望在現代系統上找到sh
的腳本提供安全網的一種簡潔、輕量級的方式。
安裝另一個外殼
讓我們安裝fish
shell 並將其設置為dave
的默認值。 在 Ubuntu 上,我們鍵入以下命令:
sudo apt-get install fish
在 Manjaro 上,使用pacman
:
sudo pacman -Sy 魚
在 Fedora 上,鍵入以下內容:
須藤 dnf 安裝魚
安裝完成後,您可以再次檢查已安裝的 shell:
貓 /etc/shells
我們的新外殼顯示為/usr/bin/fish
。 記下那條路徑——你很快就會需要它。
$SHELL 環境變量
$SHELL
環境變量保存當前 shell 的名稱。 我們可以使用echo
檢查它設置為哪一個:
迴聲 $SHELL
讓我們開始fish
:
魚
現在,讓我們再次檢查$SHELL
環境變量的內容:
迴聲 $SHELL
我們第一次使用echo $SHELL
時,我們在bash
shell 中。 環境變量保存bash
可執行文件/bin/bash
的路徑。
當我們啟動fish
shell 時,我們會收到一條友好的歡迎消息,並且命令提示符會發生變化。 令人驚訝的是$SHELL
環境仍然包含bash
可執行文件/bin/bash
的路徑。 沒關係——這很正常。
當您啟動一個新的 shell(或任何其他程序)時,它會繼承父 shell 的環境。 因此, fish
shell 從bash
shell 繼承了全局和導出的環境變量。 因為$SHELL
環境變量中的值沒有改變,所以它在fish
shell 中的值與在bash
shell 中的值相同。
我們像任何其他程序一樣運行fish
。 我們也可以使用exit
來退出fish
。 它像任何其他程序一樣關閉,然後我們返回bash
shell。
這非常適合嘗試新的 shell,看看它們能做什麼,以及你是否與它們相處融洽。 您可以在跳躍之前進行探索,並採用一個作為您的首選外殼。
如果您決定將fish
(或任何其他 shell)設為默認值,則需要使用chsh
命令。
chsh 命令
chsh
命令允許您更改默認 shell。 訣竅是意識到它允許您更改默認登錄和默認交互式 shell。 您可能想要更改其中一個或兩個,或兩者兼而有之。
每當您登錄以獲得命令提示符時,您都會使用配置為您的登錄 shell 的 shell。 當您已經登錄並打開終端窗口時,您可以使用配置為交互式 shell 的 shell。 這些可以是相同的或不同的外殼。
要設置您的登錄 shell,請使用不帶參數的chsh
:
chsh
系統會提示您輸入密碼。 然後,您必須鍵入新 shell 的路徑並按 Enter。
如果我們從另一台計算機遠程連接到這台測試計算機,一旦我們登錄,我們就會發現自己在fish
中。
要更改交互式 shell,請使用帶有-s
(shell)選項的chsh
。 在命令行上傳遞新 shell 的路徑:
chsh -s /usr/bin/fish
系統會提示您輸入密碼並返回到當前 shell 的命令提示符。 您需要註銷並重新登錄才能使更改生效。 當您這樣做時,您將看到問候語和fish
shell 命令提示符。
$SHELL
環境變量現在保存新默認 shell 的路徑:
迴聲 $SHELL
更改另一個用戶帳戶的外殼
如果您具有 root 權限並且可以使用sudo
,則可以更改其他用戶帳戶的 shell。 該命令與以前相同,只是在命令行中添加了該人的用戶名:
sudo chsh -s /usr/bin/魚瑪麗
當mary
下次登錄時,她會在打開終端窗口時看到新的 shell。
每個人都有一個最愛
只要您對自己選擇的外殼感到滿意,並且它適合您,那就太好了! 請記住,它必須能夠運行常見的腳本,例如安裝例程。 對於這裡提到的shell,這應該不是問題。
當然,您也可以下載並安裝一個新的 shell,然後將其用於試駕,而無需對您的計算機進行任何配置更改。 當您準備打結時, chsh
將為您執行儀式。
Linux 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev ·查看·字符串·類型·重命名· zip ·解壓縮· mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 別名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超時·牆·是·殺死·睡眠· sudo · su ·時間· groupadd · usermod ·組· lshw ·關機·重新啟動·停止·關機· passwd · lscpu · crontab ·日期· bg · fg | |
聯網 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦