cygwin

根據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

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

  • 最新版本:
    • 2004/01/31 :[Cygwin DLL 1.5.7-1 release]
    • 2004/01/19 :[Cygwin DLL 1.5.6-1 release]
    • 2003/09/20 :[Cygwin DLL 1.5.5-1 release]
    • 2003/09/13 :[Cygwin DLL 1.5.4-1 release]

?

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就可以看到效果了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257275.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JAVA wait(), notify(),sleep具體解釋

在CSDN開了博客后&#xff0c;一直也沒在上面公布過文章&#xff0c;直到前一段時間與一位前輩的對話&#xff0c;才發現技術博客的重要&#xff0c;立志要把CSDN的博客建好。但一直沒有找到好的開篇的主題&#xff0c;今天再看JAVA線程相互排斥、同步的時候又有了新的體會&…

通過鍵盤上下鍵 JS事件,控制候選詞的選擇項

效果圖 JS代碼 //上下鍵 選擇事件 searchBackgroud 為樣式&#xff0c;只做標記&#xff0c;無實質樣式&#xff0c;因為和其他樣式不兼容&#xff0c;只能添加CSS$(document).keydown(function (event) {var upDownClickNum $("#SearchTips .searchBackgroud ").l…

物理競賽得獎學計算機,物理競賽林紫琪帶你探索清華學堂計算機科學實驗班”(姚班)...

林紫琪&#xff0c;34屆全國中學生物理競賽全國第22名&#xff0c;獲得女生最高分&#xff0c;入選國家集訓隊&#xff0c;現就讀于清華姚班。這是一條小科普&#xff1a;“清華學堂計算機科學實驗班”(姚班)由世界著名計算機科學家姚期智院士于2005年創辦&#xff0c;致力于培…

Jmeter===Jmeter中使用CSV Data Set Config參數化不重復數據執行N遍(轉)

Jmeter中使用CSV Data Set Config參數化不重復數據執行N遍 要求&#xff1a; 今天要測試上千條數據&#xff0c;且每條數據要求執行多次&#xff0c;&#xff08;模擬多用戶多次抽獎&#xff09; 1.用戶id有175個&#xff0c;且沒有任何排序規則&#xff1b; 2.要求175個用戶都…

[轉]wireshark 實用過濾表達式(針對ip、協議、端口、長度和內容) 實例介紹

首先說幾個最常用的關鍵字&#xff0c;“eq” 和 “”等同&#xff0c;可以使用 “and” 表示并且&#xff0c;“or”表示或者。“!" 和 "not” 都表示取反。 一、針對wireshark最常用的自然是針對IP地址的過濾。其中有幾種情況&#xff1a; &#xff08;1&#xff0…

[Flexbox] Using order to rearrange flexbox children

Using the order property we alter the order in which flexbox children appear on the page, without making changes to the dom. Desktop Mobile 轉載于:https://www.cnblogs.com/Answer1215/p/5453671.html

計算機怎么更改用戶頭像像,Win10系統電腦賬戶頭像怎么改成系統默認狀態?

為了保護電腦的安全&#xff0c;我們可以設置登錄賬號密碼&#xff0c;而賬號的頭像也是可以自行更換的。但是&#xff0c;某些時候&#xff0c;因為一些原因&#xff0c;我們需要將Win10系統賬戶的頭像去掉&#xff0c;即改成默認狀態。但是很多人都不清楚該怎么操作&#xff…

SPFA模板

今天去聽2015ZJOI浙江省隊第二試的集訓&#xff0c;早上就是聽得云里霧里的ORZ&#xff0c;下午某兩集訓隊大神過來將題目&#xff0c;第一個進了IOI的我只聽懂了10%ORZ&#xff0c;第二個人機交互很好玩&#xff0c;找個時間單獨寫下。 順便附帶膜拜各位聚聚&#xff0c;保我明…

LCM在Kernel中的代碼分析

lcm的分析首先是mtkfb.c 1.mtk_init中platform_driver_register(&mtkfb_driver)注冊平臺驅動 panelmaster_init(); DBG_init(); mtkfb_ipo_init(); 2.mtkfb_probe進行普配 3.然后執行primary_display_init(mtkfb_find_lcm_driver(),lcd_fps); 4.mtkfb_find_lcm_driver()進行…

html ascii編碼方式,HTML 字符集 參考手冊

要正確顯示一個 HTML 頁面&#xff0c;瀏覽器必須知道要使用的字符集(字符編碼)。HTML 字符集在 HTML 中&#xff0c;正確的字符編碼是什么&#xff1f;HTML5 中默認的字符編碼是 UTF-8。這并非總是如此。早期網絡的字符編碼是 ASCII 碼。后來&#xff0c;從 HTML 2.0 到 HTML …

JavaScript 中的閉包和作用域鏈(讀書筆記)

要想理解閉包&#xff0c;應當先理解JavaScript的作用域和作用域鏈。 JavaScript有一個特性被稱之為“聲明提前&#xff08;hoisting&#xff09;”&#xff0c;即JavaScript函數里聲明的所有變量&#xff08;但不涉及賦值&#xff09;都被“提前”至函數體的頂部&#xff0c;“…

leetcode jump game ii

題目&#xff1a; Given an array of non-negative integers, you are initially positioned at the first index of the array. Each element in the array represents your maximum jump length at that position. Your goal is to reach the last index in the minimum numb…

韓師師范學院計算機科學與技術在哪個學區,2017年韓山師范學院本科插班生考試《數據結構》A卷...

韓山師范學院2017年本科插班生考試試卷計算機科學與技術 專業 數據結構 試卷(A 卷)一、單項選擇題(每題2分&#xff0c;共30分)1. 對線性表&#xff0c;在下列哪種情況下應當采用鏈表表示&#xff1f;( ) A. 經常需要隨機地存取元素 B. 經常需要進行插入和刪除操作 C. 表中元素…

JAVA取隨機數,石頭剪刀布實例

一、取隨機數&#xff1a; import java.util.Random; //導入隨機數 public class Test{public static void main(String[] args){Random xx new Random(); //聲明隨機數int number xx.nextInt(10); //賦值隨機數給numberSystem.out.println("隨機數…

計算機網絡犯罪和一般犯罪的不同,論計算機網絡犯罪題稿.doc

目 錄摘要2第一章、網絡犯罪概念、特點以及構成特征5(一)網絡犯罪的概念認定5(二)網絡犯罪的特點6(三)網絡犯罪的構成7第二章、?網絡犯罪的類型9(一)網絡色情和性騷擾9(二)欺詐9(三)販賣、銷售違禁物品11(四)妨害名譽、侵犯個人隱私12(五)?制造、傳播計算機病毒12第三章、?網…

實例變量和靜態變量(或類變量static)

一個類通過使用運算符new可以創建多個不同的對象&#xff0c;這些對象將被分配不同的內存空間&#xff0c;準確的說法是&#xff1a;不同對象的實例變量將被分配不同的內存空間&#xff0c;如果類中有類變量&#xff0c;那么所有對象的這個類變量都被分配到同一處內存&#xff…

DB2 數據庫清表語句

truncate table DWDM2.tablename IMMEDIATE; alter table DWDM1.tablename activate not logged initially with empty table&#xff1b; but which one is best ? the truncate should be better 轉載于:https://www.cnblogs.com/TendToBigData/p/10501485.html

cnblogs_504 Gateway Time-out

地址&#xff1a;http://zzk.cnblogs.com/s?tb&w%E6%B1%82%E8%81%8C 504 Gateway Time-out 504 Gateway Time-out The gateway did not receive a timely response from the upstream server or application. Sorry for the inconvenience. Please report this message an…

第一階段

初步實現了相機的調用&#xff0c;做了簡單界面&#xff0c;并沒有實現核心功能 Button button (Button) findViewById(R.id.sao);button.setOnClickListener(new OnClickListener(){Overridepublic void onClick(View v) {Intent intent new Intent(MediaStore.ACTION_IMAGE…

JavaScript 詳說事件機制之冒泡、捕獲、傳播、委托

DOM事件流&#xff08;event flow &#xff09;存在三個階段&#xff1a;事件捕獲階段、處于目標階段、事件冒泡階段。 事件捕獲&#xff08;event capturing&#xff09;&#xff1a;通俗的理解就是&#xff0c;當鼠標點擊或者觸發dom事件時&#xff0c;瀏覽器會從根節點開始…