在 Linux 系统中,如果需要定期对整台机器进行恶意软件(病毒、木马等)扫描,ClamAV 是一个常用的免费工具。以下介绍如何进行全盘扫描,并将完整扫描结果保存为带时间戳的日志文件,方便后续查看或归档。
基础扫描命令
ClamAV 的 clamscan 工具支持递归扫描,最基本的写法如下:
bashCopyEditclamscan -r /
但这样会扫描系统中的所有文件,包括 /proc、/sys、/dev 等虚拟或设备目录,这些目录不适合扫描,会产生大量错误信息。
排除系统特殊目录
为了避免扫描无意义的系统伪文件系统,可以使用 --exclude-dir 参数排除这些目录,例如:
bashCopyEdit--exclude-dir=/proc --exclude-dir=/sys --exclude-dir=/dev
此外,如果还需要排除其他目录(比如存放大文件或备份的目录),也可继续添加 --exclude-dir 参数。
自动保存扫描日志
为了后期分析结果,通常需要将扫描输出同时保存为日志文件。可以结合 tee 命令实现:
bashCopyEditclamscan -r --bell --exclude-dir=/proc --exclude-dir=/sys --exclude-dir=/dev / | tee /root/clamav_scan_$(date +%Y%m%d_%H%M%S).log
命令说明
-r:递归扫描子目录。--bell:扫描到可疑文件时响铃提示(需要终端支持)。--exclude-dir:排除指定目录。/:扫描根目录(根据实际需求可以替换为其他路径)。tee:将输出同时写到屏幕和文件。$(date +%Y%m%d_%H%M%S):自动在日志文件名中加上当前日期和时间戳,避免覆盖。
是否支持「增量扫描」
ClamAV 的 clamscan 不会自动跳过已扫描过的文件,每次执行都会重新完整扫描。它不包含「增量扫描」或「缓存机制」,也不会记住上次扫描状态。
如果需要仅扫描新增或修改过的文件,需要额外实现文件变更检测(例如使用 inotify)或定期针对指定文件夹进行局部扫描。
总结
- 建议定期使用 ClamAV 执行完整扫描,结合日志保存方便审计与分析。
- 为了提高效率,应根据实际情况合理排除不必要扫描的目录。
- 每次扫描都是全新扫描,不会自动跳过旧文件。
💡 参考示例脚本
bashCopyEdit#!/bin/bash
SCAN_LOG="/root/clamav_scan_$(date +%Y%m%d_%H%M%S).log"
clamscan -r --bell --exclude-dir=/proc --exclude-dir=/sys --exclude-dir=/dev / | tee "$SCAN_LOG"