📜  计算唯一 ip 地址 linux accsses 日志 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:57:28.848000             🧑  作者: Mango

计算唯一 IP 地址 Linux Access 日志 - Shell-Bash

本篇介绍如何通过 Shell-Bash 编写程序计算 Linux Access 日志中唯一 IP 地址的数量。我们将演示如何使用 sed、sort、uniq 等 Shell 命令,以及正则表达式来解析和过滤 log 文件,并以不同方式输出结果。

准备工作

首先,我们需要准备一个 Log 文件,以便测试我们的脚本。可以使用 Apache web 服务器或 Nginx 服务器来生成访问日志文件。这里,我将使用类似下面这样的日志数据片段作为演示:

192.168.0.102 - - [11/Oct/2021:23:55:23 +0800] "GET / HTTP/1.1" 200 1023 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:77.0) Gecko/20190101 Firefox/77.0"
192.168.0.103 - - [11/Oct/2021:23:57:32 +0800] "GET /about HTTP/1.1" 200 2056 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:77.0) Gecko/20190101 Firefox/77.0"
192.168.0.104 - - [11/Oct/2021:23:58:43 +0800] "GET /articles HTTP/1.1" 200 3045 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:77.0) Gecko/20190101 Firefox/77.0"
192.168.0.102 - - [11/Oct/2021:23:59:12 +0800] "GET /contact HTTP/1.1" 200 1764 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:77.0) Gecko/20190101 Firefox/77.0"
192.168.0.102 - - [11/Oct/2021:23:59:35 +0800] "GET /sitemap HTTP/1.1" 200 3288 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:77.0) Gecko/20190101 Firefox/77.0"
192.168.0.105 - - [11/Oct/2021:23:59:56 +0800] "GET /admin HTTP/1.1" 200 4198 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:77.0) Gecko/20190101 Firefox/77.0"
步骤
1. 解析并提取 IP 地址

首先,我们需要从日志文件中提取 IP 地址。这可以通过 sed 命令和正则表达式来实现。我们可以使用以下命令来提取文件中的 IP 地址:

sed -nr 's/^([0-9]{1,3}\.){3}[0-9]{1,3}.*/\0/p' access.log

该命令将从 access.log 文件中提取所有的 IP 地址,并将其输出到控制台。该命令的输出应该与以下内容类似:

192.168.0.102 
192.168.0.103 
192.168.0.104 
192.168.0.102 
192.168.0.102 
192.168.0.105 
2. 过滤唯一 IP 地址

接下来,我们需要从提取好的 IP 地址列表中过滤出唯一的 IP 地址。这可以通过 sort 和 uniq 命令实现。我们可以使用以下命令来过滤出唯一的 IP 地址:

sed -nr 's/^([0-9]{1,3}\.){3}[0-9]{1,3}.*/\0/p' access.log | sort | uniq

该命令将从 access.log 文件中提取所有的 IP 地址并进行排序,然后将所有重复的 IP 地址去除,最终输出所有的唯一 IP 地址。该命令的输出应该与以下内容类似:

192.168.0.102 
192.168.0.103 
192.168.0.104 
192.168.0.105 
3. 统计唯一 IP 地址数量

最后,我们需要通过 wc 命令来统计唯一的 IP 地址数量。我们可以使用以下命令来统计唯一 IP 地址的数量:

sed -nr 's/^([0-9]{1,3}\.){3}[0-9]{1,3}.*/\0/p' access.log | sort | uniq | wc -l

该命令将统计唯一 IP 地址的数量,并将其输出到控制台。该命令的输出应该与以下内容相同:

4
总结

在本篇文章中,我们演示了如何使用 Shell-Bash 编写程序来解析并过滤 Access 日志文件中的 IP 地址,并统计唯一 IP 地址的数量。我们使用了 sed、sort、uniq、wc 等多个 Shell 命令来实现这个任务,同时还介绍了正则表达式的使用。这些知识点在 Shell-Bash 编程中是非常基础和重要的,希望能够对 Shell-Bash 编程初学者有所帮助。