Linux中國

Zsh 入門

Z-shell(Zsh)是一種 Bourne 式的互動式 POSIX shell,以其豐富的創新功能而著稱。Z-Shell 用戶經常會提及它的許多便利之處,讚譽它對效率的提高和豐富的自定義支持。

如果你剛接觸 Linux 或 Unix,但你的經驗足以讓你可以打開終端並運行一些命令的話,那麼你可能使用的就是 Bash shell。Bash 可能是最具有代表意義的自由軟體 shell,部分是因為它具有的先進的功能,部分是因為它是大多數流行的 Linux 和 Unix 操作系統上的默認 shell。但是,隨著使用的次數越多,你可能會開始發現一些細節可能能夠做的更好。開源有一個眾所周知的地方,那就是選擇。所以,許多人選擇從 Bash 「畢業」到 Z。

Zsh 介紹

Shell 只是操作系統的介面。互動式 shell 程序允許你通過稱為標準輸入(stdin)的某個東西鍵入命令,並通過標準輸出(stdout)和標準錯誤(stderr)獲取輸出。有很多種 shell,如 Bash、Csh、Ksh、Tcsh、Dash 和 Zsh。每個都有其開發者所認為最適合於 Shell 的功能。而這些功能的好壞,則取決於最終用戶。

Zsh 具有互動式製表符補全、自動文件搜索、支持正則表達式、用於定義命令範圍的高級速記符,以及豐富的主題引擎等功能。這些功能也包含在你所熟悉的其它 Bourne 式 shell 環境中,這意味著,如果你已經了解並喜歡 Bash,那麼你也會熟悉 Zsh,除此以外,它還有更多的功能。你可能會認為它是一種 Bash++。

安裝 Zsh

用你的包管理器安裝 Zsh。

在 Fedora、RHEL 和 CentOS 上:

$ sudo dnf install zsh

在 Ubuntu 和 Debian 上:

$ sudo apt install zsh

在 MacOS 上你可以使用 MacPorts 安裝它:

$ sudo port install zsh

或使用 Homebrew:

$ brew install zsh

在 Windows 上也可以運行 Zsh,但是只能在 Linux 層或類似 Linux 的層之上運行,例如 Windows 的 Linux 子系統(WSL)或 Cygwin。這類安裝超出了本文的範圍,因此請參考微軟的文檔。

設置 Zsh

Zsh 不是終端模擬器。它是在終端模擬器中運行的 shell。因此,要啟動 Zsh,必須首先啟動一個終端窗口,例如 GNOME Terminal、Konsole、Terminal、iTerm2、rxvt 或你喜歡的其它終端。然後,你可以通過鍵入以下命令啟動 Zsh:

$ zsh

首次啟動 Zsh 時,會要求你選擇一些配置選項。這些都可以在以後更改,因此請按 1 繼續。

This is the Z Shell configuration function for new users, zsh-newuser-install.

(q)  Quit and do nothing.

(0)  Exit, creating the file ~/.zshrc

(1)  Continue to the main menu.

偏好設置分為四類,因此請從頂部開始。

  1. 第一個類使你可以選擇在 shell 歷史記錄文件中保留多少個命令。默認情況下,它設置為 1,000 行。
  2. Zsh 補全是其最令人興奮的功能之一。為了簡單起見,請考慮使用其默認選項激活它,直到你習慣了它的工作方式。按 1 使用默認選項,按 2 手動設置選項。
  3. 選擇 Emacs 式鍵綁定或 Vi 式鍵綁定。Bash 使用 Emacs 式綁定,因此你可能已經習慣了。
  4. 最後,你可以了解(以及設置或取消設置)Zsh 的一些精妙的功能。例如,當你提供不帶命令的非可執行路徑時,可以通過讓 Zsh 來改變目錄而無需你使用 cd 命令。要激活這些額外選項之一,請輸入選項號並輸入 s 進行設置。請嘗試打開所有選項以獲得完整的 Zsh 體驗。你可以稍後通過編輯 ~/.zshrc 取消設置它們。

要完成配置,請按 0

使用 Zsh

剛開始,Zsh 的使用感受就像使用 Bash 一樣,這無疑是其眾多功能之一。例如,Bash 和 Tcsh 之間就存在嚴重的差異,因此如果你必須在工作中或在伺服器上使用 Bash,而 Zsh 就可以在家裡輕鬆嘗試和使用,這樣在 Bash 和 Zsh 之間輕鬆切換就是一種便利。

在 Zsh 中改變目錄

正是這些微小的差異使 Zsh 變得好用。首先,嘗試在沒有 cd 命令的情況下,將目錄更改為 Documents 文件夾。簡直太棒了,難以置信。如果你輸入的是目錄路徑而沒有進一步的指令,Zsh 會更改為該目錄:

% Documents
% pwd
/home/seth/Documents

而這會在 Bash 或任何其他普通 shell 中導致錯誤。但是 Zsh 卻根本不是普通的 shell,而這僅僅才是開始。

在 Zsh 中搜索

當你想使用普通 shell 程序查找文件時,可以使用 findlocate 命令。最起碼,你可以使用 ls -R 來遞歸地列出一組目錄。Zsh 內置有允許它在當前目錄或任何其他子目錄中查找文件的功能。

例如,假設你有兩個名為 foo.txt 的文件。一個位於你的當前目錄中,另一個位於名為 foo 的子目錄中。在 Bash Shell 中,你可以使用以下命令列出當前目錄中的文件:

$ ls
foo.txt

你可以通過明確指明子目錄的路徑來列出另一個目錄:

$ ls foo
foo.txt

要同時列出這兩者,你必須使用 -R 開關,並結合使用 grep

$ ls -R | grep foo.txt
foo.txt
foo.txt

但是在 Zsh 中,你可以使用 ** 速記符號:

% ls **/foo.txt
foo.txt
foo.txt

你可以在任何命令中使用此語法,而不僅限於 ls。想像一下在這樣的場景中提高的效率:將特定文件類型從一組目錄中移動到單個位置、將文本片段串聯到一個文件中,或對日誌進行抽取。

使用 Zsh 的製表符補全

製表符補全是 Bash 和其他一些 Shell 中的高級用戶功能,它變得司空見慣,席捲了 Unix 世界。Unix 用戶不再需要在輸入冗長而乏味的路徑時使用通配符(例如輸入 /h*/s*h/V*/SCS/sc*/comp*/t*/a*/*9/04/LS*boat*v,比輸入 /home/seth/Videos/SCS/scenes/composite/takes/approved/109/04/LS_boat-port-cargo-mover.mkv 要容易得多)。相反,他們只要輸入足夠的唯一字元串即可按 Tab 鍵。例如,如果你知道在系統的根目錄下只有一個以 h 開頭的目錄,則可以鍵入 /h,然後單擊 Tab。快速、簡單、高效。它還會確認路徑存在;如果 Tab 無法完成任何操作,則說明你在錯誤的位置或輸入了錯誤的路徑部分。

但是,如果你有許多目錄有五個或更多相同的首字母,Tab 會堅決拒絕進行補全。儘管在大多數現代終端中,它將(至少會)顯示阻止其進行猜測你的意思的文件,但通常需要按兩次 Tab 鍵才能顯示它們。因此,製表符補全通常會變成來回按下鍵盤上字母和製表符,以至於你好像在接受鋼琴獨奏會的訓練。

Zsh 通過循環可能的補全來解決這個小問題。如果鍵入 ls ~/D 並按 Tab,則 Zsh 首先使用 Documents 來完成命令;如果再次按 Tab,它將提供 Downloads,依此類推,直到找到所需的選項。

Zsh 中的通配符

在 Zsh 中,通配符的行為不同於 Bash 中用戶所習慣的行為。首先,可以對其進行修改。例如,如果要列出當前目錄中的所有文件夾,則可以使用修改後的通配符:

% ls
dir0   dir1   dir2   file0   file1
% ls *(/)
dir0   dir1   dir2

在此示例中,(/) 限定了通配符的結果,因此 Zsh 僅顯示目錄。要僅列出文件,請使用 (.)。要列出符號鏈接,請使用 (@)。要列出可執行文件,請使用 (*)

% ls ~/bin/*(*)
fop  exify  tt

Zsh 不僅僅知道文件類型。它也可以使用相同的通配符修飾符約定根據修改時間列出。例如,如果要查找在過去八個小時內修改的文件,請使用 mh 修飾符(即 「modified hours」 的縮寫)和小時的負整數:

% ls ~/Documents/*(mh-8)
cal.org   game.org   home.org

要查找超過(例如)兩天前修改過的文件,修飾符更改為 md(即 「modified day」 的縮寫),並帶上天數的正整數:

% ls ~/Documents/*(+2)
holiday.org

通配符修飾符和限定符還可以做很多事情,因此,請閱讀 Zsh 手冊頁,以獲取全部詳細信息。

通配符的副作用

要像在 Bash 中使用通配符一樣使用它,有時必須在 Zsh 中對通配符進行轉義。例如,如果要在 Bash 中將某些文件複製到伺服器上,則可以使用如下通配符:

$ scp IMG_*.JPG seth@example.com:~/www/ph*/*19/09/14

這在 Bash 中有效,但是在 Zsh 中會返回錯誤,因為它在發出 scp 命令之前嘗試在遠程端擴展該變數(通配符)。為避免這種情況,必須轉義遠程變數(通配符):

% scp IMG_*.JPG seth@example.com:~/www/ph*/*19/09/14

當你切換到新的 shell 時,這些小異常可能會使你感到沮喪。使用 Zsh 時會遇到的問題不多(體驗過 Zsh 後切換回 Bash 的可能遇到更多),但是當它們發生時,請保持鎮定且坦率。嚴格遵守 POSIX 的情況很少會出錯,但是如果失敗了,請查找問題以解決並繼續。對於許多在工作中困在一個 shell 上而在家中困在另一個 shell 上的用戶來說,hyperpolyglot.org 已被證明其是無價的。

在我的下一篇 Zsh 文章中,我將向你展示如何安裝主題和插件以定製你的 Z-Shell 甚至 Z-ier。

via: https://opensource.com/article/19/9/getting-started-zsh

作者:Seth Kenlon 選題:lujun9972 譯者:wxy 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
1
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國