如何在 Linux 上打开大文本文件
在“大数据”时代,我们身边经常会遇到大文本文件(GB以上)。假设您需要手动搜索和编辑其中一个大文本文件。或者,您可以手动分析多 GB 日志文件以用于特定的故障排除目的。典型的文本编辑器可能无法有效地处理如此大的文本文件,并且在尝试打开大文件时可能会由于内存不足而卡住。
如果您是一位精明的系统管理员,您可能可以使用 cat
、tail
、grep
、sed
、awk
等组合来打开或触摸任意文本文件。在本教程中,我将讨论在 Linux 上打开(并可能编辑)大型文本文件的更多用户友好方法。
Vim 与 LargeFile 插件
Vim 文本编辑器拥有各种可以扩展 Vim 功能的插件(或脚本)。其中一个 Vim 插件是 LargeFile
插件。该插件允许您通过关闭多个 Vim 功能(例如事件、撤消、语法突出显示等)来更快地加载和编辑大文件。
要在 Vim 上安装 LargeFile
插件,首先请确保您已安装 Vim。
对于 Ubuntu、Debian 或 Linux Mint:
$ sudo apt-get install vim
对于 Fedora、CentOS 或 RHEL:
$ sudo yum install vim-enhanced
然后从 Vim 网站下载 LargFile
插件。该插件最新版本为5,将以Vimball格式保存(.vba
扩展名)。
要在主目录中安装插件,您可以使用 Vim 打开 .vba
文件,如下所示。
$ gunzip LargeFile.vba.gz
$ vim LargeFile.vba

在 Vim 窗口中输入 :so %
并按 ENTER
将插件安装到您的主目录中。

之后,输入 :q
退出 Vim。
该插件将安装在 ~/.vim/plugin/LargeFile.vim
中。现在您可以像往常一样开始使用 Vim。
这个插件的作用是在 Vim 上加载大文件时关闭事件、撤消、语法突出显示等。默认情况下,插件将大于 100MB
的文件视为大。要更改此设置,您可以编辑 ~/.vimrc
文件(如果不存在则创建一个)。
要将大文件的最小大小更改为 10MB
,请将以下条目添加到 ~/.vimrc
中。
let g:LargeFile=10
虽然 LargeFile
插件可以帮助您加快文件加载速度,但 Vim 本身仍然无法很好地处理编辑非常大的文件,因为它会尝试将整个文件加载到内存中。例如,当在 Vim 上加载 1GB 文件时,它会占用尽可能多的内存和交换空间,如下面的 top
输出所示。

因此,如果您的文件明显大于 Linux 系统的物理内存,您可以考虑其他选项,如下所述。
日志浏览器
如果您需要的只是对文本文件的只读访问,并且不必编辑它,则可以考虑glogg
,它是一个基于 GUI 的独立日志分析器。 Glogg 分析器支持基于扩展正则表达式和通配符的输入文本文件的过滤视图。
要在 Debian(Wheezy 及更高版本)、Ubuntu 或 Linux Mint 上安装 glogg
:
$ sudo apt-get install glogg
要在 Fedora(17 或更高版本)上安装 glogg
:
$ sudo yum install glogg
要使用 glogg
打开文本文件:
$ glogg test.log
glogg
可以非常快地打开大型文本文件。打开一个 1GB 的日志文件大约需要 12 秒。

您可以在文本
字段中输入正则表达式,然后按搜索
按钮。它支持不区分大小写的搜索和自动刷新功能。搜索后,您将在底部窗口看到过滤后的视图。

与 Vim 相比,glogg
在文件加载后要轻量得多。加载 1GB 日志文件后仅使用 83MB 物理内存。

乔文本编辑器
JOE 是一个基于 GPL 发布的轻量级终端文本编辑器。 JOE 是少数支持大文件的文本编辑器之一,并允许打开和编辑大于内存的文件。
此外,JOE支持各种强大的文本编辑功能,例如无损编辑、正则表达式搜索和替换、无限撤消/重做、语法突出显示等。
要在 Ubuntu、Debian 或 Linux Mint 上安装 JOE:
$ sudo apt-get install joe
要在 Fedora、CentOS 或 RHEL 上安装 JOE:
$ sudo yum install joe
要打开文本文件进行编辑,请运行:
$ joe test.log

与上面的 glogg
相比,在 JOE 上加载大文件有点慢。加载 1GB 文件大约需要 30 秒。不过,考虑到文件现在是完全可编辑的,这还不算太糟糕。加载文件后,您可以在终端模式下开始编辑文件,速度相当快。
JOE的内存消耗令人印象深刻。要加载和编辑一个1GB的文本文件,只需要47MB的物理内存。

如果您知道在 Linux 上打开/编辑大型文本文件的任何其他方法,请分享您的知识!