Cygwin使用心得

/* ****************************************************************************
 *     安装指南                                                             *
 **************************************************************************** */

1. 下载组件提取器
   http://www.cygwin.com/setup-x86_64.exe
2. 启动安装程序选择
   Choose Installation Type: "install from internet"
   Select Connection Type: "Direct Connection"
   Choose A Download Site: http://mirrors.163.com
   显示正在下载安装配置文件:setup.ini
3. 到"Select Packages"阶段,在"View"选项选择"Category",
   Package选择主要组件(32和64两版):
   Base(全选),
   Devel(
    GCC: gcc-core, gcc-g++,colorgcc,gcc-tools-epoch1-autoconf|automake,
         gcc-tools-epoch2-autoconf|automake
    G++: gcc-g++
    GDB: gdb
   ),
   bash: Base里的bash
   mingw64: mingw64-x86_64-gcc-core, mingw64-x86_64-gcc-g++
   具体子组件及版本查看:   setup.log
4. 安装(Cygwin 3.1.7-1)时遇到提示 
   "... /etc/postinstall/0p_000_autorebase.dash",
   它执行安装前检查,比较耗时间(十几分钟),耐心等等。
   如果等太久,觉得有问题,参考:
   http://cygwin.1069669.n5.nabble.com/Setup-of-texlive-collection-basic-waits-in-postinstall-0p-texlive-prep-dash-td127961.html
   作者: marco atzeri-4
   I found the solution doing following steps:
   a. I removed /etc/postinstall/0p_texlive_prep.dash so setup of
      unaffected packages (i.e. other than texlive-*) did not stall anymore.    
   b. I unchecked the "Hide obsolete packages" checkbox in Cygwin Setup and
      uninstalled all the packages I had in the "_obsolete" category.    
   c. I also looked over the Full View of packages and removed all the
      packages which had question mark in the column Size.
   cygcheck-dep can help you to identify packages in such state
5. 启动前配置
   开始运行bash之前,应该设置一些环境变量。cygwin提供了一个.bat文件,
   里面已经设置好了最重要的环境变量。通过它来启动bash是最安全的办法。
   这个.bat文件安装在cygwin所在的根目录下。可以在里面设置几个主要变量:
   a. CYGWIN
      用来针对cygwin运行时系统进行多种全局设置。开始时,可以不设置CYGWIN
      或者在执行bash前用类似下面的格式在CMD下把它设为tty

      C:\> set CYGWIN=tty notitle glob

b. 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
      目录。
   c. HOME
      用来指定主目录,推荐在执行bash前定义该变量。当 cygwin进程启动时,该变量
      也被从windows格式转换成unix格式,例如,作者的机器上HOME的值为C:/
      (dos命令set HOME就可以看到他的值,set HOME=XXX可以进行设置),在bash中用
       echo $HOME

    看其值为/cygdrive/c.
   d. TERM
      指定终端型态。如果没对它进行设置,它将自动设为cygwin。
   e. LD_LIBRARY_PATH
      该变量被cygwin函数dlopen()作为搜索.dll文件的路径列表,该变量也被从windows
      格式转换成unix格式。多数Cygwin应用程序不使用dlopen,因而不需要该变量。
6. 改变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
   因为我的安装路径不一样,要把Cygnus/Solutions/去掉。
7. 查看版本
   cygcheck -c cygwin # 查看Cygwin版本
   bash --version     # 查看bash版本
   gcc --version      # 查看gcc版本
   gdb --version      # 查看gdb版本
   g++ --version      # 查看g++ 版本
8. 查看安装日志
   C:\Cygwin64\var\log\setup.log.full
9. 安装后的下载目录,可以当成离线包使用。
10. 安装系统服务
   cygrunsrv
11.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
12.cygwing下使用rsync
   a. 安装rsync组件
   b. 进入cygwin,配置服务器
      $ vi /etc/rsyncd.conf
      添加 ...screts file=/etc/tom.ipaddr.pas
      配置文件,参考我写的另外两篇rsync的文章
      cnblogs博主大CC: "rsync安装指南","RSYNC安装使用详解"
      注意:密码文件权限必须是0400
      $ chmod 0400 /etc/tom.ipaddr.pas
   c. 启动服务端
      $ rsync --daemon
   d. 客户端同步
      在客户端的cygwin下面,运行rsync同步,具体命令,请参考另外一篇rsync的文章。


/* ****************************************************************************
 *     配置环境                                                             *
 **************************************************************************** */

1. .minttyrc文件
   使用Cygwin Terminal,更改其相关属性option,相关信息会生成在.minttyrc文件中。
2. 中文显示,识别中文路径
   a. 修改home目录下的 .inputrc,去除以下几行的注释:
      set meta-flag on
      # 关闭bash命令行8字节字符转义符的转换
      set convert-meta off
      # 使bash命令行支持8字节字符输入输出
      set input-meta on
      set output-meta on
      # 忽略大小写
      set completion-ignore-case on
   b. 修改home目录下的 .bashrc,
      # 对于一些较老的系统繁体字不在"zh_CN.GB2312"字体内。
      # 让ls和dir命令显示中文和颜色
      alias ls='ls -hF --show-control-chars --color=tty'
      # alias ls='ls --show-control-chars --color'
      alias dir='dir -N --color'
      # 设置为中文环境,使提示成为中文
      export LC_ALL="zh_CN.GBK"
      export LC_CTYPE="zh_CN.GBK"
      export LANG="zh_CN.GBK"
      # 输出为中文编码
      export OUTPUT_CHARSET="GBK"
      export XMODIFIERS="@im=Chinput"
      stty cs8 -istrip
      stty pass8
      export LESSCHARSET=latin1
   c. cygwin.bat 里添加 set MAKE_MODE=UNIX #这一步似乎没必要

      $ locale   #查看当前字体
      $ local -a #查看所有字体
3. 控制台临时修改中文
   右键--option--text--手动修改--Locale(zh-GN),Character set(GBK Chinese)
   查看本地编码:
   $ locale
4. Cygwin/X的Xwin中文支持
   (1)locale支持
      Cygwin的locale支持一直都有问题,好在X程序还可以使用XLOCALE
      建议还是使用zh_CN.gbk, 不要使用zh_CN.GB2312。
   (2)移植程序
      移植程序时需要注意不要让程序连接libcygwin.a里面的setlocale,而是采用
      libX11.a里面的_Xsetlocale。方法是:检查被移植程序的全部源代码,发现
      #include 就修改为
      #define X_LOCALE
      #include
      同时注意程序的连接库要添加 -lX11 。如果对于结果没有把握,可以找个
      Dependency Walker查看程序是否连接到了 cygwin1.dll 里面的 setlocale,
      如果是,就说明有遗漏。
   (3)X程序中文字体
      a.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的配置不同,这里路径是不递归的,
        如果有的字体放在子目录里面,子目录也需要添加进去才行)。
      b.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
        就能够发现这些字体了。
   (4)中文输入法
      老黄(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都可以正常使用。
5. 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 '^?'
6. cygwin 缺少头文件或模块可以在
   https://cygwin.com/cgi-bin2/package-grep.cgi
   上搜索如 crypt.h
7. visual studio调用cygwin时,把下面内容, 
    添加添加到VS里的“属性页”-"VC++目录"
    C
    C:\Cygwin\usr\lib\gcc\i686-pc-cygwin\3.4.4\include
    C:\Cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
    C:\Cygwin\usr\include
    C:\Cygwin\usr\include\w32api
    C:\Cygwin\include\w32api
    C++
    C:\Cygwin\usr\lib\gcc\i686-pc-cygwin\3.4.4\include\c++
    C:\Cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++
    C:\Cygwin\usr\lib\gcc\i686-pc-cygwin\3.4.4\include\c++\i686-pc-cygwin
    C:\Cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++\i686-pc-cygwin
    C:\Cygwin\usr\lib\gcc\i686-pc-cygwin\3.4.4\include\c++\backward
    C:\Cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++\backward


/* ****************************************************************************
 *     使用心得                                                               *
 **************************************************************************** */

1. 映射路径名
   cygwin同时支持win32和posix风格的路径,路径分隔符可以是正斜杠也可以是反斜杠。
   还支持UNC路径名。(在网络中,UNC是一种确定文件位置的方法, 使用这种方法用户
   可以不关心存储设备的物理位置,方便了用户使用。
   在Windows操作系统,Novell Netware和其它操作系统中,都已经使用了这种规范以取代
   本地命名系统。
   在UNC中,我们不用关心文件在什么盘(或卷)上,不用关心这个盘(或卷)所在服务器
   在什么地方。我们只要以下面格式就可以访问文件:
   //服务器名/共享名/路径/文件名
   共享名有时也被称为文件所在卷或存储设备的逻辑标识,但使用它的目的是让用户不必
   关心这些卷或存储设备所在的物理位置。
   符合posix标准的操作系统(如linux)没有盘符的概念。所有的绝对路径都以一个斜杠
   开始,而不是盘符(如c:)。所有的文件系统都是其中的子目录。例如,两个硬盘,
   其中之一为根,另一个可能是在/disk2路径下。
   因为许多unix系统上的程序假定存在单一的posix文件系统结构,所以cygwin专门维护
   了一个针对win32文件系统的内部posix视图,使这些程序可以在windows下正确运行。
   在某些必要的情况下,cygwin会使用这种映射来进行win32和posix路径之间的转换。
2. 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",这个属性决定了文本文件和二进制文件是否按同样
   的方式处理。
3. 配置cygwin命令工具路径
   修改安装目录下的cygwin.bat,添加
   $ set HOMEPATH=/home/your_name #或其它工作目录
   $ path C:/cygwin/bin;C:/cygwin/sbin;C:/cygwin/usr/bin;C:/cygwin/usr/x86_64-pc-cygwin/bin;%PATH%;
   这一步也可以在windows环境变量path里添加。
   Cygwin环境变量在前,优先执行与windows同名的命令,如Cygwin的find命令。
4. 查看home目录:
   $ printenv HOME
   $ cd ~
   $ pwd
   可以看到,路径,都是相对于$CYGWIN的,需要访问C盘的,请用/cygdrive/c/
5. 在Bash Shell中添加临时变量:
   (':'为分割符)
   $ export PATH=.:/home/your_name/bin:/bin:/usr/local/bin
   在TCSH Shell中添加临时变量:
   $ setenv PATH=.:/home/your_name/bin:/bin:/usr/local/bin
   追加路径变量到上一个PATH:
   $ export PATH=.:/home/your_name/bin:`printenv PATH`
6. 同步Windows系统用户账号
   $ mkpasswd -l > /etc/passwd
   $ mkgroup -l > /etc/group
   如果有Domain的话,需要加上-d domainname


/* ****************************************************************************
 *     参考资料                                                               *
 **************************************************************************** */

1. cygwin使用心得
    https://www.cnblogs.com/me115/archive/2011/05/28/2060727.html
2. rsync安装指南
    https://www.cnblogs.com/me115/archive/2011/02/28/1967213.html
3. RSYNC安装使用详解
    https://www.cnblogs.com/me115/archive/2011/02/28/1967024.html
4. http://edu.qddown.com/


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值