cygwin

根據cygwin user guide翻譯整理,但願對你們有所幫助。有錯誤清指出。html

1 引言
        cygwin是一個在windows平臺上運行的unix模擬環境,是cygnus solutions公司開發的自由軟件(該公司開發了不少好東西,著名的還有eCos,不過現已被Redhat收購)。它對於學習unix/linux操做環境,或者從unix到windows的應用程序移植,或者進行某些特殊的開發工做,尤爲是使用gnu工具集在windows上進行嵌入式系統開發,很是有用。隨着嵌入式系統開發在國內日漸流行,愈來愈多的開發者對cygwin產生了興趣。本文將對其做一介紹。linux

---------------------------------------------------------------------ios

根據cygwin user guide翻譯整理,但願對你們有所幫助。有錯誤清指出。web

1 引言
        cygwin是一個在windows平臺上運行的unix模擬環境,是cygnus solutions公司開發的自由軟件(該公司開發了不少好東西,著名的還有eCos,不過現已被Redhat收購)。它對於學習unix/linux操做環境,或者從unix到windows的應用程序移植,或者進行某些特殊的開發工做,尤爲是使用gnu工具集在windows上進行嵌入式系統開發,很是有用。隨着嵌入式系統開發在國內日漸流行,愈來愈多的開發者對cygwin產生了興趣。本文將對其做一介紹。shell

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.windows

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 globapi

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)。bash

 

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

2008-04-14 22:17

 

1. 資源

1.1. 網址連接

  • 主頁:
http://www.cygwin.com/
  • 同步:
ftp://ftp.sunsite.utk.edu/pub/cygwin/release/
ftp://anonymous:cygwin@ftp.gnupilgrims.org/pub/cygwin/release/

 

1.2. WIKI 關鍵字

 

2. 版本

 

3. FAQ

3.1. Q Howto get version info?

         bash$ cygcheck -c cygwin

 

3.2. Q 安裝注意事項

  • gzip
gzip 版本 1.3.3-4 可用。高版本如: 1.3.5-1 使 tar -z 命令運行不正常。

 

3.3. Q Howto setup default text format, CRLF(dos) or LF(unix)?

  • 修改註冊表項:HKEY_LOCAL_MACHINE/SOFTWARE/Cygnus Solutions/Cygwin/mounts v2/.../cygdrive flags。 cygdrive flags是一個DWORD值,&0x2 == 0x2 爲 Unix Style,不然爲 Dos like style。

 

  • 設置環境變量 CYGWIN, 使得在 pipe 等模式下的處理方式:export CYGWIN=nobinmode

 

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 bash

Three initialization files that control the behavior. of bash: .profile, .bashrc and .inputrc.

 

.profile

It is executed when bash is started as login shell, e.g. from the command bash --login.

建議

  • 在 PATH 後加上 ":.",這樣能夠象在 DOS 下,執行本目錄下程序;

 

.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.

 

# Ignore case while completingset completion-ignore-case on# Make Bash 8bit cleanset meta-flag onset output-meta. on # to show 8-bit charactersset convert-meta. off # to show it as character, not the octal representation

可是並不能保證 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?

以下:
  • 在Windows上安裝系統服務 cron,開機即運行。
         bash$ cygrunsrv -I cron -p /usr/sbin/cron -a -D
  • 啓動服務
         bash$ cygrunsrv -S cron

 

3.8. Q 配置 SSH client?

  • 爲了可以經過公鑰驗證進行SSH登錄其餘服務器,先要在本地創建 SSH 公鑰私鑰對:
         bash$ ssh-keygen -t rsa1         bash$ ssh-keygen -t rsa         bash$ ssh-keygen -t dsa
  • 創建無口令登陸
須要將本機的 *.pub 拷貝(cat>>)到服務器中 $HOME/.ssh/ 下的 authorized_keys (ssh1) 和 authorized_keys2 (ssh2) 文件中去。

 

3.9. Q 如何在 cygwin 中運行 sshd (SSH Server)?

以下:
  • 設置 Windows 環境變量,添加「CYGWIN = ntsec tty」

 

  • Config SSHD, running:
         bash$ ssh-host-config -y
根據提示,輸入 CYGWIN=ntsec tty

 

  • Change permissions and ownership on some files:
         bash$ cd /; chmod -R og-w .          bash$ chmod og+w /tmp          bash$ touch /var/log/sshd.log          bash$ chown system:system /var/log/sshd.log /var/empty /etc/ssh_h*          bash$ chmod 755 /var/empty

 

  • start the service:
         bash$ cygrunsrv -S sshd

 

3.10. Q 如何在 cygwin 中配置 Email?

As follows:
  • ssmtp & mutt
    • ssmtp
             bash$ /usr/bin/ssmtp-config
    When using mutt as the mail client, add the following line to your $HOME/.muttrc file:
             set sendmail="/usr/sbin/ssmtp"

 

  •  
    • mutt
      • Make sure you have the Cygwin ssmtp package installed
      check file /etc/ssmtp/ssmtp.conf
      • vi .bashrc and/or .bash_profile
               export MAIL=~/Mail/inbox         export EDITOR=nano
      If you have nano installed (and I stongly recommend that you do)
      • Create the following directory structure in your HOME directory:
               ~/Mail            |            -- inbox (EMPTY FILE, NOT DIRECTORY)            |            -- sent (EMPTY FILE, NOT DIRECTORY)            |            -- received (EMPTY FILE, NOT DIRECTORY)            |            -- postponed (EMPTY FILE, NOT DIRECTORY)
      • Create a ~/.muttrc file that looks like this:
               # The file/directory where your incoming mail will be spooled to         # (same as 'set spoolfile' below)         mailboxes ~/Mail/inbox                 # Mail account setup.   I know nothing about IMAP, so you're         # on your own there.         set sendmail="/usr/sbin/ssmtp"         #set pop_host="your.pop3.mail.server.com"         #set pop_last=yes         #set pop_user="your_email_username"         #set pop_pass="your_email_password"         set from="your_complete@email_address.com"                 # Mail folder setup.         set folder=~/Mail         set mbox_type=mbox         set spoolfile=+inbox         set mbox=+received         set postponed=+postponed         set record=+sent

 

  •  
    •  
      • mutt command line
               mutt [...] address         參數:             -a file : attach a file to message             -b address: BCC             -c address: CC             -F muttrc             -H draft: draft contain both header and body             -s subject: subject of the message             -x : emulate the mailx compose mode                 環境變量:             EMAIL : user's email address             MAIL   : user's spool mailbox         示例:             bash$ echo "contents" | mutt -x -s "subject" mail@address             bash$ echo   | mutt -x -s "subject" -i filename mail@address

 

  • exim & minires
    • exim
         Exim is a fully featured mail transfer agent, a drop-in replacement for sendmail.         bash$ /usr/bin/exim-config         bash$ view /etc/exim.conf          bash$ vi /etc/aliases                   postmaster: your_login_name         bash$ vi /etc/reslov.conf                   nameserver 10.0.0.7                   search your.domain         bash$ cygrunsrv -I exim -p /usr/bin/exim -e CYGWIN=nontsec                      -a "-bdf -q15m" -d "Exim Mail Transfer Agent"                    -1 /var/log/exim/cygrunsrv_out.log -2 /var/log/exim/cygrunsrv_err.log         bash$ cygrunsrv -S exim

 

3.11. Q 如何獲得 Dos/Windows?格式的路徑名?

         bash$ cygpath -d -m "`pwd`"

 

3.12. Q Setup Xinetd

  • start init service
         bash$ /usr/bin/init-config

 

  • chkconfig 工具用來維護 /etc/rc.d 下的腳本
    • 若要啓動 sshd 執行 "/sbin/chkconfig --add sshd"

 

  • xinetd config
         bash$ /usr/bin/xinetd-config

 

3.13. Q other command?

ttcp, netsnoop

 

3.14. Q XFree86 under Cygwin?

  • add /usr/X11R6/bin to PATH;
  • start Xwindow using startxwin.bat(dos/windows), or startxwin.sh(cygwin);
  • if has a firewall installed, open port "6000" of local server;
  • run xclient in local machine, just set environment: export DISPLAY=127.0.0.1:0.0
  • if run xclient in remote machine, give authorize to remote host:
bash$ /usr/X11R6/bin/xhost remote_hostname_or_ip_address
  • telnet/ssh to remote host;
  • set environment DISPLAY, like: export DISPLAY=<IP_of_Cygwin_XFree86>:0.0
  • xterm

 

3.15. Q 安裝後的設置綜述?

  • binmode or textmode?
執行 mount 命令,若是不是 textmode,修改註冊表 HKEY_LOCAL_MACHINE/SOFTWARE/Cygnus Solutions/Cygwin/mounts v2/.../cygdrive flags。 cygdrive flags是一個DWORD值,&0x2 == 0x2 爲 Unix Style,不然爲 Dos like style。

 

  • 修改 ~/.inputrc 文件,加入以下內容
# Ignore case while completingset completion-ignore-case on# Make Bash 8bit cleanset meta-flag onset output-meta. on # to show 8-bit charactersset convert-meta. off # to show it as character, not the octal representation

 

  • 修改 /etc/profile, 加入以下內容:
set -o vialias less='/bin/less -r'alias ls='/bin/ls -F --color=tty --show-control-chars'# glob filenames in a case-insensitive mannershopt -s nocaseglobexport SGML_CATALOG_FILES=/share/catalog.sgmlexport XML_CATALOG_FILES=/share/catalog.xmlexport CYGWIN="nobinmode nontsec nosmbntsec"export PATH=$PATH:.

 

  • 修改登陸用戶的主要組:
         bash$ vi /etc/passwd
默認屬於 513 組(對於域控制器是Domain Users,非域控制器爲 NONE),我的偏好設置爲 544(Administrator)

 

  • 創建 symbol link:
    • 由於一些腳本默認的 md5 摘要程序是 md5, 而非 md5sum;
             bash$ ln -s /usr/bin/md5sum /usr/bin/md5
    • 設置 DOCBOOK DTD/DSSSL 路徑
             bash$ ln -sf /cygdrive/e/HOME/WORK/johnson_homepage/worldhello/share /share

 

  •  
    • 設置 usemodwiki 路徑映射
    mkdir /reposcd /repos/ln -s /cygdrive/d /dln -s /d/HOME/WORK/johnson_homepage/worldhello/usemod JohnsonUseModWikiln -s /d/HOME/WORK/johnson_homepage/worldhello/wiki .

 

 

  •  
    • 設置創建工做路徑
             bash$ ln -sf /cygdrive/e/HOME/WORK/ ~/work
    在cygwin中輸入中文和顯示中文
    2008-07-31 15:45

    cygwin的缺省環境是不支持中文輸入和顯示的,經過google找到了能人介紹的解決方法。

    中文輸入須要修改「.inputrc」文件,只要包括如下語句便可:

    set meta-flag on

    set convert-meta. off

    set output-meta. on

    set input-meta. on

    set completion-ignore-case on

    在我使用的cygwin環境中的「.inputrc」文件中已經包括這些指令了,只是被置成註釋語句了,只要刪掉行首的「#」就可。

    顯示中文須要修改「.bashrc」文件,加入一行:

    alias ls='ls --show-control-chars --color=auto'

    文件修改完畢後,從新啓動cygwin就能夠看到效果了。

相關文章
相關標籤/搜索