關於Cygwin——包管理、替換默認終端、同MSYS的比較

Cygwin 是一個用於 Windows 的類 UNIX shell 環境。 它由兩個組件組成:一個 UNIX API 庫,它模擬 UNIX 操做系統提供的許多特性;以及 Bash shell 的改寫版本和許多 UNIX 實用程序,它們提供你們熟悉的 UNIX 命令行界面。前一個組件是一個 Windows 動態連接庫 (DLL)。後一個組件是一組基於 Cygwin DLL 的程序,其中許可能是用未經修改的 UNIX 源代碼編譯的。它們合在一塊兒提供你們熟悉的 UNIX 環境。html

與此同時,MinGW這個項目也在作相似的事情。MinGW是Minimalistic GNU for Windows的縮寫。MinGW有一個叫MSYS(Minimal SYStem)的子項目,主要是提供了一個模擬Linux的Shell和一些基本的Linux工具。shell

這篇文章指出了兩者的區別,學習一下:segmentfault

首先MinGW和Cygwin都不能讓Linux下的程序直接運行在Windows上,必需經過源代碼從新編譯。api

現代操做系統包括Windows和Linux的基本設計概念像進程線程地址空間虛擬內存這些都是大同小異的,之因此兩者上的程序不能兼容,主要是它們對這些功能具體實現上的差別,首先是可執行文件的格式,Window使用PE的格式,而且要求以.EXE爲後綴名。Linux則使用Elf。其次操做系統的API也不同,如Windows用CreateProcess()建立進程,而Linux使用fork()。bash

因此要移植程序必然要在這些地方進行改變,MinGW有專門的W32api頭文件,來把代碼中Linux方式的系統調用替換爲對應的Windows方式。而Cygwin則經過cygwin1.dll這個文件來實現這種API的轉換,並模擬一個Linux系統調用接口給程序,程序依然以Linux的方式調用系統API,只不過這個API在cygwin1.dll上,cygwin1.dll再調用Windows對應的實現,來把結果返回給程序。ide

能夠用查看他們編譯好的程序的導入表來驗證這點。兩者生成的程序都是能在Windows上運行的EXE文件,顯然都是PE格式,用一個PE格式查看工具檢查一下就能發現,Cygwin生成的程序依然有fork()這樣的Linux系統調用,但目標庫是cygwin1。而MingW生成的程序,則所有使用從KERNEL32導出的標準Windows系統API。工具

要在Cygwin環境中管理軟件包,可使用自帶的setup.exe。此外,Cygwin中還有相似於apt-get的包管理器,叫作apt-cyg。這篇文章介紹了apt-cyg的安裝和使用。post

Cygwin默認的界面以下:
請輸入圖片描述學習

很醜,默認不能複製粘貼,須要開啓快速編輯模式或者點擊左上角,選擇編輯。Cygwin官網建議使用MinTTY做爲終端工具。MinTTY已經自帶,輸入mintty進入。spa

請輸入圖片描述

能夠看到,比cmdPowerShell強多了。但怎樣將其設置爲Cygwin的默認終端?
參考了這篇文章。在Cygwin目錄下打開Cygwin.bat,註釋掉bash --login -i,加入下面這句:

start mintty bash --login -i

(若是你沒有將Cygwin目錄加到path中,這裏要指明路徑)以下圖。
請輸入圖片描述

相關文章
相關標籤/搜索