參考文章
摘錄知識點(diǎn)
-
想知道你的系統(tǒng)有幾種shell嘹朗,可以通過以下命令查看:
cat /etc/shells
顯示如下:
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
- 目前常用的 Linux 系統(tǒng)和 OS X 系統(tǒng)的默認(rèn) Shell 都是 bash翻翩,但是真正強(qiáng)大的 Shell 是深藏不露的 zsh, 這貨絕對是馬車中的跑車底挫,跑車中的飛行車虽抄,史稱『終極 Shell』,但是由于配置過于復(fù)雜艾杏,所以初期無人問津韧衣,很多人跑過來看看 zsh 的配置指南,什么都不說轉(zhuǎn)身就走了购桑。直到有一天,國外有個(gè)窮極無聊的程序員開發(fā)出了一個(gè)能夠讓你快速上手的zsh項(xiàng)目氏淑,叫做「oh my zsh」勃蜘,Github 網(wǎng)址是:https://github.com/robbyrussell/oh-my-zsh。這玩意就像「X天教你學(xué)會 C++」系列假残,可以讓你神功速成缭贡,而且是真的。
- 這里有個(gè) youtube 上的視頻辉懒,短短 4 分鐘就已經(jīng)拋出了幾十個(gè)讓 bash 用戶切換到 zsh 中的理由阳惹。
- zsh的優(yōu)勢:
-
zsh 的補(bǔ)全模式更方便
zsh 中按兩下 tab 鍵可以觸發(fā) zsh 的補(bǔ)全,所有待補(bǔ)全項(xiàng)都可以通過鍵盤方向鍵或者 <Ctrl-n/p/f/b> 來選擇眶俩。tab鍵補(bǔ)全 -
zsh 支持命令選項(xiàng)補(bǔ)全
zsh 除了支持目錄的補(bǔ)全莹汤,還支持命令選項(xiàng)的補(bǔ)全,例如 ls -<TAB><TAB> 會直接列出所有 ls 的參數(shù)颠印,再也不會出現(xiàn)一個(gè)命令打到一半纲岭,忘記參數(shù)導(dǎo)致重開一個(gè) terminal man 一把。
命令選項(xiàng)補(bǔ)全 -
zsh 支持命令參數(shù)補(bǔ)全
以前想 kill 掉一個(gè)進(jìn)程线罕,我的做法是 ps aux | grep "進(jìn)程名" 然后記下 id止潮,再 kill id。在 zsh 下钞楼,只需要 kill 進(jìn)程名<TAB>喇闸,zsh 就會自動補(bǔ)全進(jìn)程的 pid。
命令參數(shù)補(bǔ)全- ssh <TAB><TAB> 時(shí) zsh 會自動列出你訪問過的主機(jī)和用戶名來補(bǔ)全 ssh 的參數(shù);
- brew install <TAB><TAB> 來補(bǔ)全軟件包名询件,除了 homebrew 以外燃乍,同樣支持 port/apt-get 等其他包管理器。
zsh 支持更加聰明的目錄補(bǔ)全
以前比如想進(jìn)入一個(gè)比較深的目錄雳殊,比如 /Users/pw/workspace/project/src/main/webapps/static/js橘沥,就得在 bash 下面打半天,不停的 tab 去補(bǔ)全一個(gè)正確的路徑出來夯秃。在 zsh 下座咆,只需要輸入每個(gè)路徑的頭字母然后 tab 一下: cd /u/p/w/p/s/m/w/s/j<TAB>-
zsh 強(qiáng)大的快速目錄切換
以前最苦逼的事情莫過于頻繁在兩個(gè)工作目錄下切換痢艺,總要打一長串 cd 路徑。也嘗試過 popd 和 pushd 來解決這個(gè)問題介陶,但往往是目錄已經(jīng)切換了才想起來沒用 pushd堤舒。而 zsh 會記住你每一次切換的路徑,然后通過 1 來切換到你上一次訪問的路徑哺呜,2 切換到上上次……一直到 9舌缤,還可以通過 d 查看目錄訪問歷史。zsh 還可以配合 autojump 一起使用某残,autojump 會記錄下每一個(gè)你訪問過的目錄国撵,然后通過 j 來快速跳轉(zhuǎn)。
zsh 支持全局 alias 和后綴名 alias
bash 的 alias 只能做命令的縮寫玻墅,而 zsh 更進(jìn)一步介牙,使 alias 可以縮寫命令的一部分,例如參數(shù)或環(huán)境變量設(shè)置澳厢。
-
1$ alias -s log=less
2$ ~/package/tomcat/log/catalina.log # 相當(dāng)于 less ~/package/tomcat/log/catalina.log
3$ alias -g PR=http_proxy=127.0.0.1:8087
4$ PR curl https://twitter.com # 相當(dāng)于 http_proxy=127.0.0.1:8087 curl https://twitter.
* zsh 有著豐富多彩的命令行提示符
bash 下通過設(shè)置 PATH 要求所有路徑都要寫在一行里魏保,目錄多了以后看起來就很難看。zsh 支持更加符合程序員審美觀的設(shè)置方式摸屠。
1path=(
2 ~/bin
3 $path
4 ~/package/smartsprites/bin
5)
- zsh幾個(gè)必備插件
autojump
幫助快速目錄跳轉(zhuǎn)的小工具谓罗。首先要安裝 autojump,然后在 .zshrc 中開啟 autojump 插件季二。它會記錄下來每個(gè)你進(jìn)入過的目錄檩咱,隨后通過 j 目錄名稱的一部分就可快速跳轉(zhuǎn)到該目錄。Youtube視頻介紹胯舷。git
Git 命令補(bǔ)全刻蚯,除了可以補(bǔ)全 git 的子命令、命令開關(guān)等常規(guī)補(bǔ)全項(xiàng)以外桑嘶,還可以補(bǔ)全分支名等內(nèi)容炊汹,用 git 必開的插件。-
osx
提供一些與 Mac OSX 系統(tǒng)交互的命令逃顶,比如:- man-preview 通過 preview 程序查看一個(gè)命令的手冊讨便,例如 man-preview git
- quick-look 快速預(yù)覽文件
- pfd 返回當(dāng)前 finder 打開的文件夾的路徑
- cdf 切換到當(dāng)前 finder 所在的目錄
切換或安裝zsh
Mac自帶zsh,所以充甚,我們可以把終端默認(rèn)的bash改成zsh,切換后重啟終端或者打開一個(gè)新的終端標(biāo)簽霸褒。
chsh -s /bin/zsh
系統(tǒng)的zsh可能不是最新的版本伴找,想換成最新zsh,可按下面的總結(jié)废菱。當(dāng)然不更新沒有絲毫問題技矮,實(shí)際上我在折騰zsh的時(shí)候,把終端和iTerm2搞得都不能用了殊轴。
可以通過以下命令來判斷當(dāng)前zsh版本:
echo $ZSH_VERSION
可以通過以下命令來知悉一軟件的信息衰倦,其中包括版本信息,我們拿curl舉例:
brew info curl
如下圖:
第一個(gè)紅框中是我輸入的命令
,第二個(gè)紅框說明了curl有一個(gè)7.40.0的穩(wěn)定版
旁理,第三個(gè)紅框說明我還沒有安裝curl
耿币,后面還有一些信息,比如打叉的說明你安裝此軟件還缺乏
什么韧拒,大對勾的自然是你已然擁有
了的。
所以十性,你可以通過brew info zsh
來了解zsh最新版的情況叛溢。
以上兩個(gè)命令可以作為知識的擴(kuò)展,來輔助你認(rèn)識zsh,可用可不用劲适,最關(guān)鍵的是通過homebrew安裝zsh
brew install zsh
如此楷掉,你就擁有了最新版的zsh,默認(rèn)存在/usr/local/bin/zsh
路徑下。但要用上它霞势,還差兩個(gè)步驟烹植。
1、可能你已經(jīng)發(fā)現(xiàn)愕贡,系統(tǒng)的各種shell都在/etc/shells/“注冊”了草雕,所以,我們新安裝的zsh固以,也要在此注冊墩虹。即需要用sudo(super user do)編輯 /etc/shells,在其中 加入一行 /usr/local/bin/zsh。
在此憨琳,我用vim來編輯诫钓,如下圖
敲擊return后,輸入密碼篙螟,再敲return菌湃,密碼正確后,進(jìn)入此文稿遍略,如下圖(我的文稿中惧所,已經(jīng)“注冊”了)
接下來是vim的一些操作骤坐,摁“i”進(jìn)入插入模式,利用光標(biāo)纯路,將“/usr/local/bin/zsh”路徑輸入其中(我放在了最后)或油,然后摁“esc”結(jié)束插入模式,摁“:wq”保存退出,這樣就“注冊”了驰唬。
2顶岸、切換到最新版的zsh
很簡單,輸入命令
chsh -s /usr/local/bin/zsh
重啟終端或新打開一個(gè)標(biāo)簽叫编,可以通過echo $ZSH-VERSION
查看版本的變化辖佣,或者which zsh
查看路徑的變化,來判斷我們是否切換成功了搓逾。
時(shí)間緊卷谈,或者對切換到最新版zsh沒興趣的同學(xué),可以從開始的時(shí)候霞篡,直接用命令chsh -s /bin/zsh
從系統(tǒng)的bash切換到系統(tǒng)的zsh,繞過這些個(gè)細(xì)碎的步驟世蔗。