版本:v1.0
摘要
本文主要介紹了什么是Cygwin,如何安裝Cygwin,使用Cygwin時的一些常見問題總結,總結Cygwin的使用技巧和心得,其他和Cygwin相關的東西
2013-09-04
修訂歷史 | ||
---|---|---|
修訂 1.0 | 2013-09-04 | crl |
|
版權 ? 2013 Crifan, http://crifan.com
目錄
插圖清單
本文目的在于,詳細解釋什么是Cygwin,如何使用Cygwin
以實現(xiàn),對于Cygwin不了解的人,看了后,可以達到:
知道什么是Cygwin
在具體如何安裝和使用時,都有合適的參考資料
對于Cygwin的新劃分除了的x86和x64,抽空去研究搞懂,除了本身x86和x64的區(qū)別之外,細節(jié)上有何其他區(qū)別。
所以之前介紹的,添加:http://mirrors.163.com/cygwin/的方法,也是錯的了
需要同步去更新。
對應章節(jié):為何手動添加URL時,輸入的是而不是
之前折騰cygwin中把make從3.82換成3.81的過程,整理過來
目錄
相關舊帖:
Cygwin是一個集合,這個集合包含了一堆的工具,目的在于,在windows平臺上,提供一個Linux的環(huán)境。
作為在Windows下面的軟件,Cygwin中最核心的,是個dll庫,叫做cygwin1.dll,
其提供了底層的Linux API的所有功能,供Cygwin下面的各種工具,模塊等調用,以此來實現(xiàn)在Windows下模擬Linux環(huán)境。
從cygwin的具體表現(xiàn)和文件組成上來說,就是:核心的Cygwin DLL文件 + 各種Linux下面的模塊(工具/軟件/庫)
計算機的世界,在操作系統(tǒng)方面,目前用的最廣泛的,有三類:開源免費的Linux,微軟的Windows,蘋果的Mac。
隨著計算機的發(fā)展,很多時候,尤其是做軟件開發(fā)方面,常常會遇到在某種平臺上,希望利用到另外一種平臺上的工具,或環(huán)境,其中就包括在Windows下面,利用Linux中的環(huán)境和工具。
對于此種需求,最終才出現(xiàn)了各種方案,Cygwin就是其中的一種,提供了一個Windows下面使用Linux環(huán)境的平臺。
有人會問了,不是很多功能,windows下面也有類似的軟件可以實現(xiàn)嗎?為何非要(在Windows環(huán)境下)去用Linux的環(huán)境(中的軟件)呢?
那是因為,等你對Linux有更多了解的時候,就會發(fā)現(xiàn),Linux下面的很多很多的更強大的功能,是windows下面沒有對應的功能,或者即使有,也不好用。
比如Linux世界中,最常用的項目編譯過程管理的工具makefile,Windows下面的就沒有足夠好用的類似的工具
而且一般與Makefile搭配使用的其他很多別的工具,使得組合起來使用,可以實現(xiàn)非常強大且復雜的一些功能。
隨著軟件開發(fā)的深入,至少我個人感覺,才能越加發(fā)現(xiàn)Linux的各種強大和好處。
所以才會遇到,不少時候,需要在Windows下去模擬Linux環(huán)境,以便去使用Linux中的各種強大功能的軟件,工具的
不論是做偏底層的嵌入式開發(fā),還是做上層軟件的開發(fā),都可能會用到Cygwin。
簡單說就是:
想要在Windows平臺上,折騰Linux系統(tǒng)中的東西
然后才用到Cygwin去模擬Linux環(huán)境,去在Linux環(huán)境下實現(xiàn)各種復雜的功能和目標
此處,隨便舉一些例子:
就像我之前寫的教程中:
純Windows環(huán)境下的Docbook開發(fā)環(huán)境的搭建
詳細介紹的一樣,對于Docbook環(huán)境的搭建,其實是可以使用Windows下的二進制的xsltproc+fop來實現(xiàn)的
但是,其總體上能夠實現(xiàn)的功能相對較弱。
而我此處,有個相對比較復雜的需求:
需要管理20多個Docbook的book
如果編譯每一個book,都需要手動去輸入對應的編譯命令的話,相關的工作量極大且極其繁瑣,且容易出錯,直接就把人累死了
而通過Cygwin中的makefile來實現(xiàn),就相對輕松多了。
所以后來就去花點時間,去寫了對應的makefile
以實現(xiàn),對于每個book下的src文件夾下,去:
就可以對于每個book,生成其對應的不同格式的輸出文件。
而在windows下面,類似的功能,我最多只能用batch批處理文件去實現(xiàn),
但是卻缺少了Makefile中的依賴特性,其可以自動檢測所依賴的文件是否已更新,決定是否重新編譯。
即,對于多個文件,尤其是中型大型等項目的管理方面,windows的batch,比linux中的makefile差的太遠了。
另外,由于要生成chm等格式的文件,我此處還需要一些其他的輔助工具
比如用于轉換編碼的iconv,而這類好用易用的各種工具,在Linux下面,都是必備的,無需額外安裝和太操心
但是如果想要在windows下使用,還要去一個個找到對應的windows下面的版本,或者找到相應的源碼,自己去編譯一個版本。
如此,經常需要利用到Linux下面的各種強大好用的工具,但是windows下面常常沒有或者有類似的但不好用或功能很弱,
因此,才需要用到Cygwin去模擬Linux,
然后在Linux下面,利用已有的各種工具,實現(xiàn)各種復雜的需求的。
關于實現(xiàn)細節(jié),可參考:
cygwin的版本,涉及到兩個東西。
一個是cygwin的核心==Cygwin DLL文件==cygwin1.dll,其最新版本,可以從cygwin主頁上看到,此刻,2012-06-20,是1.7.15-1。
另外一個就是在線安裝文件setup.exe的版本,其在安裝過程中可以看到,比如圖 2.1 “Cygwin Net Release Setup Program”中的是2.774。
所以,如果你看到有人寫的cygwin的版本是2.x的,那都是指的是setup.exe安裝包的版本。如果寫的是1.x.x的,那都是指的是核心的dll文件的版本。
目錄
Cygwin的安裝方式,總的來說,你一般所能見到的,有兩種:
Cygwin的官網中,有個安裝文件setup.exe,其固定的不變的下載的地址是Cygwin的setup.exe。
此setup.exe本身很小,比如此刻,2012-06-20,下載下來的setup.exe,就只有689KB:
![]() |
而這些在線下載或本地已有的文件,則是非常大,一般來說,都是多達1,2G,甚至3,4G,而安裝完畢之后的cygwin則往往要占用5,6G甚至更多的硬盤空間。
當然,如果你安裝時候所選擇要安裝的模塊很少的話,占用硬盤空間則會相應變小一些,但估計也還是以GB為單位。
關于具體的安裝過程,請參考第 2.2 節(jié) “Cygwin在線安裝指南”
你可能也許聽說,有個Cygwin的ISO,也是用于安裝Cygwin的。
而ISO中所包含的文件,就是一個setup.exe和下載下來的各個模塊的安裝包。
這些文件,其實就是上述通過setup.exe(在安裝過程中)下載下來(并安裝)的而已。
所以,并沒有比setup.exe有啥特殊的地方。
不過,很明顯,其有個最大的好處,那就是不用非要去通過setup.exe去在線下載和安裝了。
因為,通過setup.exe去鏈接某個服務器,其速度往往不是那么快。
即便是目前對國內來說最快的163的服務器,速度已經很快了,但是還是沒有(比如用迅雷)單獨去下載ISO速度來得快。
所以,如果可以的話,還是ISO下載,來得快,然后本地安裝,就避免了在線連接服務器去下載太慢的問題。
關于目前可用的ISO鏡像的下載地址,請參考目前已知的可用的Cygwin的ISO下載地址
![]() | 目前已知的可用的Cygwin的ISO下載地址 |
---|---|
關于可用的Cygwin的ISO,之前就整理過一些帖子: 此處簡要整理如下:
|
下面詳細解釋Cygwin的setup.exe的安裝過程:
雙擊setup.exe,則會出現(xiàn)安裝界面:
可以看到,其中對于setup.exe,即此安裝包,也是有對應的版本的,此處的是2.774。
點擊“下一步”,出現(xiàn)“Choose installation type”界面:
![]() |
其中有三個選項:
從網上下載(下載下來的文件,也可以將來再用)
其意思是,從網上下載的文件,存在本地硬盤后,以后萬一遇到諸如某個模塊被破壞了,不能用了,則可以再通過此setup.exe去重新安裝一下,但是選擇的是下面要說的第三項,即選擇從本地某個文件夾安裝,即此處之前下載好了的,效果相當于,windows中安裝程序的修復功能。
關于如何從網上下載安裝,接下來會詳細解釋。
只下載不安裝
其用意,暫時沒有完全搞懂。大概是為了先完全下載下來,然后方便選擇性的安裝自己需要的模塊吧。
為選擇從本地安裝
上面已經提到了,其前提是,之前已經下載過了對應的所需的各個安裝模塊了,此時可以選擇此項,去全新安裝或者修復式安裝某個模塊。
點擊“下一步”后,出現(xiàn)“Select Root Install Directory”的界面:
![]() |
其中Root Directory,指的是你所要將Cygwin安裝到哪個目錄。
默認為C:\cygwin,此處可以改為自己所要的路徑,也可以用默認值,都可以。
我此處改為我所要的路徑:E:\DevTools\Cygwin\cygwin_install
然后對于Install for,有兩種選擇:
為windows當前所有用戶都有效。
只對當前的windows用戶有效。
此處選擇默認的,對所有用戶都有效,即可。
點擊“下一步”后,進入“Select Local Package Directory”的界面:
![]() |
其中Local Package Directory部分,是由于前面選擇的是從網上下載并安裝,所以此處讓你選擇對于下載下來的各個模塊的安裝文件,都放在哪里,此處,根據自己需要,設置一個路徑即可。
我此處設置為E:\download\cygwin\cygwin_down
![]() | 設置的路徑(文件夾)最好是已經創(chuàng)建好的 |
---|---|
不過要注意一點的是,確保你的設置的路徑,是真實存在的,否則就會出現(xiàn)這樣的錯誤提示了:
當然,此時也是可以點擊”是(Y)“去讓其幫你創(chuàng)建對應的路徑的。 |
然后就進入”Select Your Internet Connection“的界面了:
![]() |
此時對于網絡連接方式,有幾種選擇:
一般多數(shù)用戶都是這種直接連接的網絡,所以都是直接使用默認設置即可。
使用IE代理設置,如果你本身上網是通過代理上的,且IE中已經設置好了代理,那么就可以用此種設置了。
使用HTTP或FTP類型的代理。同理,如果有需要,自己選擇此項后,設置對應的代理地址和端口,即可。
點擊”下一步“后,其會自動去下載一個服務器的列表,然后跳轉到”Choose A Download Site“的界面:
此處需要選擇一個服務器,之后就是從該服務器下載對應的安裝所需的模塊文件了。
因此,此處如果選擇的服務器不合適的話,盡管你的網絡本身速度很快,但是此處下載速度很慢。
所以,此處需要選擇一個速度比較快的服務器。
對于國內來說,連接很多國外的服務器,速度一般都很慢。
不過,目前已經的,口碑較好的,速度較快的服務器,是近幾年剛出現(xiàn)的163的服務器。
所以,此處對于多數(shù)人,最好的選擇就是選擇163的服務器。
此處,我這里,由圖可見,已經默認選擇好了163的服務器,所以不需要額外設置了。
如果你的選擇其他的服務器,而且服務器列表中也找不到163的話,那么可以自己手動添加:
在Use URL處,輸入:
http://mirrors.163.com/cygwin/
![]() | 關于163鏡像服務器 |
---|---|
163是個好公司,因為剛看到http://mirrors.163.com/.help/中的介紹,得知其前身就是cn99鏡像。 之前玩過Ubuntu的人,估計多數(shù)都知道cn99這個鏡像,因為對于國內來說,apt的源的地址中,屬其速度最快。 而且,現(xiàn)又發(fā)現(xiàn),163的鏡像,除了提供cygwin,其還提供了其他很多資源的鏡像,都可以在http://mirrors.163.com/中找到。 包括很多常見的,比如mandriva,openSUSE,ubuntu等等。 |
![]() | 為何手動添加URL時,輸入的是而不是 |
---|---|
首先要說的是,直接輸入在圖 2.2 “Choose A Download Site”中所看的的地址http://mirrors.163.com/,是無法正常連接163服務器去下載cygwin的。 這也是我之前在【記錄】Cygwin下載過程記錄中所遇到并解決了的問題。 而具體的原因是為何,我也是剛剛才注意到的: 因為cygwin去安裝的話,不論是在線安裝還是本地安裝,都會需要一個對應的配置文件: 因此,你給cygwin的setup.exe指定了http://mirrors.163.com/后,其從此URL中,找不到對應的setup.ini,所以無法繼續(xù)安裝cygwin。 所以URL中需要輸入http://mirrors.163.com/cygwin/。 |
點擊“下一步”后,其會解析一下,然后進入”Select Package“的界面:
![]() |
此界面,才是整個Cygwin安裝過程中的最重要,最需要詳細講解的部分。
先來說說,那一堆的列表。
可以看到,其有Accesibility,Base,Devel,Editors,Math等很多的部分。
這些,是總體的分類,對于Cygwin中所包含的N個模塊的分門別類。
此處,對于安裝Cygwin來說,就是安裝各種各樣的模塊而已。
具體安裝什么模塊,則是根據你自己的需要,去選擇不同的模塊。
而對于大多數(shù)人,尤其是不熟悉的人,其實,最核心的,要記住的一點,那就是,記住一定要安裝Devel這個部分的模塊,其中包含了各種開發(fā)所用到的工具或模塊。
而對于其他部分的設置,如果不熟悉,那么可以直接使用默認配置即可。
下面再來解釋一下,如何選擇或者取消對應的模塊。
可以看到,其默認的各個分類后面的是Default字樣,其意思很明顯,就是cygwin幫我們設置好的,默認的選擇安裝了一些模塊,其具體包含哪些模塊,可以通過點擊對應的分類前面的加號以展開。
以Devel為例:
點擊加號:
![]() |
然后就可以看到,cygwin已經默認幫忙選擇了哪些安裝哪些模塊:
![]() |
可以看到,有很多n/a的標示,其表示Not Avalibale不可用,此處即為不安裝的意思,對應的模塊的前面也寫的是Skip,同樣是跳過安裝此模塊的意思。
而對應方括號中間打叉,表示的是選擇安裝該模塊,上圖中即為選擇安裝gettext這個模塊。
很明顯,如果想要對幾十個,幾百個模塊都想要安裝的話,如果都要一個個點擊,那豈不是累死了。
對此,cygwin早就想好了,給我們提供了更方便的設置,那就是,對于此Devel分類下面的所有的模塊,如果你想要都安裝,那么可以點擊Devel后面的那個Default:
![]() |
那么Default就會變成Install,同時,其下所有的模塊,也都變成選擇安裝了:
![]() |
對應的,再次點擊Install,則會變成Reinstall,對應的Devel下面的各個模塊,也都變成相應的skip了:
![]() |
此處對于reinstall之所以變成skip,那是因為之前就沒有安裝過,所以此處對于之前沒有安裝過的模塊,就是變成skip,即也不安裝了。而如果你是第二次運行此cygwin安裝程序,那么對于那些之前安裝過的,則會變成對應的reinstall的。
同理,點擊Reinstall,則又會變成Uninstall:
![]() |
含義很明顯,卸載對應的模塊的意思。
如此,對于某個分類,點擊對應的后面的安裝選項的話,會在:Default,Install,Reinstall,Uninstall這幾個選項之間來回切換。
而對于想要知道某個庫,或者說模塊,程序等,是否已經選擇安裝了,
多數(shù)人都會被cygwin里面太多的模塊而搞暈掉,所以其提供了一個Search的功能。
比如,我想要去確定(用于搭建Docbook環(huán)境所必須的其中)一個叫做libxml2的模塊,
那么就可以去search框中輸入libxml2,則其會自動把與此libxml2相關的模塊,都列出來:
![]() |
不過由于各個子分類都是加號,沒有展開的,所以點擊加號,全部展開:
![]() |
可以看到此處已經安裝了Devel中的libxml2-devel這個模塊了,其已經基本滿足開發(fā)需求了。
但是很多時候,我們可能對于剩下的其他的與此libxml2相關的模塊,不是很清楚其功能,不知道是否需要安裝,那么此時,其實最簡單省事的辦法就是,把相關的模塊,都點擊Skip,直到都變成Install:
![]() |
如此,就不怕漏裝某個libxml2的庫,而導致以后需要回來重新安裝了。
如此,安裝自己需求,一點點去選擇自己需要的模塊,即可。
選擇好需要安裝的模塊后,就可以點擊”下一步“去安裝了。
然后后面就很簡單了,基本上都是下一步,然后cygwin就會自動去下載并安裝對應的模塊了。
這個過程所需時間,取決于你所選模塊的多少,和連接(前面所設置的163)服務器的速度快慢,決定了下載所用時間,以及最后加上安裝所有模塊的時間,總體上來說,應該都是以小時為單位,比如2,3個小時之類的時間。
最后安裝完畢,會在桌面出現(xiàn)一個cygwin的圖標,雙擊后,第一次運行,其會初始化一下,之后就是正常的使用Linux的環(huán)境了。
![]() | 關于安裝到最后有時候會死掉的解決辦法 |
---|---|
如果遇到了安裝到最后,比如95%的時候死掉的問題,可以參考: |
此處,針對Cygwin中的一些模塊,工具,庫等,做個簡單的介紹。
當然,實際上,這些東西,其實都是Linux中的常見工具,庫等,
此處,只是針對我所了解的一些,做個解釋,僅供參考:
![]() |
是個針對編碼轉換的工具,其支持很多常見的編碼,包括UTF-8,GB2312等等。
比如我在生成Docbook的chm格式文件的時候,就用到將UTF-8編碼的文件,轉換為本地編碼(GB18030編碼)的格式,就是用的iconv這個工具。
詳情可參考iconv
目錄
此處主要指的是和Cygwin本身有關的一些工具。
關于Cygwin的工具,其實cygwin官網中已有詳細介紹了:Cygwin Utilities,此處只是簡單解釋一下,以及提醒一些注意事項:
作用:用于檢測,校驗cygwin。
如果cygwin本身的運行有問題了,比如缺少了某庫,導致程序無法運行,則可以使用此工具,去檢測到底問題出在哪里。
作用:實現(xiàn)Linux/Unix和Windows之間的路徑轉換。
其中,主要包含了Windows路徑中反斜杠和Linux路徑中的斜杠之間的轉換,已經Windows下面的環(huán)境變量和Linux下面的環(huán)境變量的處理。
而環(huán)境變量中,又包含,多個值所用分隔符的不同,Windows是分號,Linux是冒號。
不過好像當Linux和Windows的環(huán)境變量混用,有時候,會出現(xiàn)一些bug,比如
Cygwin的使用過程中,也有很多注意事項,現(xiàn)總結如下;
Linux的環(huán)境中,路徑中,是不允許包含空格的
Windows的環(huán)境中是運行的
所以,在使用Cygwin期間,常常會遇到:
PATH等環(huán)境變量,由于即包含了Windows中的很多路徑
又包含了Cygwin(即Linux)中的很多路徑
但是程序,腳本等處理這些路徑時,有些沒考慮到這種帶路徑的情況
而導致出現(xiàn)各種問題。
比如,我之前就遇到一個:
【已解決】Cygwin下為xscale編譯Buildroot時make出錯:/bin/sh: -c: line 0: syntax error near unexpected token `(‘
所以,以后使用時,在這方面,要小心。
以及出現(xiàn)類似問題,要想到,或許可能是Cygwin路徑中包含空格,括號等特殊字符而導致的
下面介紹一些Cygwin中相關的小技巧:
打開注冊表(regedit)并定位到
HKEY_CLASSES_ROOT\Directory\shell
然后右擊shell->新建->項,然后名字隨便起,比如RunCygwin
在其下再新建一項,叫做command,表示要執(zhí)行的命令,command下會有一個圖標是ab字樣的鍵值,名稱是(默認),類型是REG_SZ,
雙擊其會彈出一個'修改字符串'的窗口,修改數(shù)據數(shù)值為:
其中
D:\tmp\tmp_dev_root\cgwin\
是我此處Cygwin安裝路徑下的bash的位置,其下會存在bash工具:bin\bash
![]() |
然后就可以進入任何目錄,右鍵點擊,就會看到對應的可選項,此處是RunCygwin
:
![]() |
點擊即可進入cygwin了:
![]() |
關于更多的相關的解釋,請參考:【整理】在windows下添加右鍵使得可以運行cygwin且直接定位到當前文件夾 + 【整理】如何在Windows XP中,右鍵添加命令行cmd command,打開當前文件夾,定位到當前路徑
原先啟動Cygwin,其默認路徑是當前用戶的Home文件夾:
CLi@PC-CLI-1 ~$ pwd/home/CLi
而Cygwin默認啟動路徑,就是由環(huán)境變量HOME的值決定的。
因此,此處就是要去改變對應的環(huán)境變量HOME的值。
此處,先去看看原先HOME的值是多少,有兩種方法:
可以在cygwin下輸入env查看當前所有的環(huán)境變量:
其中就可以看到,此處的HOME值為/home/CLi
直接通過echo一個環(huán)境變量,得知該環(huán)境變量的值:
CLi@PC-CLI-1 ~$ echo $HOME/home/CLi
而想要改變HOME的值,也有兩種方法:
去windows中建立一個HOME的環(huán)境變量,將值設置為自己想要的值
而關于如何添加Windows的環(huán)境變量,不熟悉的人,請參考
通過export去修改環(huán)境變量:
即可把HOME從/home/CLi改為/home/CLi/develop
![]() | 注意 |
---|---|
此處通過export的方式改變的值,只是當前(會話/窗口)有效,關閉了窗口后,就失效了,所以下次重啟后,還是無法達到修改的效果 |
Cygwin下,從當前路徑切換到Windows中別的磁盤,比如C盤,之前的做法,是通過cygdrive:
CLi@PC-CLI-1 /cygdrive/c$ pwd/cygdrive/cCLi@PC-CLI-1 /cygdrive/c$ cd /cygdrive/dCLi@PC-CLI-1 /cygdrive/d$ pwd/cygdrive/d
現(xiàn)在剛看到[1],才知道也可以直接通過C:的形式去切換到C盤了:
之前在折騰:
【記錄】Cygwin下用crosstool-ng為arm制作交叉編譯器
期間,就遇到這種問題:
【已解決】Win7中用Notepad++編輯cygwin下面的文件結果保存出錯:請檢查文件是否在別的程序中打開
具體現(xiàn)象是:
Cygwin下面的文件,是可以用其他編輯工具,比如Notepad++,Sublime等去編輯的
但是,編輯之后,去保存的時候,都會出錯,都無法正常保存。
經過一番折騰,結果找到了根本原因:
Cygwin下面的有些文件,其文件的擁有者(owner),不是Win7中當前的用戶
導致有些Cygwin下面的文件,在Win7下面,會沒有修改刪除等權限。
所以,對應的解決辦法就是:
給Win7的當前用戶,增加操作這些文件的權限。
其實現(xiàn)起來也有各種辦法,相對最省事,最常用的辦法是:
Win7的資源管理器中,右鍵,cygwin中那些沒有操作權限的文件所在的文件夾
然后選擇:'管理員取得所有權'
![]() |
就會調出命令行,給該文件夾下所有的文件,都加上當前用戶,即管理員,的所有權限。
然后就可以在Win7下編輯文件,保存文件了。
如之前教程:
Windows環(huán)境下的,基于Cygwin的Docbook開發(fā)環(huán)境的搭建
介紹的一樣,其實是在Windows下的Cygwin中,去搭建Docbook的環(huán)境,
效果會比純Windows環(huán)境下Docbook環(huán)境,更好,功能更強大,但是當然,也更加復雜。
crosstool-ng支持Cygwin環(huán)境,也可以在Cygwin下編譯crosstool-ng:
Buildroot,截止目前(2013-09-03),官網是不支持Cygwin環(huán)境的
但是,經過一番研究后發(fā)現(xiàn),現(xiàn)在最新版本的Buildroot,好像已經有人成功在Cygwin上編譯了。
所以,后來自己也就去折騰了,感興趣的可以去看看: