Gia*_*968 4 linux unix bash logging cat
我正在运行此命令以从服务器获取失败登录尝试的记录auth.log,并且运行良好:
sudo cat /var/log/auth.{log,log.1} | grep 'Failed password' | grep sshd | awk '{print $1,$2}' | sort -k 1,1M -k 2n | uniq -c
Run Code Online (Sandbox Code Playgroud)
但问题是——就像世界上的每一台服务器一样——我有一些由日志轮换创建的 GZipped 档案,这些档案不会被这个命令解析:
-rw-r----- 1 syslog adm 7822722 Oct 31 13:44 /var/log/auth.log
-rw-r----- 1 syslog adm 12532511 Oct 25 06:59 /var/log/auth.log.1
-rw-r----- 1 syslog adm 2250939 Oct 18 06:55 /var/log/auth.log.2.gz
-rw-r----- 1 syslog adm 2139669 Oct 11 07:06 /var/log/auth.log.3.gz
-rw-r----- 1 syslog adm 2769919 Oct 4 06:54 /var/log/auth.log.4.gz
Run Code Online (Sandbox Code Playgroud)
为了解决这些问题,我有一个使用zcat代替的命令变体,cat但是必须运行两个命令来获取这些数据有点麻烦。有什么方法可以将cat和zcat命令组合成一个命令,以便获得组合结果?我知道我可以编写一些 Bash 脚本来过滤压缩文件和未压缩文件,但是我在各种服务器上使用这个当前的单行程序,我想要一个单行程序,我可以在需要时快速参考和使用。
我一直在做一些安全审计和防火墙调整,并运行了这个命令,它可以很好地记录来自auth.logUbuntu Linux 机器上文件的“密码失败”尝试:
sudo cat /var/log/auth.{log,log.1} | grep 'Failed password' | grep sshd | awk '{print $1,$2}' | sort -k 1,1M -k 2n | uniq -c
Run Code Online (Sandbox Code Playgroud)
它工作得很好!输出如下所示:
5909 Oct 18
13444 Oct 19
351 Oct 20
162 Oct 21
499 Oct 22
377 Oct 23
145 Oct 24
10897 Oct 25
76 Oct 26
54 Oct 27
310 Oct 28
1024 Oct 29
208 Oct 30
30 Oct 31
Run Code Online (Sandbox Code Playgroud)
虽然这适用于未压缩的日志,但由于日志会旋转并被压缩,因此总会有一些 GZip 压缩文件也可以很好地记录下来。所以我运行上述命令的这个变体,它使用zcat:
sudo zcat -q /var/log/auth.log* | grep 'Failed password' | grep sshd | awk '{print $1,$2}' | sort -k 1,1M -k 2n | uniq -c
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
gzip: /var/log/auth.log: not in gzip format
gzip: /var/log/auth.log.1: not in gzip format
10413 Sep 27
15977 Sep 28
12297 Sep 29
14438 Sep 30
23394 Oct 1
12912 Oct 2
15844 Oct 3
19697 Oct 4
15350 Oct 5
12358 Oct 6
12692 Oct 7
8377 Oct 8
10875 Oct 9
565 Oct 10
16027 Oct 11
10422 Oct 12
6808 Oct 13
26891 Oct 14
9493 Oct 15
5138 Oct 16
9415 Oct 17
2226 Oct 18
Run Code Online (Sandbox Code Playgroud)
如您所见,输出在工作时也能工作,但如果该命令的cat和zcat变体可以简单地组合成一个命令,那就太好了。那怎么办呢?
奖励积分:
这些不是关键问题,但如果可以在解决方案中以某种方式解决它们会很好:
zcat输出的顶部,zcat尝试处理两个未压缩的文件有两个错误。抑制它会很好。cat和zcat命令如何显示 10 月 18 日的数据;日志轮换发生的一天。有什么办法可以将命令中的这两个值相加吗?如果没有,我可以使用两行 10 月 18 日的数据,但我必须手动添加不同的值。可以使用zgrepwhich 将在必要时解压缩,因此适用于纯文本和压缩输入。同样,grep/zgrep 可以直接处理在这种情况下需要的多个文件,因为混合压缩和文本到标准输入并不总是按预期工作。使用-h或抑制 grep 输出中的文件名--no-filename。
sudo zgrep -h 'Failed password' /var/log/auth.* | grep sshd | awk '{print $1,$2}' | sort -k 1,1M -k 2n | uniq -c
Run Code Online (Sandbox Code Playgroud)
手册页:
ZGREP(1) ZGREP(1)
NAME
zgrep - search possibly compressed files for a regular expression
SYNOPSIS
zgrep [ grep_options ] [ -e ] pattern filename...
DESCRIPTION
Zgrep invokes grep on compressed or gzipped files. All options specified
are passed directly to grep. If no file is specified, then the standard
input is decompressed if necessary and fed to grep. Otherwise the given
files are uncompressed if necessary and fed to grep.
If the GREP environment variable is set, zgrep uses it as the grep program
to be invoked.
AUTHOR
Charles Levert (charles@comm.polymtl.ca)
SEE ALSO
grep(1), gzexe(1), gzip(1), zdiff(1), zforce(1), zmore(1), znew(1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
389 次 |
| 最近记录: |