Windows 求生手冊:概論

PUBLISHED ON AUG 23, 2017 — OPERATING SYSTEM

    在上一篇文章中,我們簡述了 Windows 不足之處,相信讀者已經有一些初步的概念。在本篇文章中,我們會就系統的各個面向,探討 Windows 不足之處,以及提供相對應的解決方案。由於本篇是概論的性質,不會深入講解各個面向,對於有經驗的讀者,可依照本篇的內容自行尋找解決方案;若不熟悉這些內容,也不需要擔心,在後續的文章會陸續介紹。

    對 Linuxer 來說,在 GNU/Linux 下,有許多不同面向的工具,包括:

    • 命令列環境
    • 命令列工具
    • 編輯器或 IDE
    • 腳本語言
    • 編譯語言

    而在 Windows 中,對於工具的思維不同,例如,注重圖形介面而忽視命令列,使得類 Unix 系統使用者覺得綁手綁腳。不過,經由許多人的努力,在 Windows 上,也有不少解決方案可採用,使得在 Windows 上生活更容易。一個新的消息是:Windows 10 會有 Bash 環境,然而,這個專案仍在早期階段,不知道未來的支援度如何;而且,只限定於 Windows 10,其他版本的 Windows 沒有這項好康;由於這個專案才剛起步,不確定 Microsoft 願意維護這個專案多久。我們會分門別類介紹目前可行的專案,這些方案,盡量以跨平台的工具為主,以供各位讀者參考。

    命令列環境

    在 Windows 上的命令列環境有兩種,一種是原先的 DOS,只是變成一個視窗化的終端機程式,功能相對陽春;另為一個則是 PowerShell,此終端機環境較原先的 DOS 環境有一些改良,增加較多的指令,但不是所有版本的 Windows 系統都支援 PowerShell。在 Windows 下有一些第三方終端機環境,提供類似類 Unix 系統的操作性。在 Windows 下最知名的模擬 GNU/Linux 環境是 Cygwin,這套軟體,提供一套類似於 GNU/Linux 的 shell 環境,而且附帶相當多的套件。不過,原來的 Cygwin 不太親民,通常需要調校一陣子後才會比較好用,為免浪費時間在調整設定上,建議安裝 Babun,這是一套調校過的 Cygwin 環境,幾乎裝好即可立即使用。

    除了前述的 Babun/Cygwin, PyCmd 不是模擬 GNU/Linux 環境,而是強化原本的 CMD 環境,提供類似 Bash 的自動補完 (auto-completion) 功能,內部運作的仍然是使用原生的 Windows 命令列工具。不過,先前的 PyCmd 偶而會 crash,新版這個現象有改善一些。Clink 則是另外一個可以加強 DOS 環境使用經驗的軟體,透過這套軟體,DOS 會有類似 Bash 的自動補完功能,相當地方便。

    命令列工具

    由於 Windows 系統對命令列環境不友善,連帶地開發者也很少開發命令列程式,惡化了一般使用者對命令列的印象。Babun/Cygwin 除了移植命令列環境以外,也帶著許多命令列工具,比較好的使用方式也是在 Cygwin 環境中使用這些工具,因為命令列工具需要搭配命令列環境來使用,而 DOS 環境對這些命令列工具不是那麼友善。有時候,我們仍然需要使用 Windows 的原生命令列這時候,可以試試看 GnuWin32 或是 UnxUtils,這些專案移植了許多命令列工具到 Windows 下,安裝後即可直接使用。

    編輯器

    由於 Windows 自帶的記事本相當陽春,對於撰寫程式和命令稿幾乎沒有幫助,通常會另外安裝另一個編輯器。除了使用 Cygwin 環境下的編輯器外,以下是數個可在 Windows 原生環境下使用的編輯器:

    • Vim
    • Emacs
    • Sublime Text
    • Atom
    • Visual Studio Code
    • Notepad++ (Windows only)

    其中,Vim 是在 Windows 終端機下表現最好的編輯器,小弟我之前有在用 Vim 時,Windows 和 GNU/Linux 都可以共用同一套 Vim 設定檔,相當方便;而 Emacs 雖然也支援終端機,但受限於其設計,使用起來不若在 GNU/Linux 上方便。但是,Vim 和 Emacs 相對較難上手,如果使用終端機的頻率沒有很高,可自行試用其他的圖形化編輯器。

    整合式開發環境

    傳統的 Unix 文化著重於各種終端機下的小型工具,而 Windows 文化在早期就會使用整合式開發環境 (IDE, integrated development environment)。現在絕大部分的桌面用作業系統都有圖形介面,包括 GNU/Linux 在內,倒也不一定要堅持只用終端機下的工具。近幾年來出現數個跨平台的 IDE,其中一些例子包括:

    • Code::Block (C、C++、Fortran)
    • IntelliJ IDEA (多種語言)
    • Komodo IDE (多種語言)
    • Android Studio (Android)
    • RStudio (R 語言)

    由於 IDE 的介面通常較複雜,使用跨平台 IDE 的好處在於減少學習新軟體所需的時間。

    腳本語言

    通常類 Unix 系統使用者或多或少會使用某種腳本語言協助自己工作,如果是在 Cygwin 環境下,大抵下 GNU/Linux 下的命令稿也可以拿來使用。如果需要在 Windows 原生環境下使用腳本語言,則需另行安裝。以下是各個腳本語言的 Windows 版本:

    • Perl

      • StrawberryPerl:接近 Unix-like 系統下的使用經驗
      • ActivePerl:商業版本,附有自己的套件管理程式
    • Python

      • CPython:官方即提供 Windows 版本的 Python
      • ActivePython:商業版本,附有自己的套件管理程式
    • Ruby

      • RubyInstaller:將 Ruby 包裝成容易安裝的形式
      • ActiveRuby (beta):商業版本,目前仍在 beta 階段

    另外,如果有一些 Java 的基礎,也可使用 Groovy 做為自己的腳本語言。Go 雖然不是腳本語言,但其語法相對簡單,可以做為腳本語言的替代品。

    在 Windows 上使用腳本語言時,如果只使用標準函式庫的功能,通常不會有什麼大問題;但是,如果使用到第三方函式庫時,則有時候會無法安裝,尤其是一些以 C/C++ 撰寫的模組,這時候,需要 C/C++ 編譯器及相關函式庫。如果綜合考量資源豐富度和在 Windows 上的易用性,則 Python 是較佳的選擇。

    編譯語言

    對 C/C++ 來說,Windows 是一個不太友善的環境,不僅僅在於缺少 C/C++ 編譯器,對於 Autotools 等編譯工具也不相容,也缺乏第三方函式庫。MinGW 專案將 GCC 工具鏈及編譯環境移植到 Windows 上;不過,原來的 MinGW 較不親和,建議採用 MSYS2,該專案將 Arch Linux 的套件管理程式及一些常用函式庫移植到 Windows 上,安裝起來相對容易。易一個類似的專案是 Win-builds,該專案將一些常用軟體包裝成一個易用的安裝檔,不過,缺乏 MSYS2 的套件管理功能。

    如果有時想要撰寫一些小型程式,又覺得 C/C++ 不易撰寫,可以考慮 Go 語言,這類新興語言比 C/C++ 相對高階,也有部分腳本語言的特質,又可以很容易地編譯出不同系統使用的執行檔,學習起來也不會過於困難,有興趣的讀者可自行學習。

    虛擬機器

    除了前述的解決方案,我們也可以使用完整的虛擬機器 (virutal machine),建立一個獨立的 Linux 環境,在某些任務上,會比前述的其他方案都來得好。不過,本書的目標是找尋適用於 Windows 上的方案,使用虛擬機器則不是本書討論的範圍。在虛擬機器上安裝 Linux 幾乎沒有驅動程式的問題,會比在實體機器上安裝來得簡單,有需要的讀者可自行嘗試。

    小結

    在本章中,我們簡單地介紹一些可在 Windows 上可用的 GNU/Linux 取向工具,有興趣的讀者,可以自行選擇所需的專案。透過本章介紹的工具,可使 Linuxer 在 Windows 上的生活更自在。

    TAGS: INTRO, WINDOWS