文章目录
- [ClamAV 在 macOS 上的离线查杀与定时扫描实战(含 clamd 加速)](#ClamAV 在 macOS 上的离线查杀与定时扫描实战(含 clamd 加速))
-
- 目录
- [1. 一张图看懂 ClamAV 组件](#1. 一张图看懂 ClamAV 组件)
- [2. 安装路线怎么选:Homebrew vs 官方 pkg](#2. 安装路线怎么选:Homebrew vs 官方 pkg)
- [3. 路径确认:你装到了哪里](#3. 路径确认:你装到了哪里)
-
- [3.1 官方 pkg 常见路径](#3.1 官方 pkg 常见路径)
- [3.2 Homebrew 常见路径](#3.2 Homebrew 常见路径)
- [4. 初始化:更新病毒库 freshclam(别再 chmod 777)](#4. 初始化:更新病毒库 freshclam(别再 chmod 777))
-
- [4.1 官方 pkg:复制配置并启用](#4.1 官方 pkg:复制配置并启用)
- [4.2 Homebrew:配置位置与更新](#4.2 Homebrew:配置位置与更新)
- [4.3 更新失败最常见的 3 个原因](#4.3 更新失败最常见的 3 个原因)
- [4.4 如果你启用了 clamd:让更新后自动 reload](#4.4 如果你启用了 clamd:让更新后自动 reload)
- [5. 扫描实战:我最常用的 6 条命令](#5. 扫描实战:我最常用的 6 条命令)
-
- [5.1 只扫 Downloads,只输出命中的文件(最常用)](#5.1 只扫 Downloads,只输出命中的文件(最常用))
- [5.2 扫描并生成日志(方便留档/复盘)](#5.2 扫描并生成日志(方便留档/复盘))
- [5.3 命中即隔离(推荐用 move,不推荐 remove)](#5.3 命中即隔离(推荐用 move,不推荐 remove))
- [5.4 排除一些"只会拖慢你"的目录](#5.4 排除一些“只会拖慢你”的目录)
- [5.5 只扫特定类型(比如只关心 Windows 可执行文件)](#5.5 只扫特定类型(比如只关心 Windows 可执行文件))
- [5.6 扫外接盘(移动盘/共享盘)](#5.6 扫外接盘(移动盘/共享盘))
- [5.7 自测链路:用 EICAR 测试文件确认"能抓到"](#5.7 自测链路:用 EICAR 测试文件确认“能抓到”)
- [6. 扫大目录更快:用 clamdscan(守护进程模式)](#6. 扫大目录更快:用 clamdscan(守护进程模式))
-
- [6.1 最小可用的 clamd.conf(思路)](#6.1 最小可用的 clamd.conf(思路))
- [6.2 启动 clamd 并用 clamdscan 扫描](#6.2 启动 clamd 并用 clamdscan 扫描)
- [7. 定时更新 + 定时扫描:launchd 配置模板](#7. 定时更新 + 定时扫描:launchd 配置模板)
-
- [7.1 扫描脚本模板(建议放在固定路径)](#7.1 扫描脚本模板(建议放在固定路径))
- [7.2 LaunchDaemon:每天更新病毒库(示例)](#7.2 LaunchDaemon:每天更新病毒库(示例))
- [7.3 定时扫描(示例:每天 04:00 扫 Downloads)](#7.3 定时扫描(示例:每天 04:00 扫 Downloads))
- [8. 隔离与留痕:把结果变成"可追踪"](#8. 隔离与留痕:把结果变成“可追踪”)
- [9. 卸载与清理(brew/pkg 两套)](#9. 卸载与清理(brew/pkg 两套))
-
- [9.1 Homebrew 卸载](#9.1 Homebrew 卸载)
- [9.2 官方 pkg 卸载(手动)](#9.2 官方 pkg 卸载(手动))
- [10. 常见坑位速查](#10. 常见坑位速查)
-
- [10.1 `freshclam` 报 "config file error / Example"](#10.1
freshclam报 “config file error / Example”) - [10.2 `freshclam` 报权限错误](#10.2
freshclam报权限错误) - [10.3 扫描很慢、风扇起飞](#10.3 扫描很慢、风扇起飞)
- [10.4 误报怎么办](#10.4 误报怎么办)
- [10.1 `freshclam` 报 "config file error / Example"](#10.1
- 参考链接
🍃作者介绍:25届双非本科网络工程专业,阿里云专家博主,深耕 AI 原理 / 应用开发 / 产品设计。前几年深耕Java技术体系,现专注把 AI 能力落地到实际产品与业务场景。
🦅个人主页:@逐梦苍穹
✈ 您的一键三连,是我创作的最大动力🌹
ClamAV 在 macOS 上的离线查杀与定时扫描实战(含 clamd 加速)
很多人提到 macOS 的"杀毒",第一反应是:系统自带 XProtect、Gatekeeper,平时也不怎么中招,装 AV 没必要。话没错,但现实里我更常遇到的是另一类场景:
- 你经常从网盘/群聊/邮件拿到压缩包、Office 文档、安装包(尤其是给同事/客户转文件时,mac 很容易变成"搬运工")。
- 你有外接硬盘/移动盘,里面混着 Windows 软件、破解包、老资料。
- 你做安全、运维、开发,偶尔需要对一个目录做"离线体检",出一份可追踪的扫描报告。
ClamAV 很适合干这件事:开源、命令行、可脚本化,核心目标就是"查杀/检测",不强调花里胡哨的 GUI。它更偏 Linux 生态,但 macOS 是类 Unix 系统,照样能把这套工具链跑得很顺。
先说清楚边界:ClamAV 在 macOS 上不是"实时防护全家桶",而是更像"离线扫描器 + 病毒库更新器"。把它当第二道门,效果最好。
目录
- [1. 一张图看懂 ClamAV 组件](#1. 一张图看懂 ClamAV 组件)
- [2. 安装路线怎么选:Homebrew vs 官方 pkg](#2. 安装路线怎么选:Homebrew vs 官方 pkg)
- [3. 路径确认:你装到了哪里](#3. 路径确认:你装到了哪里)
- [4. 初始化:更新病毒库 freshclam(别再 chmod 777)](#4. 初始化:更新病毒库 freshclam(别再 chmod 777))
- [5. 扫描实战:我最常用的 6 条命令](#5. 扫描实战:我最常用的 6 条命令)
- [6. 扫大目录更快:用 clamdscan(守护进程模式)](#6. 扫大目录更快:用 clamdscan(守护进程模式))
- [7. 定时更新 + 定时扫描:launchd 配置模板](#7. 定时更新 + 定时扫描:launchd 配置模板)
- [8. 隔离与留痕:把结果变成"可追踪"](#8. 隔离与留痕:把结果变成“可追踪”)
- [9. 卸载与清理(brew/pkg 两套)](#9. 卸载与清理(brew/pkg 两套))
- [10. 常见坑位速查](#10. 常见坑位速查)
1. 一张图看懂 ClamAV 组件
ClamAV 日常会接触到四个核心角色:
freshclam:更新病毒库(签名库)。clamscan:直接扫描(每次运行都会加载病毒库,简单但可能慢)。clamd:常驻守护进程(提前把病毒库加载进内存,等你来扫)。clamdscan:通过clamd来扫描(大目录/大量小文件时更快)。

我自己的习惯是:
- 临时扫个 Downloads:
clamscan足够了。 - 要扫移动盘、解压目录、或者全盘(文件量上来):直接上
clamd + clamdscan。
2. 安装路线怎么选:Homebrew vs 官方 pkg
两条路都能用,区别主要在"路径、权限、后期维护成本":
| 方式 | 适合人群 | 优点 | 缺点 |
|---|---|---|---|
| Homebrew(推荐) | 大多数开发者 | 升级/卸载干净,路径更统一 | 需要有 brew;某些公司环境 brew 受限 |
| 官方 pkg | 不想折腾 brew、希望"装完就用" | 直接安装到固定目录 | 后期清理麻烦点;权限更容易踩坑 |
提醒:macOS 里 Homebrew 路径跟 CPU 架构有关:Apple Silicon 通常在
/opt/homebrew,Intel 通常在/usr/local。
3. 路径确认:你装到了哪里
不管你怎么装,先把路径确认清楚,后面写脚本/launchd 才不会"跑不起来但又不报错"。
直接复制粘贴跑这段(我常用来快速定位):
bash
find /usr/local /opt -name "clamscan" 2>/dev/null
find /usr/local /opt -name "freshclam" 2>/dev/null
find /usr/local /opt -name "clamd" 2>/dev/null
3.1 官方 pkg 常见路径
一般会在:
clamscan:/usr/local/clamav/bin/clamscanfreshclam:/usr/local/clamav/bin/freshclamclamd:/usr/local/clamav/sbin/clamd- 配置目录:
/usr/local/clamav/etc/
如果你希望在终端直接用命令(不写全路径),可以加 PATH(zsh):
bash
echo 'export PATH="/usr/local/clamav/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
clamscan --version
3.2 Homebrew 常见路径
Apple Silicon 通常是:
/opt/homebrew/bin/clamscan/opt/homebrew/bin/freshclam/opt/homebrew/sbin/clamd- 配置示例一般在:
/opt/homebrew/etc/clamav/
安装命令:
bash
brew install clamav
clamscan --version
4. 初始化:更新病毒库 freshclam(别再 chmod 777)
ClamAV 靠"病毒库(签名库)"识别样本。你装完软件不更新库,等于拿着空枪巡逻。
freshclam 默认会拉取/维护几类数据库(常见叫法:main、daily、bytecode;实际文件可能是 .cvd/.cld):
main:基础签名库daily:增量更新最频繁bytecode:字节码规则(强烈建议别关)
4.1 官方 pkg:复制配置并启用
1)复制示例配置:
bash
sudo cp /usr/local/clamav/etc/freshclam.conf.sample /usr/local/clamav/etc/freshclam.conf
2)把 Example 这一行注释掉(不注释的话 freshclam 会直接拒绝运行):
bash
sudo sed -i '' 's/^Example/#Example/' /usr/local/clamav/etc/freshclam.conf
3)准备数据库目录和日志目录(给对权限就行,没必要 777):
bash
sudo mkdir -p /usr/local/clamav/share/clamav
sudo mkdir -p /usr/local/clamav/var/log
sudo chmod 755 /usr/local/clamav/share/clamav /usr/local/clamav/var/log
4)更新病毒库:
bash
sudo freshclam --show-progress
4.2 Homebrew:配置位置与更新
Homebrew 的思路类似:复制 sample、注释 Example、然后跑 freshclam。
你可以先找一下 sample 在哪里(不同版本可能略有差异):
bash
ls -la /opt/homebrew/etc/clamav 2>/dev/null || true
ls -la /usr/local/etc/clamav 2>/dev/null || true
然后按实际路径复制:
bash
cp freshclam.conf.sample freshclam.conf
sed -i '' 's/^Example/#Example/' freshclam.conf
freshclam --show-progress
4.3 更新失败最常见的 3 个原因
1)权限不对 :DatabaseDirectory 指向的目录不可写。
解决思路:要么用 sudo freshclam,要么把目录 owner/权限修好(不建议一把梭 777)。
2)代理/公司网络拦截 :freshclam 本质是拉 CDN 资源,企业网经常卡住。
解决思路:走代理(HTTPProxyServer/HTTPProxyPort),或者配私有镜像(PrivateMirror)。
3)频率太高被限流 :你反复手动跑更新,可能触发服务端策略。
解决思路:别写"每分钟更新一次",正常一天 2~12 次足够。
4.4 如果你启用了 clamd:让更新后自动 reload
clamd 作为常驻进程,病毒库更新后需要"重新加载"。默认情况下它会按 SelfCheck 周期自检(比如 600 秒一次),但我更喜欢让更新更"可控"一点:在 freshclam.conf 里加一行 NotifyClamd,更新成功后会主动通知 clamd reload。
官方 pkg 示例(按你的实际路径改):
conf
NotifyClamd /usr/local/clamav/etc/clamd.conf
如果你只是偶尔用 clamscan 扫一把,其实不用纠结这一项;只有你长期跑 clamd + clamdscan,它才更有价值。
5. 扫描实战:我最常用的 6 条命令
先给一张"命令速记图",后面每条我都会解释适用场景:

5.1 只扫 Downloads,只输出命中的文件(最常用)
bash
clamscan -r -i ~/Downloads
5.2 扫描并生成日志(方便留档/复盘)
bash
mkdir -p ~/clamav-logs
clamscan -r -i ~/Downloads -l ~/clamav-logs/downloads-$(date +%F).log
5.3 命中即隔离(推荐用 move,不推荐 remove)
bash
mkdir -p ~/quarantine
clamscan -r -i --move=~/quarantine ~/Downloads
--remove 当然更"干脆",但我不建议一上来就删:误报、误删都不好收场。
5.4 排除一些"只会拖慢你"的目录
macOS 上最常见的"巨量文件 + 你并不关心"的目录基本都在 ~/Library 下面;开发者还会有 node_modules、构建产物等。
bash
clamscan -r -i \
--exclude-dir="node_modules" \
--exclude-dir="\\.git" \
--exclude-dir="$HOME/Library/Caches" \
~/projects
--exclude-dir用的是正则;别写~/...这种(引号里~不会展开),用$HOME/...或者写成更宽松的Library/Caches更稳。
5.5 只扫特定类型(比如只关心 Windows 可执行文件)
bash
clamscan -r -i --include="\\.(exe|dll|msi|bat|js|vbs)$" ~/Downloads
5.6 扫外接盘(移动盘/共享盘)
先确认挂载点(通常在 /Volumes):
bash
ls -la /Volumes
然后扫:
bash
clamscan -r -i /Volumes/你的盘名
5.7 自测链路:用 EICAR 测试文件确认"能抓到"
如果你刚装完,想快速确认"病毒库更新正常 + 扫描链路正常",用 EICAR(标准无害测试文件)最省事。
bash
mkdir -p ~/clamav-test && cd ~/clamav-test
curl -L -o eicar.com.txt https://secure.eicar.org/eicar.com.txt
clamscan -i eicar.com.txt
rm -f eicar.com.txt
正常情况下会看到类似 Eicar-Test-Signature FOUND 的命中提示。这个文件只是测试标记,不是实际病毒,用完删掉即可。
6. 扫大目录更快:用 clamdscan(守护进程模式)
如果你扫的是"几万个小文件"的目录,clamscan 每次启动都要加载数据库,体验会很糟;这时 clamd 的优势就出来了:常驻内存,clamdscan 直接发请求过去扫。

6.1 最小可用的 clamd.conf(思路)
不同安装方式的 clamd.conf.sample 路径不同,但原则一致:
- 打开
LocalSocket(推荐走 Unix Socket) DatabaseDirectory指到你的病毒库目录(与 freshclam 保持一致)- 设好
LogFile、PidFile,方便排查
示例(请按你的实际路径改):
conf
# 把 Example 注释掉,否则 clamd 不会启动
# Example
LocalSocket /usr/local/clamav/var/run/clamd.sock
FixStaleSocket yes
DatabaseDirectory /usr/local/clamav/share/clamav
LogFile /usr/local/clamav/var/log/clamd.log
PidFile /usr/local/clamav/var/run/clamd.pid
SelfCheck 600
MaxThreads 10
6.2 启动 clamd 并用 clamdscan 扫描
手动启动(官方 pkg 示例):
bash
sudo mkdir -p /usr/local/clamav/var/run
sudo /usr/local/clamav/sbin/clamd -c /usr/local/clamav/etc/clamd.conf
用 clamdscan 扫描(多线程扫目录时很舒服):
bash
clamdscan --multiscan -i ~/Downloads
如果 clamd 以 root 运行、你以普通用户跑 clamdscan,可能遇到权限问题;这种情况下优先试试 --fdpass(仅 Unix Socket 可用):
bash
clamdscan --multiscan --fdpass -i ~/Downloads
7. 定时更新 + 定时扫描:launchd 配置模板
把 ClamAV 变成"长期可用工具",关键就两件事:
1)病毒库按计划更新
2)重要目录按计划扫描

下面给一个我常用的结构(思路清晰,改路径就能用):
- 一个脚本:负责扫描、日志、隔离
- 两个 LaunchDaemon(或 LaunchAgent):
freshclam:每天更新scan:每天/每周扫描
7.1 扫描脚本模板(建议放在固定路径)
建议如果脚本看不懂的同学,让AI先解释一遍,看看是否适合你的具体情况
bash
#!/usr/bin/env bash
set -euo pipefail
CLAMSCAN=""
for p in \
/usr/local/clamav/bin/clamscan \
/opt/homebrew/bin/clamscan \
/usr/local/bin/clamscan
do
if [[ -x "$p" ]]; then
CLAMSCAN="$p"
break
fi
done
if [[ -z "$CLAMSCAN" ]]; then
echo "[!] clamscan not found. Please check your installation path." >&2
exit 2
fi
TARGET="${1:-$HOME/Downloads}"
LOG_DIR="$HOME/clamav-logs"
QUARANTINE_DIR="$HOME/quarantine"
mkdir -p "$LOG_DIR" "$QUARANTINE_DIR"
"$CLAMSCAN" -r -i \
--move="$QUARANTINE_DIR" \
--exclude-dir="\\.git" \
--exclude-dir="node_modules" \
"$TARGET" \
-l "$LOG_DIR/scan-$(date +%F).log"
launchd 不会读你的 shell 配置,脚本里一定要写绝对路径 (
/usr/local/clamav/bin/clamscan这种)。
把脚本保存为 /usr/local/bin/clamav-scan.sh 并赋可执行权限:
bash
sudo tee /usr/local/bin/clamav-scan.sh >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
CLAMSCAN=""
for p in \
/usr/local/clamav/bin/clamscan \
/opt/homebrew/bin/clamscan \
/usr/local/bin/clamscan
do
if [[ -x "$p" ]]; then
CLAMSCAN="$p"
break
fi
done
if [[ -z "$CLAMSCAN" ]]; then
echo "[!] clamscan not found. Please check your installation path." >&2
exit 2
fi
TARGET="${1:-$HOME/Downloads}"
LOG_DIR="$HOME/clamav-logs"
QUARANTINE_DIR="$HOME/quarantine"
mkdir -p "$LOG_DIR" "$QUARANTINE_DIR"
"$CLAMSCAN" -r -i \
--move="$QUARANTINE_DIR" \
--exclude-dir="\\.git" \
--exclude-dir="node_modules" \
"$TARGET" \
-l "$LOG_DIR/scan-$(date +%F).log"
EOF
sudo chmod +x /usr/local/bin/clamav-scan.sh
7.2 LaunchDaemon:每天更新病毒库(示例)
/Library/LaunchDaemons/com.example.clamav.freshclam.plist:
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.clamav.freshclam</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/clamav/bin/freshclam</string>
<string>--quiet</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key><integer>3</integer>
<key>Minute</key><integer>30</integer>
</dict>
<key>RunAtLoad</key><true/>
<key>StandardOutPath</key><string>/usr/local/clamav/var/log/freshclam.out</string>
<key>StandardErrorPath</key><string>/usr/local/clamav/var/log/freshclam.err</string>
</dict>
</plist>
加载(新系统建议用 bootstrap):
bash
sudo launchctl bootstrap system /Library/LaunchDaemons/com.example.clamav.freshclam.plist
sudo launchctl kickstart -k system/com.example.clamav.freshclam
7.3 定时扫描(示例:每天 04:00 扫 Downloads)
/Library/LaunchDaemons/com.example.clamav.scan.plist:
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.clamav.scan</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/usr/local/bin/clamav-scan.sh</string>
<string>/Users/你的用户名/Downloads</string>
</array>
<key>UserName</key>
<string>你的用户名</string>
<key>EnvironmentVariables</key>
<dict>
<key>HOME</key><string>/Users/你的用户名</string>
</dict>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key><integer>4</integer>
<key>Minute</key><integer>0</integer>
</dict>
<key>RunAtLoad</key><true/>
<key>StandardOutPath</key><string>/tmp/clamav-scan.out</string>
<key>StandardErrorPath</key><string>/tmp/clamav-scan.err</string>
</dict>
</plist>
你也可以用 LaunchAgent 跑在当前用户下(放到 ~/Library/LaunchAgents/),好处是天然就是当前用户环境;缺点是用户不登录时任务不跑。
如果你只是想"每天扫一下 Downloads",LaunchAgent 往往更省心;如果你想"机器级别固定跑",就用上面这种 LaunchDaemon + UserName/HOME 的写法。
8. 隔离与留痕:把结果变成"可追踪"
我更推荐的闭环是:
1)扫描时用 --move 隔离
2)扫描时写日志(-l)
3)隔离目录只读保存,后续再人工确认/删除
如果你要给同事/客户一个"可交付"的结果,日志里建议至少包含:
- 扫描时间、扫描目标目录
- ClamAV 版本与病毒库版本(可以在脚本里加
clamscan --version、freshclam --version输出) - 命中列表(文件路径 + 病毒名)
9. 卸载与清理(brew/pkg 两套)
9.1 Homebrew 卸载
bash
brew uninstall clamav
brew cleanup
然后按需清理配置/数据库目录(以 Apple Silicon 为例):
bash
rm -rf /opt/homebrew/etc/clamav
rm -rf /opt/homebrew/var/lib/clamav
9.2 官方 pkg 卸载(手动)
1)找到 pkg 记录:
bash
pkgutil --pkgs | grep -i clam
2)如果你配置过 launchd,先卸载任务:
bash
sudo launchctl bootout system /Library/LaunchDaemons/com.example.clamav.freshclam.plist 2>/dev/null || true
sudo launchctl bootout system /Library/LaunchDaemons/com.example.clamav.scan.plist 2>/dev/null || true
sudo rm -f /Library/LaunchDaemons/com.example.clamav.freshclam.plist
sudo rm -f /Library/LaunchDaemons/com.example.clamav.scan.plist
3)删除主程序目录:
bash
sudo rm -rf /usr/local/clamav
4)清理 PATH(如果你加过):
bash
sed -i '' '/\\/usr\\/local\\/clamav\\/bin/d' ~/.zshrc 2>/dev/null || true
source ~/.zshrc
5)忘记 pkg 记录(以 Cisco 的包名为例,按你实际查到的来):
bash
sudo pkgutil --forget com.cisco.ClamAV.programs 2>/dev/null || true
sudo pkgutil --forget com.cisco.ClamAV.libraries 2>/dev/null || true
sudo pkgutil --forget com.cisco.ClamAV.documentation 2>/dev/null || true
验证:
bash
command -v clamscan || true
command -v freshclam || true
ls -la /usr/local/clamav 2>/dev/null || true
pkgutil --pkgs | grep -i clam || true
10. 常见坑位速查
10.1 freshclam 报 "config file error / Example"
九成是 freshclam.conf 里 Example 没注释。
10.2 freshclam 报权限错误
看 DatabaseDirectory 指向哪里,目录必须可写;优先用正确权限/owner,不建议全局 777。
10.3 扫描很慢、风扇起飞
先把目标目录缩小:只扫 Downloads/外接盘/解压目录;再配 --exclude-dir 排除缓存、构建产物。
还慢就上 clamd + clamdscan --multiscan。
10.4 误报怎么办
先别 --remove,用 --move 隔离,保留现场。
确认是误报后,再用 --exclude/--exclude-dir 把目录或文件类型排除掉,或者只扫你关心的后缀(--include)。
参考链接
- ClamAV GitHub:
https://github.com/Cisco-Talos/clamav - clamscan 参数(man page):
https://github.com/Cisco-Talos/clamav/blob/main/docs/man/clamscan.1.in - freshclam / freshclam.conf:
https://github.com/Cisco-Talos/clamav/blob/main/docs/man/freshclam.1.in、https://github.com/Cisco-Talos/clamav/blob/main/docs/man/freshclam.conf.5.in - clamd / clamd.conf / clamdscan:
https://github.com/Cisco-Talos/clamav/blob/main/docs/man/clamd.8.in、https://github.com/Cisco-Talos/clamav/blob/main/docs/man/clamd.conf.5.in、https://github.com/Cisco-Talos/clamav/blob/main/docs/man/clamdscan.1.in - EICAR 测试文件:
https://www.eicar.org/download-anti-malware-testfile/