對於 GUI 項目的易用友好和 CLI 的簡單高效之間,存在一場曠日持久的討論。但我這並非想推進或是煽動一場聖戰。RebelLabs 曾討論過 JDK 內建工具並取得了不錯的反響。所以我迫切的想分享幾個本身沒法割捨的非 JDK 命令行工具。html
我確信每個稱職的開發者都至少對如何用命令行工做有所瞭解,不只僅是由於一些工具只存在於 CLI 的各類變體,更是由於極客精神!shell
全部人們討論的細微差異:好比操做系統的選擇(固然是 OSX ,擁有漂亮的鋁合金外殼),最喜歡的shell(真的應該是 ZSH)或者相較於 Emacs、Vim 更加出衆的性能(除非你有比常人更多的手指),這些都不太相關。好吧,這有點網絡論戰的意思,但我保證這是最後一次!瀏覽器
因此,個人建議是你應該學會在命令行上使用這些工具,這會對你產生積極的影響,使你至少能夠享受半個世紀的愉悅和高效!服務器
總之,在這篇文章中我會和你分享四五個不爲人熟知但卻至關出色的命令行工具。做爲額外的福利,我也會對如何在 Windows 上正確使用 shell 給出建議,這些知識自己頗有價值。微信
我寫這篇帖子,最主要是由於是我真的很喜歡用這些工具,而且我也想了解其餘我所不知道的命令行工具。因此,優秀的讀者請留言告訴我你最喜歡的 CLI 工具,這很重要!如今假定咱們都有一個好的、可用的 shell,就讓咱們來學習幾個簡潔而有價值的命令行工具吧。markdown
在我榜單上第一名是個被稱做 HTTPie 的工具。別懼怕,慶幸的是它和瀏覽器沒有任何關係。本質上,它是一個 cURL 封裝器,用來執行來自命令行的 HTTP 請求。HTTPie 增長了不少好的功能,好比自動格式化和智能高亮輸出,使其更具可讀性。此外,它採用了很是人性化的執行方式,不須要你記住那些模糊的標誌位和選項。要執行 一個 HTTP 請求,你只要簡單的運行 http,去發送 http POST,還有比這更簡單優美的嗎?網絡
幾乎全部的命令行工具都是簡單的打包安裝,HTTPie 也不例外。你只須要運行下面的命令便可安裝。app
在 OSX 上使用 homebrew,這是 OSX 上可以找到的最好的包管理器:brew install httpie編輯器
其餘平臺,使用 Python 的 pip命令:pip install –upgrade httpie
我我的在開發一個 REST API 的時候會常常用 HTTPie,由於它能讓我便捷地查詢 API,而且返回結構清晰、易讀的數據信息。毫無疑問,這款工具免去了不少煩惱和沮喪。幸運的是,應用不只停留在 REST APIs. 通常來講,全部經過 HTTP 的交互,不管他是輸入或者輸出數據,都能以一種易於閱讀的方式完成。
我建議你瀏覽一下他們的網站,花10秒的時間安裝接着運行一下。嘗試去獲取任何網站的源碼,相信你會對輸出結果感到驚訝。
小提示:將 HTTPie 的優點同 jq for command line JSON manipulation 或 pup for HTML parsing 結合起來,你將勢不可擋!
1. Icdiff
在 ZeroTurnaround 我有幸接觸到了 Mercurial,一個很是簡單易用的集羣服務器。在 OSX 上,出色的 GUI 項目 SourceTree 使得 Mercurial 即便在處理複雜問題上,也如清風拂面。不幸的是我總喜歡將 程序、標籤、窗口 的數量控制在最少。因爲總開着一個終端窗口,使用 CLI 就變得頗有必要。
除了設置中的一個缺陷其餘一切都很完美。這是一個讓我沒法拒絕的功能:將區別並排顯示。談起 icdiff,這是在天天所用的工具中,我最欣賞的。咱們來看一張截圖:
icdiff 自己是一個智能 Python 腳本,智能檢測哪些地方作了修改、添加和刪除。出色的色彩高亮使得用戶很容易區分這三種不一樣的修改。
要使用icdiff,要完成如下幾個步驟:
再次經過 homebrew 安裝:brew install icdiff
從上述網站手動抓取 Python 腳本並把它添加到你的環境變量中
當你把 icdiff 和諸如 Mercurial 的集羣服務器結合到一塊兒的時候,你會發現效果超棒。要想充分的結合,你須要再完成兩個配置步驟,already documented here在這裏有詳細說明。該說明的要點一是,要添加一個封裝腳本以確保 icdiff 的 one-by-one file diff 能夠在整個目錄上運行。其次你須要配置你的集羣服務器來真正使用 icdiff。上面的連接介紹了針對 Mercurial 的配置細節,將它移植到 Git 上應該也不太難。
按照「躬行己說」的精神,我開始經過 CLI 來完成整篇博文。大部分工做是在 OSC 的 iTerm2中藉助 MacVim 完成的。全部的內容都是按照 MarkDown 的標準語法來書寫和統一格式的。這裏惟一的麻煩就是有時你很難準確猜到最終呈現的效果。
這就引出了下一個工具:Pandoc。它是如此強大和萬能,能夠說它是 CPL 下的一個奇蹟。咱們來看看如何使用它。
pandoc -f markdown -t html blogpost.md > blogpost.html
隨便想一種標記格式。十有八九,Pandoc 能夠將它從一種格式轉換爲其它任意一種。好比,我正在用 Vim 寫這篇博文,而且用 Pandoc 將它從 MarkDown 轉換爲 HTML,也就是最終看到的結果。它很棒,只須要一個終端和瀏覽器,比起其餘須要綁定到特定在線平臺,它徹底獨立和離線。
不要把本身限定在一些譬如 MarkDown 的簡單格式,嘗試一些 docx 或 LaTeX 文件,以 PDF 或 epub 格式導出,嘗試讓它處理和格式化你的引文。總之它充滿無限可能。
再次使用 brew install pandocdoes 這一技巧。我說起過我很是喜歡 Homebrew 嗎?或許它應該加入個人工具榜單!無論怎樣,你已經領會了它的要義。
接下來這個工具其實是一個一系列好用工具的集合,它非 coreutils:Moreutils。在 moreutils 下,你能夠獲得任何你能想到的發行版。OSX 用戶能夠像我在文章中這樣安裝它,獲得這一系列的好處。
brew install moreutils
下面是簡短描述所包含程序的列表:
chronic:悄悄執行一個命令,只要它不掛掉
combine:經過布爾值計算來合併兩個不一樣文件中的行。
ifdata:無需解析 ifconfig 輸出就能得到網絡接口信息
ifne:只要標準輸入非空就執行一個程序
isutf8:檢查一個文件或是標準輸入是不是 utf-8 格式
lckdo:執行一個帶鎖的程序
mispipe:pipe 兩個命令,返回前一個的退出狀態
parallel:一次執行多個任務
pee:將標準輸入信息輸出到管道中
sponge:獲取標準輸入信息寫到一個文件中
ts:給標準輸入打上時間戳
vidir:在你的文本編輯器中編輯一個目錄
vipe:將文本編輯器加到管道中
zrun:自動解壓命令參數
維護者會暗示本身 sponge 或許是最有用的工具,由於你能夠輕鬆地將標準輸入寫到一個文件中。不過,也不難發現其餘諸如 chronic,parallel,以及 pee等命令的優點。
我我的最喜歡的毫無疑問是 vipe,這也是把這個集合加入榜單的重要緣由。
因爲數據經過管道從一個命令到另外一個命令,因此你能夠逐字攔截。即便在你的腳本里這算不上個有用的工具,但在運行交互式命令的時候,它的確頗有幫助。這裏我沒有給出個有用的例子,而是給了你一個修改過的 fortune。
現在 Windows 系統自帶兩個不一樣的 shell:經典命令行和 PowerShell。讓咱們無視他們,來看看 Windows 下真正的命令行工具:Babun!該項目之因此讓人歎爲觀止,是由於它將 *NIX 命令行的全部優勢以一種預配置的方式帶到Windows 中,一點也不拖泥帶水。
並且,它默認的 shell是我最愛的 ZSH,固然它也能很容易的切換到 Bash,假若那是你的菜的話。在 ZSH 下,打包了很受歡迎的 oh-my-zsh framework,無需任何配置,它就結合了 ZSH 的全部優勢。這歸功於一些很是明智的預設以及一個使人印象深入的插件系統。
下載默認的 Babun,其中包含比任何一位理智的開發者所須要的多得多的應用,所以解壓後它有 728 MB。做爲回饋,你將得到好比 Vim 等必備的預裝軟件!
深刻研究你會發現,Babun 基本上就是個對 Cygwin 的精美封裝。若是你已經安裝了 Cygwin 你能夠無縫地複用那一個。不然它將把本身的 Cygwin 設爲默認,並提供給你訪問接口。
更多的興趣點在於 Babun 提供本身的包管理器,再次包裝了 Cygwin 的,以及同時面向本身和 oh-my-zsh 的更新機制。最棒的在於它不要求實際的安裝,也不須要一般的管理員權限。這對於在一臺鎖定的電腦上工做的人來說再好不過。