[目录] 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