Shell(一):功能、配置和插件(附iTerm 2(for mac) && Oh My Zsh教程)

關於shell,一個廣義的解釋就是在用戶與操做系統之間,提供一個工具或接口給用戶來操做計算機系統;用戶在shell中經過輸入命令行,按下回車鍵,shell執行命令後就能返回結果,達到操做計算機的效果。  【用戶與操做系統交互的接口
但有不少人會問,爲何要學習shell呢?如下是我對爲何要學習shell的見解:php

  • 在經過ssh來遠程操縱Linux/Unix服務器時,都是使用shell而不是用戶界面
  • 相比於經過點擊多個用戶界面來執行操做,輸入命令行更加直接和快捷
  • 利用管道組合各類可用工具,來建立和定製宏工具
  • 使用shell script將重複簡單的任務自動化

而shell有不少種:Bourne Shell, C Shell,Korn Shell,Bourne-again Shell,TENEX C Shell等,經過命令cat /etc/shells能夠查看系統支持哪些shell:css


System Support Shell.pnghtml

Linux/Unix默認都是使用Bash(Bourne-again Shell),但我更傾向於使用zsh,但因爲配置過於複雜,前期不多人使用,但後來有外國程序員弄出一個Oh My ZSH來管理zsh的配置和支持更多插件,使得zsh變得更容易使用和更增強大。linux


zsh shell.pnggit

Shell有哪些功能

  • 命令歷史記錄

    一旦你在shell敲入正確命令並能執行後,shell就會存儲你所敲入命令的歷史記錄(存放在~/.bash_history文件),方便你再次運行以前的命令。
    你能夠按方向鍵↑和↓來查看以前執行過的命令程序員


Shell Command History.gifgithub

能夠用!!來執行上一條命令,但最經常使用仍是使用ctrl-r來搜索命令歷史記錄正則表達式


Shell Search Command History.gifshell

  • 命令和文件補全(按tab鍵)

    當你輸入命令或文件名時,你能夠經過按tab鍵來補全命令或文件名,這樣可讓你更快敲入命令和敲入正確的命令。
    有時你忘記具體某個命令,但你記住命令開頭的幾個字母是gi,能夠敲入字母gi,按tab鍵來顯示與前幾個字母有關的全部命令:

    Shell Command Complete.gifjson

    當用cd命令前往某個目錄時,你沒必要敲入整個路徑的全部目錄名,你只需敲入目錄前幾個字母,而後按tab鍵逐個補全目錄名便可。

    Shell Auto Complete Dir.gif

  • 命令別名

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

    [plain]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
    1. pod update --verbose --no-repo-update  

    但每次都輸入這麼長的命令行,多麼麻煩啊。因此,這時使用命令別名來簡化命令行的輸入:

    [plain]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
    1. alias pod_update='pod update --verbose --no-repo-update'  

    下次你只須要輸入pod_update就能夠更新cocoapod
    你可使用alias命令來顯示全部命令別名

    list all alias .png

  • 任務控制(job control)

    使用shell登錄系統後,想要一邊複製文件、一邊查找文件、一邊進行編譯代碼、一邊下載軟件,固然能夠經過開啓多個shell來完成,但若是想只在一個shell來完成以上多個任務時,此時可使用shell的一個特性任務控制

    在學會如何使用命令來控制任務以前,先了解兩個概念:前臺(foreground)後臺(background)前臺就是出現提示符讓用戶操做的環境,而後臺就是不能與用戶交互的環境,你沒法使用 ctrl-c 終止它,可以使用 bg/fg 呼叫該任務。

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

    1. 將任務放在後臺運行:command + &


    job control 1.png

    注意一下上面打印信息,[1]表示job number(任務編號),7089表示PID(進程號)。在後臺執行的命令,若是有stdout和stderr,數據依舊輸出到屏幕上,能夠經過數據重定向傳輸到文件中,就不會影響前臺的工做。

    job control 2.png

    2. 將任務丟到後臺暫停:ctrl-z

    在shell中執行find / -print命令,而後按下ctrl-z將任務丟到後臺暫停:

    job control 3.png

    由上面打印可知,任務find / -print暫停執行,並將任務放在後臺,返回一個job number[2]

    3. 查看後臺全部任務狀態:jobs -l

    輸入jobs -l 查看後臺全部的任務狀態:

    job control 4.png

    仔細查看打印信息,有沒有留意到在PID 7417和7431以前有-和+兩個符號,-表示最近第二個被放到後臺的任務號碼,+表示最近被放到後臺的任務號碼。

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

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

    job control 5.png

    看上面打印的PID是7431,確實如此。再次輸入jobs -l來查看後臺全部任務的信息

    job control 6.png

    此次輸入fg %1來說後臺的任務拿到前臺處理。

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

    輸入jobs -l查看任務狀態:

    job control 7.png

    而後輸入bg %2; jobs -l將後臺任務變成運行,並查看任務狀態,而後不斷地輸入打印信息,這時須要關閉終端才能kill這個shell進程的子進程。

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

    有時,任務在後臺運行或暫停,這時我想結束這個任務,怎樣辦呢?你可使用kill命令將任務結束。
    輸入find / -print命令,並按下ctrl-z暫停任務:

    job control 8.png

    輸入kill -9 %1;jobs -l結束任務並顯示任務狀態:

    job control 9.png

  • shell script

    shell script是利用shell的功能所編寫的一個程序,這個程序使用純文本文件來保存一些shell的命令,並遵循shell的語法規則,搭配數據重定向、管道、和正則表達式等功能來組合各類工具,實現簡單重複任務的自動化。

  • 通配符

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



iTerm 2(for mac) && Oh My Zsh

若是你是mac的用戶,推薦一個終端應用iTerm 2, iTerm 2 相比mac自帶的 Terminal 應用,有太多優勢了。例如,支持畫面分割,能夠設置主題,各類使用的快捷鍵,以及快速喚出。配合 Oh My Zsh 使用,簡直優雅到爆!

Oh My Zsh安裝

  • curl方式
    [plain]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
    1. curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh  
  • wget方式
    [plain]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
    1. 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來配置,能夠設置環境變量和別名;

[plain]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. # Support autojump  
  2. [[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh  
  3.    
  4. # setup moco alias name  
  5. alias moco_service="moco start -p 12306 -g settings.json"  
  6.    
  7. #setup macvim alias name  
  8. alias vim="/Applications/MacVim.app/Contents/MacOS/Vim"  
  9.    
  10. #setup pod update alias name  
  11. aliaspod_update='pod update --verbose --no-repo-update'  

Themes列出全部可用主題,每一個主題都有截屏效果並教你如何設置,選擇你喜歡的主題,在配置文件~/.zshrc查找字符串ZSH_THEME=」robbyrussell」,經過改變ZSH_THEME環境變量來改變主題。例如,

[plain]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. ZSH_THEME="agnoster"  

oh my zsh提供數十種主題,相關文件在~/.oh-my-zsh/themes 目錄,能夠編輯主題來知足自身需求,我是使用默認的robbyrussell,不過作了一點小小改動:

[plain]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. PROMPT='%{$fg_bold[red]%}➜ %{$fg_bold[green]%}%p%{$fg[cyan]%}%d %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$reset_color%}> '  
  2. #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文件,裏面有不少命名別來來簡化命令的輸入。你能夠根據本身的須要來啓用哪些插件,只需在~/.zshrc配置文件追加內容便可:

[plain]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. plugins=(git autojump osx)  

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

git

當你處在一個git受控的目錄下時,Shell明確顯示git和branch信息,另外簡化git不少命令,具體使用請參考:Plugin:git

autojump

autojump插件使你可以快速切換路徑,不再須要逐個敲入目錄,只需敲入目標目錄,就能夠迅速切換目錄。

  • 安裝
    若是你是mac用戶,可使用brew安裝:
    [plain]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
    1. brew install autojump  
  • 關於 zsh: command not found: j 報錯
    請在.zshrc文件相應的位置,找到 plugins=() 這行,添加 autojump 記得各插件名之間用英文空格隔開  而後重啓item便可
    [plain]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
    1. plugins=(git autojump)  

    若是是linux用戶,首先下載autojump最近版本,好比:
  • [plain]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
    1. git clone git://github.com/joelthelion/autojump.git  

    而後進入目錄,執行

    [plain]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
    1. ./install.py  

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

    [plain]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
    1. [[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh  
  • 使用
    若是你以前打開過~/.oh-my-zsh/themes目錄,如今只需敲入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. 各類補全:除了支持命令補全和文件補全以外,還支持命令參數補全,插件內容補全,只須要按tab鍵
  4. 使用autojump智能跳轉
  5. 目錄瀏覽和跳轉:輸入d,就顯示在會話裏訪問的目錄列表,輸入列表前的序號,便可以跳轉

    list dir and jump.png
  6. 輸入..能夠返回到上級目錄

    parent dir.pngYouTube有個演示視頻 zsh shell詳細介紹若是使用Oh My Zsh

總結

做爲的一個程序員,我以爲shell是一個必不可少的工具,使用它可以絕不費勁地操做計算機。在shell提示下,經過調用各類各樣的工具,並結合管道,將這些工具根據本身須要組合起來,建立和制定宏工具,甚至編寫shell script來將簡單而重複的工做自動化,作到Don’t repeat your self

擴展閱讀


轉自 http://blog.jobbole.com/86820/

參考 http://uecss.com/zsh-brew-autojump-plugins-shell-for-mac.html

相關文章
相關標籤/搜索