UNIX 技巧: 借助 UNIX 成为更优秀的博客

利用 UNIX 的优点来促进博客创作

您是否知道博客创作与 UNIX(R) 携手前行?UNIX 内置的 Web 和文本处理工具使您能够方便快捷地创建博客。探索一些用于改进 UNIX 博客创作技能的便利技巧。

Michael Stutz (stutz@dsl.org), 作家, 顾问

Michael Stutz 是 The Linux Cookbook 一书的作者,他仅使用开放源码软件对该书进行了设计和排版。他的研究兴趣包括数字出版和图书的发展未来。他使用各种 UNIX 操作系统已有 20 多年。您可以通过 stutz@dsl.org 与他联系。



2006 年 11 月 23 日

UNIX® 和网络博客或博客 具有许多共同之处。除了作为大多数 Web 服务器的本机环境和许多 Web 开发人员的首选环境之外,由于其强大的 Web 和文本处理能力,UNIX 还是用于创建博客的理想环境。利用 UNIX 所固有的命令行工具和特性来使您成为更优秀的博客所有者。下面是一些帮助您实现该目的的技巧。

不断提供新鲜内容

博客创作的最重要规则是做得尽可能多。总体思想在于,您的博客应该更类似滚动的自动收报机纸条,甚至更类似电视画面的运动,而不是类似从考古井中拔出的一些蚀刻片断。它应该始终不断增长,并且读者在访问时应该获得新鲜感。就网站这种媒体而言,有多少访问者在积极地阅读它们,差不多就有多少访问者在观看 它们——访问链接、重新加载和返回。要在这样的网站上取得成功,您就必须适应这一点。

虽然您不需要为此而安装任何特殊软件,但改进网络博客的最快速和最重要的方法是:您必须不断添加新内容!既使您今天才开通博客,只要您坚持每天对它更新多次,而不是一放就是一年,只有心血来潮时才更新它,那么到周末就会有更多的人阅读它了。

这个技巧与本文后面的所有其他技巧相关,因为它们将向您表明 UNIX 系统如何有助于比以往更快更好地提供新鲜的博客内容。您必须知道您的哪些内容最受欢迎、知道谁正在阅读它以及他们来自何处、使您的文本更快更好地加载,并自动化您的博客更新。下面您将简单介绍一些基于 UNIX 的内容管理解决方案,它们可能比您以前一直用来制作博客的解决方案更好。

查看日志

日志就是您的活力之源。它们将告诉您谁正在查看您的博客以及有关位置、次数和频度的信息。如果您积极地发布网络博客,则应该至少每天检查一次 日志。日志使您能够看到谁正在阅读您的发布、确切了解他们正在阅读的内容以及他们阅读的时间。所以,为什么要忽略它呢?

您可以使用命令行工具来从日志提取有意义的数据,但是存在一些特殊的 UNIX 工具可以自动分析最流行格式的日志,包括 Apache Web 服务器所写入的日志。此类工具之一就是流行的开放源代码 analog 命令。

对受欢迎的内容作出反应

使用 analog 命令来检查您的链接并查看人们所访问的内容。首先,获得一个显示统计信息的常规报告——正在发出多少个唯一请求、是否存在任何失败的请求、正在为多少个不同的主机服务,等等:

$ analog -A www.20060901 | lynx -stdin

此命令产生类似于清单 1 所示的代码。

清单 1. analog 工具的示例输出
                  Web Server Statistics for BigBlog
                                                                    
  Program started at Mon-25-Sep-2006 14:46.                        
  Analyzed requests from Fri-01-Sep-2006 00:01 to Fri-01-Sep-2006 23:59 (1.00 days).
____________________________________________________________________________

General Summary

  (Go To: Top: General Summary)

  This report contains overall statistics.
                                           
  Successful requests: 3,400              
  Average successful requests per day: 3,403
  Successful requests for pages: 2,015
  Average successful requests for pages per day: 2,016
  Failed requests: 3
  Redirected requests: 963
  Distinct files requested: 101
  Distinct hosts served: 950
  Data transferred: 65.338 megabytes
  Average data transferred per day: 65.429 megabytes
____________________________________________________________________________

   This analysis was produced by analog 6.0.
   Running time: Less than 1 second.         
                                     
   (Go To: Top: General Summary)

要特别注意 Search Word Report(其中显示了最流行的查询关键词和它们被查询的次数)和 Directory Report(其中显示您站点上最受欢迎的目录)。(查看读者当前对哪些存档的博客条目感兴趣始终是个好主意。)最后,Request Report 显示了站点上被请求次数最多的文件。您的博客徽标和任何经常在整个站点中出现的图形固定在顶部附近,但是通过查看实际内容文件(如 .html 文件),您可以清楚了解哪些页面或存档的博客条目最受读者的欢迎。

可能会出现每天或周期性的高峰,您应该对此作出反应。然而,长远考虑长期趋势始终是明智的。如果要在存档目录中保留每天的日志,这是很容易做到的。只需拼接它们,然后将它们全都发送到 analog 以进行一次性处理。这可以每周、每月甚至每年进行一次以跟踪趋势。使用 zcat(在有些系统上名为 gzcat)来同时解压缩和拼接任何压缩的日志。例如,为了获得有关 2006 年 9 月的所有日志的完整报告,可以使用以下命令:

$ zcat www.200609* | analog - | lynx -stdin

知道您的读者是谁

知道您的读者来自何处可能很有帮助——所在的域、IP 地址和国家。若要查找网络博客中的所有主机,您可以使用几个命令行工具来获得有关每个主机名称的简要报告。如果使用 Apache 风格的日志记录,则请求 IP 地址是每行的第一个字段:

$ for i in `cut -d " " -f1 www.200609* | sort -u`; { host $i; }

如果您的日志是压缩的,则首先使用 zcat 来通过管道输出解压缩的文本。或者,如果每天的日志在一个 access.log 文件中可用,您可以使用同样的原理来查看 badblog.example.com 中的同事是否已访问过您的站点:

$ for i in `cut -d " " -f1 access.log | sort -u | head`; \
> { host $i; } | fgrep badblog.example.com

您可以基于 web/logs/ 目录中所具有的压缩日志来输出访问过您的 /blog 目录的唯一域总数:

$ zcat web/logs/* | fgrep "/blog" | cut -d " " -f1 | sort -u | wc -l

知道他们来自何处

如果某个站点在向您的博客发送大量读者,您需要对其进行确认。这意味着您应该密切注意 referrer——包含指向您的页面链接并出现在标头中的 URL。该数据保存在您的日志中,您可以使用 analog 来提取它。analog 工具列出 Referrer Report 中的所有 referrer,如清单 2 所示。可以使用 +f 标志来启用该报告。

清单 2. 来自 Referrer Report 页面的示例
                             Web Server Statistics for BigBlog
Referrer Report

   (Go To: Top: General Summary: Monthly Report: Daily Summary: Hourly Summary: Domain
   Report: Organization Report: Referrer Report: Search Word Report: Operating System 
   Report: Status Code Report: File Size Report: File Type Report: Directory Report: 
   Request Report)
   
   This report lists the referrers (where people followed links from, or pages which
   included this site's images).                                                    
   
   Listing referring URLs with at least 20 requests, sorted by the number of requests.
reqs: URL
----: ---
 814: http://www.ibm.com/developerworks/
 359: http://www.google.com/search
 114: http://badblog.example.com/
 102: http://badblog.example.com/2006/09/01/
  81: http://www.google.co.uk/search             
 530: [not listed: 485 URLs]
     ________________________________________________________________________________

还可以跳过对报告软件的使用而直接从命令行获得 referrer。在 Apache 风格的日志中,referrer 包含在双引号中,并跟在 IP 地址、日期和时间以及实际请求(也包含在引号中)后面。可以使用 awk 来提取 referrer;在使用一个双引号字符作为字段分隔符的情况下,它们是每行的第四个字段。由于在请求没有引用 URL 时,Apache 将写入一个连字符,因此可以结合使用 grep 命令和 -v 选项来忽略那些行。作为最后一个技巧,可以按唯一 referrer 的受欢迎程度来排序:

$ awk ' BEGIN { FS="\""}; {print $4}' log.daily|grep -v "^-$"|sort|uniq -c|sort -r

预先设置图像大小

超文本标记语言 (HTML) 标记 <img>HEIGHTWIDTH 属性非常重要。这些参数指定给定图像的大小。当这些参数存在时,大多数浏览器都会在加载图像之前,在呈现页面的窗口中为图像腾出空间。如果没有这些标记,则必须在图像下载完成以后,才会显示图像周围的文本。

所以,当您在博客中放置图像时,在 <img> 标记中包括这些参数是有利的,尤其是在单个页面上开始有大量图像的时候,因为这样可以显著改善博客页面的加载。访问者将能在页面开始加载时就开始阅读,而不必等待整个页面及其所有图像传输到本地。

但是,每次使用图像并将它们放在 <img> 标记中时,都必须确定精确的 HEIGHTWIDTH 值,这本身就是件恐怖的麻烦事情。幸运的是,存在一个工具可以为您自动执行整个任务。imgsizer 实用程序(请参见参考资料)读取您提供给它的任何 .html 文件,检查那些文件中所引用的所有源图像,确定它们的高度和宽度,并在给定文件所包含的 <img> 标记中写入正确的值:

$ imgsizer index.html

就这样简单——您不必加载任何图像或对它们做其他任何事情。在 imgsizer 添加这些标记以后,您将对页面加载速度的提高幅度感到非常吃惊。很少有博客所有者使用了此项简单技术,但它是读者将会非常欣赏的技术。

自动化更新

很少有博客所有者直接在在线页面本身之上制作博客。大多数工作都是在本地副本上完成的,他们首先在本地副本上草拟和提炼新条目。然后,当新的 index.html 文件为在线 准备就绪时,博客所有者将该文件上载到承载实际站点的服务器。

该过程可能要花 30 秒到一分钟的强制性注意时间,在此过程中,博客所有者打开文件传输协议 (FTP) 连接、键入密码、切换到本地网络博客根目录、切换到服务器根目录、上传该文件,然后注销(有关示例请参见清单 3)。

可以想象,此过程很容易出现用户错误。如果您志在成为每天拥有 10 个优秀更新的大亨级精英博客所有者,则此上传过程每天就要花去您整整五分钟时间——或者说每年总共超过 30 个小时!那是相当多的时间,原本可以更好地花在阅读 developerWorks 文章来加强您的信息技术 (IT) 本领上。

清单 3. 网络博客根页的手动更新
develbox$ ftp bigblog.example.com
Connected to bigblog.example.com.
220 bigblog.example.com NcFTPd Server (licensed copy) ready.
Name (bigblog.example.com:joe): joe_blogger
331 User joe_blogger okay, need password.
Password: secret
230 You are user #1 of 2 simultaneous users allowed.
230 Logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> lcd ~/blog
Local directory now /home/joe/blog
ftp> cd public_html
250 "/usr/www/users/joe_blogger" is new cwd.
ftp> put index.html
local: index.html remote: index.html
200 PORT command successful.
150 Opening BINARY mode data connection.
226 Transfer completed.
ftp> bye
221 Goodbye.
develbox$

完成此任务的一种更好方法是使用 Expect 语言,它是为脚本交互式会话而设计的(请参见参考资料)。对于通过 FTP 来人工更新站点的博客所有者,创建自动化的更新脚本是很自然的方法。清单 4 显示了一个自动化清单 3 所示的会话的示例。

清单 4. 自动化网络博客更新的 Expect 程序
#!/usr/bin/expect
# update a weblog index page
# puts ~/blog/index.html in remote ~/public_html/

exp_version -exit 5.0

if $argc!=0 {
	send_user "usage: bloggit\n"
	exit
}

set timeout 60
log_user 0
spawn ftp bigblog.example.com
expect "Name*:"
send "joe_blogger\r"
expect "Password:"
send "secret\r"
expect "ftp>"
send "lcd ~/blog/\r"
expect "ftp>"
send "cd public_html/\r"
expect "ftp>"
send "put index.html\r"
expect "226*ftp>"
send "bye\r"
send_user "blogged it.\n"
close

现在,当您准备将某个更新置于在线时,所花的时间要少得多:

$ bloggit
blogged it.
$

使用内容管理系统

就开发并推出产品而言,UNIX 人倾向于自行其事。但同样地,他们也很懒惰,如果已经存在适用的解决方案,他们也不会费心地另辟蹊径;太多的新思想还在等待形成。

在博客的早期年代,最成功的网络博客是手工编码的 HTML——如今已很不常见了。现在,大多数博客都是由 CMS 提供支持的数据库驱动、手工配置的站点。

如果说存在网络博客应用程序,那就一定是 CMS,它能为您提供大量难于通过编程来实现的必备博客特性——分类排序、按日期、类别和媒体类型存档、协作帐户便利性、布局模板和格式化、标准或滚动图像或主题,以及各种格式和渠道(如 RSS)的内容可用性。

存在太多的 CMS,甚至无法尝试列出它们的完整清单——其中有数百个是当前正在使用的,还有一些是在 developerWorks 上的其他地方详细描述的(请参见参考资料)。但是,列举出其中一些在 UNIX 上工作得很好并且可以配置来开发和运行网络博客的较好和较流行的开放源代码 CMS 是值得的。表 1 列出了这些 CMS,但是还有其他许多没有列出,因此肯定存在满足您特定需要的解决方案。

表 1. 用于 UNIX 的流行开放源代码 CMS
CMS描述
BlosxomBlosxom 是一个基于 Perl 的网络博客发布系统,其特色是插件体系结构和虚拟目录。
DrupalDrupal 是一个模块化的 CMS,用于通过评论和 Trackback 来构建网络博客。
TextpatternTextpattern 是一个文档管理系统,并着眼于精美的 Web 排版;它使用 PHP V4.3 或更高版本和 MySQL V3.23 或更高版本。
WordPress它是最受欢迎的开放源代码 CMS 包之一,用于 UNIX 上的发布。

总结

UNIX 环境真正是用于博客创作的天然环境。从 Web 友好的基础设施到强大的命令行工具,其中有大量的特性可帮助您改变一生的博客创作命运。本文提供了一些可以使用 UNIX 来使您的博客创作进行得更好更快的方法。

参考资料

学习

获得产品和技术

  • Analog:下载网络日志分析工具的免费副本。
  • imgsizer 工具:下载此工具的免费副本。identify 工具是必需的,可作为开放源代码 ImageMagick 套件的一部分来获得。
  • 下载本文提及的开放源代码 CMS 的免费副本,包括:
  • Expect 语言:从这个主要分发站点下载 Expect 语言工具的免费副本。
  • IBM 试用软件:使用 IBM 软件开发您的下一个项目,可直接从 developerWorks 下载这些试用软件。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=176589
ArticleTitle=UNIX 技巧: 借助 UNIX 成为更优秀的博客
publish-date=11232006