shell爬虫场景下如何统计jpg图片被打开的总次数
统计JPG文件累计打开次数的实现方案
首先需要明确前提:默认Linux文件系统(ext4/XFS等)不会持久化存储文件的累计打开总次数,仅会保留最后一次访问的时间戳(atime)。如果未提前配置审计或监控规则,无法回溯历史累计打开次数。以下是两种可落地的实现方案:
方案1:使用auditd审计工具(推荐,适合长期稳定统计)
auditd是Linux系统自带的审计框架,可精准记录所有文件访问事件:
- 第一步:安装auditd
Debian/Ubuntu系列:apt install -y auditd
CentOS/RHEL系列:yum install -y audit - 第二步:添加JPG文件访问监控规则
参数说明:auditctl -w /你的爬虫图片存储目录绝对路径 -p r -k jpg_access-w指定要监控的目录,-p r表示监控读操作(打开读取图片即触发),-k jpg_access给事件打自定义标签方便后续过滤 - 第三步:统计累计打开次数
执行以下命令即可输出所有jpg文件从规则添加后开始的累计打开次数:ausearch -k jpg_access -f .jpg | grep -c 'type=PATH'
方案2:使用inotifywait轻量监控(适合临时统计)
不需要复杂的审计配置,适合短期临时统计场景:
- 第一步:安装inotify监控工具
Debian/Ubuntu系列:apt install -y inotify-tools
CentOS/RHEL系列:yum install -y inotify-tools - 第二步:启动监控并记录访问日志
该命令会后台运行,所有jpg的打开事件都会写入日志文件nohup inotifywait -m -e open /你的爬虫图片存储目录绝对路径/*.jpg | while read path action file; do [[ "$file" =~ \.jpg$ ]] && echo "$(date +%s) $file" >> /tmp/jpg_access.log done & - 第三步:统计累计打开次数
wc -l /tmp/jpg_access.log | awk '{print $1}'
附加说明
如果仅需要统计当前时刻正在被打开的jpg数量,直接使用lsof命令即可:
lsof /你的爬虫图片存储目录绝对路径/*.jpg 2>/dev/null | wc -l
另外你之前统计jpg总数量的命令find *.jpg | wc -l存在兼容问题(遇到带空格/换行的文件名会统计错误),更稳妥的写法是:
find . -maxdepth 1 -type f -name "*.jpg" -printf '.' | wc -c
内容的提问来源于stack exchange,提问作者MadHon
相关产品推荐
相关产品推荐

