Cygwin 是一個用於 Windows 的類 UNIX shell 環境。 它由兩個元件組成:一個 UNIX API 庫,它模擬 UNIX 作業系統提供的許多特性;以及 Bash shell 的改寫版本和許多 UNIX 實用程式,它們提供大家熟悉的 UNIX 命令列介面。前一個元件是一個 Windows 動態連結庫 (DLL)。後一個元件是一組基於 Cygwin DLL 的程式,其中許多是用未經修改的 UNIX 原始碼編譯的。它們合在一起提供大家熟悉的 UNIX 環境。

  這篇文章我們要安裝 Cygwin,討論它的命令列介面 (CLI),並構建標準 Cygwin 發行版中未包含的開放原始碼,以此體會把 UNIX 應用程式(至少是一部分 UNIX 應用程式)遷移到這個模擬環境是多麼容易。

1. 下載、執行安裝嚮導檔案
  一開始的下載方法,瞭解Cygwin的人都知道:就是到http://www.cygwin.com 中先當個安裝嚮導檔案setup.exe,這個是Cygwin的官方下載安裝嚮導檔案,而且也只能通過它才能正確下載最新的Cygwin版本。setup.exe下載完畢,雙擊執行,程式安裝嚮導介面如下圖所示

  

單擊 Next 進入下一個螢幕,選擇要執行的安裝型別。

  單擊 Install from Internet。

  單擊 Next,然後選擇一個安裝目錄。

2. Cygwin 安裝選項

  

  在大多數情況下,推薦的安裝選項是合適的,也可以進行定製,但是要注意幾點:

  不要在 Windows 系統的根目錄(比如 C:)中安裝 Cygwin。最好把 Cygwin 安裝在它自己的子目錄中,比如預設目錄(C:\cygwin)或 C:\Program Files\cygwin。(您選擇的目標目錄將成為模擬的 UNIX 環境的根目錄/。例如,如果在 C:\cygwin 中安裝,那麼虛擬的 /usr/bin 實際上是 C:\cygwin\usr\bin)。

  對於 Install For 選項,不要選擇 Just Me。

  把 Default Text File 型別設定為 Unix,從而儘可能提高與其他 UNIX 機器上儲存的現有檔案的相容性。

  單擊Next。在下一個視窗中,選擇一個儲存 Cygwin 所需的資料的目錄。不要選擇前一步中選擇的 Cygwin 目錄。 如果可能的話,應該在有至少 1GB 空閒空間的驅動器上建立或選擇一個目錄。

  再次單擊 Next,選擇使用的 Internet 連線型別。通常應該選擇 Direct Connection。

  再次單擊 Next。

  稍等一會兒,Cygwin 會下載當前的映象站點列表,讓您選擇一個映象站點,見圖 3。如果不確定應該選擇哪個站點,就選擇地理位置比較近的站點。

3. 選擇您認為可靠的或地理位置比較近的安裝站點

  

  經過短暫的延遲之後,安裝程式顯示可用的類別和包的完整列表。圖 4 顯示一個類別的部分內容。單擊加號 (+) 展開對應的類別;單擊 “迴圈” 標誌在 Skip(忽略此包)和包的所有可用版本之間迴圈。如果 Cygwin 提供一個實用程式的多個版本,應該選擇滿足您的需求的例項。順便說一下,如果選擇 B 列,就會下載二進位制包;選擇 S,也會下載原始碼。

4. 選擇最適合需要的包和例項

  

  在 Cygwin 中可用的包超過 1,000 個,所以應該只選擇您需要的類別和包。(安裝所有 Cygwin 包會佔用超過 800MB 的磁碟空間)。以後隨時可以新增整個類別或單獨的包:只需重新執行 Cygwin 安裝程式。(還可以在任何時候用相同的安裝程式刪除或更新包)。搜尋 Cygwin 包列表(參見 參考資料),檢查您喜歡的 UNIX 實用程式是否在 Cygwin 中可用。安裝列表檔案下載完畢,嚮導會顯示列表中的內容,供使用者自由選擇到底需要下載哪些安裝包。如何選擇呢?只需用滑鼠點選每個安裝包名後面那個迴圈箭頭圖示即可:圖示後面的文字是表示究竟對該安裝包採取何種下載/安裝方式,並隨著點選而不斷變化,共有這麼幾類:

  (1)Default:這是預設選擇,表示只下載/安裝該包的預設安裝項(可點選包左邊的+號展開,看看預設安裝究竟是些什麼內容)。
  (2)Install:表示要下載/安裝該包的全部內容。所要求的空間也最大。
  (3)Reinstall:表示重新下載/安裝該包的內容(以上一次正常下載/安裝時所選擇的內容為準)。這個選項非常有用,稍後在下篇中會有說明。
  (4)Uninstall:這個就不用解釋了吧。
  使用者可根據自己的實際需要,來準定究竟下載/安裝哪些內容。推薦選擇“Install”方式,一步到位,免得日後被各種這樣那樣的問題所困擾。
  至於視窗頂部那些“Keep”、“Prev”、“Curr”、“Exp”等等選項,只是用來改變當前樹結構的顯示方式的,對下載/安裝沒有什麼影響。使用者可以用預設的“Exp”。然後點選“下一步”,就要開始正式進行下載啦。

  

  最後,安裝程式安裝軟體並(可選地)在 Start 選單和桌面中新增快捷方式。單擊 Finish

5. 通過使用 Start 選單或雙擊 Cygwin 圖示(如果添加了這些快捷方式的話),啟動 Cygwin;也可以執行 Cygwin 目錄中的 Cygwin 指令碼(比如 C:\cygwin\Cygwin.bat)。

  圖 顯示第一次啟動 Cygwin 時的情況:它建立您的主目錄,執行 shell 啟動檔案,顯示提示。現在可以執行 UNIX 命令了!現在可以在 Windows 中使用 UNIX 命令了!

    

  例如,試一下 ls -a或 type touch。後一個命令表明 touch是可執行檔案 /usr/bin/touch。

在 Windows 中發揮 UNIX 的優勢

  Cygwin 在 Windows 中幾乎完整地模擬一個 UNIX shell。實際上,它把這兩種作業系統很好地結合在一起了。例如,可以執行 df -h命令顯示 “UNIX” 機器上的空閒磁碟空間。圖 7 顯示結果。

  圖  是 Windows 上的 UNIX 檔案系統,還是 UNIX 上的 Windows 檔案系統?

  

  正如前面提到的,Cygwin 安裝目錄作為虛擬 UNIX 系統的根目錄。Cygwin 把安裝目錄中的子目錄對映到 UNIX 目錄。它以單獨的卷的形式提供 Windows 驅動器,比如 /cygwin/c。可以使用這樣的虛擬路徑啟動 Windows 程式。請嘗試輸入

  /cygwin/c/Program\ Files/Internet\ Explorer/IEXPLORE.EXE

  從命令列啟動 Windows Internet Explorer®。(還可以使用 Tab 鍵自動展開路徑的元素)。

  順便說一句,如果要把 Windows 路徑名轉換為等效的 UNIX 路徑名或者相反,可以試試內建命令

  cygpath。在預設情況下,cygpath產生 UNIX 路徑名。使用-w選項產生 Windows 路徑。

  $ cygpath -w /cygwin/c/Program\ Files/Internet\ Explorer/IEXPLORE.EXE c:\Program Files\Internet Explorer\IEXPLORE.EXE

  還有幫助溝通這兩個環境的其他特性:

  Cygwin 提供它自己的 lpr(/usr/bin/lpr 而不是 Windows 的 LPR.EXE),可以直接從模擬的 UNIX 環境進行列印。只需把 PRINTER 環境變數設定為 \\server\printer_name 或 //server/printer_name 這樣的 Cygwin UNC;前向斜槓和反向斜槓都可以,在 Cygwin 中的其他地方也是如此。

  在 Cygwin 中用 ln -s建立的符號連結在 Windows 中被解釋為快捷方式。同樣,Windows 快捷方式在 Cygwin 中被解釋為符號連結。因此,可以使用 Windows 快捷方式帶引數啟動 UNIX 命令。

  因為 Cygwin 提供完整的 Bash shell,所以可以使用上述的所有相容特性(和其他特性)編寫 UNIX shell 指令碼來維護 Windows!

  例如,可以使用 UNIX find

  在驅動器上搜索資料。請注意一點:在 Windows 檔名中常常使用空格。為了保持完整的檔名(請記住,UNIX 引數以空格分隔),一定要使用 find -print0和 xargs -0。

  見圖 4。展開 Devel 類別,使用迴圈控制元件選擇以下包的最高版本:

  autoconf2.1

  automake1.10

  binutils

  gcc-core

  gcc4-core

  gdb

  pcre

  pcre-devel

  做出選擇之後(為了滿足依賴性,可能會自動選擇其他包),單擊 Next 開始更新。與前面一樣,下載和安裝過程需要一定的時間(開發包往往相當大)。 參考資料)

結束語

  Cygwin 並不是完美的 UNIX 模擬環境,但已經相當好了。核心元件的文件很完善,而且特別方便,它們介紹了模擬 DLL 中的限制和安全風險。

  Cygwin 最棒的特性可能是它與 Windows 的整合。使用 Cygwin 和它的 UNIX 命令列來操縱系統可以大大提高生產力。建議在您的 shell PATH 變數中包含 Windows 的 Program Files 中的子目錄,這樣只  需輸入程式名,就能夠啟動路徑中的任何二進位制程式。

  更棒的是,Cygwin 可以在同一個視窗中管理多個作業。按 Control-Z 可以暫停正在執行的作業;輸入 bg和fg分別在後臺和前臺執行作業;輸入 jobs管理作業列表。當然,Cygwin 還可以對輸入和輸出進行重定向,可以通過管道把一個命令的輸出傳送給另一個命令。