shell 访问ip最多的前5个

博客仅提供了一个链接http://www.jbxue.com/article/5247.html,标签为Linux,未包含其他关键信息。
统计 Nginx 访问日志中访问最多 10 个 IP 有多种方法,以下分别介绍使用 Shell 命令和 Python 脚本的实现方式: ### 使用 Shell 命令 可以使用管道组合多个命令来实现统计,命令如下: ```bash cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10 ``` 下面是对该命令的详细解析: - `cat access.log`:输出 `access.log` 文件内容到标准输出,若直接操作文件,可省略 `cat`,如 `awk '{...}' access.log`,但通过管道传递更清晰[^2]。 - `awk '{print $1}'`:提取每行的第一列(默认以空格/Tab 分隔),假设日志格式为 IP 时间 请求方法 URL ...,这里提取的是客户端 IP 地址[^2]。 - `sort`:对提取的 IP 列表按字母顺序排序,为后续 `uniq -c` 统计做准备,因为 `uniq` 依赖相邻重复项[^2]。 - `uniq -c`:统计连续重复行出现的次数,并添加计数缀,用于计算每个 IP 地址在日志中出现的次数[^2][^3]。 - `sort -nr`:对统计结果二排序,`-n` 表示按数值大小排序(而非字母顺序),`-r` 表示逆序排列(从大到小),使最常见的 IP 地址(即出现次数最多的)首先出现[^2]。 - `head -10`:仅保留排序后的 10 行,输出出现次数最多 10 个 IP 及其访问次数[^2]。 ### 使用 Python 脚本 ```python from collections import Counter log_file = 'access.log' ip_counter = Counter() with open(log_file, 'r') as f: for line in f: fields = line.split() if fields: ip = fields[0] ip_counter[ip] += 1 top_10_ips = ip_counter.most_common(10) for ip, count in top_10_ips: print(f"{count} {ip}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值