Linux 終端美化 - Oh My Zsh

[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 就是 zshzsh 又稱為 Z shell瓢谢,是一個(gè)交互式 shell 程序速缆,也可以作為腳本解釋器。zsh 基于 Bourne Shell(sh)恩闻,提供了很多新特性,比如插件支持和主題更換剧董。

zsh 的安裝方法如下:這里主要介紹在 Ubuntu 系統(tǒng)中進(jìn)行安裝:

  1. 下載并安裝 zsh
sudo apt install zsh
  1. 查看是否安裝成功:
zsh --version # ==> Expected result: zsh 5.4.2 or more recent
  1. 設(shè)置為終端默認(rèn) shell:
chsh -s $(which zsh)
  1. 如果第 3 步設(shè)置失敗幢尚,則進(jìn)行如下設(shè)置:
# ~/.bash_profile 添加如下內(nèi)容
export SHELL=`which zsh`
[ -z "$ZSH_VERSION" ] && exec "$SHELL" -l
  1. 登出,然后再登入翅楼,輸入以下命令查看下是否已登錄 zsh
echo $SHELL # ==> 如果顯示: /bin/zsh尉剩,則為成功
  1. 輸入以下命令,查看當(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-Zshzsh 提供了很多的插件(Plugin)主題(Theme)配置础倍。

  • 插件(Plugin)zsh 插件,簡(jiǎn)單來說,就是 zsh 可以解釋執(zhí)行的一段 shell 腳本焙压。因此段审,一個(gè)插件可以簡(jiǎn)單地執(zhí)行一些命令,也可以提供對(duì)特定命令和函數(shù)的補(bǔ)全功能德迹。

要使用 插件芽卿,首先需要使能插件功能,方法如下:
~/.zshrc文件中胳搞,添加如下內(nèi)容:

plugins=(
    git
    adb
    ruby
)

如上就是添加了 git卸例,adbruby 插件流酬,更多其他插件币厕,請(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索赏,zgenzplug...

但是這里我推薦的是: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 主題,其安裝方法如下:

  1. ~/.zshrc文件中配置主題為 powerlevel10k
# ~/.zshrc
# 原生的主題配置可去除
# ZSH_THEME="powerlevel10k/powerlevel
zinit ice depth=1; zinit light romkatv/powerlevel10k
  1. 重新加載~/.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

oh-my-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.exepowershell.exe

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市孵淘,隨后出現(xiàn)的幾起案子蒲障,更是在濱河造成了極大的恐慌,老刑警劉巖瘫证,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揉阎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡背捌,警方通過查閱死者的電腦和手機(jī)毙籽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毡庆,“玉大人坑赡,你說我怎么就攤上這事∶纯梗” “怎么了毅否?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蝇刀。 經(jīng)常有香客問我螟加,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任仰迁,我火速辦了婚禮甸昏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘徐许。我一直安慰自己,他們只是感情好卒蘸,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布雌隅。 她就那樣靜靜地躺著,像睡著了一般缸沃。 火紅的嫁衣襯著肌膚如雪恰起。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天趾牧,我揣著相機(jī)與錄音检盼,去河邊找鬼。 笑死翘单,一個(gè)胖子當(dāng)著我的面吹牛吨枉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哄芜,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼貌亭,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了认臊?” 一聲冷哼從身側(cè)響起圃庭,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎失晴,沒想到半個(gè)月后剧腻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涂屁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年书在,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胯陋。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蕊温,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出遏乔,到底是詐尸還是另有隱情义矛,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布盟萨,位于F島的核電站凉翻,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏捻激。R本人自食惡果不足惜制轰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一前计、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧垃杖,春花似錦男杈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至彩库,卻和暖如春肤无,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骇钦。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工宛渐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人眯搭。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓窥翩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坦仍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鳍烁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容