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