• 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/


     

  • 相关阅读:
    【C++数据结构】渐近记法
    基于vue框架的二手书交易网站
    C++之log4cpp库
    【PowerQuery】Excel 一分钟以内刷新PowerQuery数据
    C#NPOI操作Excel,实现Excel数据导入导出(支持多个sheet)
    docker-compose教程(安装,使用, 快速入门)
    基于Springboot开发的家庭财务管理系统
    【Hello Algorithm】暴力递归到动态规划(三)
    Abnova ABCB10(人)重组蛋白说明书
    Python 教程之控制流(7)Python中的链接比较运算符
  • 原文地址:https://blog.csdn.net/tiandyoin/article/details/126519194