每個 Linux 管理員都可能聽到過 shell 這個詞。你知道什麼是 shell 嗎? 你知道 shell 在 Linux 中的作用是什麼嗎? Linux 中有多少個 shell 可用?
shell 是一個程式,它是提供使用者和核心之間互動的介面。
核心是 Linux 作業系統的核心,它管理使用者和作業系統之間的所有內容。Shell 可供所有使用者在啟動終端時使用。終端啟動後,使用者可以執行任何可用的命令。當 shell 完成命令的執行時,你將在終端視窗上獲取輸出。
Bash(全稱是 Bourne Again Shell)是執行在今天的大多數 Linux 發行版上的預設的 shell,它非常受歡迎,並具有很多功能。但今天我們將討論 Fish Shell 。
Fish 是友好的互動式 shell ,是一個功能齊全,智慧且對使用者友好的 Linux 命令列 shell ,它帶有一些在大多數 shell 中都不具備的方便功能。
這些功能包括自動補全建議、Sane Scripting、手冊頁補全、基於 Web 的設定器和 Glorious VGA Color 。你對它感到好奇並想測試它嗎?如果是這樣,請按照以下安裝步驟繼續安裝。
它的安裝非常簡單,除了少數幾個發行版外,它在大多數發行版中都沒有。但是,可以使用以下 fish 倉庫 輕鬆安裝。
對於基於 Arch Linux 的系統, 使用 Pacman 命令 來安裝 fish shell。
$ sudo pacman -S fish
對於 Ubuntu 16.04/18.04 系統來說,請使用 APT-GET 命令 或者 APT 命令 安裝 fish shell。
$ sudo apt-add-repository ppa:fish-shell/release-3$ sudo apt-get update$ sudo apt-get install fish
對於 Fedora 系統來說,請使用 DNF 命令 安裝 fish shell。
對於 Fedora 29 系統來說:
$ sudo dnf config-manager --add-repo https://download.opensuse.org/repositories/shells:/fish:/release:/3/Fedora_29/shells:fish:release:3.repo$ sudo dnf install fish
對於 Fedora 28 系統來說:
$ sudo dnf config-manager --add-repo https://download.opensuse.org/repositories/shells:/fish:/release:/3/Fedora_28/shells:fish:release:3.repo$ sudo dnf install fish
對於 Debian 系統來說,請使用 APT-GET 命令 或者 APT 命令 安裝 fish shell。
對於 Debian 9 系統來說:
$ sudo wget -nv https://download.opensuse.org/repositories/shells:fish:release:3/Debian_9.0/Release.key -O Release.key$ sudo apt-key add - < Release.key$ sudo echo 'deb http://download.opensuse.org/repositories/shells:/fish:/release:/3/Debian_9.0/ /' > /etc/apt/sources.list.d/shells:fish:release:3.list$ sudo apt-get update$ sudo apt-get install fish
對於 Debian 8 系統來說:
$ sudo wget -nv https://download.opensuse.org/repositories/shells:fish:release:3/Debian_8.0/Release.key -O Release.key$ sudo apt-key add - < Release.key$ sudo echo 'deb http://download.opensuse.org/repositories/shells:/fish:/release:/3/Debian_8.0/ /' > /etc/apt/sources.list.d/shells:fish:release:3.list$ sudo apt-get update$ sudo apt-get install fish
對於 RHEL/CentOS 系統來說,請使用 YUM 命令 安裝 fish shell。
對於 RHEL 7 系統來說:
$ sudo yum-config-manager --add-repo https://download.opensuse.org/repositories/shells:/fish:/release:/3/RHEL_7/shells:fish:release:3.repo$ sudo yum install fish
對於 RHEL 6 系統來說:
$ sudo yum-config-manager --add-repo https://download.opensuse.org/repositories/shells:/fish:/release:/3/RedHat_RHEL-6/shells:fish:release:3.repo$ sudo yum install fish
對於 CentOS 7 系統來說:
$ sudo yum-config-manager --add-repo https://download.opensuse.org/repositories/shells:fish:release:2/CentOS_7/shells:fish:release:2.repo$ sudo yum install fish
對於 CentOS 6 系統來說:
$ sudo yum-config-manager --add-repo https://download.opensuse.org/repositories/shells:fish:release:2/CentOS_6/shells:fish:release:2.repo$ sudo yum install fish
對於 openSUSE Leap 系統來說,請使用 Zypper 命令 安裝 fish shell。
$ sudo zypper addrepo https://download.opensuse.org/repositories/shells:/fish:/release:/3/openSUSE_Leap_42.3/shells:fish:release:3.repo$ suod zypper refresh$ sudo zypper install fish
一旦你成功安裝了 fish shell 。只需在你的終端上輸入 fish
,它將自動從預設的 bash shell 切換到 fish shell 。
$ fish
當你在 fish shell 中鍵入任何命令時,它會在輸入幾個字母後以淺灰色自動建議一個命令。
一旦你得到一個建議然後按下向右游標鍵(LCTT 譯註:原文是左,錯的)就能完成它而不是輸入完整的命令。
你可以在鍵入幾個字母後立即按下向上游標鍵檢索該命令以前的歷史記錄。它類似於 bash shell 的 CTRL+r
選項。
如果你想檢視給定命令是否還有其他可能性,那麼在鍵入幾個字母後,只需按一下 Tab
鍵即可。
再次按 Tab
鍵可檢視完整列表。
fish 會進行語法高亮顯示,你可以在終端中鍵入任何命令時看到。無效的命令被著色為 RED color
。
同樣的,有效的命令以不同的顏色顯示。此外,當你鍵入有效的檔案路徑時,fish 會在其下面加下劃線,如果路徑無效,則不會顯示下劃線。
fish shell 中有一個很酷的功能,它允許我們通過網路瀏覽器設定顏色、提示符、功能、變數、歷史和鍵繫結。
在終端上執行以下命令以啟動 Web 設定介面。只需按下 Ctrl+c
即可退出。
$ fish_configWeb config started at 'file:///home/daygeek/.cache/fish/web_config-86ZF5P.html'. Hit enter to stop.qt5ct: using qt5ct plugin^CShutting down.
其他 shell 支援可程式化的補全,但只有 fish 可以通過解析已安裝的手冊頁自動生成它們。
要使用該功能,請執行以下命令:
$ fish_update_completionsParsing man pages and writing completions to /home/daygeek/.local/share/fish/generated_completions/ 3466 / 3466 : zramctl.8.gz
如果你想測試 fish shell 一段時間,你可以將 fish shell 設定為預設 shell,而不用每次都切換它。
要這樣做,首先使用以下命令獲取 Fish Shell 的位置。
$ whereis fishfish: /usr/bin/fish /etc/fish /usr/share/fish /usr/share/man/man1/fish.1.gz
通過執行以下命令將預設 shell 更改為 fish shell 。
$ chsh -s /usr/bin/fish
提示:只需驗證 Fish Shell 是否已新增到 /etc/shells
目錄中。如果不是,則執行以下命令以附加它。
$ echo /usr/bin/fish | sudo tee -a /etc/shells
完成測試後,如果要返回 bash shell ,請使用以下命令。
暫時返回:
$ bash
永久返回:
$ chsh -s /bin/bash