Ubuntu安装ClamAv杀毒软件,并配置扫描完成关机
安装ClamAv:
sudo apt install clamav clamav-daemon
更新病毒库:
sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl enable clamav-freshclam --now
启动守护进程:
sudo systemctl enable --now clamav-daemon
配置文件路径:
/etc/clamav/clamd.conf
默认日志文件路径:
/var/log/clamav/clamav.log
开启实时防护
实时防护会占用一定系统资源,可以根据需求决定是否要开启。
编辑配置文件:
sudo nano /etc/clamav/clamd.conf
粘贴以下内容:
# 实时扫描的最大文件大小(默认已配置)
OnAccessMaxFileSize 5M
# 监控的目录(可多个)
OnAccessIncludePath /home/username/下载
# 是否阻止访问恶意文件
OnAccessPrevention yes
# 排除 clamd 用户自身(防止误报)
OnAccessExcludeUname clamav
启动 clamonacc实时防护程序:
sudo clamonacc
ClamAv的使用
检查文件:
clamscan /path/file
扫描目录:
clamscan -r /path
以上命令会在终端显示扫描过程和扫描摘要:
———– SCAN SUMMARY ———– Known viruses: 3627748 Engine version: 1.4.3 Scanned directories: 1 Scanned files: 6 Infected files: 0 Data scanned: 3.35 MB Data read: 446.55 MB (ratio 0.01:1) Time: 23.444 sec (0 m 23 s) Start Date: 2026:03:31 12:21:41 End Date: 2026:03:31 12:22:05
只显示感染的文件:
clamscan -r /path --infected
不显示OK的检查项:
clamscan -r /path --suppress-ok-results
静默扫描,仅输出错误信息:
clamscan -r /path --quiet
将扫描结果保存到日志文件(不记录OK的文件):
clamscan -r /path --log scan_results.log
超过100M的文件不检查:
clamscan -r /path --max-filesize=100M
只扫描大于100M的文件:
find /path -type f -size +100M -exec clamscan {} +
隔离被感染文件
首先创建隔离目录:
sudo mkdir /infected
sudo chown -R clamav:clamav /infected
sudo chmod 750 /infected
加上move标志扫描:
clamscan -r /path --move=/infected
限制ClamAV的CPU使用率
ClamAV扫描会占用较多系统资源(CPU 和 I/O),在扫描大型目录时可能导致系统卡顿。使用 nice 命令可以降低扫描进程的优先级,减少对系统的影响:
nice -n 15 clamscan -r /path
| 范围 | 说明 |
|---|---|
| -20 | 最高优先级,CPU 空闲时优先执行,扫描最快 |
| 0 | 默认优先级 |
| 19 | 最低优先级,CPU 繁忙时会让行,扫描最慢 |
排除目录
Ubuntu中虚拟文件系统、系统关键目录可以不扫描:
clamscan -r / \
--exclude-dir="^/proc/|^/sys/|^/dev/|^/run/|^/mnt/|^/media/|^/var/log/|^/var/lib/docker/"
可以将排除规则写入配置文件:
ExcludePath ^/proc/
ExcludePath ^/sys/
ExcludePath ^/dev/
ExcludePath ^/run/
ExcludePath ^/mnt/
ExcludePath ^/media/
ExcludePath ^/var/log/
ExcludePath ^/var/lib/docker/
配置扫描完成关机脚本
创建脚本:
sudo gedit /usr/local/bin/clamav-scan
粘贴以下内容:
#!/bin/bash
SCAN_DIR="${1:-/}"
LOG_PATH="$HOME/scan-results.log"
read -p "是否在扫描完成后自动关机? [y/N]: " want_shutdown
echo "[$(date)] 开始扫描目录: $SCAN_DIR" | tee "$LOG_PATH"
clamscan -r "$SCAN_DIR" \
--infected \
--max-filesize=100M \
--exclude-dir="^/proc/|^/sys/|^/dev/|^/run/|^/mnt/|^/media/|^/var/log/|^/var/lib/docker/" \
--log "$LOG_PATH"
if grep -q "Infected files: 0" "$LOG_PATH"; then
echo "[$(date)] 扫描完成,无感染文件。" | tee -a "$LOG_PATH"
else
echo "[$(date)] 发现感染文件! | tee -a "$LOG_PATH"
fi
if [[ "$want_shutdown" =~ ^[Yy]$ ]]; then
echo "系统将在1分钟后关机..."
shutdown -h +1
fi
配置参数:
- SCAN_DIR:扫描路径,支持命令参数指定;
- LOG_PATH:日志保存路径,默认:用户目录/scan-results.log。
添加可执行权限:
sudo chmod +x /usr/local/bin/clamav-scan
扫描整个硬盘:
clamav-scan
扫描指定路径:
clamav-scan /path