如何在终端中打开一个大文件(使用 vim 会导致终端挂起)?

如何在终端中打开一个大文件(使用 vim 会导致终端挂起)?

我正在使用 Ubuntu 14.04。我有一个很大的日志文件:

-rw-r--r-- 1 rails root 1792390124 Jan 10 14:54 /var/log/unicorn/unicorn.log

尽管如此,我还是需要打开它并在其中找到一些东西。我尝试了 vim,但运行

vim /var/log/unicorn/unicorn.log

只是打开一个空白屏幕,即使我使用Ctrl+ C,也没有任何反应。终端挂起了。如果不升级我机器上的任何硬件(但我愿意安装软件),我如何打开文件并查看(我不需要编辑它,我只需要从中读取一些行)。

答案1

处理大型文件时,最好尽量减少要处理的信息量,有工具可以做到这一点。提到的一个工具是grep搜索您需要的特定行。我建议使用的另外两个工具是和,tail它们可以显示从文件顶部( )或从文件末尾( )head开始的特定行数或字节数。如果您只需要读取文件的这些特定部分,而不需要读取中间部分,这很有用。headtail

另一种方法是使用split命令。它可以根据字节数或行数分解文件。例如,

$ mkdir SPLIT

$ cd SPLIT/                                                                                                       

$ split -l 5  /etc/passwd

$ ls
xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj

现在,我的/etc/password文件被分解成更小的文件,每个文件 5 行,你可以用 vim 或其他文本编辑器打开它们

答案2

使用命令lessless使用更高效的方式将文件读入内存。有 2 个等效命令:moremost(最后一个需要安装)。它们将单个页面放入内存。

但您最好的搜索选项是使用grep。例如:

grep {searchstring} {file}

并查看logrotate您是否将该日志跨越多个文件。

并且split可以将您当前的文件分成相等的部分,以便您更轻松地查看该日志。

答案3

这取决于你的目标是什么。

如果你想滚动浏览全部的logfile,您可以使用lessmore命令逐页查看手头的文件。

否则,如果您知道在文件中查找的位置,则可以使用headtail命令来获取文件的某个部分/摘录。有关如何搜索精确部分的更多信息,请参阅man head和。man tail

如果您要查找特定字符串/条目,您可以使用 在grep文件中搜索您的字符串。您可以根据要执行的操作使用cat file | grep something或。grep something file

或者,如果您想做一些更高级的事情,您可以考虑使用sedawk进行更高级的操作(如果需要)。

答案4

如果您确切知道您想要哪条线,请使用grep。但是,如果您正在寻找一些您不确定的东西,less最好使用,因为它会向您显示上下文(这对于日志文件特别有用)。

/在里面输入命令less打开搜索字段。输入您想要的内容然后按回车键。然后要继续搜索同一个词,请输入n向前 和N向后。要跳转到文件末尾G,请输入 ,然后N?

相关内容