如何每小时自动获取ips.txt文件中的新增数据并执行Bash操作?
实现每小时获取ips.txt的新增IP并处理的方法
核心思路是通过记录文件读取的偏移量,每次仅读取上次读取位置之后的新增内容,具体步骤如下:
1. 编写处理脚本
创建一个名为process_new_ips.sh的脚本,内容如下:
#!/bin/bash # 定义目标文件和偏移量记录文件的路径 IP_FILE="ips.txt" OFFSET_FILE="ips.offset" # 初始化偏移量文件(如果不存在则设为0) if [ ! -f "$OFFSET_FILE" ]; then echo 0 > "$OFFSET_FILE" fi # 读取上次记录的偏移量 LAST_OFFSET=$(cat "$OFFSET_FILE") # 获取当前ips.txt的文件大小 CURRENT_SIZE=$(stat -c %s "$IP_FILE") # 检查是否有新增内容 if [ "$CURRENT_SIZE" -gt "$LAST_OFFSET" ]; then # 读取从上次偏移量之后的所有新增内容 tail -c +$((LAST_OFFSET + 1)) "$IP_FILE" | while read -r IP_LINE; do # 这里替换为你需要执行的Bash操作,示例为打印IP # 注意:如果shodan输出的每行是单个IP,直接处理即可;如果有其他内容,需先提取IP echo "处理新增IP: $IP_LINE" # 示例操作:比如将IP存入另一个文件、执行端口扫描等 # echo "$IP_LINE" >> processed_ips.txt # nmap -Pn "$IP_LINE" done # 更新偏移量为当前文件大小,下次从这里开始读取 echo "$CURRENT_SIZE" > "$OFFSET_FILE" fi
2. 赋予脚本执行权限
在终端中运行以下命令:
chmod +x process_new_ips.sh
3. 设置定时任务(每小时执行一次)
通过crontab配置定时任务:
- 打开crontab编辑界面:
crontab -e
- 在文件末尾添加一行(替换为脚本的实际路径):
0 * * * * /home/your_user/process_new_ips.sh
- 保存并退出,crontab会自动生效,每小时整点执行一次脚本。
关键说明
- 偏移量文件
ips.offset会记录每次读取到的文件大小,确保每次只处理新增的内容 - 脚本中的
tail -c +$((LAST_OFFSET + 1))用于从指定字节位置开始读取文件内容,适配文件追加的场景 - 如果shodan输出的内容包含非IP信息,需要在
while read循环中先提取IP(比如用grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'过滤)
内容的提问来源于stack exchange,提问作者ELMO
相关产品推荐
相关产品推荐

