[目录] cygwin安装使用总结.txt (created by TxtBrowser)
  content
    1. 什么是Cygwin?
    2. 什么不是Cygwin?
    3. Cygwin的下载与安装
    4. cygwin下的一些应用
    .   4.1 默认的应用--也是我选择cygwin的原因
    .   4.2 可以自己安装一些好玩的东东
    .   4.3 有一些应用需要额外的配置
    .       4.3.1 ssh服务在cygwin上架设指南
    5. cygwin的一些问题及解决
    .   5.1 如何改变home目录
    .   5.2 cygwin显示中文问题
    .   5.3 cygwin下中文中现乱码问题
  figures
    figure 1. patch for mplayer on cygwin

对于留恋Linux命令行的用户, 对于那些不想在你的Windows系统上再安装一个Linux, 或者
安装虚拟机, 再在虚拟机上安装Linux的用户来说, Cygwin应该是一个很好的选择. cygwin
可以模拟Linux的工作环境, 命令, 工作方式都跟 Linux一样.

Windows的命令行的确是不好用, cygwin除了可以执行Linux命令外, 还可以直接调用
Windows的命令行, 不同的是界面更加友好. 如果再配合其它软件(如console2), 基本上可
以做到类似Linux的 gnome-terminal的多tab了.

所有的试验都是在cygwin1.5上做的, cygwin1.7尽管发布很久了, 但是个人感觉还有很多
bug, 所以我在公司里用cygwin1.5, 回到家里用cygwin1.7, 这是个人的感受, 呵呵.

1. 什么是Cygwin?

Cygwin是一个在windows平台上运行的Linux模拟环境, 是Cygnus solutions公司开发的自
由软件(该公司开发了很多好东西, 著名的还有eCos, 不过现已被Redhat收购). 它对于学
习Unix/linux操作环境, 或者从unix到windows的应用程序移植, 或者进行某些特殊的开发
工作, 尤其是使用gnu工具集在windows上进行嵌入式系统开发, 非常有用. [1]

Cygwin是一个Windows上的Linux模拟环境, 它包括两个部分:

    * 一个作为Linux API仿真层的DLL(Cygwin.dll), 它提供稳定的Linux API功能. 
    * 提供看起来且使用起来象Linux的工具集. 

2. 什么不是Cygwin?

Cygwin不是一种在Windows下运行Linux应用程序的方式, 如果要做到这一点, 你必须重新
在Windows上编译你的源程序. 

3. Cygwin的下载与安装

首先你必须到http://www.cygwin.com先下载一个安装向导文件 setup.exe, 然后运行
setup.exe, 依次会出现下面的对话框:

    (1)选择安装方式(选择Download Without Installing)
    (2)选择本地存储路径
    (3)选择连接方式
    (4)选择下载站点(推荐两个: http://mirrors.kernel.org, ftp.ntu.edu.tw)
    (5)选择下载包的内容: 一共有四类. default只下载最小安装包, Install则下载所有
    的包, 在1.7版本里, Reinstall在下载的时候好像没有什么用,不用选, Uninstall
    是删除安装包吗? 没有试过. 至于窗口顶部那些“Keep”、“Prev”、“Curr”、“
    Exp”等等选项 , 只是用来改变当前树结构的显示方式的, 对下载没有什么影响. 用
    户可以用默认的“Exp”. 
    (6)开始下载

如果用户的运气足够好, 也许能够一次性的下载成功. 若真能这样, 恭喜恭喜!但如果你
和我一样不幸, 下到一半网络断了,怎么办?难道要我全部重新来一遍?幸运的是,Cygwin
的安装向导程序支持断点续传功能: 你可以按照上面的步骤再次运行setup.exe, 把上面的
骤再执行一遍就行了, cygwin会记住上次下载的东东的(适用于cygwin1.7, 对于
cygwin1.5, 貌似断点下载的第5步要选择Reinstall).

在用户指定的本地存储路径内, 安装向导程序会生成类似这样的一个目录: http%3a%2f
%2fmirrors.kernel.org%2fsources.redhat.com%2fcygwin, 这就是你下载文件的真正所在
目录. 还会生成两个日志文件:setup.log和setup.log.full,  用户感兴趣的活, 可以打
开来看看, 对了解Cygwin的下载机制有不少帮助. 

至于如何安装, 其实就是再运行一次setup.exe, 不同的是, 在上述的第1步里选择
Install from local, 在第5步里, 四个选项有不同的含义, Install代表安装而不是下载
, Reinstall代表重新安装而不是重新下载. 用户可以在这里选择要安装的包, 不过我还是
建议选择安装所有的程序包, 免的以后麻烦.

4. cygwin下的一些应用

4.1 默认的应用--也是我选择cygwin的原因

之所以安装cygwin, 是因为习惯于linux下的一些应用, 在Windows上没有, 或者找不到合
适的代替器, 所以在我的日常应用中, 基本上cygwin被当成是一台只有命令行的Linux操作
系统使用. 而且因为运行在Windows上, 所以有时候少了和Windows通讯的烦恼.

     * Gcc, Makefie, gdb: 这是最初接触cygwin的原因. 很多公司在Windows上编译
Linux 的东东, 没有这个的确不行, 后来经常自己写一些验证性质的小程序, 也
用这个.
* Vim: vim提供了windows版本, 但是有时候还是习惯使用命令行版的Vim(不是
gvim), 尽管windows版本的gvim用的也很多.
* ls: 尽管Windows提供了类似的命令dir, 但是感觉还是ls信息论习惯和强大.
* telnet, ssh: 很多人使用secuCRT登录设备, 个人感觉secuCRT有一项功能挺强
的, 那就是记录log功能, 其它的挺弱的, 比不了cygwin. 再插上一句, 用cygwin
telnet 登录 bbs还是比较好使的, 但是secuCRT和putty显示中文都会有问题. 没
用过 CTerm以及 XTerm之类的bbs终端, 但是我发现cgywin能实现基本它们声称的
大部分功能.
* ftp, sftp, lftp, tftp等: 这个也有专门的软件来实现, 好用的如FileZilla
FTP server和client版, 但是点鼠标点的我手疼, 还是习惯命令行, 而且最近研
究了一些脚本, 对于经常到某个ftp上存取文件使用一个命令就可以实现, 不用再
登录, 敲密码, 进入到指定路径, 上传下载了, 还是蛮方便的.
* cvs: 有Windows版本的cvs工具wincvs, 貌似最初我用过好几年, 但是现在一个
命令就能搞定的事情不愿意再开一个软件再点击好多次鼠标了.
* diff和patch: 经常写代码和写文章的人用的着. Windows上暂时没有发现替代
品.
* 阅读一些命令的man page, 如man strcpy.
* 其它常用的Linux命令, 如rm, ping, tar, gzip, cat, echo等.
* Linux的重定向命令, 用过的人知道, 有时候这个还是很好用的, 呵呵

4.2 可以自己安装一些好玩的东东

上面的应用都是cygwin自带的, 装上就能用. 事实上如果你的cygwin是完全安装的话, 你
对编程小有了解的话, 还可以自己编译一些好玩的东东, 下面是我实验过可以使用的:

    * 纯文本网页浏览器(lynx, w3m或者elinks), 在命令行里浏览网页.
    * sdcv: 在命令行里查字典, 这个没有人移植到Windows上.
    * asterisk: 一个众人皆知的voip server(这个需要修改的地方很多).
    * mplayer: 在命令行里听音乐, 貌似有人开发了一个叫cmmusic的东东, 可以同
    步显示歌词, 编译的时候cwygin存在一个叫llrint的问题, 如果遇到这个问题
    (undefined reference to `_llrint'), 下面的 patch可以解决这个问题:

|
|===================================================================
|--- ffmpeg/libavcodec/i386/mathops.h   (revision 6329)
|+++ ffmpeg/libavcodec/i386/mathops.h   (working copy)
|@@ -37,3 +37,13 @@
|  asm ("imull %2\n\t" : "=A"(rt) : "a" (ra), "g" (rb));\
|  rt; })
|
|+#ifndef llrint
|+inline long long int llrint (double x)
|+{
|+    long long int llrintres;
|+    asm
|+    ("fistpll %0"
|+    : "=m" (llrintres) : "t" (x) : "st");
|+    return llrintres;
|+}
|+#endif
    figure 1. patch for mplayer on cygwin

4.3 有一些应用需要额外的配置

还有一些应用, 用到的时候需要一些些额外的配置, 一并总结一下:

4.3.1 ssh服务在cygwin上架设指南

sshd服务在cygwin上默认是不开启的, 可能是出于安全的需要. 但是有些服务可能需要
cygwin作为一个sshd服务器. 这时你需要手动打开sshd服务.[4]

1) 先确认一下cygrunsrv.exe 已经安装. 

    whereis cygrunsrv

2) 生成ssh_config文件

这时候并不能起动sshd服务的, 先运行ssh-host-config 会提示你一些信息, 照着做就是
了, 多数是yes, 在选择是否加载为service的时候小心一点, 这里的service是指windows
的service, 即使cygwin不启动, sshd也会在开机的时候启动起来.

3) 启动或停止sshd

    net start sshd (cygrunsrv -S sshd)
    net stop sshd

4) 实施过程

打开cygwin控制台, 输入ssh-host-config, 一路yes, 提示CYGWIN值时, 输入netsec tty.
启动sshd服务用: net start sshd 或 cygrunsrv --start sshd; 停止sshd服务用:net
stop sshd 或 cygrunsrv --stop sshd


5. cygwin的一些问题及解决

5.1 如何改变home目录

如果要改变home目录则要编辑cygwin.bat, 具体如下:在bash命令之前加入set HOME=<用
户目录>, 比如:

set HOME=/home/g

此用户目录设置在/home/g. 

5.2 cygwin显示中文问题

/etc/skel/.bashrc
让bash命令行可以输入汉字, 编辑~/.inputrc, 添加:

    set meta-flag on
    set convert-meta off
    set input-meta on
    set output-meta on

让ls命令显示汉字, 在~\.bashrc中加入:

    export LESSCHARSET=latin1

让ls命令显示汉字文件和目录名, 在~\.bashrc中加入:

    alias ls='ls -hF --show-control-chars --file-type'

一般的HOME目录下第一次使用的时候没有.inputrc和.bashrc文件的, 你可以自己新建一个
, 也可以从/etc/skel目录下拷由一个现成的, 稍加改动就可以了.

5.3 cygwin下中文中现乱码问题

在cygwin下用make编译程序, 往往会出现乱码. 这主要是因为cygwin对中文的支持不是很
理想引起的. 解决的办法是将环境变量LANG设成UTF-8, 暂时不用中文, 在~/.bashrc文件
中加入下面的一句话:

    export LANG=UTF-8

[参考资料]:

[1]Cygwin User's Guide, cygwin官方网站,
http://cygwin.com/cygwin-ug-net/cygwin-ug-net.html
[2] 大冬瓜的博客, Cygwin安装图记, http://lostu.blogbus.com/logs/10765519.html
[3] OoNiceDream的博客, 如何配置cygwin,
http://oonicedream.itpub.net/post/36905/457409
[4] Cygwin上的ssh服务的putty自动登录问题, http://markli.javaeye.com/blog/39661
[5] Cygwin上的ssh服务的putty自动登录问题,
http://hi.baidu.com/%BB%D4%B8%E7/blog/item/51a7bf3ef17f1eff828b13aa.html
[6] cygwin & putty, http://blog.chinaunix.net/u/31756/showart_416440.html

----------------------------------------------------------------------------------------------------------
Cygwin简介

Cygwin 是Windows系統的一個類Linux環境的模擬器, 可在Cygwin上執行一些Linux工具.它同時能執行Win32的程序,提供了一個編程,學習,翻~~牆的環境,官網為 http://www.cygwin.com , Cygwin.DLL最新版本為1.7.9-1, 請在官忘下載setup.exe,用以安裝Cygwin

安裝
請參考這裡
http://zhidao.baidu.com/question/246916676.html?fr=qrl&cid=89&index=4

我只介紹使用命令列的工具,以下為建議安裝的套件(除了核心部件外可選的套件), 並請以Unix的PATH環境安裝
程序代码:
bash                    4.1.10-4 (現在該是核心套件,以前是ash)
bc                      1.06-2
binutils                2.21.53-1
bzip2                   1.0.6-2
diffutils               2.9-1
curl                    7.20.1-1
expect                  20030128-1
file                    5.05-1
findutils               4.5.9-2
grep                    2.6.3-1
gzip                    1.4-1
inetutils               1.7-2
lynx                    2.8.5-4
nano                    2.2.5-1(如果會用emacs,vim編輯器可以不用,適合新手)
ncurses                 5.7-18 
netcat                  1.10-2
openssh                 5.8p1-1
openssl                 0.9.8r-2
perl                    5.10.1-5(這個隨意,但有它可執行網上很多的腳本)
perl-libwin32           0.28-3
ping                    1.0-1 (windows自帶的沒這好,可以flood ping!!)
python                  2.6.5-2(gappproxy, wallproxy可以使用它執行)
readline                6.1.2-2
rsync                   3.0.8-1
rxvt                    20050409-21(不需安裝X Window,cmd.exe太陽春,這個必須安裝用來代替)
sharutils               4.10-2
stunnel                 4.29-1 (用來翻~~強的,可以不用windows版本,速度更快)
tar                     1.25-1
termcap                 5.7_20091114-14
tzcode                  2010j-1
unzip                   6.0-10 
util-linux              2.17.2-1 (Linux命令列的工具習合)
vim                     7.3.003-1
wget                    1.12-1
which                   2.20-2
whois                   5.0.11-1(查詢IP資訊,如果不安裝可自行編寫)
wput                    0.6.2-1
zsync                   0.6.2-1

其 它gawk,sed就不列入,該是核心套件, 此外請下載plink win32 dev 版本, http://tartarus.org/~simon/putty-snapshots/x86/plink.exe , Cygwin 能執行它, 如果需要其它套件或反安裝,在setup.exe可以選擇就成,安裝完成後請編輯cygwin.bat,以我的windows xp sp3 為例子,以文本編輯器編輯D:\cygwin\Cygwin.bat, 裡面的批處理改為
程序代码:

@echo off
D:
REM chdir D:\cygwin\bin
REM set CYGWIN=codepage:oem tty binmode title
REM rxvt -e bash –login -i
CD D:\cygwin\bin
rxvt -sr -sl 2500 -sb -geometry 90×30 -tn rxvt -fn "Lucida Console-14" -e /usr/bin/bash –login -i


雙 擊批處理運行cygwin, 現在你已進入Unix的世界裡,bash在家目錄會生成 .bash_profile和.bashrc,這是bash的設定檔,在家目錄製造一個bin目錄, mkdir bin ,把plink.exe放進去, 以nano編輯 .bash_profile , 加入以下
程序代码:

export PATH="$PATH:/arch/cygwin.i386/bin:$HOME/bin"


儲存後執行source .bash_profile, OK 

Cygwin翻~~強方式

先介紹原生的Stunnel, 先執行cd /etc/stunnel/ , 然後執行 cp stunnel.conf-sample stunnel.conf, ,找到
; Certificate/key is needed in server mode and optional in client mode
cert = /etc/stunnel/mail.pem
;key = /etc/stunnel/mail.pem

改為

; Certificate/key is needed in server mode and optional in client mode
;cert = /etc/stunnel/mail.pem
;key = /etc/stunnel/mail.pem

郵箱不用stunnel,往下

; Some security enhancements for UNIX systems – comment them out on Win32
chroot = /var/lib/stunnel/
setuid = nobody
setgid = nobody
; PID is created inside the chroot jail
pid = /stunnel.pid

全部註解成
程序代码:
; Some security enhancements for UNIX systems – comment them out on Win32
;chroot = /var/lib/stunnel/
;setuid = nobody
;setgid = nobody
; PID is created inside the chroot jail
;pid = /stunnel.pid

因為這是M$ Windows啊  奸笑 , 往下找到
; Use it for client mode
;client = yes

改為

; Use it for client mode
client = yes

我們只需客戶端, 再往下找到
;[https]
;accept  = 443
;connect = 80
;TIMEOUTclose = 0

改為

[https]
accept  = 127.0.0.1:1984
connect = xxx.xxx.xxx.xxx:443
;TIMEOUTclose = 0

xxx.xxx.xxx.xxx 是服務器IP , 以下我給出一枚美國的IP,可用在stunnel, 例如
程序代码:
[https]
accept  = 127.0.0.1:1984
connect = 204.93.160.144:443
;TIMEOUTclose = 0

怎樣找尋stunnel可用的代理,請參考小弟的舊帖 https://cmded.net/forum/index.php?topic=2807.0  奸笑
然後我們需生成一個stunnel.pem在 /etc/stunnel/目錄內,執行
程序代码:
openssl req -new -x509 -days 365 -nodes -out stunnel.pem -keyout stunnel.pem

執行中會要求輸入資料,全部按ENTER鍵即可, 這時可執行stunnel , 如果沒有甚麼錯誤消息,該是執行成功了,請執行
ps ux看看是否這樣?
程序代码:
nc10@your-5554c55be4 ~
$ ps ux
      PID    PPID    PGID     WINPID  TTY  UID    STIME COMMAND
     3928       1    3928       3928  con 1005 05:31:22 /usr/bin/rxvt
      896    3928     896        696    0 1005 05:31:24 /usr/bin/bash
     2652       1    2452       2652    0 1005 09:30:32 /usr/bin/stunnel
      584       1    2452        584    0 1005 09:30:32 /usr/bin/stunnel
     3504       1    2452       3504    0 1005 09:30:32 /usr/bin/stunnel
     3508       1    2452       3508    0 1005 09:30:32 /usr/bin/stunnel
     3168       1    2452       3168    0 1005 09:30:32 /usr/bin/stunnel
     2228       1    2228       2228    ? 1005 09:30:32 /usr/bin/stunnel
     2544     896    2544       2064    0 1005 09:41:48 /usr/bin/ps

nc10@your-5554c55be4 ~
$

打開你的瀏覽器找個敏感詞網站訪問,看看是否成功?如要停止運行stunnel, 只需使用kill PID就可中止, 但這太麻煩,我已編寫了腳本,名字隨意,只需執行它就能停止stunnel, chmod +x 腳本名,放到$HOME/bin
程序代码:
#! /bin/bash
# stop stunnel
IsRun(){
ps ux | awk '$NF ~ /stunnel/{ print $1 }'
}
SPID=$(IsRun)
kill $SPID

到 此stunnel的翻強已介紹完畢,以下會介紹ssh, 很多網友都會有自己的ssh, Cygwin已有原生的openssh, 只需在命令列下鍵入 ssh user@host -vNfD 7070 ,然後輸入密碼,即可使用端口轉發翻~~強, 另一方式是使用windows的plink.exe, 只需鍵入
plink host -N -ssh -2 -P port -l user -pw pass -D 7070 -v 即有相同效果, plink的好處是支援密碼發送,不能登錄的端口轉發
ssh account比較方便,不然需要以expact腳本發送密碼, 對於一些公益的ssh更可以腳本使用, 例如老N的博客提供每半小時改密碼並斷開的ssh端口轉發服務,我們可以用bash腳本取得密碼,斷開後自動重新連接
程序代码:

#! /bin/bash
url="http://neolee.com/free-ssh/"
host="ineolee.co.cc"  # IP: 173.213.115.224
user="freessh"
lport=7070

STATUS=1
while (( STATUS > 0 )) ; do
    pw=$(curl -s "$url" | sed '/http:\/\/www.clocklink.com\/.*/!d;s/^.*=pass://')
    plink "$host" -N -ssh -2 -P 22 -l "$user" -pw "$pw" -D $lport -v
    wait
done


這 是在Cygwin上ssh翻~~強方式,同樣可在LINUX下使用, 往下介紹Cygwin內的python 執行gappproxy, 先到appengine.google.com 開通賬號並建立自己的應用, 往 http://code.google.com/intl/zh-CN/appengine/downloads.html
下載Google App Engine SDK for Python,選Linux/其他平台,最新版本為1.5.2 – 2011-07-21, 到gappproxy項目主頁下載
localproxy-2.0.0.tar.gz    fetchserver-2.0.0.zip, 在家目錄下解開pyhton SDK, localproxy-2.0.0.tar.gz 和 fetchserver-2.0.0.zip, 你可使用WINDOWS的winrar,或是使用cygwin的tar , unzip等工具,例如
unzip -n fetchserver-2.0.0.zip google_appengine_1.5.2.zip
tar zxvf localproxy-2.0.0.tar.gz
其它部署gappproxy全部一樣, 請參考項目教學, 把修改好的fetchserver-2.0.0目錄放到google_appengine_1.5.2目錄裡,
chmod +x appcmd.py 後執行./appcmd.py update fetchserver-2.0.0, 完成後執行 lynx http(s)://your-appid.appspot.com/fetch.py, 看看是不是出現

 GAppProxy/2.0.0
     ___________________________________________________________________________
                                          
                    GAppProxyHTTP Proxy,Python,Google App Engine.
     ___________________________________________________________________________
                                          
                                     ,GAppProxy.
     ___________________________________________________________________________
                                          
                             Powered by Google App Engine
     ___________________________________________________________________________

這樣的畫面,如果是就是成功了,lynx按'q'鍵退出, 轉到localproxy-2.0.0目錄,設定好proxy.conf, 然後chmod +x proxy.py
執行 ./proxy.py 就會連上, 現在可用它來翻~~強了  奸笑

結語
Cygwin還有其他的工具,例如connect-proxy,只是我沒有測試使用,就不列出來了,使用CYGWIN等如在學習使用UNIX/LINUX,且能學習編程,組建服務器,作為對WINDOWS系統管理的工具,雖然LINUX的工具不是100%都移植到
CYGWIN,例如free這命令就沒有了,但它有著相同的結構,/proc/meminfo這個文件還是有的,很容易就能以腳本
寫出一個代替品, 今天到此完結,未來我會嘗試利用Cygwin自動尋找stunnel可用的免費服務器並自動連接,當然不一定成功,
也不知那天會完成?
--------------------------------------------------------------------------------------------------------------------------
    用SecureCRT来连接cygwin

cygwin用第三方软件登录原理:开启cygwin下的sshd服务,用SecureCRT连接其ssh服务。

知道了这一点,我们只要开启cygwin的sshd服务就可以:

1.假设我们已经安装了cygwin,我们只要再次打开安装文件,程序会自动更新源安装程序。

2.安装过程点击下面2个服务分别是:

Admin → cygrunsrv
secret → openssh

3.程序会自动下载,下载完毕自动开始安装。

4.待安装结束,打开桌面上cygwin程序,在命令行输入(之后的选项全部以yes确认):

$ssh-host-config

5.开启sshd服务,命令行下输入:

$net start sshd

服务成功启动那说明能用第三方软件(SecureCRT)登录了:

host:localhost    //本地访问;远程访问同样可以内网用户记得端口映射
user:Administrator  //注意大小写
pass:******  //Administrator系统登录密码

安装好sshd后,会在windows系统服务中增加一条名为CYGWIN sshd的服务,可以通过调整启动类型来控制是否开机启动。

注意:如果原本已经安装windows版OpenSSH建议删除先,该服务会对原本服务冲突(留着也没用了)。