Linux 查看大日志文件
1、使用 less 命令

less filename

但是使用上述命令的坏处是,默认打开的位置在第一行,并且当切换到实时滚动模式(按 F ,实现效果类似 tail -f 效果 )或者想要滚动到最底部的时候(按 G ),会卡在计算行数一段时间。如果卡的时间比较长的话,可以直接按 Ctrl + c ,取消计算行数。
我更推荐打开文件的时候使用 -n :不计算行号(打开大文件的时候很有用)。

  1.  
    less  -n file 
  2.  
    less  +G -n   file  // 打开文件的时候,直接定位到文件的最底部,默认情况下是在首行。
  3.  
    less +F -n    file  // 打开文件的时候,使用实时滚动模式,Ctrl + c  退出实时滚动模式,按 F 切回实时滚动模式
  4.  
    less +1000g  -n  file  // 直接定位到第 1000 行,一般你提前通过 grep 命令,定位到行数后,再使用这个命令
  5.  
    less +50p   -n  file  // 直接定位到 50% 的位置
  6.  
    less +50P   -n  file  // 直接定位到第 100 字节的位置。这个命令感觉不怎么使用。

不使用 -n 的坏处是:当你使用 = 的时候,会计算出当前光标所在的位置,但是务必记得,大文件计算行数会阻塞一段时间。例如执行下列命令:

less copy.log

less 命令打开文件后,按下 = ,因为文件比较大,卡了我 20 几秒。

显示内容为: 文件名 copy.log , 当前屏幕显示1-24行/该文件一共有430000070行 , 从第一行到当前位置一共有 144 byte/该文件一共有2580000418 byte , 当前位置在文件的 0% 处。

如果使用 -n,输入以下命令 :

less -n copy.log

然后按下 = ,执行就非常快了
因此我建议大家使用 less 命令显示大文件的的时候,加上 -n 。

当然如果文件比较小,你想在使用 less 打开文件,并显示文件行数的话,可以使用 :

less -N file

如果你已经知道日志输出的关键字的话,使用 grep , 通常需要打印关键字前后的日志。

  1.  
    grep 'key word' log.txt -A 20 // 列出包括匹配行之后 20 的行。
  2.  
    grep 'key word' log.txt -B 20 // 列出包括匹配行之前 20 的行。
  3.  
    grep 'key word' log.txt -C 20 // 列出包括匹配行前后各 20 行。

大文件的话,grep 出来的数据比较多的话,你可以和 less 一起使用

grep  `world` copy.log | less

有时候需要将 tail 和 less 命令结合起来使用

  1.  
    tail -n +10000 | less // 从第 10000 开始,使用 less 查看。
  2.  
    tail  -n 10000 | less // 查看倒数第 1000 行到文件最后的数据。 

6.切割文件
有时候想把一个大文件进行分割成多个小文件.(我个人是不建议这么做的,因为我发现 split 的时候,也是蛮耗时的,但是这里仍然提供一种解决方法吧)
按文件大小分割:

split -b 600m copy.log

分割后的文件默认是以 x 开头,例如我上述命令分割后文件为:

  1.  
    $ ls -lht x*  // 这里 * 是通配符,即列出以 x 开头的文件。
  2.  
    -rw-rw-r-- 1 apple apple  61M 6月  22 15:02 xae
  3.  
    -rw-rw-r-- 1 apple apple 600M 6月  22 15:02 xad
  4.  
    -rw-rw-r-- 1 apple apple 600M 6月  22 15:02 xac
  5.  
    -rw-rw-r-- 1 apple apple 600M 6月  22 15:02 xab
  6.  
    -rw-rw-r-- 1 apple apple 600M 6月  22 15:02 xaa

当然你可以按行数分割,具体的命令格式如下 :

split [选项]... [要切割的文件] [输出文件前缀]  // 输出文件前缀为可选项

命令参数    说明
-a, --suffix-length=N    使用长度为 N 的后缀 (默认 2)
-b, --bytes=SIZE    设置输出文件的大小。支持单位:m,k
-C, --line-bytes=SIZE    设置输出文件的最大行数。与 -b 类似,但会尽量维持每行的完整性
-d, --numeric-suffixes    使用数字后缀代替字母
-l, --lines=NUMBER    设备输出文件的行数
–help    显示版本信息
–version    输出版本信息
7.如果你已经知道需要的内容在第几行,但是想要显示指定行数之前或者之后的行。例如你想显示 499999900 到 500000000 这100 行的内容。 推荐使用这个方法

head -500000000 file | tail  -100

其中 head -500000000 : 显示文件的前 500000000 行。
tail -100 :显示最后 100行。
两者结合起来就是在前 500000000 行中显示后 100 行,即显示 499999900 到 500000000 这100 行的内容。

或者使用 sed 命令:

sed -n '500000000q;499999900,500000000p'  file

其中 -n 与 p : 表示只打印符合条件的行。
500000000q; : 表示当执行到第 500000000 行的时候停止执行。 如果不使用 500000000q; sed 默认会浏览整个文件。
499999900,500000000 : 表示499999900 到 500000000 行。其中 , 逗号表示范围。
整体结合起来就是打印 499999900 到 500000000 行,但是执行到第 500000000 行就不要再执行了。

或者使用 awk 命令

awk 'NR>=49999991 && NR<=50000000{print} NR==50000001{exit}' file

最后我发现三者的执行效率(copy.log 是一个大小为 2.5 G 的测试文件):

  1.  
    time (head -500000000  copy.log  | tail -100) > /dev/null
  2.  
    real    0m9.456s
  3.  
    user    0m8.854s
  4.  
    sys    0m3.501s
  5.  
     
  6.  
    time (sed -n '500000000q;499999900,500000000p' copy.log) > /dev/null
  7.  
    real    0m25.968s
  8.  
    user    0m25.111s
  9.  
    sys    0m0.833s
  10.  
     
  11.  
    time (awk 'NR>=499999900&& NR<=500000000{print} NR==500000001{exit}' copy.log) > /dev/null
  12.  
    real    1m4.743s
  13.  
    user    1m3.824s
  14.  
    sys    0m0.906s

总结
与其说是查看大日志文件的方法,不如说是将 grep/awk/sed/head/less/tail 多个命令结合起来的方法。

其实最重要的不是怎么看大文件,还是在程序运行时候,就要对日志文件进行归档整理,例如,每天一次归档,或者每满 500M 就归档。
当然大公司会用例如 ELK 之类的日志处理系统。

提示
如果你在浏览这篇文章的时候,苦于没有大的日志文件练习, 可以执行如下命令:

seq 1 1000000000 > file

Linux查看大文件日志的更多相关文章

  1. linux查看大文件

    du -h --max-depth=1

  2. linux传输大文件

    http://dreamway.blog.51cto.com/1281816/1151886 linux传输大文件

  3. Linux查看一个文件夹大小

    1.Linux查看一个文件夹大小: du -sh /home/yangkun [yangkun@sg1 bin]$ du -sh /home/yangkun/ 164M /home/yangkun/ ...

  4. BareTail大文件日志实时查看工具

    BareTail 动态的查看日志文件,就像Linux上的tail tail -f nohup.out 功能: 实时文件查看 tail命令模式,自动滚动 支持2g以上大文件 自动滚动 彩色监控 多文件监 ...

  5. Linux 查看各文件夹大小命令du -h --max-depth=1

    du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>] [--max-de ...

  6. linux查找大文件命令

    测试服务器用久了,如果没有运行自动清除日志的脚本,会导致硬盘空间不足,应用.数据库.环境等启动不了: 如果你对系统不是特别熟悉,就无法知道那些占用空间的日志或缓存文件在哪里,这时,我们就可以利用查找大 ...

  7. linux查找大文件及详细问题

    查询大文件du -h --max-depth=1 查询指定目录下面的文件大小du -h --max-depth=1 /path 使用find命令查找大于200M文件 find / -type f -s ...

  8. linux 查找大文件

    查看磁盘使用情况:df -h [root@iZwz9gs2zseivevv1k5vnkZ /]# df -h Filesystem Size Used Avail Use% Mounted on /d ...

  9. linux下大文件处理

    linux下采用先分割后合并的策略处理大文件 第一步:分割文件 split split 参数:-a, --suffix-length=N     指定输出文件名的后缀,默认为2个-b, --bytes ...

随机推荐

  1. 【题解】Hankson 的趣味题

    题目大意 已知正整数$a_{0}$.$a_{1}$.$b_{0}$.$b_{1}$($1 \leq a_{0}, a_{1}, b_{0}, b_{1} \leq 2 \times 10^{9}$), ...

  2. luoguP3369[模板]普通平衡树(Treap/SBT) 题解

    链接一下题目:luoguP3369[模板]普通平衡树(Treap/SBT) 平衡树解析 #include<iostream> #include<cstdlib> #includ ...

  3. 8、numpy——数组的迭代

    1.单数组的迭代 NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式. 迭代器最基本的任务的可以完成对数组元素的访问. 1.1 默认迭代顺序 import ...

  4. hdu4352 XHXJ's LIS(数位dp)

    题目传送门 XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. shell 脚本规范

    shell 脚本规范 一.背景 1.使用哪一种shell? 必须使用bash shell 2.什么时候使用shell? 数量相对较少的操作 脚本文件少于100行 3.脚本文件扩展名是什么? shell ...

  6. 关于手机端在同一个Grid中使用不同的布局展现即Layout的使用

    标题可能说的不是很清楚,我举个栗子好了,现在你正在写手机端的一个审批模块,这个模块要求能够展示所有待审批的信息 比如出差申请,请假申请,加班申请,以及报销申请 那么我的思路有两个 1:建立一个Tab页 ...

  7. linux驱动启动顺序

    首先,我们可以查看Linux内核编译完成后的System.map文件,在这个文件中我们可以看到macb(dm9161驱动模块)链接到了dm9000驱动之前,如下所示: c03b6d40 t __ini ...

  8. (ACM模板)二分查找

    二分是一个比较大的概念,广义上把东西(可能是问题,区间等等)一分为二都是二分. 这里讲二分查找. 据说只有10%的程序员能写对二分.虽然二分是一个简单的算法.但是其变化和细节却并不简单. 整数二分: ...

  9. prometheus 笔记

    前言 prometheus 是监控应用软件类似于nagios. 安装 1.官网下载prometheus-2.2.0.linux-amd64压缩包,解压,执行./prometheus即可.这里重要的是配 ...

  10. hive之调优

    1.简单的查询,就是只是select,不带count,sum,group by这样的,都不走map/reduce,直接读取hdfs文件进行filter过滤,即尽量让fetch task(当开启一个Fe ...