[TOC]
前言
在類 UNIX 系統(tǒng)(比如 Linux糠馆,Mac)環(huán)境中娄涩,我們常常在終端中輸入命令與系統(tǒng)進(jìn)行交互嘲驾,大多數(shù)系統(tǒng)默認(rèn)使用的 shell 程序?yàn)?Bash。
但是 Bash 本身的色調(diào)非常單調(diào)相恃,因此辜纲,如果我們需要長(zhǎng)時(shí)間工作在命令行環(huán)境種笨觅,適當(dāng)對(duì)終端進(jìn)行美化是一個(gè)非常不錯(cuò)的選擇。
幾個(gè)概念釋義
在我們美化 Linux 終端前耕腾,我們先了解一下以下幾個(gè)概念:
終端(terminal):擁有鍵盤+顯示器的設(shè)備见剩。
終端模擬器(terminal emulator):采用圖形界面模擬 終端 操作的程序。
shell:操作系統(tǒng)和終端之間的一個(gè)“殼”應(yīng)用扫俺,可以將終端發(fā)送的字符(命令)發(fā)送給系統(tǒng)苍苞,并將系統(tǒng)運(yùn)行命令的結(jié)果傳遞給終端顯示。
Bash:大多數(shù)類 UNIX 系統(tǒng)的默認(rèn) shell 程序狼纬。
注:在類 UNIX 系統(tǒng)中羹呵,通常將 終端模擬器 簡(jiǎn)稱為 終端,因此下文涉及到 終端 的地方疗琉,如無特別強(qiáng)調(diào)冈欢,均指 終端模擬器。
zsh
在前面對(duì) 終端盈简,終端模擬器凑耻,shell 進(jìn)行介紹后,我們應(yīng)當(dāng)能知道柠贤,大多數(shù)類 UNIX 系統(tǒng)自帶的終端(即命令行工具)香浩,其界面相對(duì)比較單調(diào)。
因此臼勉,如果我們想美化終端邻吭,可以更換另一個(gè)更加美觀的終端(比如 Mac 系統(tǒng)的 iterm2),或者更換另一個(gè)可以配置終端的 shell 程序宴霸。
我們這里主要對(duì) Ubuntu 系統(tǒng)終端進(jìn)行美化囱晴,所以選擇更換 shell。
目前類 UNIX 系統(tǒng)上最常用的第三方 shell 就是 zsh:zsh 又稱為 Z shell瓢谢,是一個(gè)交互式 shell 程序速缆,也可以作為腳本解釋器。zsh 基于 Bourne Shell(sh)恩闻,提供了很多新特性,比如插件支持和主題更換剧董。
zsh 的安裝方法如下:這里主要介紹在 Ubuntu 系統(tǒng)中進(jìn)行安裝:
- 下載并安裝 zsh:
sudo apt install zsh
- 查看是否安裝成功:
zsh --version # ==> Expected result: zsh 5.4.2 or more recent
- 設(shè)置為終端默認(rèn) shell:
chsh -s $(which zsh)
- 如果第 3 步設(shè)置失敗幢尚,則進(jìn)行如下設(shè)置:
# ~/.bash_profile 添加如下內(nèi)容
export SHELL=`which zsh`
[ -z "$ZSH_VERSION" ] && exec "$SHELL" -l
- 登出,然后再登入翅楼,輸入以下命令查看下是否已登錄 zsh:
echo $SHELL # ==> 如果顯示: /bin/zsh尉剩,則為成功
- 輸入以下命令,查看當(dāng)前是否使用 zsh:
$SHELL --version # ==> Expected result: 'zsh 5.4.2' or similar
更多安裝方法毅臊,請(qǐng)查看:Installing ZSH
Oh-My-Zsh
zsh 本身的配置十分復(fù)雜理茎,因此一般不直接對(duì)其進(jìn)行配置,而是使用第三方框架進(jìn)行設(shè)置。
當(dāng)前最受歡迎的 zsh 配置管理框架為:Oh-My-Zsh
以下是 Oh-My-Zsh 的安裝方法:
# 使用 curl
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 或者使用 wget
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 或者手動(dòng)進(jìn)行安裝
curl -Lo install.sh https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
sh install.sh
Oh-My-Zsh 常用配置
當(dāng)安裝完成 Oh-My-Zsh 后皂林,會(huì)發(fā)現(xiàn)創(chuàng)建了~/.zshrc
文件朗鸠,這就是 zsh 的配置文件。
Oh-My-Zsh 為 zsh 提供了很多的插件(Plugin)和主題(Theme)配置础倍。
- 插件(Plugin):zsh 插件,簡(jiǎn)單來說,就是 zsh 可以解釋執(zhí)行的一段 shell 腳本焙压。因此段审,一個(gè)插件可以簡(jiǎn)單地執(zhí)行一些命令,也可以提供對(duì)特定命令和函數(shù)的補(bǔ)全功能德迹。
要使用 插件芽卿,首先需要使能插件功能,方法如下:
在~/.zshrc
文件中胳搞,添加如下內(nèi)容:
plugins=(
git
adb
ruby
)
如上就是添加了 git卸例,adb,ruby 插件流酬,更多其他插件币厕,請(qǐng)參考:zsh Plugins
- 主題(Theme):zsh 主題是一個(gè)可以更改控制臺(tái)的 zsh 腳本。一個(gè)主題可以做很多事情芽腾,比如旦装,控制臺(tái)自動(dòng)更新當(dāng)前 git 倉(cāng)庫(kù)的狀態(tài),或者顯示每秒更新的一個(gè)時(shí)鐘...
要使用 主題摊滔,首先需要使能該功能阴绢,方法如下:
在~/.zshrc
文件中,設(shè)置ZSH_THEME
為要使用的具體主題名艰躺,比如:
ZSH_THEME=robbyrussell
如上就是讓 zsh 啟用robbyrussell
主題呻袭。更多其他主題,請(qǐng)參考:zsh Themes腺兴。
注:如果不想使用主題左电,直接設(shè)置:ZSH_THEME=""
這里推薦一個(gè)主題:powerlevel10k,安裝方法如下:
# 首先下載到 on-my-zsh 的本地目錄
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
# ~/.zshrc 設(shè)置如下內(nèi)容
ZSH_THEME="powerlevel10k/powerlevel
進(jìn)階配置
Oh-My-Zsh 對(duì)插件和主題的配置雖然很簡(jiǎn)單页响,但是對(duì)于非內(nèi)置組件篓足,我們還需要進(jìn)行手動(dòng)下載,再進(jìn)行配置闰蚕。而這些步驟栈拖,完全可以進(jìn)行自動(dòng)化。
因此没陡,網(wǎng)絡(luò)上其實(shí)已存在很多的 zsh 的插件管理器涩哟,比如:antigen索赏,zgen,zplug...
但是這里我推薦的是:zinit贴彼。
多方測(cè)評(píng)表明潜腻,zinit 是當(dāng)前加載速度最快的 zsh 插件管理器,并且隨著插件的數(shù)量增多锻弓,zinit 的優(yōu)勢(shì)會(huì)更大砾赔。
zinit 的插件加載速度快的一個(gè)主要原因就是:其提供了一個(gè) 插件延遲加載(Turbo) 的功能,使得插件可以在 zsh 啟功后青灼,再進(jìn)行加載暴心。
下面是 zinit 的安裝方法:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/zdharma/zinit/master/doc/install.sh)"
安裝完成 zinit 后,我們就可以在~/.zshrc
中配置插件/主題杂拨,比如专普,對(duì)于上文建議使用的 powerlevel10k 主題,其安裝方法如下:
- 在
~/.zshrc
文件中配置主題為 powerlevel10k:
# ~/.zshrc
# 原生的主題配置可去除
# ZSH_THEME="powerlevel10k/powerlevel
zinit ice depth=1; zinit light romkatv/powerlevel10k
- 重新加載
~/.zshrc
:
source ~/.zshrc
此時(shí)就可以看到 zinit 會(huì)去下載 powerlevel10k弹沽,并自動(dòng)進(jìn)行設(shè)置檀夹。
注:可以通過執(zhí)行p10k configure
命令來配置 powerlevel10k,在執(zhí)行該命令之前策橘,建議先安裝以下字體:
直接雙擊下載的文件炸渡,選擇安裝,然后在設(shè)置終端字體為MesloLGS NF
即可丽已。
更多 zinit 的用法蚌堵,請(qǐng)查看:zsh 插件管理器 - Zinit
最后放上效果圖以及附上本人配置:.zshrc、.p10k.zsh
終端發(fā)展史
以下是在查閱資料的時(shí)候沛婴,從網(wǎng)上看到的一個(gè)問答:「What's the difference between terminal, shell, command line, and bash?」吼畏,里面有人對(duì)終端的發(fā)展演化進(jìn)行了介紹,我覺得介紹很簡(jiǎn)潔嘁灯,就簡(jiǎn)單記錄一下:
在 19 世紀(jì)末期泻蚊,有一種叫做 teletype 或者 TTY 的技術(shù)。一個(gè)由幾個(gè)電子元器件組成的老式機(jī)械打印機(jī)丑婿,基本上可以被劃分為兩部分:鍵盤 和 打印機(jī)性雄。兩者之間由電線進(jìn)行連接,你可以通過在鍵盤上打字羹奉,此時(shí)遠(yuǎn)端的打印機(jī)就會(huì)一個(gè)一個(gè)的回顯鍵盤輸入的字符毅贮。
在 20 世紀(jì)時(shí),計(jì)算機(jī)開始興起尘奏,電傳打字技術(shù)(teletype technology )就很快地被應(yīng)用到計(jì)算機(jī)上。用戶可以使用鍵盤進(jìn)行輸入病蛉,從而對(duì)計(jì)算機(jī)進(jìn)行控制炫加,打印機(jī)可以同時(shí)連接到相同的計(jì)算機(jī)上瑰煎,實(shí)時(shí)回顯用戶的操作輸出。
電傳打字技術(shù)提供了一個(gè) 命令行交互接口(command line interface) 風(fēng)格的用戶接口俗孝。命令行交互接口其實(shí)就只是用于與計(jì)算機(jī)進(jìn)行交互的一種方式:即用戶輸入一個(gè)命令給到計(jì)算機(jī)酒甸,然后計(jì)算機(jī)回顯操作結(jié)果并且等待下一個(gè)命令。
CRT 視頻顯示技術(shù)(CRT video display technology )在計(jì)算機(jī)出現(xiàn)之前就已經(jīng)存在了赋铝,因此人們很快就察覺到可以將視頻顯示與計(jì)算機(jī)結(jié)合起來插勤。一個(gè)顯著的例子就是1950年時(shí)的 SAGE air defense system,詳情可查看該視頻(從 3:40 開始)革骨。
由于計(jì)算機(jī)與視頻顯示技術(shù)聯(lián)合越來越常見农尖,現(xiàn)存的 命令行接口 思想就很快地被應(yīng)用于新的系統(tǒng) -- 保留了鍵盤,但是將打印機(jī)替換為屏幕(顯示器)良哲。這種 鍵盤+文字顯示 的設(shè)備就被稱為 終端(terminal)盛卡,由于它在計(jì)算機(jī)連接的另一端,你可以認(rèn)為它 “終止” 了連接筑凫。
所以 終端(terminal) 就是帶有鍵盤和屏幕的設(shè)備滑沧,要么通過電話線經(jīng)由調(diào)制解調(diào)器,或者通過實(shí)體線纜連接到一臺(tái)大型計(jì)算機(jī)(通常是大型機(jī)或者早期的 UNIX-based 系統(tǒng))上巍实。終端 的功能只能在屏幕上顯示遠(yuǎn)程計(jì)算機(jī)發(fā)送來的文字信息滓技,或者發(fā)送按鍵字符給到遠(yuǎn)程計(jì)算機(jī)。創(chuàng)建文字顯示 UI 是由計(jì)算機(jī)負(fù)責(zé)的棚潦。之所以稱為 終端 是因?yàn)樗挥谟?jì)算機(jī)連線的末端令漂,或者說 “終止端”。
因此為了讓系統(tǒng)能夠發(fā)揮效用瓦盛,計(jì)算機(jī)中必須運(yùn)行一種可以告訴 終端 顯示數(shù)據(jù)和處理用戶按鍵輸入的應(yīng)用程序洗显,在 UNIX(以及后來的 Linux)世界中,這種應(yīng)用程序就被稱作 shell原环。
shell 就是提供命令行接口的應(yīng)用程序挠唆。任何提供用戶接口的應(yīng)用在寬松定義上都可認(rèn)為是 shell,比如 Windows嘱吗,Mac 和 手機(jī)提供的圖形用戶界面就可以認(rèn)為是一種圖形化 shell玄组。
不同的 shell 可以有不同方式進(jìn)行命令輸入,重定向輸入/輸出流谒麦,管理復(fù)雜任務(wù)俄讹,比如同時(shí)運(yùn)行多個(gè)程序等等。在早期的 UNIX 中绕德,創(chuàng)建了許多不同的 shell 程序患膛,很多到現(xiàn)在仍然存在。Bash 就是最受歡迎的 shell 程序耻蛇,并且是許多 Linux 和 UNIX 系統(tǒng)的默認(rèn) shell踪蹬。
今天胞此,許多需要使用 終端 來執(zhí)行操作的用戶都使用了擁有圖形界面的 GUI 應(yīng)用程序,這種有 GUI 界面的應(yīng)用我們稱之為 終端模擬器(terminal emulator)跃捣。它模擬了具備字符輸入功能的終端設(shè)備漱牵。這看起來可能不重要,當(dāng)在它們過時(shí)之前疚漆,終端就已具備額外的功能酣胀,比如鼠標(biāo)和顏色文字。因此娶聘,終端模擬器是更加復(fù)雜的應(yīng)用闻镶。
在類 UNIX 系統(tǒng)(包括一些 Linux 發(fā)行版本 和 Mac)中,終端模擬器 常常被簡(jiǎn)稱為 終端(terminal)趴荸,并且它的默認(rèn)行為就是去啟動(dòng)默認(rèn)的 shell 程序(通常是 Bash)儒溉,并將 終端 的輸入/輸出連接到 shell。*
綜上发钝,終端(模擬器) 就是指有圖形界面的命令行工具(Command line)顿涣。
在類 UNIX 中,shell 默認(rèn)為 Bash酝豪。
在 Windows 系統(tǒng)中涛碑,它有兩種 shell:cmd.exe
和 powershell.exe