日志查询4剑客

1.日志查询4剑客

查看日志不要使用,cat或vim,vi命令。未来的日志文件。有的 日志可达:40G或以上.

如果使用cat查看,会刷屏根本停不下来.

如果使用vi/vim查看,从磁盘中加载到内存,占用系统内存,很 容易导致系统内存不足.

  • linux查询 日志 ,文件较大,通过cat,vi/vim进行查看,系统 可能卡死,可能内存不足
  • 推荐使用不会占用系统太多资源的命令,查看日志:head/tail , less/more

1.1 head 显示文件的头几行,默认是头10行

head选项
-n num 显示头num行,默认显示头10行
显示/etc/passwd 的前5行
head -n5 /etc/passwd
head -n 5 /etc/passwd
head -5 /etc/passwd

一般情况下,使用-数字即可.如果-5报错或无法使用,则使用-n5 形式

1.2 tail 显示文件的后几行,默认是后10行

tail选项
- n num 显示最后num行,默认显示最后10行.
- f follow显示文件末尾的实时更新 一般用于查看日志
显示/etc/passwd 的后5行
tail -n5 /etc/passwd
tail -5 /etc/passwd
  • 可以实时查看文件的末尾的更新
查看/var/log/secure末尾的实时更新
tail -f  /var/log/secure
  • 赠送命令:tailf === tail -f
  • 开两个窗口,一个查看一个写入

image

温馨提示: 如何查看日志,要每一行都看么?

看日志要抓住核心,关键, 线索

这些线索一般是: 关键词语错误提示 : failed, failure,error....

/var/log/secure中 查看,Failed password

1.3 less 按页显示文件内容

一页一页翻看文件内容.也可以进行搜索

less选项与快捷方式 说明
q 退出
空格或f 下一页
b 上一页
G 最后1行
g 第一行
99g 到99行
/ 内容 搜索,n继续向下搜索,N继续向上搜索
选项
less -N 显示行号

1.4 more 按页显示文件内容,到达最后一行就退出

more 功能没有less多

2. wc统计

  • word count/calcuate 统计文件中单词情况,大小,行数,未来工作中用来统计行数。
  • 简单使用是统计文件的行数,未来还可以统计一些命令的结果有 多少行(个).
wc选项 说明
- l 统计行数
统计/etc/services 文件有多少行
wc -l /etc/services
11176 /etc/services

image

未来wc使用案例

一般都是配合其他命令,可以取出xxxx次数. 还可以放在脚本中进行判断

案例:  统计系统用户登录错误次数
grep:过滤
1.过滤出日志中错误信息
[root@oldboy-yang-01 oldboy]# grep 'Failed password' /var/log/secure
Aug  7 07:01:54 oldboy-yang-01 sshd[1811]: Failed password for root from 10.0.0.130 port 45702 ssh2
Aug  7 07:01:54 oldboy-yang-01 sshd[1811]: Failed password for root from 10.0.0.130 port 45702 ssh2
Aug  7 07:02:23 oldboy-yang-01 sshd[1814]: Failed password for root from 10.0.0.130 port 45704 ssh2
2.交个wc -l 统计次数
grep命令的结果传递给wc -l 命令
[root@oldboy-yang-01 oldboy]# grep 'Failed password' /var/log/secure | wc -l
3

grep命令过滤,在文件中,命令结果中找出你要的内容

管道符号

命令1 | 命令2

把前一个命令的结果,传递给后面的命令使用

管道符号 |

3.查询命令位置

3.1which

  • 查询命令的位置
[root@oldboy-yang-01 ~]# which head tail less more wc
/usr/bin/head
/usr/bin/tail
/usr/bin/less
/usr/bin/more
/usr/bin/wc

3.2 whereis

  • 查询命令及相关文件的位置
[root@oldboy-yang-01 ~]# whereis head tail less more wc
head: /usr/bin/head /usr/share/man/man1/head.1.gz
tail: /usr/bin/tail /usr/share/man/man1/tail.1.gz
less: /usr/bin/less /usr/share/man/man1/less.1.gz /usr/share/man/man3/less.3pm.gz
more: /usr/bin/more /usr/share/man/man1/more.1.gz
wc: /usr/bin/wc /usr/share/man/man1/wc.1.gz

4.文件比较命令

未来在服务的配置中,我们需要对比下新旧的配置文件,查看修改 了哪些内容。

这时候我们需要进行文件的对比操作,可以通过diff,vimdiff 命令实现。

  • diff
  • vimdiff
创建测试文件
vim oldboy-a.txt  oldboy-b.txt
编辑
编辑完成后:w 才能切换到下一个文件
切换到下一个文件:n  切换到上一个文件:N

4.1 diff

[root@oldboy-yang-01 ~]# diff oldboy-a.txt  oldboy-b.txt 
4c4
< 4
---
> 3
5a6
> 
a append 增加
c 替换,修改
d 删除

4.2vimdiff

vimdiff oldboy-a.txt oldboy-b.txt

image

5. 排序去重组合

未来生产环境,统计日志,日志分析,系统信息统计,必备命令

  • sort: 排序
  • uniq: 去重并统计次数

5.1 sort - 排序

sort选项 说明
- n number把要排序的内容当做是 数字 ,按照数字大小进行排 序,默认是升序排序(小大).
- k 指定某一列,根据某一列进行排序
- r reverse逆序排序
- t 指定分隔符,只能指定1个字符. 默认是空格

1.1 基本数字排序

root@oldboy-yang-01 ~]# sort sost.txt 

1
11
2
200 
22
3
33
45
6
6
9.9
9999
[root@oldboy-yang-01 ~]# sort -n sost.txt 

1
2
3
6
6
9.9
11
22
33
45
200
9999
[root@oldboy-yang-01 ~]# 

温馨提示:

sortt 默认是按照字母/字符进行对比,会造成数字对比失败.

解决 - n

按照逆顺序(大--小)进行排序
sort -nr sost.txt

[root@oldboy-yang-01 ~]# sort -nr sost.txt 
9999
200
45
33
22
11
9.9
6
6
3
2
1

1.2 对文件某一列进行排序

对文件中某一列进行排序 
[root@oldboy-yang-01 ~]# cat sort-age.txt 
lidao996  18
oldbao    16
li        30
wang      20
chao      25
[root@oldboy-yang-01 ~]# sort -n -k2 sort-age.txt 

oldbao    16
lidao996  18
wang      20
chao      25
li        30
如果是逆序排序则加上-r即可
[root@oldboy-yang-01 ~]# sort -nr -k2 sort-age.txt 
li        30
chao      25
wang      20
lidao996  18
oldbao    16

企业面试题: ll /etc/ 取出大小最大的前5个.

提示: 需要使用管道

翻译: 对ll /etc/第5列进行逆序排序,取出前5个就行

方法01

对ll /etc/第5列进行逆序排序

ll /etc/ |sort -rnk5

取出前5个就行

ll /etc/ |sort -rnk5 |head -5

方法02 默认排序,取出最后5个

ll /etc/ |sort -nk5 |tail -5

1.3 指定分隔符进行排序

对passwd文件的第3列进行排序(逆序)
cp /etc/passwd .
希望sort命令排序的时候每一列之间如果不是空格,sort也能识
别。
sort使用-t选项就行,指定分隔符(每一列之间通过什么分割的)
sort  -t ':'  -rnk3  /oldboy/passwd

1.4 多列排序

熟悉即可

#通过sort对多列进行同时排序
[root@oldboy-yang-01 oldboy]# cat day005-08-sort.txt 
oldboy 40 linux学院    20000
 oldli 18  linux学院   21000
 oldgirl 22  linux学院   30000
 old3 7 linux学院  4040
 old2 7 linux学院  30300
 old1 7 linux学院  50000
 old4 7 linux学院  30000
 old5 8 linux学院  25000
 old6 8 linux学院  15000

 [root@oldboy-yang-01 oldboy]# sort -rnk2 day005-08-sort.txt 
oldboy 40 linux学院    20000
 oldgirl 22  linux学院   30000
 oldli 18  linux学院   21000
 old6 8 linux学院  15000
 old5 8 linux学院  25000
 old4 7 linux学院  30000
 old3 7 linux学院  4040
 old2 7 linux学院  30300
 old1 7 linux学院  50000


[root@oldboy-yang-01 oldboy]# sort -r -n -k2 -k4 day005-08-sort.txt 
oldboy 40 linux学院    20000
 oldgirl 22  linux学院   30000
 oldli 18  linux学院   21000
 old5 8 linux学院  25000
 old6 8 linux学院  15000
 old1 7 linux学院  50000
 old2 7 linux学院  30300
 old4 7 linux学院  30000
 old3 7 linux学院  4040

多列排序说明-k2 -k4表示先对第2列排序,如果第2列有重复的 则对第4列排序

表示优先对第2列排序,第4列是辅助的

  • sort 20k 题目
cat  >/oldboy/sort-20k.txt EOF
 192.168.3.1 00:0F:AF:81:19:1F
 192.168.3.2 00:0F:AF:85:6C:25
 192.168.3.3 00:0F:AF:85:70:42
 192.168.2.20 00:0F:AF:85:55:DE
 192.168.2.21 00:0F:AF:85:6C:09
 192.168.2.22 00:0F:AF:85:5C:41
 192.168.0.151 00:0F:AF:85:6C:F6
 192.168.0.152 00:0F:AF:83:1F:65
 192.168.0.153 00:0F:AF:85:70:03
 192.168.1.10 00:30:15:A2:3B:B6
 192.168.1.11 00:30:15:A3:23:B7
 192.168.1.12 00:30:15:A2:3A:A1
 192.168.1.1 00:0F:AF:81:19:1F
 192.168.2.2 00:0F:AF:85:6C:25
 192.168.3.3 00:0F:AF:85:70:42
 192.168.2.20 00:0F:AF:85:55:DE
 192.168.1.21 00:0F:AF:85:6C:09
 192.168.2.22 00:0F:AF:85:5C:41
 192.168.0.151 00:0F:AF:85:6C:F6
 192.168.1.152 00:0F:AF:83:1F:65
 192.168.0.153 00:0F:AF:85:70:03
 192.168.3.10 00:30:15:A2:3B:B6
 192.168.1.11 00:30:15:A3:23:B7
 192.168.3.12 00:30:15:A2:3A:A1
 
指定分隔符,多列排序的时候容易出现排序失误。
这时候需要我们手动告诉sort, 排序的范围.

# 以.为分隔符
sort -t"."  -rn  -k3  sort-20k.txt
sort -t"."  -rn  -k3,3  -k4,4 sort-20k.txt

-rn 数字逆序排序
-k3,3 表示仅对第3列排序
-k4,4 表示仅对第4列排序

5.1 uniq

unique 独一无二.

  • 去重(去掉重复的留下唯一的)
uniq选项
- c 去重并显示次数(重复次数)
[root@oldboy-yang-01 oldboy]# cat uniq.txt 
ldboy
oldboy
oldboy
oldboy
oldboy
oldboy
lidao
lidao
lidao
lidao
lidao
smile
smile
smile
smile
blood
blood
blood
blood


root@oldboy-yang-01 oldboy]# uniq -c uniq.txt 
      1 ldboy
      5 oldboy
      5 lidao
      4 smile
      4 blood

uniq只能对相邻的行进行合并(去重),如果不相邻,需 要通过sort命令调整为相的

先sort , 然后uniq

# 新建测试文件
oldboy
 oldboy
 oldboy
 oldboy
 lidao
 lidao
 smile
 blood
 blood
 oldboy
 oldboy
 lidao
 lidao
 lidao
 smile
 smile
 smile
 blood
 blood
 
# 1.先对数据进行排序,相同的数据会在一起
sort  uniq.txt 

#2.然后通过uniq -c去重并统计次数
sort  uniq.txt |uniq -c 

#3.然后可以对uniq -c结果进行排序(最大的在最上面,降序排列)
sort  uniq.txt |uniq -c |sort -rn

6. 日期组合

在Linux中我们需要日常查看系统的时间,保证整个网站所有服务 器的系统时间一致的.

未来在运维的日常操作中,书写脚本的时候也需要使用时间,比如 创建以当前日期命名的文件,目录,备份.

  • date
  • ntpdate
  • 特殊符号

6.1 date

设置或查看系统的日期,时间命令

未来主要用于查看日期或去日期

date选项 以xxxx格式显示日期与时间
+ %F 年-月-日 %Y-%m-%d
%w 周几
+%T %H:%M:%S 时:分:秒
- d 根据说明修改时间
- s 修改时间
  • 按照指定格式显示时间或日期
按照指定格式显示日期 年-月-日 2022-11-11
date +%F
2022-07-19
 full 可以理解为完整的日期
 
 
按照指定格式显示日期  年月日  20221111
Year
month
day
date + %Y%m%d
20220719


显示当前时间 时:分:秒
Hour
Mintue
Second
date  +%T #T time
date +%H:%H:%M:%S

 显示当前日期为 年-月-日_周几
 date +%F_%w
 2022-07-19_2
  • 按照说明显示指定时间或日期
[root@oldboy-yang-01 oldboy]# date -d '-1 day'
2024年 08月 06日 星期二 09:43:40 CST
[root@oldboy-yang-01 oldboy]# date -d '1 day'
2024年 08月 08日 星期四 09:43:51 CST
[root@oldboy-yang-01 oldboy]# 

# 显示1天的日期 按照年-月-日_周几_小时 格式显示
[root@oldboy-yang-01 oldboy]# date -d '-1day' +%F_%w_%H
2024-08-06_2_09

  • 手动修改时间
date -s '20221111 11:11:11'
date -s '20221111'

6.2 ntpdate 同步时间的命令

# 修改系统时间,让系统时间不同步
date -s '20221111'
# 安装时间同步命令
yum install -y ntpdate
# 进行时间同步
[root@oldboy-yang-01 oldboy]# ntpdate ntp1.aliyun.com
 7 Aug 18:15:47 ntpdate[2764]: step time server 120.25.115.20 offset 30365.520598 sec
# 最后检查
date命令查看时间

提示offset xxx sec表示同步成功

ntp1.aliyun.com 是阿里云的时间服务器之一.未来也可以自 己搭建.

ntp1..ntp7

6.3 修改时区

# 修改时区
timedatectl set-timezone   Asia/Shanghai
# 查看时区
[root@oldboy-yang-01 oldboy]# timedatectl status 
      Local time: 三 2024-08-07 18:20:44 CST
  Universal time: 三 2024-08-07 10:20:44 UTC
        RTC time: 三 2024-08-07 18:20:28
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

6.4 应用实站

  • date应用场景:企业备份的时候,给压缩包加上时间

    创建文件或目录,给文件名或目录名字加上个时间
    
  • 特殊符号:`` , 反引号里面的命令会被优先执行

[root@oldboy-yang-01 oldboy]# which find
/usr/bin/find
[root@oldboy-yang-01 oldboy]# ll /usr/bin/find
-rwxr-xr-x. 1 root root 199304 10月 31 2018 /usr/bin/find
[root@oldboy-yang-01 oldboy]# ll `which find`
-rwxr-xr-x. 1 root root 199304 10月 31 2018 /usr/bin/find

ll which find 的执行流程:

1. 先执行which命令找出find命令的绝对路径位置

2. 输出这个位置(显示)

3. 运行ll 命令 find命令的位置

  • 创建backup-etc-今天的年-月-日.txt
date +%F
touch  backup-etcxxxxx.txt

touch backup-etc-`date +%F'.txt
ls -l backup-etc-2022-07-19.txt

总结:

image

posted @   殇ベ墨~  阅读(18)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示