Cygwin使用指南
根據cygwin user guide翻譯整理,希望對大家有所幫助。有錯誤清指出。
1 引言
cygwin是一個(gè)在windows平臺上運行的unix模擬環(huán)境,是cygnus solutions公司開(kāi)發(fā)的自由軟件(該公司開(kāi)發(fā)了很多好東西,著(zhù)名的還有eCos,不過(guò)現已被Redhat收購)。它對于學(xué)習unix/linux操
作環(huán)境,或者從unix到windows的應用程序移植,或者進(jìn)行某些特殊的開(kāi)發(fā)工作,尤其是使用gnu工具集在windows上進(jìn)行嵌入式系統開(kāi)發(fā),非常有用。隨著(zhù)嵌入式系統開(kāi)發(fā)在國內日漸流行,越來(lái)越多的開(kāi)發(fā)者對cygwin產(chǎn)生了興趣。本文將對其作一介紹。
2 機理
cygnus當初首先把gcc,gdb,gas等開(kāi)發(fā)工具進(jìn)行了改進(jìn),使他們能夠生成并解釋win32的目標文件。然后,他們要把這些工具移植到windows平臺上去。一種方案是基于win32 api對這些工具的源代碼進(jìn)行大幅修改,這樣做顯然需要大量工作。因此,他們采取了一種不同的方法——他們寫(xiě)了一個(gè)共享庫(就是cygwin.dll),把win32 api中沒(méi)有的unix風(fēng)格的調用(如fork, spawn, signals, select, sockets等)封裝在里面,也就是說(shuō),他們基于win32 api寫(xiě)了一個(gè)unix系統庫的模擬層。這樣,只要把這些工具的源代碼和這個(gè)共享庫連接到一起,就可以使用unix主機上的交叉編譯器來(lái)生成可以在
windows平臺上運行的工具集。以這些移植到windows平臺上的開(kāi)發(fā)工具為基礎,cygnus又逐步把其他的工具(幾乎不需要對源代碼進(jìn)行修改,
只需要修改他們的配置腳本)軟件移植到windows上來(lái)。這樣,在windows平臺上運行bash和開(kāi)發(fā)工具、用戶(hù)工具,感覺(jué)好像在unix上工作。
關(guān)于cygwin實(shí)現的更詳細描述,請參考[url]http://cygwin.com/cygwin-ug-net/highlights.html[/url]
3 安裝設置cygwin
3.1 安裝
要安裝網(wǎng)絡(luò )版的cygwin,可以到[url]http://cygwin.com[/url],點(diǎn)擊"Install Cygwin Now!"。這樣會(huì )先下載一個(gè)叫做setup.exe的GUI安裝程序,用它能下載一個(gè)完整的cygwin。按照每一屏的指示可以方便的進(jìn)行安裝。
3.2 環(huán)境變量
開(kāi)始運行bash之前,應該設置一些環(huán)境變量。cygwin提供了一個(gè).bat文件,里面已經(jīng)設置好了最重要的環(huán)境變量。通過(guò)它來(lái)啟動(dòng)bash是最安全的辦法。這個(gè).bat文件安裝在cygwin所在的根目錄下。 可以隨意編輯該文件。
CYGWIN變量用來(lái)針對cygwin運行時(shí)系統進(jìn)行多種全局設置。開(kāi)始時(shí),可以不設置CYGWIN或者在執行bash前用類(lèi)似下面的格式在dos框下把它設為tty
C:\> set CYGWIN=tty notitle glob
PATH
變量被cygwin應用程序作為搜索可知性文件的路徑列表。當一個(gè)cygwin進(jìn)程啟動(dòng)時(shí),該變量被從windows格式(e.g. C:\WinNT\system32;C:\WinNT)轉換成unix格式(e.g.,
/WinNT/system32:/WinNT)。如果想在不運行bash的時(shí)候也能夠使用cygwin工具集,PATH起碼應該包含x:\cygwin\bin,其中x:\cygwin 是你的系統中的cygwin目錄。
HOME變量用來(lái)指定主目錄,推薦在執行bash前定義該變量。當cygwin進(jìn)程啟動(dòng)時(shí),該變量也被從windows格式轉換成unix格式,例如,作者的機器上HOME的值為C:\(dos命令set HOME就可以看到他的值,set HOME=XXX可以進(jìn)行設置),在bash中用echo $HOME看,其值為/cygdrive/c.
TERM變量指定終端型態(tài)。如果美對它進(jìn)行設置,它將自動(dòng)設為cygwin。
LD_LIBRARY_PATH被cygwin函數dlopen()作為搜索.dll文件的路徑列表,該變量也被從windows格式轉換成unix格式。多數Cygwin應用程序不使用dlopen,因而不需要該變量。
3.3 改變cygwin的最大存儲容量
Cygwin程序缺省可以分配的內存不超過(guò)384MB(program+data)。多數情況下不需要修改這個(gè)限制。然而,如果需要更多實(shí)際或虛擬內存,應該修改注冊表的HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER區段。田家一個(gè)DWORD鍵heap_chunk_in_mb并把它的值設為
需要的內存限制,單位是十進(jìn)制MB。也可以用cygwin中的regtool完成該設置。例子如下:
regtool -i set /HKLM/Software/Cygnus\ Solutions/Cygwin/heap_chunk_in_mb 1024
regtool -v list /HKLM/Software/Cygnus\ Solutions/Cygwin
4 使用cygwin
這一段講一下cygwin和傳統unix系統的不同之處。
4.1 映射路徑名
4.1.1 引言
cygwin同時(shí)支持win32和posix風(fēng)格的路徑,路徑分隔符可以是正斜杠也可以是反斜杠。還支持UNC路徑名。(在網(wǎng)絡(luò )中,UNC是一種確定文件位置的方法,使用這種方法用戶(hù)可以不關(guān)心存儲設備的物理位置,方便了用戶(hù)使用。在Windows操作系統,Novell Netware和其它操作系統中,都已經(jīng)使用了這種規范以取代本地命名系統。在UNC中,我們不用關(guān)心文件在什么盤(pán)(或卷)上,不用關(guān)心這個(gè)盤(pán)(或卷)所在服務(wù)器在什么地方。我們只要以下面格式就可以訪(fǎng)問(wèn)文件:
\服務(wù)器名\共享名\路徑\文件名
共享名有時(shí)也被稱(chēng)為文件所在卷或存儲設備的邏輯標識,但使用它的目的是讓用戶(hù)不必關(guān)心這些卷或存儲設備所在的物理位置。)
符合posix標準的操作系統(如linux)沒(méi)有盤(pán)符的概念。所有的絕對路徑都以一個(gè)斜杠開(kāi)始,而不是盤(pán)符(如c:)。所有的文件系統都是其中的子目錄。例如,兩個(gè)硬盤(pán),其中之一為根,另一個(gè)可能是在/disk2路徑下。
因為許多unix系統上的程序假定存在單一的posix文件系統結構,所以cygwin專(zhuān)門(mén)維護了一個(gè)針對win32文件系統的內部posix視圖,使這些程序可以在windows下正確運行。在某些必要的情況下,cygwin會(huì )使用這種映射來(lái)進(jìn)行win32和posix路徑之間的轉換。
4.1.2 cygwin mount表
cygwin中的mount程序用來(lái)把win32盤(pán)符和網(wǎng)絡(luò )共享路徑映射到cygwin的內部posix目錄樹(shù)。這是與典型unix mount程序相似的概念。對于那些對unix不熟悉而具有windows背景的的人來(lái)說(shuō),mount程序和早期的dos命令join非常相似,就是把一個(gè)盤(pán)符作為其他路徑的子目錄。
路徑映射信息存放在當前用戶(hù)的cygwin mount表中,這個(gè)mount table又在windows的注冊表中。這樣,當該用戶(hù)下一次登錄進(jìn)來(lái)時(shí),這些信息又從注冊表中取出。mount表分為兩種,除了每個(gè)用戶(hù)特定的表,還有系統范圍的mount表,每個(gè)cygwin用戶(hù)的安裝表都繼承自系統表。系統表只能由擁有合適權限的用戶(hù)(windows nt的管理員)修改。
當前用戶(hù)的mount表可以在注冊表"HKEY_CURRENT_USER/Software/Red Hat, nc./Cygwin/mounts v" 下看到。系統表存在HKEY_LOCAL_MACHINE下。
posix根路徑/缺省指向系統分區,但是可以使用mount命令重新指向到windows文件系統中的任何路徑。cygwin從win32路徑生成posix路徑時(shí),總是使用mount表中最長(cháng)的前綴。例如如果c:被同時(shí)安裝在/c和/,cygwin將把C:/foo/bar轉換成/c/foo/bar.
如果不加任何參數地調用mount命令,會(huì )把Cygwin當前安裝點(diǎn)集合全部列出。在下面的例子中,c盤(pán)是POSIX根,而d盤(pán)被映射到/d。本例中,根是一個(gè)系統范圍的安裝點(diǎn),它對所有用戶(hù)都是可見(jiàn)的,而/d僅對當前用戶(hù)可見(jiàn)。
c:\> mount
f:\cygwin\bin on /usr/bin type system (binmode)
f:\cygwin\lib on /usr/lib type system (binmode)
f:\cygwin on / type system (binmode)
e:\src on /usr/src type system (binmode)
c: on /cygdrive/c type user (binmode,noumount)
e: on /cygdrive/e type user (binmode,noumount)
還可以使用mount命令增加新的安裝點(diǎn),用umount刪除安裝點(diǎn)。
當Cygwin不能根據已有的安裝點(diǎn)把某個(gè)win32路徑轉化為posix路徑時(shí),cygwin會(huì )自動(dòng)把它轉化到一個(gè)處于缺省posix路徑/cygdrive下的的一個(gè)安裝點(diǎn). 例如,如果Cygwin 訪(fǎng)問(wèn)Z:\foo,而Z盤(pán)當前不在安裝表內,那么Z:\將被自動(dòng)轉化成/cygdrive/Z.
可以給每個(gè)安裝點(diǎn)賦予特殊的屬性。自動(dòng)安裝的分區顯示為“auto”安裝。安裝點(diǎn)還可以選擇是"textmode"還是 "binmode",這個(gè)屬性決定了文本文件和二進(jìn)制文件是否按同樣的方式處理。
4.1.3 其他路徑相關(guān)信息
cygpath工具提供了在shell腳本中進(jìn)行win32-posix路徑格式轉換的能力。
HOME, PATH,和LD_LIBRARY_PATH環(huán)境變量會(huì )在cygwin進(jìn)程啟動(dòng)時(shí)自動(dòng)被從Win32格式轉換成了POSIX格式(例如,如果存在從該win32路徑到posix路徑的安裝,會(huì )把c:\cygwin\bin轉為/bin)。
3 安裝設置cygwin
3.1 安裝
要安裝網(wǎng)絡(luò )版的cygwin,可以到[url]http://cygwin.com[/url],點(diǎn)擊"Install Cygwin Now!"。這樣會(huì )先下載一個(gè)叫做setup.exe的GUI安裝程序,用它能下載一個(gè)完整的cygwin。按照每一屏的指示可以方便的進(jìn)行安裝。
3.2 環(huán)境變量
開(kāi)始運行bash之前,應該設置一些環(huán)境變量。cygwin提供了一個(gè).bat文件,里面已經(jīng)設置好了最重要的環(huán)境變量。通過(guò)它來(lái)啟動(dòng)bash是最安全的辦法。這個(gè).bat文件安裝在cygwin所在的根目錄下。 可以隨意編輯該文件。
CYGWIN變量用來(lái)針對cygwin運行時(shí)系統進(jìn)行多種全局設置。開(kāi)始時(shí),可以不設置CYGWIN或者在執行bash前用類(lèi)似下面的格式在dos框下把它設為tty
C:\> set CYGWIN=tty notitle glob
PATH
變量被cygwin應用程序作為搜索可知性文件的路徑列表。當一個(gè)cygwin進(jìn)程啟動(dòng)時(shí),該變量被從windows格式(e.g. C:\WinNT\system32;C:\WinNT)轉換成unix格式(e.g.,
/WinNT/system32:/WinNT)。如果想在不運行bash的時(shí)候也能夠使用cygwin工具集,PATH起碼應該包含x:\cygwin\bin,其中x:\cygwin 是你的系統中的cygwin目錄。
HOME變量用來(lái)指定主目錄,推薦在執行bash前定義該變量。當cygwin進(jìn)程啟動(dòng)時(shí),該變量也被從windows格式轉換成unix格式,例如,作者的機器上HOME的值為C:\(dos命令set HOME就可以看到他的值,set HOME=XXX可以進(jìn)行設置),在bash中用echo $HOME看,其值為/cygdrive/c.
TERM變量指定終端型態(tài)。如果美對它進(jìn)行設置,它將自動(dòng)設為cygwin。
LD_LIBRARY_PATH被cygwin函數dlopen()作為搜索.dll文件的路徑列表,該變量也被從windows格式轉換成unix格式。多數Cygwin應用程序不使用dlopen,因而不需要該變量。
3.3 改變cygwin的最大存儲容量
Cygwin程序缺省可以分配的內存不超過(guò)384MB(program+data)。多數情況下不需要修改這個(gè)限制。然而,如果需要更多實(shí)際或虛擬內存,應該修改注冊表的HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER區段。田家一個(gè)DWORD鍵heap_chunk_in_mb并把它的值設為
需要的內存限制,單位是十進(jìn)制MB。也可以用cygwin中的regtool完成該設置。例子如下:
regtool -i set /HKLM/Software/Cygnus\ Solutions/Cygwin/heap_chunk_in_mb 1024
regtool -v list /HKLM/Software/Cygnus\ Solutions/Cygwin
4 使用cygwin
這一段講一下cygwin和傳統unix系統的不同之處。
4.1 映射路徑名
4.1.1 引言
cygwin同時(shí)支持win32和posix風(fēng)格的路徑,路徑分隔符可以是正斜杠也可以是反斜杠。還支持UNC路徑名。(在網(wǎng)絡(luò )中,UNC是一種確定文件位置的方法,使用這種方法用戶(hù)可以不關(guān)心存儲設備的物理位置,方便了用戶(hù)使用。在Windows操作系統,Novell Netware和其它操作系統中,都已經(jīng)使用了這種規范以取代本地命名系統。在UNC中,我們不用關(guān)心文件在什么盤(pán)(或卷)上,不用關(guān)心這個(gè)盤(pán)(或卷)所在服務(wù)器在什么地方。我們只要以下面格式就可以訪(fǎng)問(wèn)文件:
\服務(wù)器名\共享名\路徑\文件名
共享名有時(shí)也被稱(chēng)為文件所在卷或存儲設備的邏輯標識,但使用它的目的是讓用戶(hù)不必關(guān)心這些卷或存儲設備所在的物理位置。)
符合posix標準的操作系統(如linux)沒(méi)有盤(pán)符的概念。所有的絕對路徑都以一個(gè)斜杠開(kāi)始,而不是盤(pán)符(如c:)。所有的文件系統都是其中的子目錄。例如,兩個(gè)硬盤(pán),其中之一為根,另一個(gè)可能是在/disk2路徑下。
因為許多unix系統上的程序假定存在單一的posix文件系統結構,所以cygwin專(zhuān)門(mén)維護了一個(gè)針對win32文件系統的內部posix視圖,使這些程序可以在windows下正確運行。在某些必要的情況下,cygwin會(huì )使用這種映射來(lái)進(jìn)行win32和posix路徑之間的轉換。
4.1.2 cygwin mount表
cygwin中的mount程序用來(lái)把win32盤(pán)符和網(wǎng)絡(luò )共享路徑映射到cygwin的內部posix目錄樹(shù)。這是與典型unix mount程序相似的概念。對于那些對unix不熟悉而具有windows背景的的人來(lái)說(shuō),mount程序和早期的dos命令join非常相似,就是把一個(gè)盤(pán)符作為其他路徑的子目錄。
路徑映射信息存放在當前用戶(hù)的cygwin mount表中,這個(gè)mount table又在windows的注冊表中。這樣,當該用戶(hù)下一次登錄進(jìn)來(lái)時(shí),這些信息又從注冊表中取出。mount表分為兩種,除了每個(gè)用戶(hù)特定的表,還有系統范圍的mount表,每個(gè)cygwin用戶(hù)的安裝表都繼承自系統表。系統表只能由擁有合適權限的用戶(hù)(windows nt的管理員)修改。
當前用戶(hù)的mount表可以在注冊表"HKEY_CURRENT_USER/Software/Red Hat, nc./Cygwin/mounts v" 下看到。系統表存在HKEY_LOCAL_MACHINE下。
posix根路徑/缺省指向系統分區,但是可以使用mount命令重新指向到windows文件系統中的任何路徑。cygwin從win32路徑生成posix路徑時(shí),總是使用mount表中最長(cháng)的前綴。例如如果c:被同時(shí)安裝在/c和/,cygwin將把C:/foo/bar轉換成/c/foo/bar.
如果不加任何參數地調用mount命令,會(huì )把Cygwin當前安裝點(diǎn)集合全部列出。在下面的例子中,c盤(pán)是POSIX根,而d盤(pán)被映射到/d。本例中,根是一個(gè)系統范圍的安裝點(diǎn),它對所有用戶(hù)都是可見(jiàn)的,而/d僅對當前用戶(hù)可見(jiàn)。
c:\> mount
f:\cygwin\bin on /usr/bin type system (binmode)
f:\cygwin\lib on /usr/lib type system (binmode)
f:\cygwin on / type system (binmode)
e:\src on /usr/src type system (binmode)
c: on /cygdrive/c type user (binmode,noumount)
e: on /cygdrive/e type user (binmode,noumount)
還可以使用mount命令增加新的安裝點(diǎn),用umount刪除安裝點(diǎn)。
當Cygwin不能根據已有的安裝點(diǎn)把某個(gè)win32路徑轉化為posix路徑時(shí),cygwin會(huì )自動(dòng)把它轉化到一個(gè)處于缺省posix路徑/cygdrive下的的一個(gè)安裝點(diǎn). 例如,如果Cygwin 訪(fǎng)問(wèn)Z:\foo,而Z盤(pán)當前不在安裝表內,那么Z:\將被自動(dòng)轉化成/cygdrive/Z.
可以給每個(gè)安裝點(diǎn)賦予特殊的屬性。自動(dòng)安裝的分區顯示為“auto”安裝。安裝點(diǎn)還可以選擇是"textmode"還是 "binmode",這個(gè)屬性決定了文本文件和二進(jìn)制文件是否按同樣的方式處理。
4.1.3 其他路徑相關(guān)信息
cygpath工具提供了在shell腳本中進(jìn)行win32-posix路徑格式轉換的能力。
HOME, PATH,和LD_LIBRARY_PATH環(huán)境變量會(huì )在cygwin進(jìn)程啟動(dòng)時(shí)自動(dòng)被從Win32格式轉換成了POSIX格式(例如,如果存在從該win32路徑到posix路徑的安裝,會(huì )把c:\cygwin\bin轉為/bin)。
發(fā)表于 @ 2005年12月11日 5:50 PM | 評論 (0)
Cygwin簡(jiǎn)介
摘要:Cygwin是許多自由軟件的集合,最初由Cygnus Solutions開(kāi)發(fā),用于各種版本的Microsoft Windows上,運行UNIX類(lèi)系統。Cygwin的主要目的是通過(guò)重新編譯,將POSIX系統(例如Linux、BSD,以及其他Unix系統)上的軟件移植到Windows上。Cygwin移植工作在Windows NT、Windows 2000、Windows XP以及Windows Server 2003上比較好,在Windows 95和Windows 98上,相對差勁一些。目前Cygwin由Red Hat等負責維護。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。