根據cygwin user guide翻譯整理,希望對大家有所幫助。有錯誤清指出。
1 引言
??????? cygwin是一個在windows平臺上運行的unix模擬環境,是cygnus solutions公司開發的自由軟件(該公司開發了很多好東西,著名的還有eCos,不過現已被Redhat收購)。它對于學習unix/linux操作環境,或者從unix到windows的應用程序移植,或者進行某些特殊的開發工作,尤其是使用gnu工具集在windows上進行嵌入式系統開發,非常有用。隨著嵌入式系統開發在國內日漸流行,越來越多的開發者對cygwin產生了興趣。本文將對其作一介紹。
---------------------------------------------------------------------
根據cygwin user guide翻譯整理,希望對大家有所幫助。有錯誤清指出。
1 引言
??????? cygwin是一個在windows平臺上運行的unix模擬環境,是cygnus solutions公司開發的自由軟件(該公司開發了很多好東西,著名的還有eCos,不過現已被Redhat收購)。它對于學習unix/linux操作環境,或者從unix到windows的應用程序移植,或者進行某些特殊的開發工作,尤其是使用gnu工具集在windows上進行嵌入式系統開發,非常有用。隨著嵌入式系統開發在國內日漸流行,越來越多的開發者對cygwin產生了興趣。本文將對其作一介紹。
2 機理
??????? cygnus當初首先把gcc,gdb,gas等開發工具進行了改進,使他們能夠生成并解釋win32的目標文件。然后,他們要把這些工具移植到windows平臺上去。一種方案是基于win32 api對這些工具的源代碼進行大幅修改,這樣做顯然需要大量工作。因此,他們采取了一種不同的方法——他們寫了一個共享庫(就是cygwin dll),把win32 api中沒有的unix風格的調用(如fork,spawn,signals,select,sockets等)封裝在里面,也就是說,他們基于win32 api寫了一個unix系統庫的模擬層。這樣,只要把這些工具的源代碼和這個共享庫連接到一起,就可以使用unix主機上的交叉編譯器來生成可以在windows平臺上運行的工具集。以這些移植到windows平臺上的開發工具為基礎,cygnus又逐步把其他的工具(幾乎不需要對源代碼進行修改,只需要修改他們的配置腳本)軟件移植到windows上來。這樣,在windows平臺上運行bash和開發工具、用戶工具,感覺好像在unix上工作。
??????? 關于cygwin實現的更詳細描述,請參考http://cygwin.com/cygwin-ug-net/highlights.html.
3 安裝設置cygwin
3.1 安裝
??????? 要安裝網絡版的cygwin,可以到http://cygwin.com,點擊"Install Cygwin Now!"。這樣會先下載一個叫做setup.exe的GUI安裝程序,用它能下載一個完整的cygwin。按照每一屏的指示可以方便的進行安裝。
3.2 環境變量
??????? 開始運行bash之前,應該設置一些環境變量。cygwin提供了一個.bat文件,里面已經設置好了最重要的環境變量。通過它來啟動bash是最安全的辦法。這個.bat文件安裝在cygwin所在的根目錄下。 可以隨意編輯該文件。
??????? CYGWIN變量用來針對cygwin運行時系統進行多種全局設置。開始時,可以不設置CYGWIN或者在執行bash前用類似下面的格式在dos框下把它設為tty
C:/> set CYGWIN=tty notitle glob
PATH變量被cygwin應用程序作為搜索可知性文件的路徑列表。當一個cygwin進程啟動時,該變量被從windows格式(e.g. C:/WinNT/system32;C:/WinNT)轉換成unix格式(e.g., /WinNT/system32:/WinNT)。如果想在不運行bash的時候也能夠使用cygwin工具集,PATH起碼應該包含x:/cygwin/bin,其中x:/cygwin 是你的系統中的cygwin目錄。
??????? HOME變量用來指定主目錄,推薦在執行bash前定義該變量。當cygwin進程啟動時,該變量也被從windows格式轉換成unix格式,例如,作者的機器上HOME的值為C:/(dos命令set HOME就可以看到他的值,set HOME=XXX可以進行設置),在bash中用echo $HOME看,其值為/cygdrive/c.
??????? TERM變量指定終端型態。如果美對它進行設置,它將自動設為cygwin。
??????? LD_LIBRARY_PATH被cygwin函數dlopen()作為搜索.dll文件的路徑列表,該變量也被從windows格式轉換成unix格式。多數Cygwin應用程序不使用dlopen,因而不需要該變量。
3.3 改變cygwin的最大存儲容量
??????? Cygwin程序缺省可以分配的內存不超過384 MB(program+data)。多數情況下不需要修改這個限制。然而,如果需要更多實際或虛擬內存,應該修改注冊表的HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER區段。田家一個DWORD鍵heap_chunk_in_mb并把它的值設為需要的內存限制,單位是十進制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同時支持win32和posix風格的路徑,路徑分隔符可以是正斜杠也可以是反斜杠。還支持UNC路徑名。(在網絡中,UNC是一種確定文件位置的方法,使用這種方法用戶可以不關心存儲設備的物理位置,方便了用戶使用。在Windows操作系統,Novell Netware和其它操作系統中,都已經使用了這種規范以取代本地命名系統。在UNC中,我們不用關心文件在什么盤(或卷)上,不用關心這個盤(或卷)所在服務器在什么地方。我們只要以下面格式就可以訪問文件:
//服務器名/共享名/路徑/文件名
??????? 共享名有時也被稱為文件所在卷或存儲設備的邏輯標識,但使用它的目的是讓用戶不必關心這些卷或存儲設備所在的物理位置。)
??????? 符合posix標準的操作系統(如linux)沒有盤符的概念。所有的絕對路徑都以一個斜杠開始,而不是盤符(如c:)。所有的文件系統都是其中的子目錄。例如,兩個硬盤,其中之一為根,另一個可能是在/disk2路徑下。
??????? 因為許多unix系統上的程序假定存在單一的posix文件系統結構,所以cygwin專門維護了一個針對win32文件系統的內部posix視圖,使這些程序可以在windows下正確運行。在某些必要的情況下,cygwin會使用這種映射來進行win32和posix路徑之間的轉換。
4.1.2 cygwin mount表
??????? cygwin中的mount程序用來把win32盤符和網絡共享路徑映射到cygwin的內部posix目錄樹。這是與典型unix mount程序相似的概念。對于那些對unix不熟悉而具有windows背景的的人來說,mount程序和早期的dos命令join非常相似,就是把一個盤符作為其他路徑的子目錄。
??????? 路徑映射信息存放在當前用戶的cygwin mount表中,這個mount table 又在windows的注冊表中。這樣,當該用戶下一次登錄進來時,這些信息又從注冊表中取出。mount 表分為兩種,除了每個用戶特定的表,還有系統范圍的mount表,每個cygwin用戶的安裝表都繼承自系統表。系統表只能由擁有合適權限的用戶(windows nt的管理員)修改。
??????? 當前用戶的mount表可以在注冊表"HKEY_CURRENT_USER/Software/Red Hat, Inc./Cygwin/mounts v" 下看到。系統表存在HKEY_LOCAL_MACHINE下。
??????? posix根路徑/缺省指向系統分區,但是可以使用mount命令重新指向到windows文件系統中的任何路徑。cygwin從win32路徑生成posix路徑時,總是使用mount表中最長的前綴。例如如果c:被同時安裝在/c和/,cygwin將把C:/foo/bar轉換成/c/foo/bar.
??????? 如果不加任何參數地調用mount命令,會把Cygwin當前安裝點集合全部列出。在下面的例子中,c盤是POSIX根,而d盤被映射到/d。本例中,根是一個系統范圍的安裝點,它對所有用戶都是可見的,而/d僅對當前用戶可見。
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命令增加新的安裝點,用umount刪除安裝點。
??????? 當Cygwin不能根據已有的安裝點把某個win32路徑轉化為posix路徑時,cygwin會自動把它轉化到一個處于缺省posix路徑/cygdrive下的的一個安裝點. 例如,如果Cygwin 訪問Z:/foo,而Z盤當前不在安裝表內,那么Z:/將被自動轉化成/cygdrive/Z.
??????? 可以給每個安裝點賦予特殊的屬性。自動安裝的分區顯示為“auto”安裝。安裝點還可以選擇是"textmode"還是 "binmode",這個屬性決定了文本文件和二進制文件是否按同樣的方式處理。
4.1.3 其他路徑相關信息
??????? cygpath工具提供了在shell腳本中進行win32-posix路徑格式轉換的能力。
??????? HOME, PATH,和LD_LIBRARY_PATH環境變量會在cygwin進程啟動時自動被從Win32格式轉換成了POSIX格式(例如,如果存在從該win32路徑到posix路徑的安裝,會把c:/cygwin/bin轉為/bin)。
?
cygwin的命令
基本操作命令:
----------------------------------------------------------------------
----------------------------------------------------------------------
ls #以默認方式顯示當前目錄文件列表
ls –a #顯示所有文件包括隱藏文件
ls –l #顯示文件屬性,包括大小,日期,符號連接,是否可讀寫及是否可執行
ls --color=never *.so > obj #不顯示文字顏色,將所有so文件記錄到obj文件中
----------------------------------------------------------------------
cd dir #切換到當前目錄下的dir目錄
cd / #切換到根目錄
cd .. #切換到到上一級目錄
cd ../.. #切換到上二級目錄
cd ~ #切換到用戶目錄,比如是root用戶,則切換到/root下
----------------------------------------------------------------------
rm file #刪除某一個文件
rm -fr dir #刪除當前目錄下叫dir的整個目錄
----------------------------------------------------------------------
cp source target #將文件source 復制為 target
cp /root/source . #將/root下的文件source復制到當前目錄
cp –av soure_dir target_dir #將整個目錄復制,兩目錄完全一樣
cp –fr source_dir target_dir #將整個目錄復制,并且是以非鏈接方式復制,當source目錄帶有符號鏈接時,兩個目錄不相同
----------------------------------------------------------------------
mv source target #將文件source更名為target
----------------------------------------------------------------------
diff dir1 dir2 #比較目錄1與目錄2的文件列表是否相同,但不比較文件的實際內容,不同則列出
diff file1 file2 #比較文件1與文件2的內容是否相同,如果是文本格式的文件,則將不相同的內容顯示,如果是二進制代碼則只表示兩個文件是不同的
comm file1 file2 #比較文件,顯示兩個文件不相同的內容
----------------------------------------------------------------------
echo message #顯示一串字符
echo "message message2" #顯示不連續的字符串
cat:
cat file #顯示文件的內容,和DOS的type相同
cat file | more #顯示文件的內容并傳輸到more程序實現分頁顯示,使用命令less file可實現相同的功能
more #分頁命令,一般通過管道將內容傳給它,如ls | more
----------------------------------------------------------------------
export LC_ALL=zh_CN.GB2312 #將環境變量LC_ALL的值設為zh_CN.GB2312
export DISPLAY=0:0 #通過該設置,當前字符終端下運行的圖形程序可直接運行于Xserver
date #顯示當前日期時間
date -s 20:30:30 #設置系統時間為20:30:30
date -s 2002-3-5 #設置系統時期為2003-3-5
clock –r #對系統Bios中讀取時間參數
clock –w #將系統時間(如由date設置的時間)寫入Bios
----------------------------------------------------------------------
eject #umout掉CDROM并將光碟彈出,但cdrom不能處于busy的狀態,否則無效
----------------------------------------------------------------------
du #計算當前目錄的容量
du -sm /root #計算/root目錄的容量并以M為單位
find -name /path file #在/path目錄下查找看是否有文件file
grep -ir “chars” #在當前目錄的所有文件查找字串chars,并忽略大小寫,-i為大小寫,-r為下一級目錄
----------------------------------------------------------------------
vi file #編輯文件file
vi 原基本使用及命令:
輸入命令的方式為先按ctrl+c, 然后輸入:x(退出),:x!(退出并保存) :w(寫入文件),:w!(不詢問方式寫入文件), :r file(讀文件file) ,:%s/oldchars/newchars/g(將所有字串oldchars換成newchars) 這一類的命令進行操作
----------------------------------------------------------------------
man ls #讀取關于ls命令的幫助
man ls | grep color #讀取關于ls命令的幫助并通過grep程序在其中查找color字串
----------------------------------------------------------------------
startx #運行Linux圖形有環境
Xfree86 #只運行X圖形server
----------------------------------------------------------------------
reboot #重新啟動計算機
halt #關閉計算機
init 0 #關閉所有應用程序和服務,進入純凈的操作環境
init 1 #重新啟動應用及服務
init 6 #重新啟動計算機
----------------------------------------------------------------------
擴展命令
----------------------------------------------------------------------
----------------------------------------------------------------------
tar xfzv file.tgz #將文件file.tgz解壓
tar xfzv file.tgz -C target_path #將文件file.tgz解壓到target_path目錄下
tar cfzv file.tgz source_path #將文件source_path壓縮為file.tgz
tar c directory > directory.tar #將目錄directory打包成不壓縮的directory.tar
gzip directory.tar #將覆蓋原文件生成壓縮的 directory.tar.gz
gunzip directory.tar.gz #覆蓋原文件解壓生成不壓縮的 directory.tar。
tar xf directory.tar #可將不壓縮的文件解包
----------------------------------------------------------------------
dmesg #顯示kernle啟動及驅動裝載信息
uname #顯示操作系統的類型
uname -R #顯示操作系統內核的version
----------------------------------------------------------------------
strings file 顯示file文件中的ASCII字符內容
----------------------------------------------------------------------
rpm -ihv program.rpm #安裝程序program并顯示安裝進程
rpm2targz program.rpm program.tgz #將rpm格式的文件轉換成tarball格式
----------------------------------------------------------------------
su root #切換到超級用戶
sulogin /dev/tty4 #在tty4即alt+F4終端等待用戶登陸或直接登陸開啟一個shell
chmod a+x file #將file文件設置為可執行,腳本類文件一定要這樣設置一個,否則得用bash file才能執行
chmod 666 file #將文件file設置為可讀寫
chown user /dir #將/dir目錄設置為user所有
----------------------------------------------------------------------
mknod /dev/hda1 b 3 1 #創建塊設備hda1,主設備號為3,從設備號為1,即master硬盤的的第一個分區
mknod /dev/tty1 c 4 1 #創建字符設備tty1,主設備號為4,眾設備號為1,即第一個tty終端
----------------------------------------------------------------------
touch /tmp/running #在/tmp下創建一個臨時文件running,重新啟動后消失
----------------------------------------------------------------------
sleep 9 #系統掛起9秒鐘的時間
----------------------------------------------------------------------
lpd stop 或 cups stop #停止打印服務程序
lpd start 或 cups start #啟動打印服務程序
lpd restart 或 cups restart #重新啟動打印服務程序
lpr file.txt #打印文件file.txt
----------------------------------------------------------------------
fdisk /dev/hda #就像執行了dos的fdisk一樣
cfdisk /dev/hda #比fdisk界面稍為友好些
mount -t ext2 /dev/hda1 /mnt #把/dev/hda1裝載到 /mnt目錄
df #顯示文件系統裝載的相關信息
mount -t iso9660 /dev/cdrom /mnt/cdrom #將光驅加載到/mnt/cdrom目錄
mount-t smb //192.168.1.5/sharedir /mnt -o username=tomlinux,password=tomlinux #將windows的的共享目錄加載到/mnt/smb目錄,用戶名及密碼均為tomlinux
mount -t nfs 192.168.1.1:/sharedir /mnt #將nfs服務的共享目錄sharedir加載到/mnt/nfs目錄
umount /mnt #將/mnt目錄卸載,/mnt目錄必須處于空閑狀態
umount /dev/hda1 #將/dev/hda1設備卸載,設備必須處于空親狀態
sync #將cache中的內容與磁盤同步,在Linux中復制文件,一般要系統空閑才去寫文件
e2fsck /dev/hda1 #檢查/dev/hda1是否有文件系統錯誤,提示修復方式
e2fsck -p /dev/hda1#檢查/dev/hda1是否有錯誤,如果有則自動修復
e2fsck -y /dev/hda1#檢查錯誤,所有提問均于yes方式執行
e2fsck -c /dev/hda1#檢查磁盤是否有壞區
mkfs /dev/hda1 #格式化/dev/hda1為ext2格式
mkfs.minix /dev/hda1 #格式化/dev/hda1為minix格式文件系統
mfks /dev/hda9 #格工化/dev/hda9為Linux swap格式
swapon /dev/hda9 #將swap分區裝載當作內存來用
swapoff /dev/hda9 #將swap分區卸載
----------------------------------------------------------------------
lilo #運行lilo程序,程序自動查找/etc/lilo.conf并按該配置生效
lilo -C /root/lilo.conf #lilo程序按/root/lilo.conf配置生效
grub #在Linux shell狀態下運行boot loader設置程序
grub-install #安裝grub磁盤引導程序,成功后升級內核無須像lilo一樣要重新啟動系統,只需修改/etc/grub.conf即可實現新引導配置
rdev bzImage #顯示kernel的根分區信息
rdev bzImage /dev/hda1 #將kernel的根分區設置為/dev/hda1,這在沒有lilo等引導程序的系統中非常重要.
----------------------------------------------------------------------
dd if=/dev/fd0 f=floppy.fd #將軟盤的內容復制成一個鏡像,功能與舊石器時代常用的hd-copy相同
dd if=/dev/zero f=root.ram bs=1024,count=1024 #生成一個大小為1M的塊設備,可以把它當作硬盤的一個分區來用
mkfs root.ram #將塊設備格式化為ext2格式
dd if=root.ram f=/dev/ram0 #將init.rd格式的root.ram的內容導入內存
mount /dev/ram0 /mnt #ramdisk /dev/ram0裝載到/mnt 目錄
----------------------------------------------------------------------
gcc hello.c #將hello.c編譯成名為a.out二進制執行文件
gcc hello.c -o hello #將hello.c編譯成名為hello的二進制執行文件
gcc -static -o hello hello.c #將hello.c編譯成名為hello的二進制靜態執行文件
ldd program #顯示程序所使用了哪些庫
objcopy -S program #將程序中的符號表及無用的調試信息去掉,可以小很多
----------------------------------------------------------------------
strace netscape #跟蹤程序netscape的執行,看調用的庫,環境變量設置,配置文件,使用的設備,調用的其它應用程序等,在strace下,程序干了什么東東一目了然。
ps #顯示當前系統進程信息
ps –ef #顯示系統所有進程信息
kill -9 500 #將進程編號為500的程序干掉
killall -9 netscape #將所有名字為netscape的程序殺死,kill不是萬能的,對僵死的程序則無效。
top #顯示系統進程的活動情況,按占CPU資源百分比來分
free #顯示系統內存及swap使用情況
time program #在program程序結束后,將計算出program運行所使用的時間
----------------------------------------------------------------------
chroot . #將根目錄切換至當前目錄,調試新系統時使用
chroot /tomlinux #將根目錄切換至/tomlinux目錄
chroot /tomlinux sbin/init #將根目錄切換至/tomlinux并執行sbin/init
adduser id #增加一個叫id的用戶
userdel id #增除叫id的用戶
userlist #顯示已登陸的用戶列表
passwd id #修改用戶id的密碼
passwd -d root #將root用戶的密碼刪除
chown id /work #指定/work目錄為id用戶所擁有
----------------------------------------------------------------------
ifconfig eth0 192.168.1.1 netmask 255.255.255.0 #設置網卡1的地址192.168.1.1,掩碼為255.255.255.0,不寫netmask參數則默認為255.255.255.0
ifconfig eth0:1 192.168.1.2 #捆綁網卡1的第二個地址為192.168.1.2
ifconfig eth0:x 192.168.1.x #捆綁網卡1的第二個地址為192.168.1.x
ifconfig down eth1 #關閉第二塊網卡,使其停止工作
hostname -F tomlinux.com #將主機名設置為tomlinux.com
route #顯示當前路由設置情況
route add default gw 192.168.1.1 metric 1 #設置192.168.1.1為默認的路由
route del default #將默認的路由刪除
dhcp #啟動dhcp服務
dhclient #啟動dhcp終端并自動獲取IP地址
ping 163.com #測試與163.com的連接
ping 202.96.128.68 #測試與IP 202。96.128.68的連接
----------------------------------------------------------------------
probe rtl8139 #檢查驅動程序rtl8139.o是否正常工作
lsmod #顯示已裝載的驅動程序
insmod rtl8139.o #裝載驅動程序rtl8139.o
insmod sb.o io=0x280 irq=7 dma=3 dma16=7 mpu_io=330 #裝載驅動程序并設置相關的irq,dma參數
rmmod rtl8139 #刪除名為rtl8139的驅動模塊
gpm -k #停止字符狀態下的mouse服務
gpm -t ps2 #在字符狀態下以ps2類型啟動mouse的服務
----------------------------------------------------------------------
telnet 192.168.1.1 #登陸IP為192.168.1.1的telnet服務器
telnet iserver.com #登陸域名為iserver.com的telnet服務器
ftp 192.168.1.1 或 ftp iserver.com #登陸到ftp服務
Linux開發中的常用命令(cygwin環境也同樣適用)
?cygwin使用心得
1.在cygwin里訪問Windows盤
cd /cygdrive/c
cd c:
2.整合cygwin命令到Windows中
假設cygwin安裝在d:/develop/cygwin,則將d:/develop/cygwin/bin添加到系統變量PATH中(最好加在windows前面,這樣的話,有些相同的命令的話,是先執行cygwin的命令,而不是windows命令,比如find)
就可以直接在cmd.exe下面執行tar czvf xxx.tgz ./
基本上所有的命令都可以用了,包括ls,more,less,find,grep等。
3.使用TGZ備份
將cygwin的BIN加入到PATH
建一個BAT文件:
@echo off
d:
cd d:/website/8thmanage
tar czvf 8thmanage.tgz 8thmanage
4.Windows使用SHELL腳本
將cygwin的BIN加入到PATH
在$CYGWIN的目錄/var/下面建一腳本t.sh,注意,t.sh里面的路徑,都是相對于$CYGWIN的,里面需要訪問C盤的,請用/cygdrive/c/
在Windows下執行:
d:/cygwin/bin/bash d:/cygwin/var/t.sh
(可以定期執行)
5.同步Windows系統用戶
mkpasswd -l > /etc/passwd
mkgroup -l > /etc/group
如果有Domain的話,需要加上-d domainname
6.安裝系統服務
cygrunsrv
7.cygwing下使用rsync
a.安裝rsync組件
b.進入cygwin,配置服務器
vi /etc/rsyncd.conf
...screts file=/etc/tom.ipaddr.pas
配置文件,參考我寫的另外一篇rsync的文章,注意:密碼文件權限必須是0400
chmod 0400 /etc/tom.ipaddr.pas
c.啟動服務端
rsync --daemon
d.客戶端同步
在客戶端的cygwin下面,運行rsync同步,具體命令,請參考另外一篇rsync的文章。
8.cygwin下使用SSHD
a.需要安裝了cygrunsrc,openssh
b.運行ssh-host-config -y
一路回車,直到出現CYGWIN=時,輸入tty ntsec,再回車,
(或者,增加一系統環境變量CUGWIN=nesec tty)
c.已經安裝好SSHD服務到你的Windows服務中,可以直接在服務中啟動,關閉。
(cygrunsrc -S sshd或者net start sshd)
9.中文顯示
vi ~/.bashrc
# 讓ls和dir命令顯示中文和顏色
alias ls='ls --show-control-chars --color'
alias dir='dir -N --color'
# 設置為中文環境,使提示成為中文
export LANG="zh_CN.GBK"
# 輸出為中文編碼
export OUTPUT_CHARSET="GBK"
~/.inputrc為
set completion-ignore-case on
set meta-flag on
set output-meta. on
set convert-meta. off
cygwin.bat腳本為:
@echo off
set MAKE_MODE=UNIX
--------------------------------
安裝
可以直接到http://www.cygwin.com下載一個安裝程序,setup.exe,這個程序只是一個安裝程序,所有的模塊將從網絡下載安裝。或者,你可以下載一個cygwin.iso的鏡像,直接映象成光盤,再從光盤本地安裝,這樣會快很多,而且不用考慮斷線的問題。
X下的中文支持
locale支持
Cygwin的locale支持一直都有問題,好在X程序還可以使用XLOCALE。
建議還是使用zh_CN.gbk, 不要使用zh_CN.GB2312
在移植程序時需要注意不要讓程序連接libcygwin.a里面的setlocale,而是采用libX11.a里面的_Xsetlocale。方法是:檢查被移植程序的全部源代碼,發現
#include
就修改為
#define X_LOCALE
#include
同時注意程序的連接庫要添加-lX11.
如果對于結果沒有把握,可以找個Dependency Walker查看程序是否連接到了cygwin1.dll里面的setlocale,如果是,就說明有遺漏。
中文字體
PCF點陣字體
GTK1.x 和其他一些老的X程序都是用X字體,
注意必須要有編碼與locale一致的字體,比如用zh_CN.gbk就必須要由GBK編碼的字體,用zh_CN.GB2312就必須要有GB2312編碼的字體
如果使用zh_CN.GB2312,這里有一個RedOffice面帶的點陣字體包
可以采用ttf2bdf從TTF抽取得到bdf格式,然后再用bdf2pcf得到pcf格式的字體文件。
(這里有一個Windows版本的TTF2BDF,可以將Windows TTF字體轉換出BDF字體, 注意得到bdf后要手工編輯一下文件頭,將編碼聲明修改正確)
得
到字體之后,放到某個目錄下,執行mkfontdir生成fonts.dir,然后用xset +fp
/path/to/your/fonts將字體路徑加入即可(注意與fontconfig的配置不同,這里路徑是不遞歸的,如果有的字體放在子目錄里面,
子目錄也需要添加進去才行)。
TTF字體
很多新的應用程序(比如GTK2)都使用fontconfig/libxft2來顯示字體,它對TTF字體的支持比較好(X以前通過freetype, xft模塊也支持TTF字體,但對中日韓字體的支持不是太好,而且也在Cygwin下似乎也沒有這些模塊)
完全可以使用Linux下的arphic字體包. 如果沒有安裝Linux,可以到http://packages.debian.org下載相應的包,然后用7zip解壓提取出ttf文件。
得到字體文件之后,放到某個目錄之下,編輯/etc/fonts/local.conf,將字體路徑加入:
/path/to/my/ttf/fonts如果只是自己使用,可以將字體文件放到~/.fonts下,不需要修改任何配置,最多三十秒fontconfig就能夠發現這些字體了。
中文輸入法
老黃(hzhr)移植了miniChinput到Cygwin,我也移植了fcitx-1.8.5和3.0,均可以從我的網站上找到http://www.oliwen.com/bama...
一般設置了LC_CTYPE和XMODIFIERS就可以在程序中激活輸入輸入法了(除非這個程序沒有XIM支持):
LC_CTYPE=zh_CN.gbk
XMODIFIERS="@im=Chinput"
export LC_CTYPE XMODIFIERS
對于fcitx而言,XMODIFIERS設置為什么都可以(但必須要設置),所以設置為"@im=Chinput"的話chinput和fcitx都可以正常使用
VI中的 Backspace 與 Delete 按鍵異常
首先確定 $TERM的設定為cygwin
echo $TERM
若不是,請設定為
TERM = cygwin
export TERM
Backspace 與 Delete這兩個鍵正常狀況下只有一個有用。可在 $HOME/.bash_profile 任選一個來使用
stty erase '^H' //ctrl+v, ctrl+h
stty erase '^?'
本文來自: 腳本之家(www.jb51.net) 詳細出處參考:http://www.jb51.net/article/6236.htm
?
1. 資源1.1. 網址鏈接
? 1.2. WIKI 關鍵字? 2. 版本
? 3. FAQ3.1. Q Howto get version info????????? bash$ cygcheck -c cygwin ? 3.2. Q 安裝注意事項
? 3.3. Q Howto setup default text format, CRLF(dos) or LF(unix)?
?
? 3.4. Q 為什么在 Cygwin 下創建的文件,其他管理員不可寫?這是所謂的 ntsec 在起作用。通過 NTFS 的權限設置,模擬 UNIX 的權限。可以通過 CYGWIN 環境變量修改。如:???????? bash$ export CYGWIN="nontsec nosmbntsec" ? 3.5. Q 如何讓 ls 能夠顯示中文文件名?因為 ls 不使用 readline 來顯示, 因而不能用 .inputrc 控制。即 less 和 ls 需要特別設置。在 .bashrc 中加入如下 alias:alias less='/bin/less -r' alias ls='/bin/ls -F --color=tty --show-control-chars' ? 3.6. Q 如何在按 TAB 鍵進行文件名擴展時忽略大小寫,這樣在 Windows 下才方便噢?參見:[Cygwin User's Guide]? Customizing bashThree initialization files that control the behavior. of bash: .profile, .bashrc and .inputrc.? .profileIt is executed when bash is started as login shell, e.g. from the command bash --login.建議
? .bashrc.bashrc is similar to .profile but is executed each time an interactive bash shell is launched.? .inputrc.inputrc controls how programs using the readline library (including bash) behave.?
但是并不能保證 ls 顯示中文。因為這些工具不使用 readline 來顯示。象 less 和 ls 需要特別設置。在 .bashrc 中加入如下 alias: alias less='/bin/less -r' alias ls='/bin/ls -F --color=tty --show-control-chars' ? ? 3.7. Q 如何在 Cygwin 中運行 crontab?如下:
? 3.8. Q 配置 SSH client?
? 3.9. Q 如何在 cygwin 中運行 sshd (SSH Server)?如下:
?
?
?
? 3.10. Q 如何在 cygwin 中配置 Email?As follows:
?
?
?
? 3.11. Q 如何得到 Dos/Windows?格式的路徑名????????? bash$ cygpath -d -m "`pwd`" ? 3.12. Q Setup Xinetd
?
?
? 3.13. Q other command?
? 3.14. Q XFree86 under Cygwin?
? 3.15. Q 安裝后的設置綜述?
?
?
?
?
?
? ?
|