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
- 开两个窗口,一个查看一个写入
温馨提示: 如何查看日志,要每一行都看么?
看日志要抓住核心,关键, 线索
这些线索一般是: 关键词语错误提示 : 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
未来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
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学院 20000oldli 18 linux学院 21000oldgirl 22 linux学院 30000old3 7 linux学院 4040old2 7 linux学院 30300old1 7 linux学院 50000old4 7 linux学院 30000old5 8 linux学院 25000old6 8 linux学院 15000[root@oldboy-yang-01 oldboy]# sort -rnk2 day005-08-sort.txt
oldboy 40 linux学院 20000oldgirl 22 linux学院 30000oldli 18 linux学院 21000old6 8 linux学院 15000old5 8 linux学院 25000old4 7 linux学院 30000old3 7 linux学院 4040old2 7 linux学院 30300old1 7 linux学院 50000[root@oldboy-yang-01 oldboy]# sort -r -n -k2 -k4 day005-08-sort.txt
oldboy 40 linux学院 20000oldgirl 22 linux学院 30000oldli 18 linux学院 21000old5 8 linux学院 25000old6 8 linux学院 15000old1 7 linux学院 50000old2 7 linux学院 30300old4 7 linux学院 30000old3 7 linux学院 4040
多列排序说明-k2 -k4表示先对第2列排序,如果第2列有重复的 则对第4列排序
表示优先对第2列排序,第4列是辅助的
- sort 20k 题目
cat >/oldboy/sort-20k.txt EOF192.168.3.1 00:0F:AF:81:19:1F192.168.3.2 00:0F:AF:85:6C:25192.168.3.3 00:0F:AF:85:70:42192.168.2.20 00:0F:AF:85:55:DE192.168.2.21 00:0F:AF:85:6C:09192.168.2.22 00:0F:AF:85:5C:41192.168.0.151 00:0F:AF:85:6C:F6192.168.0.152 00:0F:AF:83:1F:65192.168.0.153 00:0F:AF:85:70:03192.168.1.10 00:30:15:A2:3B:B6192.168.1.11 00:30:15:A3:23:B7192.168.1.12 00:30:15:A2:3A:A1192.168.1.1 00:0F:AF:81:19:1F192.168.2.2 00:0F:AF:85:6C:25192.168.3.3 00:0F:AF:85:70:42192.168.2.20 00:0F:AF:85:55:DE192.168.1.21 00:0F:AF:85:6C:09192.168.2.22 00:0F:AF:85:5C:41192.168.0.151 00:0F:AF:85:6C:F6192.168.1.152 00:0F:AF:83:1F:65192.168.0.153 00:0F:AF:85:70:03192.168.3.10 00:30:15:A2:3B:B6192.168.1.11 00:30:15:A3:23:B7192.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
bloodroot@oldboy-yang-01 oldboy]# uniq -c uniq.txt 1 ldboy5 oldboy5 lidao4 smile4 blood
uniq只能对相邻的行进行合并(去重),如果不相邻,需 要通过sort命令调整为相的
先sort , 然后uniq
# 新建测试文件
oldboyoldboyoldboyoldboylidaolidaosmilebloodbloodoldboyoldboylidaolidaolidaosmilesmilesmilebloodblood# 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-19full 可以理解为完整的日期按照指定格式显示日期 年月日 20221111
Year
month
day
date + %Y%m%d
20220719显示当前时间 时:分:秒
Hour
Mintue
Second
date +%T #T time
date +%H:%H:%M:%S显示当前日期为 年-月-日_周几date +%F_%w2022-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.com7 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 CSTUniversal time: 三 2024-08-07 10:20:44 UTCRTC time: 三 2024-08-07 18:20:28Time zone: Asia/Shanghai (CST, +0800)NTP enabled: n/a
NTP synchronized: noRTC in local TZ: noDST 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.txttouch backup-etc-`date +%F'.txt
ls -l backup-etc-2022-07-19.txt