[在windows上使用Unix工具]cygwin
一 cygwin
Cygwin 是一个用于 Microsoft® Windows® 操作系统的类 UNIX® 环境。它包含一个真正的 UNIX shell、一个 Portable Operating System Interface (POSIX) 模拟库以及数千个 UNIX 实用程序。
作用:
1)作为Linux/Unix的初学者,可以使用cygwin来在windows上模拟使用Linux/Unix;
2)可以基于cygwin来从windows访问Linux/Unix;
3)可以在Windows上模拟Linux的开发环境,比如使用GUN的编译和调试工具来做程序开发;
4)可以基于cygwin中间层实现Linux/Unix应用程序到windows的无代码修改的移植;(cygwin dll实现了对windows底层API的Linux/Unix风格的封装)
5)注意,cygwin中运行的Linux/Unix工具其实是这些工具的对应的windows的exe版本,cygwin不能直接运行Linux/Unix的应用程序;
主页:http://cygwin.com/
二 cygwin的安装
Cygwin 是一个用于 Windows 的类 UNIX shell 环境。 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供的许多特性;以及 Bash shell 的改写版本和许多 UNIX 实用程序,它们提供大家熟悉的 UNIX 命令行界面。前一个组件是一个 Windows 动态链接库 (DLL)。后一个组件是一组基于 Cygwin DLL 的程序,其中许多是用未经修改的 UNIX 源代码编译的。它们合在一起提供大家熟悉的 UNIX 环境。
Cygwin使用安装向导程序setup.exe来实现cygwin的在线安装。 同时setup.exe文件可以重新安装软件,可以添加、修改或升级 Cygwin 配置的组件。
在 Windows 系统上打开浏览器,通过访问 http://cygwin.com/setup.exe 下载 Cygwin 安装程序。安装程序本身非常小(大约 600KB),因为大多数 Cygwin 软件是在安装过程中下载的。完成下载之后,按照以下步骤安装 Cygwin:
1 运行安装程序。2 单击 Next 进入下一个屏幕,选择要执行的安装类型。单击 Install from Internet。
3 单击 Next,然后选择一个安装目录。
在大多数情况下,推荐的安装选项是合适的,也可以进行定制,但是要注意几点:
1)不要在 Windows 系统的根目录(比如 C:)中安装 Cygwin。最好把 Cygwin 安装在它自己的子目录中,比如默认目录(C:\cygwin)或 C:\Program Files\cygwin。(您选择的目标目录将成为模拟的 UNIX 环境的根目录
/
。例如,如果在 C:\cygwin 中安装,那么虚拟的 /usr/bin 实际上是 C:\cygwin\usr\bin) 。2)对于 Install For 选项,不要选择 Just Me。
3)把 Default Text File 类型设置为 Unix,从而尽可能提高与其他 UNIX 机器上存储的现有文件的兼容性
4 单击 Next。在下一个窗口中,选择一个存储 Cygwin 所需的数据的目录。不要选择前一步中选择的 Cygwin 目录。 如果可能的话,应该在有至少 1GB 空闲空间的驱动器上创建或选择一个目录。
5 再次单击 Next,选择使用的 Internet 连接类型。通常应该选择 Direct Connection。
6 再次单击 Next。稍等一会儿,Cygwin 会下载当前的镜像站点列表,让您选择一个镜像站点,
如果不确定应该选择哪个站点,就选择地理位置比较近的站点。
7 再次next, 经过短暂的延迟之后,安装程序显示可用的类别和包的完整列表。
显示一个类别的部分内容。单击加号 (
+
) 展开对应的类别;单击 “循环” 标志在 Skip(忽略此包)和包的所有可用版本之间循环。如果 Cygwin 提供一个实用程序的多个版本,应该选择满足您的需求的实例。顺便说一下,如果选择 B 列,就会下载二进制包;选择 S,也会下载源代码。 在 Cygwin 中可用的包超过 1,000 个,所以应该只选择您需要的类别和包。(安装所有 Cygwin 包会占用超过 800MB 的磁盘空间)。以后随时可以添加整个类别或单独的包:只需重新运行 Cygwin 安装程序。(还可以在任何时候用相同的安装程序删除或更新包)。
8 选择您需要的工具之后,单击 Next,下载过程开始!进度条分别反映每个包的下载进度、总下载进度和磁盘使用量。
9 最后,安装程序安装软件并(可选地)在 Start 菜单和桌面中添加快捷方式。单击 Finish。
10 通过使用 Start 菜单或双击 Cygwin 图标(如果添加了这些快捷方式的话),启动 Cygwin;也可以执行 Cygwin 目录中的 Cygwin 脚本(比如 C:\cygwin\Cygwin.bat)。
显示第一次启动 Cygwin 时的情况:它创建您的主目录,执行 shell 启动文件,显示提示。现在可以运行 UNIX 命令了!
三 cygwin使用你可以使用几乎所有的linux/unix命令来操作你本地的windows系统。哈哈!
例如使用
df -h
来查看你的磁盘的使用情况:Cygwin 安装目录作为虚拟 UNIX 系统的根目录。Cygwin 把安装目录中的子目录映射到 UNIX 目录。它以单独的卷的形式提供 Windows 驱动器,比如 /cygwin/c。可以使用这样的虚拟路径启动 Windows 程序。请尝试输入
/cygdrive/c/Program\ Files/Internet\ Explorer/IEXPLORE.EXE
从命令行启动 Windows Internet Explorer®。(还可以使用 Tab 键自动展开路径的元素) 。顺便说一句,如果要把 Windows 路径名转换为等效的 UNIX 路径名或者相反,可以试试内置命令 cygpath
。在默认情况下,cygpath
产生 UNIX 路径名。使用 -w
选项产生 Windows 路径。
$ cygpath -w /cygwin/c/Program\ Files/Internet\ Explorer/IEXPLORE.EXE
c:\Program Files\Internet Explorer\IEXPLORE.EXE
还有帮助沟通这两个环境的其他特性:
- Cygwin 提供它自己的
lpr
(/usr/bin/lpr 而不是 Windows 的 LPR.EXE),可以直接从模拟的 UNIX 环境进行打印。只需把 PRINTER 环境变量设置为 \\server\printer_name 或 //server/printer_name 这样的 Cygwin UNC;前向斜杠和反向斜杠都可以,在 Cygwin 中的其他地方也是如此。 - 在 Cygwin 中用
ln -s
创建的符号链接在 Windows 中被解释为快捷方式。同样,Windows 快捷方式在 Cygwin 中被解释为符号链接。因此,可以使用 Windows 快捷方式带参数启动 UNIX 命令。 - 因为 Cygwin 提供完整的 Bash shell,所以可以使用上述的所有兼容特性(和其他特性)编写 UNIX shell 脚本来维护 Windows!
例如,可以使用 UNIX
find
在驱动器上搜索数据。请注意一点:在 Windows 文件名中常常使用空格。为了保持完整的文件名(请记住,UNIX 参数以空格分隔),一定要使用find -print0
和xargs -0
。
正如前面提到的,在任何时候都可以通过运行 Cygwin 安装程序添加、删除和更新 Cygwin 类别和包。我们来添加几个软件开发包,以便像在传统的 UNIX 系统上那样从源代码构建程序。
再次运行 Cygwin setup.exe 应用程序,依次通过前几个对话框,直到到达 Select Packages 窗口。展开 Devel 类别,使用循环控件选择以下包的最高版本:
autoconf2.1
automake1.10
binutils
gcc-core
gcc4-core
gdb
pcre
pcre-devel
做出选择之后(为了满足依赖性,可能会自动选择其他包),单击 Next 开始更新。与前面一样,下载和安装过程需要一定的时间(开发包往往相当大)。
在此期间,打开一个浏览器并通过访问 http://ftp.gnu.org/gnu/wget/wget-1.11.4.tar.gz 下载 GNU wget
实用程序的最新源代码。(wget
是一种命令行工具,它可以下载任何东西。使用 Cygwin 把此文件复制到 Cygwin 中的主目录,展开压缩文件。
$ cp /cygdrive/c/Documents\ and\ Settings/Martin/My\ Documents/wget-1.11.4.tar ~
$ tar xzvf wget-11.4.tar
wget-1.11.4/
wget-1.11.4/AUTHORS
wget-1.11.4/NEWS
wget-1.11.4/COPYING
wget-1.11.4/configure.bat
wget-1.11.4/ChangeLog
wget-1.11.4/ChangeLog.README
wget-1.11.4/msdos/
wget-1.11.4/msdos/ChangeLog
wget-1.11.4/msdos/Makefile.DJ
...
wget-1.11.4/src/cookies.c
wget-1.11.4/src/http.h
wget-1.11.4/src/log.h
wget-1.11.4/src/sysdep.h
wget-1.11.4/src/alloca.c
wget-1.11.4/src/getopt.c
wget-1.11.4/src/gnu-md5.h
wget-1.11.4/src/ftp.c
wget-1.11.4/config.sub
wget-1.11.4/config.guess
$
当 Cygwin 下载和安装过程完成时,单击 Finish。现在可以从源代码构建 wget
实用程序了。
$ cd wget-1.11.4
$ ./configure
configure: Configuring for GNU wget 1.11.4
...
creating po/Makefile
$ make
gcc -I. ...
$ make install
...
/usr/bin/install -c -m 644 ./wget.1 /usr/local/share/man/man1/wget.1
$ type wget
/usr/local/bin/wget
为了测试这个新的实用程序,在 Cygwin 中运行它并下载 wget
源代码:
$ /usr/local/bin/wget http://ftp.gnu.org/gnu/wget/wget-1.11.4.tar.gz
稍后就会得到一个新的源代码压缩文件。使用 Cygwin 安装程序从 Cygwin 存储库获得实用程序是最简单的方法,但是也可以在 Cygwin 中构建下载的或自己的源代码。在 Cygwin 中可以使用全套 UNIX 开发工具,包括最流行的脚本编程语言。
五 cygwin中实现linux程序到windows的移植和跨平台软件的开发
例如,我们可以在cygwin中使用vim来编写一个简单的hello.c的c文件:
int main(void)
{
printf( "Hello World!");
}
然后我们输入编译指令:
# gcc hello.c -o hello
然后执行:
# ./hello
此时的hello运行正常且是一个windows的exe程序。你可以拷贝hello.exe和cygwin.dll到一个单独的目录,在windows去执行。
但是当我们将以上的源文件hello.c拷贝的正真的Linux/Unix系统,然后重复上面的编译的执行指令,程序任然正常的运行,但是此时的程序已经是Linux/Unix的可执行格式。
六 参考:http://www.ibm.com/developerworks/cn/aix/library/au-spunix_cygwin/index.html#resources
完!