OS X 平臺的 8 個實用終端工具

shinancao發表於2014-06-30

OS X 終端對外開放了許多很強大的UNIX實用工具和指令碼。如果你是從Linux轉過來的,你會發現許多熟悉的命令正是按照你想的那樣執行。但是高階使用者通常不知道OS X自帶了許多在其他作業系統中沒有的基於文字的實用工具。

更新:感謝讀著的反饋,我已經在後續的文章裡寫了更多的命令介紹:(800多個)

1.open

open開啟檔案,目錄和應用。很興奮,對不對?但是作為命令列中的雙擊,它確實隨手可用。例如,輸入如下:

…這樣就開啟Safari了,就好像你在Finder中雙擊了它的圖示。1

如果你對一個檔案使用open,它將嘗試載入該檔案以及與其相關的圖形介面應用。對一個圖片使用open screenshot.png會在預覽中開啟該圖片。你可以設定-a標識來選擇用哪個應用開啟,或者-e在TextEdit中開啟檔案直接編輯。

對目錄使用open會在直接將你帶到該目錄所在的Finder視窗。使用open進去到當前的目錄非常地有用。

請記住Finder和終端之間的一體化是雙向的—如果你把Finder中的檔案拖拽到終端中,在命令列中會貼上出檔案的完整路徑。

2.pbcopy 和 pbpaste

這兩個命令能讓你從命令列中複製和貼上文字。當然了,你也可以使用滑鼠—但是pbcopypbpaste真正的力量在於他們是UNIX命令,也就是說這兩個命令得益於管道、重定向,並能在指令碼中與其他命令一起使用。輸入如下:

…這樣會把home目錄中的所有檔案複製到剪下板中。你可以很容易地得到檔案的內容:

…或者做一些更瘋狂的事。這個hacked-up指令碼會抓取到最新的谷歌塗鴉連結,並把它複製到剪下板中。

使用pbcopy和管道是獲得命令輸出的一種很棒的方式,而不用滾動到上面再小心地來選擇。這使得分享診斷資訊變得很容易。pbcopypbpaste還可以用於自動或加速某些型別的任務。例如,如果你想要儲存郵件主題到任務列表中,那麼你可以從郵件應用中複製主題並執行:

3.mdfind

許多Linux高階使用者曾嘗試使用locate來搜尋Mac上的檔案,然後很快發現它不起作用。還有個古老的UNIX命令find,但是OS X帶有自己的殺手級搜尋工具:Spotlight。那麼為什麼不在命令列中利用它的能力呢?

那正是mdfind所做的。任何Spotlight能找到的,mdfind也能找到。包括搜尋檔案內容和後設資料。

mdfind帶來了一些便利,這使得它比那些老的命令更傑出。例如,使用-onlyin標識可以限制只搜尋單個目錄:

mdfind資料庫應該在後臺更新,但是你也可以使用mdutil(還有Spotlight)分析解決問題。如果Spotlight沒有正常工作,mdutil -E將刪除索引,並重頭開始建立。你也可以使用mdutil -i完全關閉索引。

4.screencapture

使用screencapture可以獲得多種不同型別的截圖。它類似於Grab.app和快捷鍵cmd+shift+3cmd+shift+4,可是它更加的靈活。下面是幾種你可以使用screencapture的不同方式:

捕獲螢幕內容,包括游標,並把得到的圖片(命名為’image.png’)新增到一個新的郵件資訊中:

用滑鼠選擇一個視窗,然後捕獲它的內容不帶視窗的影子,並把影象複製到剪下板上:

延遲10秒後捕獲螢幕,並在預覽中開啟新的影象:

用滑鼠選擇螢幕的一部分,捕獲它的內容,然後儲存為pdf:

要檢視更多選項,輸入screencapture —help

5.launchctl

launchctl讓你與OS X初始化指令碼launchd互動,用啟動守護程式和啟動代理,你可以控制開機時的啟動服務。你甚至可以設定指令碼定期執行或者每隔一段時間後在後臺執行,類似於Linux中的計劃任務。

例如,如果你想Apache伺服器在你開啟電腦時自動啟動,只要簡單的輸入如下:

執行launchctl list會展示出當前載入的啟動指令碼。sudo launch unload [path/to/script]將會停止並解除安裝正在執行的指令碼,新增-w標識將從啟動序列中永久刪除這些指令碼。我想要在Adobe軟體和Microsoft軟體建立的所有自動升級“助手”上執行一次。

Launchd指令碼儲存在下面的位置:

如果要看看什麼寫入到了啟動代理或守護程式,這有一個很不錯的部落格,是Paul Annesley寫的,能夠帶你瞭解檔案格式。如果你想要學習如何寫你自己的launchd指令碼,蘋果在他們的開發者網站上提供了幫助文件。如果你想完全避免使用命令列,還有一個非常棒的Lingon軟體。

6.say

這是一件非常有趣的事:say把文字轉換成語音,它使用OS X給VoiceOver使用的TTS引擎。沒有任何選項,say僅僅是地讀出你輸入的內容:2

你也可以使用say-f標識讀出文字的內容,你還可以用-o標識儲存產生的音訊剪輯:

say命令可以用於代替控制檯日誌和警告聲音。例如,你可以設定Automator指令碼或Hazel指令碼進行批檔案處理,然後用say提示任務已完成。

但是say最有意思的應用相當地邪惡:如果你用ssh來訪問朋友或同事的Mac,你可以默默地登入他們的機器並通過命令列干擾他們。給他們一個Siri的驚喜。

通過改變系統偏好設定中的聽寫與語音的預設設定,你可以改變say的聲音和語言!

7.diskutil

diskutil是OS X上的磁碟工具的命令列介面。它所作的事情和磁碟工具的一樣,但是它還有一些額外的功能—例如用零或隨機數填充一個磁碟。只要輸入diskutil list就可以檢視磁碟的路徑名,還有連線在你電腦上的移動裝置,然後用命令指定你想要操作的卷。一定要小心:diskutil如果使用不正確的話會永久抹掉磁碟上的資料。

8.brew

當然了—這不是技術上一個原本的命令。但是作為OS X使用者應該會使用HomeBrew。網上把它叫作“The missing package manager for OS X”,確實如此。如果你曾在Linux中使用過apt-get,那麼使用Homebrew時你會感到很容易上手。3

brew使你能很容易接觸到上千個開源社群免費的實用工具和外掛。例如,brew install imagemagick將會幫你配置好ImageMagick,一個非常強大的實用工具,從播放gif動畫到幾十種不同型別圖片之間的轉換它都能完成。brew install node將為你安裝NodeJS,它是時下非常流行的開發和執行伺服器端JavaScript應用的工具。

你也可以這樣使用Homebrew:brew install archey將會為你安裝Archey,一個很酷且輕量級的指令碼,它可以在一個彩色的蘋果logo旁邊顯示出你Mac的規格。

Homebrew可供選擇的範圍很多—因為它很容易建立慣用語,新包可以一直被新增進來。

Apple icon

但是關於Homebrew最棒的是哪一部分呢?它把所有檔案放在一個單獨的目錄:/usr/local/。也就是說你可以安裝最新版本的系統軟體,例如pythonmysql,而且不會影響已內建的這些軟體。如果你想要擺脫Homebrew,刪除也很容易。

編輯—5月15日:一些朋友建議我不應該盲目地刪除/usr/local的內容。要謹慎一些。如果要安全地移除Homebrew,可以使用uninstall script

為了更好地使用Terminal.app,這裡有一份所有適用於OS X 10.9 Mavericks的控制檯命令A-Z列表。


  1. 回想一下OS X app不是真正的可執行檔案,實際上是以.app為字尾的特殊的目錄(bundles)。open是從控制檯啟動這些程式的唯一方式。它也可以啟動其他實際上是bundles的“檔案”,例如Pages文件。 
  2. https://www.youtube.com/watch?v=G0FtgZNOD44 
  3. 、實際上,Homebrew更類似於FreeBSD的Ports,比Linux的apt更貼切。它使用一個混合的原始檔/二進位制檔案:如果沒有二進位制檔案給一個指定的包用,它會只下載原始檔的壓縮包,然後編譯—這在今天的多核Mac上不成問題。 

相關文章