Windows 求生手冊:命令列工具 (Console Utility)

PUBLISHED ON SEP 14, 2017 — OPERATING SYSTEM

    空有命令列環境,而沒有足夠的命令列工具,其實對使用者沒有實質的幫助。本章介紹一些在 Windows 下使用命令列工具的相關議題。

    Yet Another Language Syndrome

    Unix 文化中充斥著許多命令列參數 (parameters)、設定檔 (configuration files)、小型語言 (mini-language) 等,透過這些方式操作命令列工具,可以達到相當細微的操作,這是圖形化選單無法達到的。有些比較複雜的命令列工具,光是單一工具就可以出一本書了,像是 Make、Git、sed、AWK 等工具都有自己的專書。對於不習慣這種工作模式的使用者來說,這些看似複雜的工具著實令人心生畏懼。其實,Unix 工具是學不完的,即使筆者已經使用了數年的 GNU/Linux 和 Mac,也只是使用了一小部分常用的工具而已,每次重翻 Unix 超級工具都會覺得好像還有一些技巧沒學過。記不住就代表不常用,需要時再查即可。

    對於初學者,比較建議的方式,是從每個命令列工具最典型的使用情境開始學習,其他較冷門的用法需要時上網查詢就好。TLDR pages 是一個很好的線上學習資源,這個網站針對一些指令列出幾個典型的使用方式,透過這些範例,可以很快對某個指令產生第一印象,掌握其基本用法。另外一個學習的方式是閱讀 BSD 系統的 manpages,因為 BSD 系統的 manpage 都會附上簡短的使用範例,像是 Mac 或是 FreeBSD 的 manpages 皆可。FreeBSD 將其手冊放上網站,需要的讀者可自行參考。當然,不同系統的命令列工具參數略有不同,這些 manpages 範例僅供參考。

    殊途同歸

    Unix-like 系統在多年演進中,產生許多功能相似的指令。一個典型的例子就是 grep vs. sed vs. awk vs. perl。這是四個不同的指令,其中 grep 沒有自己的程式語言,只有命令列參數,而 sedawkperl 都各自有自己的程式語言。這四種指令都可以用常規表示式 (regular expression) 來過濾字串,但每個指令的常規表示式略有不同,讀者是不是開始覺得昏頭了?其實,如果不想學那麼多指令的話,只要學 perl 就可以滿足其他三者的功能,只是要多打幾個字而已。很多語言和工具在功能上是重疊的,如果時間不是那麼充裕,其實也不用都學,先學其中一兩種即可。

    取得命令列工具

    雖然 CMD 環境有一些內建的命令列工具,筆者不太建議學習這些工具,因為這些工具的參數和類 Unix 系統的工具不同,而這些 CMD 特有的工具僅限 CMD 內使用;此外,這些內建工具大抵上都有替代方案可用,不需要特地去深入學習。讀者可以到 GnuWin32 網站找一些命令列工具來用,雖然可以一次就全部裝回來,筆者的習慣是要用時再一個個裝,比較知道自己系統上裝了那些工具。

    說實在的,手動到網站上自行下載、安裝工具較麻煩,有一些第三方軟體將類 Unix 系統上的套件管理系統 (package manager) 的概念帶到 Windows 下,使用方式和 GNU/Linux 上的套件管理軟體差不多,還蠻方便的。就筆者所知,有兩個方案 (1) Chocolatey (2) Scoop,前者較為老牌,後者較為年輕。Scoop 改善一些 Chocolatey 的缺點,像是不需要管理者權限、對環境變數影響較小等。不過,Scoop 算是相對新穎的專案,套件數量較少;所幸,這兩套可以並存,通常筆者都先用 Scoop 裝軟體,若 Scoop 缺乏的套件再回頭用 Chocolatey 安裝。

    常見的命令列工具

    由於命令列工具數量繁多,筆者也無法列出所有的命令列工具。筆者在此列出一些可在 Windows 下使用的命令列工具,大部分工具是跨平台的,少部分則是 Windows 特有的工具:

    • CoreUtils:基本的檔案處理,基本上可以取代 CMD 的內建指令
    • CygUtils:由 Cygwin 移植到 Windows 上的一些小工具,像是轉換文字檔案行尾的 dos2unix 和從命令列啟動圖形介面程式的 cygstart 等
    • BsdTar:壓縮及解壓縮軟體,可處理多種壓縮格式
    • file:偵測檔案種類
    • which:偵測命令列工具所在的位置
    • ack:文字搜尋和過濾工具,取代老牌的 grep,好處是可以用 Perl 的常規表示式
    • less:直接在命令列讀取檔案,任何文字檔案都可以開啟
    • make:老牌的編譯工具,流程自動化軟體的始祖
    • Git:知名的分散式版本控制軟體,不僅可處理程式碼,任何文字檔案都可以處理
    • tree:瀏覽專案結構
    • ImageMagick:非互動性圖片處理軟體,支援多種圖片格式
    • wget:直接從命令列下載軟體,支援續傳功能

    透過本文,希望各位讀者對命令列工具能有一些概念。不過,比起閱讀這些文字資料,實際且常態地使用命令列工具更加重要;經常使用命令列工具,自然而然會記得如何使用。對於少用的參數或語法,記不住也沒有關係,需要時再查閱相關資料即可。

    comments powered by Disqus