Shell(一):功能绍申、配置和插件

關于shell噩咪,一個廣義的解釋就是在用戶與操作系統(tǒng)之間,提供一個工具或接口給用戶來操作計算機系統(tǒng)极阅;用戶在shell中通過輸入命令行胃碾,按下回車鍵,shell執(zhí)行命令后就能返回結(jié)果筋搏,達到操作計算機的效果书在。
但有很多人會問,為什么要學習shell呢拆又?以下是我對為什么要學習shell的看法:

  • 在通過ssh來遠程操縱Linux/Unix服務器時儒旬,都是使用shell而不是用戶界面
  • 相比于通過點擊多個用戶界面來執(zhí)行操作,輸入命令行更加直接和快捷
  • 利用管道組合各種可用工具帖族,來創(chuàng)建和定制宏工具
  • 使用shell script將重復簡單的任務自動化

而shell有很多種:Bourne Shell栈源, C Shell,Korn Shell竖般,Bourne-again Shell甚垦,TENEX C Shell等,通過命令cat /etc/shells可以查看系統(tǒng)支持哪些shell:

System Support Shell.png

Linux/Unix默認都是使用Bash(Bourne-again Shell)涣雕,但我更傾向于使用zsh艰亮,但由于配置過于復雜,前期很少人使用挣郭,但后來有外國程序員弄出一個Oh My ZSH來管理zsh的配置和支持更多插件迄埃,使得zsh變得更容易使用和更加強大。

zsh shell.png

Shell有哪些功能

  • 命令歷史記錄

一旦你在shell敲入正確命令并能執(zhí)行后兑障,shell就會存儲你所敲入命令的歷史記錄(存放在~/.bash_history文件)侄非,方便你再次運行之前的命令。
你可以按方向鍵來查看之前執(zhí)行過的命令

Shell Command History.gif

可以用!!來執(zhí)行上一條命令流译,但最常用還是使用ctrl-r來搜索命令歷史記錄

Shell Search Command History.gif
  • 命令和文件補全(按tab鍵)

當你輸入命令或文件名時逞怨,你可以通過按tab鍵來補全命令或文件名,這樣可以讓你更快敲入命令和敲入正確的命令福澡。
有時你忘記具體某個命令叠赦,但你記住命令開頭的幾個字母是gi,可以敲入字母gi革砸,按tab鍵來顯示與前幾個字母有關的所有命令:

Shell Command Complete.gif

當用cd命令前往某個目錄時除秀,你不必敲入整個路徑的所有目錄名窥翩,你只需敲入目錄前幾個字母,然后按tab鍵逐個補全目錄名即可鳞仙。
Shell Auto Complete Dir.gif

  • 命令別名

命令別名是一個比較有用的東西寇蚊,特別適應用于簡化命令輸入。比如棍好,你要更新cocoapods時仗岸,在shell輸入以下命令行

pod update --verbose --no-repo-update

但每次都輸入這么長的命令行,多么麻煩啊借笙。所以扒怖,這時使用命令別名來簡化命令行的輸入:

alias pod_update='pod update --verbose --no-repo-update'

下次你只需要輸入pod_update就可以更新cocoapod
你可以使用alias命令來顯示所有命令別名

list all alias .png
  • 任務控制(job control)

使用shell登陸系統(tǒng)后,想要一邊復制文件业稼、一邊查找文件盗痒、一邊進行編譯代碼、一邊下載軟件低散,當然可以通過開啟多個shell來完成俯邓,但如果想只在一個shell來完成以上多個任務時,此時可以使用shell的一個特性任務控制熔号。

在學會如何使用命令來控制任務之前稽鞭,先了解兩個概念:前臺(foreground)后臺(background)前臺就是出現(xiàn)提示符讓用戶操作的環(huán)境引镊,而后臺就是不能與用戶交互的環(huán)境朦蕴,你無法使用 ctrl-c 終止它,可使用 bg/fg 呼叫該任務弟头。

下面介紹一些命令如何控制任務:

1. 將任務放在后臺運行:命令行 + &
job control 1.png

注意一下上面打印信息吩抓,[1]表示job number(任務編號),7089表示PID(進程號)赴恨。在后臺執(zhí)行的命令疹娶,如果有stdout和stderr,數(shù)據(jù)依舊輸出到屏幕上嘱支,可以通過數(shù)據(jù)重定向傳輸?shù)轿募序拘兀筒粫绊懬芭_的工作。

job control 2.png
2. 將任務丟到后臺暫停:ctrl-z

在shell中執(zhí)行find / -print命令除师,然后按下ctrl-z將任務丟到后臺暫停:

job control 3.png

由上面打印可知,任務find / -print暫停執(zhí)行扔枫,并將任務放在后臺汛聚,返回一個job number[2]

3. 查看后臺所有任務狀態(tài):jobs -l

輸入jobs -l 查看后臺所有的任務狀態(tài):

job control 4.png

仔細查看打印信息,有沒有留意到在PID 74177431之前有-+兩個符號短荐,-表示最近第二個被放到后臺的任務號碼倚舀,+表示最近被放到后臺的任務號碼叹哭。

4. 將后臺的任務拿到前臺處理:fg %jobnumber

輸入fg會默認取出+的任務,然后迅速按下ctrl-z

job control 5.png

看上面打印的PID7431痕貌,確實如此风罩。再次輸入jobs -l來查看后臺所有任務的信息
job control 6.png

這次輸入fg %1來講后臺的任務拿到前臺處理。

5. 將后臺的任務變成運行中:bg %jobnumber

輸入jobs -l查看任務狀態(tài):

job control 7.png

然后輸入bg %2; jobs -l將后臺任務變成運行舵稠,并查看任務狀態(tài)超升,然后不斷地輸入打印信息,這時需要關閉終端才能kill這個shell進程的子進程哺徊。

6. 管理后臺當中的任務:kill -signal %jobnumber

有時室琢,任務在后臺運行或暫停,這時我想結(jié)束這個任務落追,怎樣辦呢盈滴?你可以使用kill命令將任務結(jié)束。
輸入find / -print命令轿钠,并按下ctrl-z暫停任務:

job control 8.png

輸入kill -9 %1;jobs -l結(jié)束任務并顯示任務狀態(tài):
job control 9.png

  • shell script

shell script是利用shell的功能所編寫的一個程序巢钓,這個程序使用純文本文件來保存一些shell的命令,并遵循shell的語法規(guī)則疗垛,搭配數(shù)據(jù)重定向竿报、管道、和正則表達式等功能來組合各種工具继谚,實現(xiàn)簡單重復任務的自動化烈菌。

  • 通配符

除了完整的字符串之外,shell還支持許多的通配符來幫助用戶查詢和命令執(zhí)行花履。我簡答地列出常用的幾個通配符:

符號 含義
* 表示0到無窮多個任意字符
? 表示有一個任意字符
[] 表示有一個在中括號內(nèi)的字符芽世。例如[abc]表示有個字符,可能是abc其中一個
[-] 表示在編碼順序內(nèi)的所有字符诡壁。例如[1-7]表示有個字符济瓢,范圍1到7其中一個
[^] 表示反向選擇。例如表示有一個字符妹卿,只要不是a,b,c的其他字符都可以

iTerm 2(for mac) && Oh My Zsh

如果你是mac的用戶旺矾,推薦一個終端應用iTerm 2, iTerm 2 相比mac自帶的 Terminal 應用,有太多優(yōu)點了夺克。例如箕宙,支持畫面分割,可以設置主題铺纽,各種使用的快捷鍵柬帕,以及快速喚出。配合 Oh My Zsh 使用,簡直優(yōu)雅到爆陷寝!

Oh My Zsh安裝

  • curl方式
curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh
  • wget方式
wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O - | sh

安裝完之后锅很,關閉當前終端,并重新打開一個凤跑,oh my zsh的默認主題是robbyrussell爆安,效果如下:

robbyrussell theme.jpg

配置

如果你想定制和擴展zsh,oh my zsh提供配置文件~/.zshrc來配置仔引,可以設置環(huán)境變量和別名扔仓;

# Support autojump
[[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh

# setup moco alias name
alias moco_service="moco start -p 12306 -g settings.json"

#setup macvim alias name
alias vim="/Applications/MacVim.app/Contents/MacOS/Vim"

#setup pod update alias name
alias pod_update='pod update --verbose --no-repo-update'

Themes列出所有可用主題,每個主題都有截屏效果并教你如何設置肤寝,選擇你喜歡的主題当辐,在配置文件~/.zshrc查找字符串ZSH_THEME="robbyrussell",通過改變ZSH_THEME環(huán)境變量來改變主題鲤看。例如缘揪,

ZSH_THEME="agnoster"

oh my zsh提供數(shù)十種主題,相關文件在~/.oh-my-zsh/themes 目錄义桂,可以編輯主題來滿足自身需求找筝,我是使用默認的robbyrussell,不過做了一點小小改動:

PROMPT='%{$fg_bold[red]%}? %{$fg_bold[green]%}%p%{$fg[cyan]%}%d %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$reset_color%}> '
#PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}> '

與原來不同的是慷吊,將c(表示當前目錄)改為d(表示絕對路徑)袖裕,另外在尾部添加一個>作為隔離符號,效果如下:

modified robbyrussell.png

插件

oh my zsh提供豐富的插件溉瓶,存放在~/.oh-my-zsh/plugins目錄下:

oh my zsh plugins.png
想了解每個插件的功能以及如何使用急鳄,只要打開相關插件的目錄下zsh文件即可,以git插件為例:
git plugin.png

打開git.plugin.zsh文件堰酿,里面有很多命名別來來簡化命令的輸入疾宏。你可以根據(jù)自己的需要來啟用哪些插件,只需在~/.zshrc配置文件追加內(nèi)容即可:

plugins=(git autojump osx)

我來介紹一下一些常用插件的使用吧:

git

當你處在一個git受控的目錄下時触创,Shell明確顯示gitbranch信息坎藐,另外簡化git很多命令,具體使用請參考:Plugin:git

autojump

autojump插件使你能夠快速切換路徑哼绑,再也不需要逐個敲入目錄岩馍,只需敲入目標目錄,就可以迅速切換目錄抖韩。

  • 安裝
    如果你是mac用戶蛀恩,可以使用brew安裝:
brew install autojump

如果是linux用戶,首先下載autojump最近版本帽蝶,比如:

git clone git://github.com/joelthelion/autojump.git

然后進入目錄赦肋,執(zhí)行

./install.py

最近將以下代碼加入~/.zshrc配置文件:

[[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh
  • 使用
    如果你之前打開過~/.oh-my-zsh/themes目錄块攒,現(xiàn)在只需敲入j themes就可以快速切換到~/.oh-my-zsh/themes目錄励稳。
autojump.png
osx
  • tab - 在一個新標簽打開當前目錄
  • cdf - cd到當前Finder目錄
  • quick-look - 快速瀏覽特殊的文件
  • man-preview - 在Preview應用打開特定的man page
  • trash - 將特定的文件移到垃圾桶

使用

  1. 因為zsh兼容bash佃乘,所以之前使用bash的人切換到zsh毫無壓力
  2. 智能拼寫糾正,比如你輸入cls驹尼,會提示
    auto correct.png
  3. 各種補全:除了支持命令補全和文件補全之外趣避,還支持命令參數(shù)補全,插件內(nèi)容補全新翎,只需要按tab
  4. 使用autojump智能跳轉(zhuǎn)
  5. 目錄瀏覽和跳轉(zhuǎn):輸入d程帕,就顯示在會話里訪問的目錄列表,輸入列表前的序號地啰,即可以跳轉(zhuǎn)
list dir and jump.png
  1. 輸入..可以返回到上級目錄
parent dir.png

YouTube有個演示視頻 zsh shell詳細介紹如果使用Oh My Zsh

總結(jié)

作為的一個程序員愁拭,我覺得shell是一個必不可少的工具,使用它能夠毫不費勁地操作計算機亏吝。在shell提示下岭埠,通過調(diào)用各種各樣的工具,并結(jié)合管道蔚鸥,將這些工具根據(jù)自己需要組合起來惜论,創(chuàng)建和制定宏工具,甚至編寫shell script來將簡單而重復的工作自動化止喷,做到Don't repeat your self馆类。

擴展閱讀

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市弹谁,隨后出現(xiàn)的幾起案子乾巧,更是在濱河造成了極大的恐慌,老刑警劉巖预愤,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沟于,死亡現(xiàn)場離奇詭異,居然都是意外死亡鳖粟,警方通過查閱死者的電腦和手機社裆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來向图,“玉大人泳秀,你說我怎么就攤上這事¢剩” “怎么了嗜傅?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長檩赢。 經(jīng)常有香客問我吕嘀,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任偶房,我火速辦了婚禮趁曼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棕洋。我一直安慰自己挡闰,他們只是感情好,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布掰盘。 她就那樣靜靜地躺著摄悯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪愧捕。 梳的紋絲不亂的頭發(fā)上奢驯,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音次绘,去河邊找鬼瘪阁。 笑死,一個胖子當著我的面吹牛断盛,可吹牛的內(nèi)容都是我干的罗洗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钢猛,長吁一口氣:“原來是場噩夢啊……” “哼伙菜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起命迈,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤贩绕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后壶愤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淑倾,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年征椒,在試婚紗的時候發(fā)現(xiàn)自己被綠了娇哆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡勃救,死狀恐怖碍讨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蒙秒,我是刑警寧澤勃黍,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站晕讲,受9級特大地震影響覆获,放射性物質(zhì)發(fā)生泄漏马澈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一弄息、第九天 我趴在偏房一處隱蔽的房頂上張望痊班。 院中可真熱鬧,春花似錦疑枯、人聲如沸辩块。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至国章,卻和暖如春具钥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背液兽。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工骂删, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人四啰。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓宁玫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親柑晒。 傳聞我的和親對象是個殘疾皇子欧瘪,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

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

  • Linux命令學習 記錄小白學習Linux的過程。 常用命令 man命令 常用工具命令 man命令是Linux下的...
    吃蘑菇De大灰狼閱讀 2,749評論 1 15
  • 1匙赞、Shell介紹 1.1佛掖、何為shell 關于shell,一個廣義的解釋就是在用戶與操作系統(tǒng)之間涌庭,提供一個工具或...
    子瑜愚閱讀 8,772評論 0 4
  • 工欲善其事芥被,必先利其器。工欲利其器坐榆,必先思其行拴魄。每次換電腦的時候都得重新倒騰一遍,由于時間過得比較久老是忘記席镀,所以...
    程序媛coco閱讀 884評論 0 0
  • 一陣暈頭轉(zhuǎn)向之后匹中,我終于來到了傳說中的“明月七星陣”之下看來小鳳所言不虛,這里的確很久沒有人來過了愉昆,十分古樸但墻上...
    24e2f6668318閱讀 300評論 0 0
  • 善良的人不會對天真視而不見 聰明的人不會對懵懂棄之以鼻 大度的人不會對過失耿耿于懷 你得承認自己目光狹窄 才會看不...
    睡蓮醒了閱讀 498評論 0 0