linux系统下各种日志文件的介绍,查看,及日志服务配置

news/2024/11/15 12:40:58/文章来源:https://www.cnblogs.com/crnet/p/18398334

转载于https://zhuanlan.zhihu.com/p/298335887 ,侵权删!

linux系统日志文件的详细介绍

日志文件的作用

日志文件用于记录linux系统的各种运行信息的文件,相当于linux主机的日记,不同的日志文件记载了不同类型的信息,如Linux内核消息、用户登录事件、程序错误等。. 日志文件对于诊断和解决问题很有帮助,因为linux运行的程序通常把系统的消息和错误写入对应的日志文件,这样系统可以有据可查, 此外,当主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹。

日志文件的分类

1.内核及系统日志: 内核及系统日志:这种日志数据由系统服务rsyslog同-管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。系统中大部分的程序会把自己的日志文件交由rsyslog管理,因而这些应用程序使用的日志记录格式都很相似。

/etc/rsyslog.conf 常见配置格式为: . 比后面等级高的(包含自己) *.info .= 只记录该等级 .=debug ! 除了该等级都记录 ! info

- 有记录需要记录时,先缓存到一定大小,一次性写入

2.用户日志: 用于记录Linux系统用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。 3.程序旧志 :有些应用程序会选择独立管理一份日志文件 ,而不是交给rsyslog服务管理,用于记录本程序运行过程中的各种事件信息。于这些程序只负责管理自己的日志文件,因此不同程序所使用的日志记录格式也会存在较大的差异。

日志文件的位置

Linux系统本身和大部分服务器程序的日志文件默认放在/var/log/下。 部分程序共用一个日志文件,一部分程序使用单个日志文件。 而有些大型服务器程序日志由于日志文件不止一个,所以会在/var/log/目录中建立相应的子绿来存放日志文件,这样既保证了日志文件目录的结构清晰,又可以快速定位日志文件。有一部分日志文件只有root用户才有权限读取,这保证了相关日志信息的安全性。

常见的日志文件及查看方式

日志文件 存放内容

/var/log/message 内核消息及各种应用程序的公共日志信息,包括启动、I/O错误、 网络错误、

/var/log/cron Crond周期性计划任务产生的时间信息

/var/log/dmesg 弓|导过程中的各种时间信息

/var/log/ maillog 进入或发出系统的电子邮件活动

/var/log/lastlog 每个用户最近的登录事件

/var/log/secure 用户认证相关的安全事件信息

/var/log/wtmp 每个用户登录注销及系统启动和停机事件

/var/log/btmp 失败的、错误的登录尝试及验证事件

做一个表格,便于查看:

日志消息的级别

根据日志信息的重要程度不同,分为不同的级别 数字级别越小,优先级越高,消息越重要 级别 英文表示 意义

0 EMERG(紧急) 导致主机系统不可用的情况

1 ALERT(警告) 必须马上采取解决措施

2 CRIT 严重 比较严重的情况

3 ERR 错误 运行出现错误

4 WARNING 提醒 提醒用户的重要事件

5 NOTICE 注意 不会儿影响系统,提醒用户

6 INFO 信息 一般信息

7 DEBUG 调式 程序调式

8 None 没有 不做记录

[root@localhost ~]#grep -E -iw “emerg|alert|critical|error” /var/log/messages 查看出现的重大的错误

日志文件分析

内核及大多数系统消息 内核及系统日志主要由默认安装的rsyslog软件包提供, rsyslog服务所使用的配置文件为/etc/rsyslog.conf ,通过查看配置文件内容可以了解到系统默认的日志位置。

[root@localhost ~]# grep -Ev “$|#” /etc/rsyslog.conf

可以看出大部分存放到公共日志文件/var/log/message中,其他的日志文件直接发送给用户或者放到自己独立的日志文件中

[root@localhost ~]# tail -f /var/log/messages

时间标签:消息发出的日期时间 主机名 生产消息的计算机的名称 子系统名称:发出消息的应用程序的名称 消息 消息级别的具体内容

rsyslog日志服务是一个常会被攻击的目标,破坏了它将使运维员很难发现入侵及入侵的痕,因此要特别注意监控其守护进程及配置文件。

用户日志:

存放位置: /var/og/wtmp. /var/log/btmp、 /var/log/lastlog 查询命令: users、who、w、last、 lastlog、 lastb等 users命令:只是简单的输出当前登录的用户名, 每个显示的用户名对应一个会话。

who命令:报告当前登录到系统的每个用户的信息,包括用户名,终端,登录日期,远程主机

w 显示当前操作系统的每个用户及其远程所运行的进程信息

last命令:用于查询成功登录到系统的用户记录,最近的登录情况在最前面。 通过last命令可以及时掌握Linux主机的登录情况,若发现未经授权的用户登陆过,则表示当前主机可能已被入侵。 -a :把从何处登录系统的主机名称或IP地址,显示在最后一 行 -d :将IP地址转换成主机名称 -f 记录文件] :指定记录文件 -R :不显示登入系统的主机名称或IP地址 -x :显示系统关闭,重新开机,以及执行等级的改变等 -n : n代表数字,表示最近n次登录的记录

lastlog命令:用于显示系统中所有用户最近一次登录信息

lastb命令:用于显显用户错误的登录列表,此指令可以发现系统的登录异常。如登录的用户名错误,密码不正确等情况都会记录在案,登录失败的情况属于安全事件,因此消失可能有人在尝试破解密码。除了使用lastb命令以外,可以直接从安全日志文件/var/log/secure中获得相关信息。

分析日志的注意事项

总的来说,作为一名合格的系统管理人员,应该提高警惕,随时注意各种可疑的状况定期并随机的检查各种系统日志文件,包括-般信息日志、 网络连接日志、文件传输日志及用户登录日志记录等。在检查这些日志时,要注 意是否有不合常理的时间或操作记录。 例如出现以下一些现象就应该多加注意:

1用户在非常规的时间登绿,或者用户登录系统的IP地址和以往不一样的

2登录失败的日志记录,尤其是那些一再连续尝试进入 失败的日志记录

3非法使用或不正当使用超级用户权限

4无故或者非法重新启动各项网络服务的记录

5不正常的日志记录,如日志残缺不全,或者是诸如wtmp这样的日志文件无故缺少了中间的记录文件

注意:需要提醒运维人员的是,日志并不是完全可靠的,高明的黑客在入侵系统后经常会打扫现场,所以管理人员需要运用综上的所有知识,全面、综合的进行审查和检测。

日志管理:

针对日志定期备份、异地备份(保留1~3个月的日志记录)

针对日志定期切割

针对日志的权限要严格(为了防止敏感信息泄露)

针对日志做集中管理

对于日志文件的保护

chattr +a日志文件, a选项为append (追加) only ,即给日志文件加上a权限后,将只可以追加,不可以删除和修改之前的内容。

[root@localhost ~]# cp /ar/log/secure ./seccure.txt

[root@localhost ~]# chattr +a /var/log/secure

[root@localhost ~]# Isattr /var/og/secure

[root@localhost ~]# rm -rf /var/log/secure rm:无法删除’

/var/log/secure":不允许的操作 root用户在v编辑器的命令模式按dd删除了两行内容后进行wq !强制保存退出,也会报错

补充: chattr +a -R递归式增加a权限

[root@localhost ~]# Isattr /var/log/

日志分类介绍:

1. 连接时间的日志

连接时间日志一般由/var/log/wtmp和/var/run/utmp这两个文件记录,不过这**

两个文件无法直接cat查看,并且该文件由系统自动更新,可以通过如下:

w/who/finger/id/last/lastlog/ac 进行查看

[root@helle ~]# who

root tty1 2010-10-06 22:56

root pts/0 2010-10-06 22:26 (218.192.87.4)

root pts/1 2010-10-06 23:41 (218.192.87.4)

root pts/3 2010-10-06 23:18 (218.192.87.4)

[root@helle ~]# w

01:01:02 up 2:36, 4 users, load average: 0.15, 0.03, 0.01

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root tty1 - 22:56 1:20m 0.16s 0.16s -bash

root pts/0 218.192.87.4 22:26 2:05m 0.18s 0.18s -bash

root pts/1 218.192.87.4 23:41 0.00s 0.41s 0.00s w

root pts/3 218.192.87.4 23:18 1:38m 0.03s 0.03s -bash

[root@helle ~]# ac -p //查看每个用户的连接时间

u51 1.23

u55 0.04

root 95.21 //可以看到root连接时间最长吧

helle 0.06

user1 3.93

total 100.48

[root@helle ~]# ac -a //查看所有用户的连接时间

total 100.49

[root@helle ~]# ac -d //查看用户每天的连接时间

Sep 24 total 0.14

Sep 25 total 14.60

Sep 26 total 13.71

Sep 27 total 21.47

Sep 28 total 11.74

Sep 29 total 6.60

Sep 30 total 8.81

Oct 1 total 9.04

Oct 2 total 0.47

Oct 6 total 8.62

Today total 5.29

其他几个命令不做具体介绍了

2. 进程监控日志

进程统计监控日志在监控用户的操作指令是非常有效的。当服务器最近发现经常

无故关机或者无故被人删除文件等现象时,可以通过使用进程统计日志查看:

[root@helle ~]# accton /var/account/pacct //开启进程统计日志监控

[root@helle ~]# lastcomm //查看进程统计日志情况

accton S root pts/1 0.00 secs Thu Oct 7 01:20

accton root pts/1 0.00 secs Thu Oct 7 01:20

ac root pts/1 0.00 secs Thu Oct 7 01:14

ac root pts/1 0.00 secs Thu Oct 7 01:14

free root pts/1 0.00 secs Thu Oct 7 01:10

lastcomm root pts/1 0.00 secs Thu Oct 7 01:09

bash F root pts/1 0.00 secs Thu Oct 7 01:09

lastcomm root pts/1 0.00 secs Thu Oct 7 01:09

ifconfig root pts/1 0.00 secs Thu Oct 7 01:09

lastcomm root pts/1 0.00 secs Thu Oct 7 01:09

lastcomm root pts/1 0.00 secs Thu Oct 7 01:09

lastcomm root pts/1 0.00 secs Thu Oct 7 01:09

accton S root pts/1 0.00 secs Thu Oct 7 01:09

[root@helle ~]# accton //关闭进程统计日志监控

3. 系统和服务日志

系统日志服务是由一个名为syslog的服务管理的,如一下日志文件都是由syslog日志服务驱动的:

/var/log/lastlog :记录最后一次用户成功登陆的时间、登陆IP等信息

/var/log/messages :记录Linux操作系统常见的系统和服务错误信息

/var/log/secure :Linux系统安全日志,记录用户和工作组变坏情况、用户登陆认证情况

/var/log/btmp :记录Linux登陆失败的用户、时间以及远程IP地址

/var/log/cron :记录crond计划任务服务执行情况

…...

[root@helle ~]# cat /var/log/lastlog

Lpts/0218.192.87.4

Lpts/1218.192.87.4

Lpts/1218.192.87.4

Lpts/0218.192.87.46

Lpts/0218.192.87.4

…...

*Linux日志服务介绍*

1. 在Linux系统,大部分日志都是由syslog日志服务驱动和管理的 syslog服务由两个重要的配置文件控制管理,分别是/etc/syslog.conf主配置文件和/etc/sysconfig/syslog辅助

配置文件, /etc/init.d/syslog是启动脚本,这里主讲主配置文件/etc/syslog.conf:

/etc/syslog.conf 语句结构:

[root@helle ~]# grep -v "#" /etc/syslog.conf //列出非#打头的每一行

*.info;mail.none;authpriv.none;cron.none /var/log/messages

authpriv.* /var/log/secure

mail.* -/var/log/maillog

cron.* /var/log/cron

*.emerg *

uucp,news.crit /var/log/spooler

local7.* /var/log/boot.log

选择域(消息类型.错误级别) 动作域

2. 消息类型:auth,authpriv,security;cron,daemon,kern,lpr,mail, mark,news,syslog,user,uucp,local0~local7.

错误级别:(8级)debug,info,notice,warning|warn;err|error;crit,alert,emerg|panic

动作域:file,user,console,@remote_ip

举如上的/etc/syslog.conf文件三个例子:

*.info;mail.none;authpriv.none;cron.none /var/log/messages

表示info级别的任何消息都发送到/var/log/messages日志文件,但邮件系统、验证系统

和计划任务的错误级别信息就除外,不发送(none表示禁止)

cron.* /var/log/cron 表示所有级别的cron信息发到/var/log/cron文件

*.emerg * 表示emerg错误级别(危险状态)的所有消息类型发给所有用户

*Linux日志服务器配置*

此服务器的配置非常简单,只是修改一个文件的一个地方,然后重启服务即可:

[root@helle ~]# grep -v "#" /etc/sysconfig/syslog

SYSLOGD_OPTIONS="-m 0 -r" //只要在这里添加“-r”就行咯

KLOGD_OPTIONS="-x"

SYSLOG_UMASK=077

[root@helle ~]# service syslog restart

关闭内核日志记录器: [确定]

关闭系统日志记录器: [确定]

启动系统日志记录器: [确定]

启动内核日志记录器: [确定]

对于发送消息到服务器的OS,只要在写/etc/syslog.conf主配置文件的时候,作用域

为@server-ip就行了,比如针对218.192.87.24这台日志服务器,把一台ubuntu系统的所有

info级别的auth信息发给日志服务器,那么对于ubuntu系统的/etc/syslog.conf文件最后一

行添加  @218.192.87.24 就OK了

日志转储服务

系统工作到了一定时间后,日志文件的内容随着时间和访问量的增加而越来越多,

日志文件也越来越大。而且当日志文件超过系统控制范围时候,还会对系统性能

造成影响。转储方式可以设为每年转储、每月转储、每周转储、达到一定大小转储。

在Linux系统,经常使用“logrotate”工具进行日志转储,结合cron计划任务,可以轻松

实现日志文件的转储。转储方式的设置由“/etc/logrotate.conf”配置文件控制:

[root@helle ~]# cat /etc/logrotate.conf

# see "man logrotate" for details //可以查看帮助文档

# rotate log files weekly

weekly //设置每周转储

# keep 4 weeks worth of backlogs

rotate 4 //最多转储4次

# create new (empty) log files after rotating old ones

create //当转储后文件不存储时创建它

# uncomment this if you want your log files compressed

#compress //以压缩方式转储

# RPM packages drop log rotation information into this directory

include /etc/logrotate.d //其他日志文件的转储方式,包含在该目录下

# no packages own wtmp -- we'll rotate them here

/var/log/wtmp { //设置/var/log/wtmp日志文件的转储参数

monthly //每月转储

create 0664 root utmp //转储后文件不存在时创建它,文件所有者为root,

所属组为utmp,对应的权限为0664

rotate 1 //转储一次

}

# system-specific logs may be also be configured here.

举两个例子: 为/var/log/news/目录下的所有文件设置转储参数,每周转储,转储2次,转储

时将老的日志文件放到/var/log/news/old目录下,若日志文件不存在,则跳过。完成后重启

news新闻组服务,转储时不压缩。那么可以在/etc/logrotate.conf文件的最后添加如下:

/var/log/news/*{

monthly

rotate 2

olddir /var/log/news/old

missingok

postrotate

kill -HUP cat /var/run/inn.pid

endscript

nocompress

}

另一个例子:*为/var/log/httpd/access.log和/var/log/httpd/error.log日志设置转储参数。转储*

5次,转储时发送邮件给root@localhost用户,当日志文件达到100KB时才转储,转储后重启

httpd服务,那么可以直接在/etc/logrotate.conf文件的最后添加如下:

/var/log/httpd/access.log /var/log/http/error.log{

rotate 5

mail root@localhost

size=100k

sharedscripts

/sbin/killall -HUP httpd

endscript

}

自定义日志转储(/etc/logrotate.d/*)

通过下面一个例子*将所有类型错误级别为info的日志转储到/var/log/test.log日志文件中,并设置*

/var/log/test.log达到50KB后进行转储,转储10次,转储时压缩,转储后重启syslog服务:

1、修改/etc/syslog.conf文件使得如下:

[root@helle ~]# tail -1 /etc/syslog.conf //查看该文件的最后一行

*.info /var/log/test.log

2、重启syslog服务: [root@helle ~]# /sbin/service syslog restart

关闭内核日志记录器: [确定]

关闭系统日志记录器: [确定]

启动系统日志记录器: [确定]

启动内核日志记录器: [确定]

3、创建/etc/logrotate.d/test.log日志转储参数配置文件,添加如下: [root@helle ~]# vim /etc/logrotate.d/test.log

[root@helle ~]# cat /etc/logrotate.d/test.log

/var/log/test.log{

rotate 10

size = 50k

compress

postrotate

killall -HUP syslog

endscript

}

4、查看文件/etc/cron.daily/logrotate确保如下:

[root@helle ~]# cat /etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf

EXITVALUE=$?

if [ $EXITVALUE != 0 ]; then

/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"

fi

exit 0

5、查看转储后的文件

[root@helle log]# pwd

/var/log

[root@helle log]# ls test.log*

…… //结果等要转储的时候会发现压缩文件和原本的test.log文件

syslog是一个被UNIX和Linux广泛使用的日志系统,Linux系统中大部分的日志文件都是通过它进行管理的。本节将对syslog的功能及配置、日志文件的查看和管理,以及syslog中默认配置的日志文件进行介绍。

12.2.1 syslog简介

syslog是一个历史悠久的日志系统,几乎所有的UNIX和Linux操作系统都是采用syslog进行系统日志的管理和配置。Linux系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息。这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到日志文件中去。而执行这个过程的程序就是syslog。

syslog可以根据信息的来源以及信息的重要程度将信息保存到不同的日志文件中,例如,为了方便查阅,可以把内核信息与其他信息分开,单独保存到一个独立的日志文件中。在默认的syslog配置下,日志文件通常都保存在“/var/log”目录下。syslog的守护进程为syslogd,系统启动时,默认会自动运行syslogd守护进程。

如果要手工启动,可以使用如下命令:

/sbin/syslogd

在修改syslog配置后,需要重新启动syslogd守护进程才能使新的配置生效。其命令如下所示。

# killall -HUP syslogd

Red Hat Enterprise Linux 5.2安装后默认就已经在syslog中定义了一些日志文件,这些日志的位置以及它们的说明如表12.2所示。

表12.2 默认配置syslog日志

| 日 志 文 件 | 说 明

| /var/log/message | 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 | /var/log/secure | 与安全相关的日志信息
| /var/log/maillog | 与邮件相关的日志信息
| /var/log/cron | 与定时任务相关的日志信息
| /var/log/spooler | 与UUCP和news设备相关的日志信息 |/var/log/boot.log | 守护进程启动和停止相关的日志消息

查看日志常用命令

tail:

​ -n 是显示行号;相当于nl命令;例子如下:
​ tail -100f test.log 实时监控100行日志
​ tail -n 10 test.log 查询日志尾部最后10行的日志;
​ tail -n +10 test.log 查询10行之后的所有日志;

head:

​ 跟tail是相反的,tail是看后多少行日志,而head是查看日志文件的头多少行,例子如下:
​ head -n 10 test.log 查询日志文件中的头10行日志;
​ head -n -10 test.log 查询日志文件除了最后10行的其他所有日志;

cat:

​ tac是倒序查看,是cat单词反写;例子如下:
​ cat -n test.log |grep "debug" 查询关键字的日志(常用!~)

vim:

​ 1、进入vim编辑模式:vim filename ​
2、输入“/关键字”,按enter键查找 ​
3、查找下一个,按“n”即可 ​ 退出:按ESC键后,接着再输入:号时,vi会在屏幕的最下方等待我们输入命令 ​ wq! 保存退出 ​ q! 不保存退出

Linux 查看大日志文件

1.如果文件比较小的话,使用 vim 直接查看,如果文件比较大的话,使用 Vim 会直接卡主。

2.如果想要查看正在滚动的日志文件。这个命令可以查看大文件。

tail -f file

Ctrl + c 终止 tail 命令

Ctrl + s 暂停 tail 命令

Ctrl + q 继续 tail 命令

3.如果文件比较大的话,也可以使用 less 命令

less file

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

less  -n file 
less  +G -n   file  // 打开文件的时候,直接定位到文件的最底部,默认情况下是在首行。
less +F -n    file  // 打开文件的时候,使用实时滚动模式,Ctrl + c  退出实时滚动模式,按 F 切回实时滚动模式
less +1000g  -n  file  // 直接定位到第 1000 行,一般你提前通过 grep 命令,定位到行数后,再使用这个命令
less +50p   -n  file  // 直接定位到 50% 的位置
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

然后按下 = ,执行就非常快了

上述图片中没有 lines 数据,所以执行很快。 因此我建议大家使用 less 命令显示大文件的的时候,加上 -n 。

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

less -N file

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

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

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

grep  `world` copy.log | less

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

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

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

split -b 600m copy.log

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

$ ls -lht x*  // 这里 * 是通配符,即列出以 x 开头的文件。
-rw-rw-r-- 1 apple apple  61M 6月  22 15:02 xae
-rw-rw-r-- 1 apple apple 600M 6月  22 15:02 xad
-rw-rw-r-- 1 apple apple 600M 6月  22 15:02 xac
-rw-rw-r-- 1 apple apple 600M 6月  22 15:02 xab
-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 的测试文件):

time (head -500000000  copy.log  | tail -100) > /dev/null
real    0m9.456s
user    0m8.854s
sys 0m3.501stime (sed -n '500000000q;499999900,500000000p' copy.log) > /dev/null
real    0m25.968s
user    0m25.111s
sys 0m0.833stime (awk 'NR>=499999900&& NR<=500000000{print} NR==500000001{exit}' copy.log) > /dev/null
real    1m4.743s
user    1m3.824s
sys 0m0.906s

总结

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

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

提示

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

seq 1 1000000000 > file

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/792581.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金融保险行业ITSM案例分析报告

一、 项目背景 随着金融保险行业竞争的日益激烈以及信息技术的快速发展,数字化转型已成为企业发展的必由之路。然而,许多金融机构的信息中心仍然面临“重建设轻运维”的问题,即在信息化基础设施建设投入巨大之后,后续的运维管理却未能跟上步伐,导致信息化支撑力量薄弱。这…

maven项目中引入本地jar包配置

服务在本地可以正常运行,打包后放在服务器就无法运行,原来是引入的本地jar包maven没有打包上去 首先jar包是放在资源目录下的lib里pom文件在引入时指定jar包的路径,maven引入不会报错,但是打包后没有这个jar包<dependency><groupId>com.sun.jna.examples</g…

在stable diffussion中控制生成图片的光线Kj

合集 - AIGC(27)1.轻松复现一张AI图片04-222.Stable Diffusion中的常用术语解析04-233.Stable diffusion中这些重要的参数你一定要会用04-244.Stable Diffusion中的embedding04-255.怎么使用Stable diffusion中的models05-286.Stable Diffusion WebUI详细使用指南05-297.Stable…

NET程序内存泄漏处理技巧/调试内存泄漏教程

NET程序内存泄漏处理技巧/调试内存泄漏教程NET程序内存泄漏处理技巧/调试内存泄漏教程 什么是Dump(dmp)文件? Dump是计算机技术中的重要概念,用于将内存中的数据转储到外部存储设备中,以便在出现故障时进行排查和分析。Dump文件又叫内存转储文件或者叫内存快照文件。用于存…

代码随想录day52 || 图论搜索 岛屿数量,岛屿的最大面积

图遍历 dfs 深度优先搜索bfs 广度优先搜索200 岛屿数量(dfs) var dirPath = [][]int{{0, -1}, {1, 0}, {0, 1}, {-1, 0}} // 上, 右, 下, 左 var visited [][]bool func numIslands(grid [][]byte) int {// dfs 深度优先遍历,对于每一个节点,按照上下左右四个固定顺序遍…

采购订单的审批、撤回审批及拒绝 ME29N

原文链接:https://blog.csdn.net/z_x_xing_/article/details/90201003 前台操作,如下图:点击图中的批准按钮,逐级完成采购订单的审批节点。2.查看表中数据发布状态——对应前台界面当前已审批的节点BAPI使用 CALL FUNCTION BAPI_PO_RELEASE EXPORTING PURCHASEORDE…

会话状态在此上下文中不可用——解决方法

原文链接:https://www.cnblogs.com/lczblog/p/3596481.html问题原因分析:项目中包含各种类型的文件 访问.html的时候无法获取Session 解决办法:在上图中出现错误之前添加判断 当访问的是.aspx类型的文件时在访问Session if (!application.Context.Handler.ToString().EndsWi…

naocs 作为服务注册与发现和配置中心

下载和安装 国内的软件,去官网下就行了,下载好后到其 bin 目录执行命令 startup.cmd -m standalone 服务就会启动浏览器访问,能访问到 nacos 界面小试牛刀工程导入依赖 <!-- 当前服务注册到 nacos 需要 --> <dependency><groupId>com.alibaba.cloud</g…

consul 作为服务注册与发现和配置中心

下载安装下载地址:https://developer.hashicorp.com/consul/install?product_intent=consul解压出来只有个 exe 文件,在这个目录打开 shell,consul --version 查看版本,consul agent -dev 开发模式启动启动后访问 localhost:8500 能正常访问到 consul 界面小试牛刀工程导入…

【工具使用】【EasyExcel 】EasyExcel 实现 Excel 作者信息、版本信息等的写入和读取

1 前言 导入的功能,想必大家都做过,大家肯定也都遇到过比如我的模板变化了(比如新增一列、删除一列等),客户在使用的时候可能还是用的老模板进行导入,那么我们在写代码的时候,应该怎么快速识别到呢? 比如可以比较客户导入的 Excel 一列一列的去比较或者列的个数等是可…

查看pdf的字体,导出电脑的字体

1、 查看PDF文件的使用字体: ⑴、打开PDF文件,右上角,点击【文件】⑵、打开属性⑶、查看字体字体结果:2、 导出字体 ⑴、打开控制面板,小图标下面选择字体⑵、打开字体,查看方式改成【详细信息】,按照名称排序⑶、找到字体缩小窗口,点击字体,拖到桌面上就行了

Exchange 2016部署实施案例篇-04.Ex基础配置篇(中)

昨天更新了基础配置的上篇《Exchange 2016部署实施案例篇-04.Ex基础配置篇(上)》,欢迎各位老铁多多提出宝贵意见,非常感谢。 虚拟目录 自动发现配置有的朋友可能知道,虽然在虚拟目录里有自动发现这个选项,但自动发现记录在图形化界面无法配置自动发现地址,如图所示 其实…