關於shell,一個廣義的解釋就是在用戶與操作系統之間,提供一個工具或接口給用戶來操作計算機系統;用戶在shell中通過輸入命令行,按下回車鍵,shell執行命令後就能返回結果,達到操作計算機的效果。
但有很多人會問,為什麼要學習shell呢?以下是我對為什麼要學習shell的看法:
而shell有很多種:Bourne Shell, C Shell,Korn Shell,Bourne-again Shell,TENEX C Shell等,通過命令cat /etc/shells
可以查看系統支持哪些shell:
Linux/Unix默認都是使用Bash(Bourne-again Shell),但我更傾向於使用zsh,但由於配置過於復雜,前期很少人使用,但後來有外國程序員弄出一個Oh My ZSH來管理zsh的配置和支持更多插件,使得zsh變得更容易使用和更加強大。
~/.bash_history
文件),方便你再次運行之前的命令。↑
和↓
來查看之前執行過的命令
可以用!!
來執行上一條命令,但最常用還是使用ctrl-r
來搜索命令歷史記錄
tab
鍵)當你輸入命令或文件名時,你可以通過按tab
鍵來補全命令或文件名,這樣可以讓你更快敲入命令和敲入正確的命令。
有時你忘記具體某個命令,但你記住命令開頭的幾個字母是gi
,可以敲入字母gi
,按tab
鍵來顯示與前幾個字母有關的所有命令:
當用cd
命令前往某個目錄時,你不必敲入整個路徑的所有目錄名,你只需敲入目錄前幾個字母,然後按tab
鍵逐個補全目錄名即可。
命令別名是一個比較有用的東西,特別適應用於簡化命令輸入。比如,你要更新cocoapods時,在shell輸入以下命令行
pod update --verbose --no-repo-update
但每次都輸入這麼長的命令行,多麼麻煩啊。所以,這時使用命令別名來簡化命令行的輸入:
alias pod_update='pod update --verbose --no-repo-update'
下次你只需要輸入pod_update
就可以更新cocoapod
你可以使用alias
命令來顯示所有命令別名
使用shell登陸系統後,想要一邊復制文件、一邊查找文件、一邊進行編譯代碼、一邊下載軟件,當然可以通過開啟多個shell來完成,但如果想只在一個shell來完成以上多個任務時,此時可以使用shell的一個特性任務控制。
在學會如何使用命令來控制任務之前,先了解兩個概念:前台(foreground)和後台(background)。前台就是出現提示符讓用戶操作的環境,而後台就是不能與用戶交互的環境,你無法使用 ctrl-c
終止它,可使用 bg/fg
呼叫該任務。
下面介紹一些命令如何控制任務:
命令行 + &
注意一下上面打印信息,[1]
表示job number(任務編號),7089
表示PID(進程號)。在後台執行的命令,如果有stdout和stderr,數據依舊輸出到屏幕上,可以通過數據重定向傳輸到文件中,就不會影響前台的工作。
ctrl-z
在shell中執行find / -print
命令,然後按下ctrl-z
將任務丟到後台暫停:
由上面打印可知,任務find / -print
暫停執行,並將任務放在後台,返回一個job number[2]
jobs -l
輸入jobs -l
查看後台所有的任務狀態:
仔細查看打印信息,有沒有留意到在PID 7417
和7431
之前有-
和+
兩個符號,-
表示最近第二個被放到後台的任務號碼,+
表示最近被放到後台的任務號碼。
fg %jobnumber
輸入fg
會默認取出+
的任務,然後迅速按下ctrl-z
看上面打印的PID是7431
,確實如此。再次輸入jobs -l
來查看後台所有任務的信息
這次輸入fg %1
來講後台的任務拿到前台處理。
bg %jobnumber
輸入jobs -l
查看任務狀態:
然後輸入bg %2; jobs -l
將後台任務變成運行,並查看任務狀態,然後不斷地輸入打印信息,這時需要關閉終端才能kill這個shell進程的子進程。
kill -signal %jobnumber
有時,任務在後台運行或暫停,這時我想結束這個任務,怎樣辦呢?你可以使用kill
命令將任務結束。
輸入find / -print
命令,並按下ctrl-z
暫停任務:
輸入kill -9 %1;jobs -l
結束任務並顯示任務狀態:
shell script是利用shell的功能所編寫的一個程序,這個程序使用純文本文件來保存一些shell的命令,並遵循shell的語法規則,搭配數據重定向、管道、和正則表達式等功能來組合各種工具,實現簡單重復任務的自動化。
除了完整的字符串之外,shell還支持許多的通配符來幫助用戶查詢和命令執行。我簡答地列出常用的幾個通配符:
如果你是mac的用戶,推薦一個終端應用iTerm 2, iTerm 2 相比mac自帶的 Terminal 應用,有太多優點了。例如,支持畫面分割,可以設置主題,各種使用的快捷鍵,以及快速喚出。配合 Oh My Zsh 使用,簡直優雅到爆!
curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh
wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O - | sh
安裝完之後,關閉當前終端,並重新打開一個,oh my zsh的默認主題是robbyrussell
,效果如下:如果你想定制和擴展zsh,oh my zsh提供配置文件~/.zshrc
來配置,可以設置環境變量和別名;
# 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
環境變量來改變主題。例如,
ZSH_THEME="agnoster"
oh my zsh提供數十種主題,相關文件在~/.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(表示絕對路徑),另外在尾部添加一個>
作為隔離符號,效果如下:
oh my zsh提供豐富的插件,存放在~/.oh-my-zsh/plugins
目錄下:
想了解每個插件的功能以及如何使用,只要打開相關插件的目錄下zsh文件即可,以git插件為例:
打開git.plugin.zsh
文件,裡面有很多命名別來來簡化命令的輸入。你可以根據自己的需要來啟用哪些插件,只需在~/.zshrc
配置文件追加內容即可:
plugins=(git autojump osx)
我來介紹一下一些常用插件的使用吧:
當你處在一個git受控的目錄下時,Shell明確顯示git
和branch
信息,另外簡化git很多命令,具體使用請參考:Plugin:git
autojump插件使你能夠快速切換路徑,再也不需要逐個敲入目錄,只需敲入目標目錄,就可以迅速切換目錄。
brew
安裝:
brew install autojump
如果是linux用戶,首先下載autojump最近版本,比如:
git clone git://github.com/joelthelion/autojump.git
然後進入目錄,執行
./install.py
最近將以下代碼加入~/.zshrc
配置文件:
[[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh
使用
如果你之前打開過~/.oh-my-zsh/themes
目錄,現在只需敲入j themes
就可以快速切換到~/.oh-my-zsh/themes
目錄。
tab
- 在一個新標簽打開當前目錄cdf
- cd到當前Finder目錄quick-look
- 快速浏覽特殊的文件man-preview
- 在Preview應用打開特定的man pagetrash
- 將特定的文件移到垃圾桶cls
,會提示tab
鍵autojump
智能跳轉目錄浏覽和跳轉:輸入d,就顯示在會話裡訪問的目錄列表,輸入列表前的序號,即可以跳轉
輸入..
可以返回到上級目錄
YouTube有個演示視頻 zsh shell詳細介紹如果使用Oh My Zsh
作為的一個程序員,我覺得shell是一個必不可少的工具,使用它能夠毫不費勁地操作計算機。在shell提示下,通過調用各種各樣的工具,並結合管道,將這些工具根據自己需要組合起來,創建和制定宏工具,甚至編寫shell script來將簡單而重復的工作自動化,做到Don't repeat your self。