通过命令行阅读 Linux Journal

作者:Kyle Rankin

在这个时代,阅读的方式比以往任何时候都多。即使Linux Journal 不再以纸质形式出版,您仍然可以使用 Web 浏览器、PDF 软件、电子书阅读器和手机阅读它。我自己没有电子书阅读器,但我认为您可以论证,阅读 Linux Journal 的真正方式是从命令行。毕竟,我从命令行阅读电子邮件、聊天、查看 Twitter、完成大部分日常工作并撰写文章(好吧,我承认我也使用 gvim;它可以释放一个终端窗口),那么为什么不从我花费大部分时间的地方阅读 Linux Journal 呢?

文本,全部文本,只有文本

我将要介绍的第一种格式是便携式文档格式 (PDF)。虽然 PDF 的目标是捕获文档,使其对每个人看起来都一样,但事实证明您也可以从 PDF 文件中剥离文本和图像。我用于此目的的第一个程序是名副其实的 pdftotext。此程序是一组 PDF 实用程序的一部分,这些实用程序在基于 Debian 的系统下打包为 poppler-utils 包,但您应该能够在您的发行版中找到名称类似的包。执行 pdftotext 最基本的方法如下


$ pdftotext input_document.pdf output_document.txt

默认情况下,pdftotext 不会尝试保留文档的所有格式,这很好,因为您不必上下滚动页面的多列。缺点是它不知道剥离所有无关的文本、标题、摘录和其他您在杂志文章中会找到的文本,因此结果有点受限,正如您在图 1 中看到的那样。

图 1. pdftotext 对我的专栏的默认输出

文本加列

所以,虽然我认为 pdftotext 的默认输出是可读的,但它并不理想。但这并不是说我没有技巧了。在其命令行选项中,它提供了一个 -layout 参数,该参数尝试保留原始文本布局。它仍然不完美,正如您在图 2 中看到的那样,但如果您调整终端大小使其可以容纳整页,则它相当可读。

图 2. 保留布局的 pdftotext

文本加图像

如果您以纯文本模式阅读 Linux Journal,您会发现一个问题:没有图片!虽然有些文章仍然以纯文本形式具有教育意义,但在其他文章中,看到图表、屏幕截图或作者所说内容的某些其他图形表示确实很有帮助。您并非没有选择,但下一个选择有点 hack。由于有可以显示终端图像的 w3m 命令行 Web 浏览器版本(基于 Debian 的系统上的 w3m-img 包提供了它),您可以做的是将 PDF 转换为 HTML,然后使用 w3m 查看 HTML。为此,您可以使用与提供 pdftotext 的同一个包一起提供的 pdftohtml 程序。此程序会创建大量文件,因此我建议为您的期号创建一个新目录,并在运行命令之前 cd 到该目录。以下是将 2011 年 9 月刊转换为 HTML 的步骤示例


$ mkdir lj-2011-09
$ cd lj-2011-09
$ pdftohtml -noframes /path/to/linuxjournal201109-dl.pdf
 ↪lj-2011-09.html

命令完成后,您可以对 lj-2011-09.html 文件运行 w3m 命令,如果您有加载图像的特殊版本,您将开始看到图像加载到终端中。现在,默认情况下,此输出非常类似于 pdftotext 的原始输出。没有尝试保留格式,因此输出可能有点混乱,难以阅读。此外,正如您在图 3 中看到的那样,我的头像看起来像一张底片。

图 3. 更负面的我

文本加图像加列

虽然在终端中看到图像很好,但如果一切都安排得更有意义就更好了。与 pdftotext 一样,pdftohtml 也有一个选项可以尝试保留布局。在 pdftohtml 的情况下,您添加 -c 选项


$ mkdir lj-2011-09
$ cd lj-2011-09
$ pdftohtml -noframes -c /path/to/linuxjournal201109-dl.pdf
 ↪lj-2011-09.html

一方面,此命令生成了一些非常漂亮的图形页面。另一方面,图像看起来显示在文本的顶部,正如您在图 4 中看到的那样,我的专栏中有一个完整的图形部分,上面没有文本。当您向下滚动页面时,您仍然可以阅读大量文本,但它独立于图像。从好的方面来说,它不再显示负片头像。

图 4. 图像质量有所提高,但可读性更差。

使用重排

所以 PDF 转换在技术上是可行的,但肯定有改进的空间。当我考虑这个问题时,我意识到 epub 文件在小屏幕上重排文本时效果非常好。我认为这可能是我的命令行输出的更好源文件。

我发现最适合将 epub 文件转换为文本的工具是 Calibre。就我而言,我只需要安装一个同名的软件包,我就获得了包括 ebook-convert 在内的一套 epub 工具。与 pdftotext 一样,您只需指定输入文件和输出文件,ebook-convert 就会根据您想要的文件扩展名(在本例中为 .txt)生成输出文件。要创建基本文本文件,我只需键入


$ ebook-convert /path/to/LJ209-sept.epub LJ209-sept.txt

我发现生成的文本文件实际上非常可读,尽管它确实喜欢缩进所有标题和大部分其余文本,因此它从终端的中心开始。也就是说,我会说,到目前为止,它是最可读的输出,正如您在图 5 中看到的那样。

图 5. 即使有缩进,也是一篇非常可读的 LJ 文章

因此,通过所有这些不同的方式从命令行阅读 Linux Journal,目前有两种方法对我来说脱颖而出。如果您不需要图像,我认为 epub 到文本的转换效果最佳,其次是保留布局的 pdftotext。如果您确实需要查看图像,那么您的主要选择似乎要么是从 PDF 转换为 HTML,然后使用 w3m,要么只是使用 w3m 直接浏览 Linux Journal 存档。

Kyle Rankin 是 Linux Journal 的技术编辑和专栏作家,也是 Purism 的首席安全官。他是 Linux Hardening in Hostile NetworksDevOps TroubleshootingThe Official Ubuntu Server BookKnoppix HacksKnoppix Pocket ReferenceLinux Multimedia HacksUbuntu Hacks 的作者,也是许多其他 O'Reilly 书籍的贡献者。Rankin 经常在安全和开源软件方面发表演讲,包括在 BsidesLV、O'Reilly Security Conference、OSCON、SCALE、CactusCon、Linux World Expo 和 Penguicon 上。您可以在 @kylerankin 上关注他。

加载 Disqus 评论