3.3.3 Cygwin的配置和使用

运行Cygwin后会进入shell环境并见到熟悉的Linux提示符,如图3-14所示。

3.3.3 Cygwin的配置和使用 - 图1

图 3-14 运行Cygwin

可以通过执行cygcheck命令来查看Cygwin中安装的软件包的版本。例如,查看Cygwin软件包本身的版本:


$cygcheck-c cygwin

Cygwin Package Information

Package Version Status

cygwin 1.7.7-1 OK


1.如何访问Windows的盘符

刚刚接触Cygwin的用户遇到的头一个问题就是:Cygwin如何访问Windows的各个磁盘目录,以及在Windows平台下如何访问Cygwin中的目录。

执行mount命令后可以看到Windows下的盘符被映射到/cygdrive特殊目录下。


$mount

C:/cygwin/bin on/usr/bin type ntfs(binary,auto)

C:/cygwin/lib on/usr/lib type ntfs(binary,auto)

C:/cygwin on/type ntfs(binary,auto)

C:on/cygdrive/c type ntfs(binary,posix=0,user,noumount,auto)

D:on/cygdrive/d type ntfs(binary,posix=0,user,noumount,auto)


也就是说,在Cygwin中以路径/cygdrive/c/Windows来访问Windows下的C:\Windows目录。实际上,Cygwin提供cygpath命令来实现Windows平台和Cygwin之间目录名称的变换,如下所示:


$cygpath-u C:\Windows

/cygdrive/c/Windows

$cygpath-w~/

C:\cygwin\home\jiangxin\


从上面的示例也可以看出,Cygwin下的用户主目录(即/home/jiangxin/)相当于Windows下的C:\cygwin\home\jiangxin\目录。

2.用户主目录不一致的问题

如果某些其他软件(如msysGit)为Windows设置了HOME环境变量,会影响到Cygwin中用户主目录的设置,甚至会造成在Cygwin中不同的命令有不同的用户主目录的情况。例如:Cygwin下Git的用户主目录被设置为/cygdrive/c/Documents and Settings/jiangxin,而SSH客户端软件的主目录被设置为/home/jiangxin,这会给用户造成困惑。

之所以出现这种情况,是因为Cygwin确定用户主目录有几个不同的依据,要按照顺序确定主目录:首先查看系统的HOME环境变量,其次查看/etc/passwd中为用户设置的主目录。有的软件遵照这个原则,而有些Cygwin应用如SSH,却没有使用HOME环境变量而是直接使用/etc/passwd中的设置。要想避免在同一个Cygwin环境下有两个不同的用户主目录设置,可以采用下面两种方法。

方法1:修改Cygwin启动的批处理文件(如:C:\cygwin\Cygwin.bat),在批处理的开头添加如下的一行代码,就可以防止其他软件在Windows引入的HOME环境变量被带入到Cygwin中。


set HOME=


方法2:如果希望使用HOME环境变量指向的主目录,则可通过手工编辑/etc/passwd文件,将其中的用户主目录修改成HOME环境变量所指向的目录[1]

3.命令行补齐忽略文件名大小写

Windows的文件系统忽略文件名的大小写,在Cygwin下最好对命令行补齐进行相关设置,以忽略大小写,这样使用起来更方便。

编辑文件~/.inputrc,在其中添加设置"set completion-ignore-case on",或者取消已有的相关设置前面的井(#)号注释符。修改完毕后,再重新进入Cygwin,这样就可以实现命令行补齐对文件名大小写的忽略。

4.忽略文件权限的可执行位

Linux、UNIX、Mac OS X通过文件权限中的可执行位判断文件是否可执行,而Windows是通过文件扩展名进行判断的。Git提供对类UNIX系统文件权限的支持,在版本库中建立对可执行文件的追踪。对于Windows平台,Git的这个特性用处不大,甚至有害。因为,虽然Cygwin可以模拟Linux下的文件授权并对文件的可执行位提供支持,但为支持文件权限而调用Cygwin的stat()函数和lstat()函数会比调用Windows自身的Win32 API要慢一半[2],而且非跨平台的项目也没有必要对文件权限位进行跟踪,甚至Windows下的其他工具及操作可能会破坏文件的可执行位,从而导致Cygwin下的Git认为文件的权限更改需要重新提交。通过下面的配置可以禁止Git对文件权限的跟踪:


$git config—system core.fileMode false


在此模式下,当已添加到版本库中的文件的权限的可执行位改变时,该文件不会显示有改动。版本库中新增的文件,无论文件本身是否设置为可执行,都以100644的权限(忽略可执行位)进行添加。

关于Cygwin的更多内容,请参见网址http://www.cygwin.com/cygwin-ug-net/中的信息。

[1]http://www.cygwin.com/cygwin-ug-net/ntsec.html

[2]git-config(1)用户手册中关于core.ignoreCygwinFSTricks的介绍。