Linux 学徒:用于 Web 的 Linux 工具
我在密歇根州经营一家小型咨询公司,我为客户提供的服务之一是网站创建。我一直使用我的 Windows 机器来完成这项工作,但对所使用的工具并不满意。它们缺乏灵活性,并且我偶尔会遇到死机和其他问题。由于我将 Linux 用于所有日常任务(浏览、电子邮件等),因此我搜索了 Linux 工具来进行我的网页设计工作。
我想要用于编辑 HTML、轻松更新客户网站和跟踪修订的工具。我尝试选择具有 GPL 或 BSD 许可或同等许可的程序。此外,我想要具有灵活性的工具,宁愿使用几个工具,也不愿使用一个试图做所有事情的巨型工具。最后,我希望这些工具能够在我的 SuSE 6.1 系统上编译和运行,而无需我运行 GNOME 或 KDE。
我找到了一些工具,并且在一个月的时间里一直在几个客户网站上使用它们:一些是我从 Windows 环境导入的,一些是我在 Linux 下创建的。事实证明,Linux 下可用的工具非常强大且易于使用;我很快就能够高效地使用它们。目前,我在 Linux 下唯一不能做的事情是使用我的扫描仪,但我预计这种情况很快就会改变。[您只需要一个支持 Linux 的扫描仪和程序 xvscan。—编辑]
我更喜欢使用非 WYSIWYG(所见即所得)编辑器来完成大部分 HTML 工作,所以我一直在使用 Bluefish 和 August。虽然这两个编辑器都尚未达到 1.0 版本(Bluefish 为 0.3.5,August 为 0.52 beta),但我发现它们运行可靠且工作良好。
这两个编辑器都允许您同时处理多个文件。它们都提供按钮来插入基本的 HTML 标签,例如标题、列表和文本属性。Bluefish 使用选项卡式菜单,允许通过按钮进行更多标签选择(参见图 1),而 August 具有单个按钮菜单,并使用下拉菜单来选择其他功能(参见图 2)。这使得界面更简洁,基本 HTML 标签的选择也更快。这两个编辑器都允许您使用 Netscape 预览网页,August 还允许您使用 Lynx 预览您的页面。
Bluefish 允许您将页面分组到项目文件中。下次您想编辑它们时,您只需从“项目”菜单中打开项目即可。Bluefish 还提供基本向导,用于创建新页面和表格等。
August 不提供项目菜单,但是您可以在启动它时使用命令行开关打开目录中的所有 HTML 页面。August 还允许您创建模板和您自己的标签组合,可通过用户菜单访问。我发现用户定义的标签功能有一些问题。
Bluefish 需要 GTK 库才能编译。您还需要 imlib 库才能使“插入图片”功能正常工作。August 是一个 Tcl/Tk 程序,因此不需要编译。
尽管是 1.0 之前的版本,但这两个编辑器对我来说都运行良好。到目前为止,我更喜欢 Bluefish,但没有任何具体原因。
手动保持远程网站更新可能是一件苦差事。幸运的是,有一些工具可以帮助自动化此过程。我一直在比较的两个工具是 weex 和 sitecopy。weex 目前的版本为 2.3.0,sitecopy 的版本为 0.9.5。
要使用它们,首先创建一个 .rc 文件,其中包含站点信息,例如远程服务器 (ftp.这里.com)、您的用户名、密码、源(本地)目录和要更新的远程目录。当程序运行时,它们会将本地目录的内容与远程目录的内容进行比较,然后尝试使远程目录与本地目录匹配。
weex 对可以更新或删除的文件和目录提供了非常精确的控制。例如,您可以告诉它忽略本地文件系统上的特定目录和远程文件系统上的其他目录。您可以向其提供要忽略的文件名列表或使用通配符。当文件被忽略时,它不会被复制或删除。
虽然 sitecopy 的文件控制不如 weex 精确,但它提供了一些 weex 没有的功能。例如,sitecopy 可以通过检查文件的时间戳或计算其 MD5 校验和来确定文件是否需要更新。如果文件的时间戳发生更改,这将非常方便,因为您已将其从修订控制系统中检出。
如果有人在您上传文件后更改了远程站点上的文件,sitecopy 还可以通知您。当此“安全模式”处于活动状态时,sitecopy 会存储您上传文件时服务器的修改时间。下次 sitecopy 运行时,它会将存储的时间与服务器上的当前修改时间进行比较。如果时间不匹配,sitecopy 将显示警告消息,并且不会覆盖远程副本,从而允许您查看已进行了哪些更改。我还没有尝试过此功能。
weex 的控制台输出比 sitecopy 的控制台输出更丰富多彩,并且提供了更多细节(参见图 3 和图 4)。weex 命令界面也更简单:您只需发出 weex 命令,后跟您希望更新的站点的名称即可。要运行 sitecopy,您需要发出 sitecopy 命令,后跟您希望执行的操作(update、fetch、synchronize),后跟您希望使用的站点。如果您不包含操作命令,sitecopy 将显示本地目录和远程目录之间不同的文件。
我发现使用这些工具的最佳方法是在运行它们之前在远程计算机上创建目录结构。最好在运行这些程序中的任何一个之前对远程目录进行完整备份,这样您就不会意外擦除重要的管理或 cgi-bin 文件。
sitecopy 提供了一个 nodelete 选项,可以防止它删除远程文件系统上的文件,而 weex 提供了一个 test 选项,可以实现类似的功能。我建议您在前几次运行程序时使用这些选项。
虽然我更喜欢 weex 更简单的命令行和更丰富多彩的控制台输出,但它并不总是跟踪它上传到远程站点子目录的文件。因此,它会一次又一次地上传某些文件,即使这些文件没有更改。当远程系统运行 Windows NT 时,它似乎也有问题,但经过一些调整后,我已经让它工作了。
如果 sitecopy 尝试创建远程计算机上已存在的目录,则会遇到问题。如果远程目录存在,sitecopy 将退出并显示错误消息。在 update 模式之前运行 sitecopy 的 fetch 模式可以解决此问题。
对于手动复制文件或创建初始远程目录结构,我使用 WXftp。此程序为 ftp 命令提供了一个图形前端(参见图 5)。它还存储站点的用户信息,因此您不必手动输入地址、用户名和密码(参见图 6)。您还可以将其配置为为您维护的每个站点切换到特定的本地和远程目录。除了复制文件外,您还可以创建和删除目录、删除文件并在远程系统上执行命令。我一直在使用 0.4.4 版本,并且没有遇到任何问题。
创建和维护 HTML 代码可能是一项困难且枯燥的任务。在多个站点的多个页面上手动更新菜单和电子邮件地址等内容可能会导致错误。我发现一个名为 GTML 的程序可以帮助减轻这项任务。GTML 是 HTML 文件的预处理器。要使用它,请使用包含 GTML 命令以及 HTML 的 .gtml 扩展名创建您的页面。完成后,您可以通过 GTML 程序运行 .gtml 文件,它会为您创建一个带有 .html 扩展名的文件。
GTML 允许您执行简单的操作,例如在 HTML 文件中包含文本文件,以及复杂的操作,例如条件处理。它甚至支持嵌入式 Perl 代码或系统命令。
我经常使用 GTML 的 #include 指令来避免在我的页面上重复键入联系人或标题块。此外,如果我必须更改站点的联系人电子邮件地址之类的东西,我只需要在一个文本文件中进行更改,然后在站点的 .gtml 页面上重新运行 GTML,而不是在每个 .html 文件中进行更改。
我使用了 GTML 条件运算符(if、elseif、else)来自动构建侧边栏菜单。每个页面都使用 #define 命令唯一标识(例如,#define THIS_PAGE=home)。然后,我创建一个文本文件,其中包含菜单的 GTML 和 HTML 代码。此代码检查页面标识符,然后确定哪些按钮处于活动状态以及哪个按钮对应于当前页面。活动按钮生成为其他页面的链接,而当前页面的按钮要么不执行任何操作,要么突出显示。然后,我将此文件包含在所有站点的页面中,并通过 GTML 程序运行它们。现在,为站点添加或删除菜单按钮只需更改一个文本文件并重新运行 GTML 即可。
您还可以在命令行中为 GTML 定义值。例如,您可以使用以下命令调用 GTML
gtml-DMY_EMAIL=me@
并且所有出现的 MY_EMAIL 都将被替换为 me@somewhere.com 在生成的 .html 文件中。这使得使用单个模板为不同站点生成联系人或版权信息等内容变得容易。
根据其文档,GTML 可以自动生成相关页面之间的“下一个”、“上一个”、“向上”和“向下”链接,以及目录。我还没有使用过此功能。
我一直在使用 GTML 3.5.3 版本,并且没有遇到任何问题。它的命令语法简单明了。需要注意的一件事是,GTML 命令必须与文件中的左边距齐平;否则,预处理器将不会执行它们,它们将显示在您的 HTML 文件中。
完成网页创建后,我会通过 weblint 程序运行它们,该程序检查 HTML 文档的语法,并以与 lint 处理 C 程序非常相似的方式标记错误。weblint 可以使用 Lynx 检查本地文件或存储在 Web 上的文件。默认情况下,weblint 根据 HTML 3.2 标准检查 HTML 代码。该程序还具有标志,可以告诉它根据 Microsoft 和 Netscape 特定的扩展检查 HTML。
我一直在使用 weblint 1.020 版本,没有任何问题。从我在 weblint 网站上看到的情况来看,weblint 的开发似乎已在此刻停止。
对于图形工作,我选择了 GIMP。由于我不是图形艺术家,因此我经常使用 Script-Fu 扩展来创建所需的图形,然后根据需要进行调整。Script-Fu 扩展使创建页面标题和侧边栏菜单变得轻而易举。
我希望 GIMP 提供的一项功能是能够在保存文件之前查看不同因素(调色板大小、隔行扫描和 JPEG 质量)如何影响生成的文件大小。也许有一种在 GIMP 中执行类似操作的方法;如果是这样,我还没有找到它。
我一直在使用 GIMP 的 1.0.4 版本,并且完全满意。
还有一些我使用的其他工具我没有提到。对于修订控制,我使用 CVS。我最终对使用它感到有些舒服,尽管我发现它一开始有点难以理解。虽然随附的手册很好地解释了 CVS 命令,但我认为它可以使用更多示例。我一直在使用 CVS 1.10 版本。
为了处理与 GTML 结合使用的文本文件或进行简单的 HTML 编辑,我使用 vim 编辑器。最近的版本提供了漂亮的语法突出显示,并且可以轻松进行快速编辑。我目前正在使用 vim/gvim 5.6 版本。
我偶尔使用的另一个程序称为 linefeed,这是一个小的 GTK 实用程序,用于将 DOS/Windows 文本文件转换为 Linux/UNIX 文本文件。我一直在使用的版本是 0.1.0。
一个月前,我开始寻找可以让我创建和管理网站的 Linux 工具。我的目标是找到我可以编译和使用的开源工具,而不会遇到太多困难。我发现和使用的工具很好地满足了我的需求。即使其中几个工具尚未达到 1.0 版本,我发现 Linux 工具比我一直在 Windows 世界中使用的工具更好用。我也能够尝试比我在 Windows 世界中能够尝试的更多的 Linux 工具。
Ralph Krause (rkrause@netperson.net) 去年夏天从公司薪水跳槽到独立计算机顾问。他将时间分配在他的事业、他的女朋友 Ann Marie 以及他的两只狗 Purdy 和 Dakota 之间。