一、先明確幾個概念
這些概念本身有着非常濃厚的歷史氣息,隨着時代的發展,他們的含義也在發生改變,它們有些已經失去了最初的含義,但是它們的名字卻被保留了下來。
控制台(Console)
控制台(Console)是物理設備,用於輸入輸出,它直接連接在計算機上,是計算機系統的一部分。計算機輸出的信息會顯示在控制台上,例如BIOS的輸出,內核的輸出。
終端(Terminal)
終端(Terminal)也是一台物理設備,只用於輸入輸出,本身沒有強大的計算能力。一台計算機只有一個控制台,在計算資源緊張的時代,人們想共享一台計算機,可以通過終端連接到計算機上,將指令輸入終端,終端傳送給計算機,計算機完成指令后,將輸出傳送給終端,終端將結果顯示給用戶。
虛擬控制台(Virtual Console),虛擬終端(Virtual Terminal)
虛擬控制台(Virtual Console)和虛擬終端是一樣的。我們只有一台終端(物理設備),這是我們與計算機之間的用戶接口。假如有一天,我們想擁有多個用戶接口,那么,一方面我們可以增加終端數目(物理設備),另一方面,還可以在同一台終端(物理設備)上虛擬出多個終端,它們之間互相不影響,至少看起來互相不影響。這些終端就是虛擬終端。
我們按下Ctrl+Alt+Fx時,會進入第x個虛擬終端,一共有六個(幾個都有可能)虛擬終端,其中第1個虛擬終端,就是我們默認使用的圖形用戶界面。
終端模擬器(Terminal Emulator)
我們知道,終端是一種物理設備,而終端模擬器(Terminal Emulator),是一個程序,這些程序用來模擬物理終端。圖形用戶界面中的終端模擬器一般稱為終端窗口(Terminal Window),我們在Ubuntu下打開的gnome-terminal就屬於此類。
tty
tty的全稱是TeleTYpewriter,這就是早期的終端(物理設備),它們用於向計算機發送數據,並將計算機的返回結果打印出來。顯示器出現后,終端不再將結果打印出來,而是顯示在顯示器上。但是tty的名字還是保留了下來。
我們按下Ctrl+Alt+F2時,會進入第2個虛擬終端,你可以看到屏幕上方顯示的tty2。
shell
shell 和之前說的幾個概念截然不同,之前的幾個概念都是與計算機的輸入輸出相關的,而shell是和內核相關的。內核為上層的應用提供了很多服務,shell在內核的上層,在應用程序的下層。例如,你寫了一個 hello world 程序,你並不用顯式地創建一個進程來運行你的程序,你把寫好的程序交給shell就行了,由shell負責為你的程序創建進程。
我們在終端模擬器中輸入命令時,終端模擬器本身並不解釋執行這些命令,它只負責輸入輸出,真正解釋執行這些命令的,是shell。
我們平時使用的sh, bash, csh是shell的不同實現
二、為什么要用ZSH
命令行是程序員的最愛,默認的 bash shell 雖然功能已經很強大,但顯得太朴素了,也不夠智能,遠遠談不上酷炫,雖然已經遠遠將 windows 的 cmd 甩開幾百條街。但對於極客來說,bash 還是太弱了,長得也難看。
zsh 的功能比 bash 強大很多,但配置過於復雜,起初只有極客才在用。后來,有個窮極無聊的程序員可能是實在看不下去廣大猿友一直只能使用單調的 bash, 於是他創建了一個名為 oh-my-zsh 的開源項目...
自此,只需要簡單的安裝配置,小白程序員們都可以用上高檔大氣上檔次,狂拽炫酷吊炸天的 oh-my-zsh
三、zsh的安裝與配置
1、查看系統當前使用的shell
--------------------------------------------------------
pipci@T440p:~$ echo $SHELL
/bin/bash
pipci@T440p:~$
--------------------------------------------------------
2、安裝zsh
--------------------------------------------------------
pipci@T440p:~$ sudo apt install zsh ##安裝
pipci@T440p:~$ zsh --version ##查看是否安裝成功
zsh 5.8 (x86_64-ubuntu-linux-gnu)
--------------------------------------------------------
3、設置為終端默認 shell:
--------------------------------------------------------
pipci@T440p:~$ chsh -s $(which zsh)
Password:
pipci@T440p:~$ echo $SHELL ##這時候命令行還是提示bash,重啟就好了,注銷也應該可以
/bin/bash
--------------------------------------------------------
4、konsole配置 ##因為我用的時Kubuntu所以終端默認時用的konsole

5、重新打開konsole

會有這個提示,缺少.zshrc文件,這個不同擔心,安裝完Oh-My-Zsh
zsh 本身的配置十分復雜,因此一般不直接對其進行配置,而是使用第三方框架進行設置。
當前最受歡迎的 zsh 配置管理框架為:Oh-My-Zsh
1、 安裝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)"
# 或者手動進行安裝
~$ curl -Lo install.sh https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
~$ sh install.sh
--------------------------------------------------------

Oh-My-Zsh 常用配置
當安裝完成 Oh-My-Zsh 后,會發現創建了~/.zshrc文件,這就是 zsh 的配置文件。
Oh-My-Zsh 為 zsh 提供了很多的主題(Theme)和 插件(Plugin)配置。
--------------------------------------------------------
2、主題(Theme)外觀樣子:zsh 主題是一個可以更改控制台的 zsh 腳本。一個主題可以做很多事情,比如,控制台自動更新當前 git 倉庫的狀態,或者顯示每秒更新的一個時鍾...最主要的還是界面的樣式,
要使用 主題,首先需要使能該功能,方法如下:
在~/.zshrc文件中,設置 ZSH_THEME 選擇為要使用的具體主題名,比如:
--------------------------------------------------------
ZSH_THEME=agnoster
--------------------------------------------------------
如上就是讓 zsh 啟用agnoster主題,更改后需要執行 source ~/.zshrc 命令才會生效

更多其他主題,請參考:zsh Themes 網站里提供的多種選擇。
注:如果不想使用主題,直接設置:ZSH_THEME=""
3、插件(Plugin)功能擴展:zsh 插件,簡單來說,就是 zsh 可以解釋執行的一段 shell 腳本。因此,一個插件可以簡單地執行一些命令,也可以提供對特定命令和函數的補全功能。
要使用 插件,首先需要使能插件功能,方法如下:
在~/.zshrc文件中,添加如下內容:
plugins=(
git
z
cp
zsh-autosuggestions
zsh-syntax-highlighting
)
如上括號里就是添加的插件,更多其他插件,請參考:zsh Plugins網站里提供的多種選擇。
推薦的效率插件
git
這個是裝好oh-my-zsh就默認已經開啟的,定義了有關 git 的 alias。常用的有
gaa = git add --all
gcmsg = git commit -m
ga = git add
gst = git status
gp = git push
--------------------------------------------------------
z
這個是oh-my-zsh默認就裝好的,需要自己開啟。還有一個autojump的插件和z功能差不多,autojump需要單獨裝,
如果z插件歷史記錄太多,並且有一些不是自己想要的,可以刪除
z -x 不要的路徑
無需cd, 方便的實現目錄間快速跳轉
z是oh-my-zsh默認就裝好的,會記錄輸入過的路徑名,z+某個目錄直接跳轉到該目錄
直接使用 z 路徑名 即可
--------------------------------------------------------
cp
提供一個 cpv 命令,這個命令使用 rsync 實現帶進度條的復制功能。
--------------------------------------------------------
zsh-autosuggestions
官網,非常好用的一個插件,會記錄你之前輸入過的所有命令,並且自動匹配你可能想要輸入命令,然后按→補全
安裝
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
--------------------------------------------------------
zsh-syntax-highlighting
官網,命令太多,有時候記不住,等輸入完了才知道命令輸錯了,這個插件直接在輸入過程中就會提示你,當前命令是否正確,錯誤紅色,正確綠色
安裝
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
--------------------------------------------------------
4、這里推薦一個主題:powerlevel10k,安裝方法如下:
首先下載到 on-my-zsh 的本地目錄
--------------------------------------------------------
~$ git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
--------------------------------------------------------
~$ ~/.zshrc 設置如下內容
--------------------------------------------------------
ZSH_THEME="powerlevel10k/powerlevel10k"
--------------------------------------------------------
安裝Nerd Fonts字體
方式一:
--------------------------------------------------------
~$ git clone https://github.com/ryanoasis/nerd-fonts.git --depth 1
~$ cd nerd-fonts
~$ ./install.sh
~$ cd ..
~$ rm -rf nerd-fonts
安裝完后,終端客戶端需要選擇名字帶 nerd fonts 的字體
--------------------------------------------------------
上述方式非常不友好,完全下載,整個包有1G,主要取決外網的速度
方式二:
--------------------------------------------------------
~$ mkdir -p ~/.local/share/fonts
~$ cd ~/.local/share/fonts && curl -fLo "Droid Sans Mono for Powerline Nerd Font Complete.otf" https://github.com/ryanoasis/nerd-fonts/raw/master/patched-fonts/DroidSansMono/complete/Droid%20Sans%20Mono%20Nerd%20Font%20Complete.otf
生成字體信息緩存
--------------------------------------------------------
~$ fc-cache -vf ~/.local/share/fonts/
--------------------------------------------------------
查看是否安裝成功
--------------------------------------------------------
~$ fc-list | grep -i droid
~$ /home/kylin/.local/share/fonts/Droid Sans Mono for Powerline Nerd Font Complete.otf: DroidSansMonoForPowerline Nerd Font:style=Book
--------------------------------------------------------
也可以安裝MesloLGS字體
--------------------------------------------------------
直接雙擊下載的文件,選擇安裝,然后在設置終端字體為MesloLGS NF即可。
--------------------------------------------------------
5、通過執行p10k configure命令來配置 powerlevel10k,在執行該命令之前,建議先安裝上面的字體否則有些圖標不能正常顯示:
--------------------------------------------------------
~$ source .zshrc ##讓powerlevel10k主題生效,首次執行完會出現下面的提示,讓你通過向導配置這個主題,以后也可以通過p10k configure命令從新配置

配置到這一步,如果沒有合適的字體會出現下面的界面

選擇合適的字體后可以清楚的顯示圖標

具體的配置根據自己的喜好一步步配置就好了

5、一些小技巧
給history命令增加時間
.zshrc中加入以下行
--------------------------------------------------------
$ vim ~/.zshrc
HIST_STAMPS="yyyy-mm-dd"
source ~/.zshrc
--------------------------------------------------------
五、上面的配置是在普通用戶下安裝oh my zsh 的,如果切換到root是沒有改變的,如果想讓root也有同意的界面
上面的操作要在root下從新來一遍
參考:https://blog.csdn.net/u012811805/article/details/109975333
https://www.jianshu.com/p/b8a80dd59414
https://www.cnblogs.com/hongdada/p/14031915.html
https://segmentfault.com/a/1190000039860436?utm_source=sf-similar-article
https://learnku.com/articles/32793
https://zhuanlan.zhihu.com/p/58073103
https://blog.csdn.net/qierkang/article/details/85941316
https://blog.csdn.net/czg13548930186/article/details/72858289/
https://zh.opensuse.org/SDB:Zsh
https://harttle.land/2016/10/25/install-oh-my-zsh-locally.html
