如何使用 chsh 在 Linux 上更改默認 Shell

已發表: 2022-01-29
Ubuntu 風格的 Linux 筆記本電腦系統上的風格化 shell 提示符。
Fatmawati Achmad Zaenuri/Shutterstock

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 

我們已經提到了bashdashrbash ,但是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 筆記本電腦