三剑客实战Nginx日志分析

录播课程问题回顾

问题1:希望能够说明一下在windows下使用linux命令的一些限制
问题2:在windows系统下,进行chmod更改文件权限,只有chmod 000可以生效
问题3:在git bash中通过adb shell,进入安卓底层,但不显示目录路径
问题4:在git bash中进入安卓底层,使用chmod进行文件权限更改,只有chmod 777和chmod 555 可以生效,其他的都不生效
问题5:在git bash中通过adb shell ,进入安卓底层,使用netstat -lnpt显示的并不全是监听端口
问题6:正则实战过程中,第四个实战题,使用的是^\d{5,12}$,但当文本为:
12345
123456ab
会筛选出0匹配结果

作业

  1. 使用 netstat -antul 命令查看信息,查看服务器开启监听的端口。是Local Address 字段的噢!

  2. 查看 /etc/ 目录下,哪些文件里面包含root关键字

  3. 提取nginx.log中的 4开头(例如400,404)和5开头的报错的信息并打印(grep,awk)

  4. 使用 sed 命令去删除一个文件中的所有空行

完成后,可以将命令以及截图贴到回复区

1.查看开启监听的端口

netstat -antul|awk ‘NR>2{print $4}’
开启监听的端口

2.查看哪些文件包含root关键字

grep -rl /etc
查看哪些文件里面包含root关键字

3.提取nginx.log中的 4开头和5开头的报错的信息并打印

grep

grep -E ‘\s(4|5)[0-9]{2}\s’ nginx.log|cat -n
提取nginx.log中的 4开头和5开头的报错的信息并打印(grep)

awk

awk ‘$9~/^(4|5)/’ nginx.log|cat -n
提取nginx.log中的 4开头和5开头的报错的信息并打印(awk)

4.使用 sed 命令去删除一个文件中的所有空行

sed -i.my ‘/^\s*$/d’ mytest.txt

1、使用 netstat -antul 命令查看信息,查看服务器开启监听的端口。是 Local Address 字段的噢!


2、 查看 /etc/ 目录下,哪些文件里面包含 root 关键字
grep -rl ‘root’ /etc/

3、提取nginx.log中的 4开头(例如400,404)和5开头的报错的信息并打印(grep,awk)
awk ‘$9 ~ /(4|5)[0-9]{2}/’ nginx.log

grep -E ‘"\s(4|5)[0-9]{2}\s’ nginx.log

疑问:
awk ‘$9 ~ /(4|5)\d{2}/’ nginx.log和grep -E ‘"\s(4|5)\d{2}\s’ nginx.log筛选出来的结果为0
4、使用 sed 命令去删除一个文件中的所有空行
sed ‘/^$/d’ rex.txt

1.使用 netstat -antul 命令查看信息,查看服务器开启监听的端口。是Local Address 字段的噢!

netstat -antul | awk ‘NR>2{print$4}’
image

2.查看 /etc/ 目录下,哪些文件里面包含root关键字

grep -rn “root” /etc/
image

3.提取nginx.log中的 4开头(例如400,404)和5开头的报错的信息并打印(grep,awk)

awk ‘$9~/^4|^5/’ nginx.log
image
grep -e ‘HTTP/1.1" [45]’ nginx.log
image

4.使用 sed 命令去删除一个文件中的所有空行

sed ‘/^\s*$/d’ test.txt
image

1、查看服务器开启监听的端口
netstat -antul|awk ‘NR>2{print $4}’
image
2、看 /etc/ 目录下,包含root关键字的文件
grep -H -r “root” /etc/ | cut -d: -f1 | uniq
image
3、提取nginx.log中的 4开头(例如400,404)和5开头的报错的信息并打印(grep,awk)
grep -E ‘\s(4|5)[0-9]{2}\s’ nginx.log | cat -n
image
awk ‘$9~/^(4|5)/’ nginx.log | cat -n
image
4、使用 sed 命令去删除一个文件中的所有空行
sed ‘/^\s*$/d’ muwj.txt
image

作业

1.使用 netstat -antul 命令查看信息,查看服务器开启监听的端口。是 Local Address 字段的噢!

netstat -antul | awk 'NR>2{print $4}' | head -n 10

2. 查看 /etc/ 目录下,哪些文件里面包含 root 关键字

grep -rl 'root' /etc/ | head -n 10

作业2改

3.提取nginx.log中的 4开头(例如400,404)和5开头的报错的信息并打印(grep,awk)

cat nginx.log | grep -E ' (4|5)[0-9]{2} ' | head -n 20
cat nginx.log | grep -E '\s(4|5)[0-9]{2}\s' | head -n 20 
cat nginx.log | awk '$9~/(4|5)/' | head -n 20 

4.使用 sed 命令去删除一个文件中的所有空行

sed -i 's/ //g' test
sed -i '/^$/d' test

作业4

作业-20200410

1. 使用 netstat -antul 命令查看信息,查看服务器开启监听的端口。是 Local Address 字段的噢!

命令:netstat -antul | awk -F" " ‘/LISTEN/ {print $4}’

image

2. 查看 /etc/ 目录下,哪些文件里面包含 root 关键字

命令:grep -rn “root” * -l

image

3.提取nginx.log中的 4开头(例如400,404)和5开头的报错的信息并打印(grep,awk)

awk命令:awk ‘$9 ~ /^4|^5/’ nginx.log

grep命令:grep '\ 4[0-9][0-9]\ |\ 5[0-9][0-9]\ ’ nginx.log

或者grep -E '\ 4[0-9][0-9]\ |\ 5[0-9][0-9]\ ’ nginx.log


4.使用 sed 命令去删除一个文件中的所有空行

命令:sed ‘/^$/d’ testsed.txt

image

作业

  1. 使用 netstat -antul 命令查看信息,查看服务器开启监听的端口。是 Local Address 字段的噢!
  • 命令:netstat -antul | awk ‘NR>2{print $4,$6}’ | grep ‘LISTEN’
  • 截图:
    image
  1. 查看 /etc/ 目录下,哪些文件里面包含 root 关键字
  • 命令:grep -rl ‘root’ /etc/
  • 截图:
    image
  1. 提取nginx.log中的 4开头(例如400,404)和5开头的报错的信息并打印(grep,awk)
  • awk命令:awk ‘$9 ~/^4|^5/’ nginx.log | grep -E ‘\s4[0-9]{2}\s|\s5[0-9]{2}\s’
  • awk截图:
    image
  • grep命令:grep -E ‘\s4[0-9]{2}\s|\s5[0-9]{2}\s’ nginx.log
  • grep截图:
    image
  1. 使用 sed 命令去删除一个文件中的所有空行
  • 命令:sed -i.bak ‘/^\s*$/d’ test.txt
  • 截图:
    image

作业

  1. 使用 netstat -antul 命令查看信息,查看服务器开启监听的端口。 Local Address 字段
    netstat -antul | awk ‘NR>2{print $4}’|head -n 15
    image
  2. 查看 /etc/ 目录下,哪些文件里面包含 root 关键字
    grep -r root /etc
    image
  3. 提取nginx.log中的 4开头(例如400,404)和5开头的报错的信息并打印(grep,awk)
    grep -E ‘\bHTTP/1.1" [4-5][0-9]{2}\b’ nginx.log

    awk ‘$9 ~ /[4-5][0-9][0-9]/’ nginx.log
    image
  4. 使用 sed 命令去删除一个文件中的所有空行
    sed ‘/^$/d’ test.txt
    image

正则表达式风格不一样,\d 是 Perl 风格的,awk 默认使用基于 POSIX 规则的 GNU ERE。

awk '$9 ~ /(4|5)[0-9]{2}/' nginx.log
awk '$9 ~ /(4|5)[[:digit:]]{2}/' nginx.log

1. 使用 netstat -antul 命令查看信息,查看服务器开启监听的端口。是 Local Address 字段的噢!

netstat -antul | awk ‘NR>2 {print $4}’

2. 查看 /etc/ 目录下,哪些文件里面包含 root 关键字

grep -rl root /etc/
image

疑问:如何把 Permission denied结尾的行过滤掉呢?我想用 grep -v 但是没有成功

3. 提取nginx.log中的 4开头(例如400,404)和5开头的报错的信息并打印(grep,awk)

awk ‘$9 ~ /^4|^5/’ nginx.log

grep -E ‘1.1"\s(4|5)’ nginx.log

4. 使用 sed 命令去删除一个文件中的所有空行

sed ‘/^$/d’ test1.txt
image

  1. 使用 netstat -antul 命令查看信息,查看服务器开启监听的端口。是 Local Address 字段的噢!
    $netstat -antul | awk ‘NR>2 {print $4}’ | head -n 10
    image
  2. 查看 /etc/ 目录下,哪些文件里面包含 root 关键字
    grep -rl ‘root’ /etc | hear -n 10
    image
  3. 提取nginx.log中的 4开头(例如400,404)和5开头的报错的信息并打印(grep,awk)
    grep ‘/s (4|5)[0-9]{2} /s’ nginx.log | head -n 10
    image
    awk ‘$9~/(4|5)[0-9]{2}/’ nginx.log | head -n 10
  4. 使用 sed 命令去删除一个文件中的所有空行
    sed -e ‘/^$/d’ 3.txt
    image

20200409作用提交:
1.使用 netstat -antul 命令查看信息,查看服务器开启监听的端口,显示Local Address 字段
netstat -antul|awk ‘NR>2{print $4}’

image

2…查看 /etc/ 目录下,哪些文件里面包含root关键字
grep -rl root /etc

image

3.提取nginx.log中的 4开头(例如400,404)和5开头的报错的信息并打印(grep,awk)
(1)gerp
grep -E ‘\s(4|5)[0-9]{2}\s’ nginx.log

(2)awk

grep -E ‘\s(4|5)[0-9]{2}\s’ nginx.log

4.使用 sed 命令去删除一个文件中的所有空行
sed -i.back ‘/^$/d’ 3.txt (备注:-i删除的是源文件的内容,所以使用-i.back是在修改前做好备份,以便养成良好习惯 )
image

最后有个疑问请教老师:我们怎么判断哪些正则表达式使用的是哪种语言呢?比如:\b属于perl语法,使用时grep需要-P

第二个问题,加上关键字就好。回复内容如果有代码的话可以用3个反引号 “```代码```” 把代码包围起来。会显示代码原格式,还有配色。

删除空行,这个只能把空格搞没。空行默认也是有字符的 ^$

sed -i 's/ //g' test 只能处理空格,空行处理不了。

系统类工具用 POSIX 的多。
编程语言类感觉 Perl 的多。

可以参考:https://zh.wikipedia.org/wiki/正则表达式

多谢提醒,我原本的想法是认为删除操作时替换形式的一种,所以尝试了这种方式。看来这样取巧的操作还是有盲点的 :joy:

作业

1. 使用 netstat -antul 命令查看信息,查看服务器开启监听的端口。是 Local Address 字段的噢!

命令 netstat -antul | awk '{print $4,$6}' | grep LISTEN

image

2. 查看 /etc/ 目录下,哪些文件里面包含 root 关键字

命令 grep -rn "root" /etc | grep -v " Permission denied " | grep 'root'

:warning: -v 过滤不彻底,执行结果中仍然带有“ Permission denied ”的记录

3. 提取nginx.log中的 4开头(例如400,404)和5开头的报错的信息并打印(grep,awk)

命令  grep -E '\s4[0-9]{2}\s|\s5[0-9]{2}\s' nginx.log

命令  awk '$9 ~ /^4|^5/' nginx.log 

:warning:awk命令、grep命令,过滤的结果不一致,这是什么情况

4. 使用 sed 命令去删除一个文件中的所有空行

命令  sed '/^$/d' 123.txt

image

关闭