Cygwin:适用于 Windows NT

作者:Daniel Lazenby
Cygwin: For Windows NT
  • 制造商:Cygnus Solutions

  • 电子邮件:info@cygnus.com

  • 网址:http://www.cygnus.com/

  • 价格:99 美元

  • 评论员:Daniel Lazenby

在 1999 年期间,Cygnus 发布了诸如 Cygnus Insight、Source-Navigator 和 Code Fusion 等产品。这些工具专注于提供一个更好集成的、基于 Linux 的开发和调试环境。Cygnus 最近在其 Cygnus 开发工具库中添加了另一个工具,名为 Cygwin。通过 Cygwin,Cygnus 朝着略有不同的方向迈出了一步。Cygwin 是将 GNU 开发工具移植到 Windows NT 的成果。此移植还将 Linux/UNIX 环境带到了 Windows 平台。

您可能会问,我为什么要它?它对我有什么用处?答案是“视情况而定”。您是一位希望将您的 Linux/UNIX 开源项目引入 Windows 平台的开发人员吗?您想开发开源 Windows 应用程序吗?或者您是一位 Linux/UNIX 管理员,同时还负责管理 Windows NT 工作站和服务器吗?Cygwin 可以支持所有这三种情况。

Shell 和强大工具

一旦安装了 Cygwin,管理员在 Windows 和 Linux/UNIX 平台上就拥有相同的 shell 界面。产品中包含许多传统的 Linux/UNIX shell 命令。在两个默认目录 /bin 和 /contrib/bin 中,我数到大约 300 个命令和基本的 Linux/UNIX 工具。(在这种情况下,我将像 wc 这样的命令称为工具。)

除了 NT 的 GUI 管理员界面之外,还有几个控制台 NT 管理命令。这些命令包括一系列“net...”命令,可用于停止、启动、暂停和恢复服务。例如,这些命令可以用于打印机、打印队列和共享项目。还有一些命令可以更改某些用户帐户属性。net send 命令用于全局或向特定用户发送消息。一组与 TCP/IP 相关的命令也可用。

在同一程序中混合使用 Windows 控制台命令(如上述命令)和 Linux/UNIX 命令的能力是 Cygwin 与 Windows 集成的结果。这些命令、工具、Linux/UNIX 程序和 shell 脚本可以共同用于管理 Windows 平台。我确实需要稍微调整转义符和引号,才能使 Windows 命令从 bash 脚本中正确执行。

Cygwin 产品中包含几个开源 Internet 守护程序 (d<\#230>mons)。telnetdftpd 是包含的 inetd 守护程序 (d<\#230>mons) 的示例。还提供了诸如 rlogin 等功能。结合使用这些工具,可以远程管理 Windows 平台。一些 inetd 守护程序 (d<\#230>mons) 复制了 Windows 命令。我一直收到几个命令的语法错误,直到我使用“which”来了解命令的真实位置。Windows 路径的略微更改纠正了我的语法问题。

大多数管理员都有自己喜欢的脚本语言和一组强大工具。Cygwin 脚本语言包括 bash、ksh 和 tcsh。包含诸如 Perl、Tcl/Tk、awk 和 sed 等强大工具。我还找到了 vim 和 xemacs 编辑器。不过,我在 xemacs 中遇到了奇怪的行为。xemacs 文件打开菜单选项导致对话框短暂出现。所有其他 xemacs 菜单选项似乎都正常运行,传统的 Ctrl 键盘命令也是如此。

Cygwin 不会自动构建符合 POSIX 标准的目录结构。因此,您需要的库可能位于不同的位置。我不得不对几个提供的 awk 脚本进行路径编辑。构建 POSIX 目录结构并正确链接到目录应该可以减少路径编辑。

熟悉的 GNU 工具

Cygwin: For Windows NT

图 1. 源代码窗口

Cygwin 包含针对 Intel Pentium 处理器优化的十一个 GNUPro 工具。这些工具包括 GNUPro 编译器、链接器、汇编器和比较工具。Cygnus Insight 可视化调试工具也包含在软件包中。Insight 以前称为 GDBTk。图 1 是 Insight 调试器的“源代码窗口”的屏幕截图。《Linux Journal》1999 年 10 月刊载有对 GDBTk 的评论。

Cygwin 可用于开发基于控制台和 GUI 的应用程序。cygwin.dll 可移植性库使得可以使用 GNU 工具编写和编译 Windows 应用程序。该库还支持将 Linux/UNIX 开源项目移植到 Windows 的能力。UNIX SVR4、BSD 和 POSIX API 的相当大的子集已集成到 Cygwin 中。这些 API 使得可以在 Windows 平台上开发传统的 Linux/UNIX 程序。这些功能和工具结合在一起,在 Windows 平台上提供了标准的 Linux/UNIX GNU 开发环境。

在具有 64MB RAM 的 300MHz Pentium II 上使用 Cygwin 编译控制台模式 C 应用程序产生了及时的响应。一些 Perl 和 awk 脚本也表现良好。

Cygwin: For Windows NT

图 2. 示例窗口

Simwin.c 包含用于简单朴素窗口的代码。从命令行编译效果良好。在 bash shell 提示符下发出 simwin.exe 命令导致示例窗口出现在桌面上,就好像它本来就属于那里一样(见图 2)。编译更强大的 Windows 应用程序需要资源文件和 DLL。Cygwin 包括使用自定义资源和 DLL 文件的功能。文档简要介绍了构建和链接到 DLL 和资源文件。我不是 Windows 开发人员,因此,我无法认真地练习 Cygwin 的某些 Windows 编译功能。

文档说 Cygwin 使用标准的 Windows API。根据文档,使用标准的 Windows API 意味着无论 Windows 升级到下一个版本,Cygwin 都将保持正常运行。

与其他 Cygnus 工具一样,Cygwin 也受 GPL 保护。在分发您的应用程序之前,请务必查看各种许可条款和条件。使用这些工具开发的所有程序或应用程序都必须是开源的。但这并不意味着您永远不能使用这些工具来开发商业应用程序。如果您想从事商业工作,请联系 Cygnus 以获取有关许可的信息。

安装和设置

Cygwin 至少需要配备 32MB RAM 和 100MB 可用磁盘空间的 Pentium 处理器。支持的操作系统是 NT 4.0 以及 Service Pack 3 或更高版本。计划为该产品分配超过 100MB 的空间。Install Shield 建议基本产品和贡献文件需要 300MB。当也选择源代码时,存储需求上升到 1GB+ 范围。在我的系统上,我选择了基本产品和贡献文件。它们似乎使用了大约 140MB 的磁盘空间。

Cygnus 使用非常可靠的 Install Shield 来安装 Cygwin。Install Shield 在我的 Windows 系统上正确安装并注册了 Cygwin。请注意安装说明。Cygwin 不应安装在目录或路径名称中包含空格的任何目录中。安装完成后,需要传统的 Linux/UNIX 转义符、引号或制表符才能访问名称中包含空格的目录。

安装后,需要几个步骤来设置 Cygwin 环境。需要完成的几个任务包括:为现有磁盘驱动器和目录创建挂载点;建立所需的 POSIX Cygwin 目录结构;建立环境变量;建立和验证文件和路径命名约定;以及自定义 shell。

安全

平台安全是需要关注的领域。维护平台和文件系统安全非常重要,并且在包含业务数据的平台上维护安全至关重要。

Cygwin 有两个与安全相关的选项:NT 扩展属性 (ntea) 和 NT 安全 (ntsec)。Ntea 可以与 FAT 和 NTFS 文件系统一起使用。ntsec 选项需要 NTFS 文件系统。启用 ntea 选项允许 NT 文件权限的行为类似于 UNIX 文件权限。此选项最适用于 NTFS 文件系统。它确实适用于 FAT 文件系统。在 FAT 文件系统中使用 ntea 一段时间后,可以预期性能会大幅下降。

NT 可以重现 POSIX 安全模型。启用 ntsec 选项将导致文件所有权和权限以及进程特权以类似于 UNIX 的方式处理。对于进程,这意味着可以启动一个进程,其中组所有者是管理员。任何属于管理员组的成员都可以向该进程发送信号。通常,只有创建进程的 ID 才有权向该进程发送信号。ntsec 的正常运行需要 /etc/passwd 和 /etc/group 文件。使用提供的工具,可以从 NT 安全文件生成这些文件。

我不确定将 Cygwin 添加到 NT 平台会如何影响所需安全态势的维护。一旦完全集成,似乎可以使用 Cygwin 更改已建立的 NT 安全态势。我确实有一个一般性问题:现在是否需要两组安全审查和纠正措施,一组用于 NT,另一组用于 Linux/UNIX (Cygwin)?我认为 Cygnus 文档应包括一些关于哪个 NT/Cygwin 安全属性优先的讨论或澄清。

文档和支持

手册中的几节提供了关于 Cygwin 功能的简洁信息和指导。其余大部分是关于产品的事实集合。这些事实的组织方式看起来好像是在提供指导。一个例子是“设置 Cygwin”主题。本主题列出了八个项目符号,指向不同的页面。每组页面都讨论了设置 Cygwin 的各个方面,因此必须转到手册中的八个不同位置才能阅读有关 Cygwin 环境的信息。整个手册中多次使用了此技术。我发现将信息拼凑在一起的过程很繁琐。我从未感觉到我已经看到了正确配置 Cygwin 所需的所有信息。

在线文档包括 man 页面、Texinfo 和 HTML 页面。某些 man 页面不再积极维护。相反,应该使用 Texinfo 源。Texinfo 是许多传统 man 页面的权威信息来源。Cygwin 完全控制随产品分发的 HTML 文件。Cygnus 建议 HTML 文件是产品发货时更准确的信息来源。因此,应首先查阅 HTML 文档。

基于 Web 的 FAQ 规模不大,但是,浏览此 FAQ 所需的几分钟是值得的。它提供了已实现的 ANSI C 和 POSIX.1 API 调用的详细列表。所有兼容的 API 也列在本地在线和打印文档中。

Cygnus 文档考虑了具有 Windows 经验的个人。为非 Linux/UNIX 入门者提供了对 Linux/UNIX 和 Linux/UNIX 编程的参考。

提供产品安装支持。一旦安装支持结束,可以从 Cygwin 邮件列表 cygwin@sourceware.cygnus.com 获得帮助。另一个信息来源是 sourceware.cygnus.com/cygwin 网站。

优点和缺点

Daniel Lazenby (d.lazenby@worldnet.att.net) 于 1983 年首次接触 UNIX,并于 1994 年发现了 Linux。

加载 Disqus 评论