1. docker安装
docker run -d --name clamav -p 3310:3310 clamav/clamav:stable
su clamav freshclam
2. 扫描
2.1 clamscan
以下是 clamscan
命令选项的表格化整理:
选项与参数
长选项 | 短选项 | 描述 |
---|
--help | -h | 显示帮助信息 |
--version | -V | 打印版本号 |
--verbose | -v | 显示详细输出 ,直接扫描当前目录下的文件 |
--archive-verbose | -a | 显示扫描的压缩包内文件名 |
--debug | | 启用 libclamav 的调试消息 |
--quiet | | 仅输出错误消息 |
--stdout | | 将输出写入 stdout(不影响调试消息) |
--no-summary | | 禁用扫描结束时的摘要 |
--infected | -i | 仅显示感染文件 |
--suppress-ok-results | -o | 跳过显示“OK”文件 |
--bell | | 病毒检测时发出提示音 |
文件与目录控制
长选项 | 参数格式 | 描述 |
---|
--tempdir | DIRECTORY | 指定临时文件目录 |
--leave-temps | [yes/no(*)] | 保留临时文件(默认 no ) |
--force-to-disk | [yes/no(*)] | 强制将嵌套文件扫描写入临时文件(默认 no ) |
--gen-json | [yes/no(*)] | 生成 JSON 元数据(仅限测试/开发) |
--database | FILE/DIR | 指定病毒数据库文件或目录 |
--official-db-only | [yes/no(*)] | 仅加载官方签名(默认 no ) |
--fail-if-cvd-older-than | days | 数据库过期时返回非零错误码 |
--log | FILE | 保存扫描报告到文件 |
--recursive | [yes/no(*)] | 递归扫描子目录(默认 yes ) |
扫描行为控制
长选项 | 参数格式 | 描述 |
---|
--allmatch | [yes/no(*)] | 匹配后继续扫描文件(默认 no ) |
--cross-fs | [yes(*)/no] | 扫描其他文件系统的文件(默认 yes ) |
--follow-dir-symlinks | [0/1(*)/2] | 跟踪目录符号链接(0=从不,1=直接,2=总是) |
--follow-file-symlinks | [0/1(*)/2] | 跟踪文件符号链接(0=从不,1=直接,2=总是) |
--file-list | FILE | 从文件中读取待扫描文件列表 |
--remove | [yes/no(*)] | 删除感染文件(默认 no ) |
--move | DIRECTORY | 移动感染文件到指定目录 |
--copy | DIRECTORY | 复制感染文件到指定目录 |
--exclude | REGEX | 排除匹配正则表达式的文件 |
--exclude-dir | REGEX | 排除匹配正则表达式的目录 |
--include | REGEX | 仅扫描匹配正则表达式的文件 |
--include-dir | REGEX | 仅扫描匹配正则表达式的目录 |
高级功能
长选项 | 参数格式 | 描述 |
---|
--bytecode | [yes(*)/no] | 加载字节码(默认 yes ) |
--bytecode-unsigned | [yes/no(*)] | 加载未签名字节码(默认 no ) |
--bytecode-timeout | N | 设置字节码超时(毫秒) |
--statistics | [none(*)/...] | 收集并打印执行统计信息 |
--detect-pua | [yes/no(*)] | 检测潜在有害程序(默认 yes ) |
--exclude-pua | CAT | 排除指定类别的 PUA |
--include-pua | CAT | 仅加载指定类别的 PUA |
文件类型扫描
长选项 | 参数格式 | 描述 |
---|
--scan-pe | [yes(*)/no] | 扫描 PE 文件(默认 yes ) |
--scan-elf | [yes(*)/no] | 扫描 ELF 文件(默认 yes ) |
--scan-ole2 | [yes(*)/no] | 扫描 OLE2 容器(默认 yes ) |
--scan-pdf | [yes(*)/no] | 扫描 PDF 文件(默认 yes ) |
--scan-swf | [yes(*)/no] | 扫描 SWF 文件(默认 yes ) |
注:(*)
表示默认值。
执行代码
异常文件生成
https://www.eicar.org/download-anti-malware-testfile/
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar_test.txt
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar_test2.txt
- 一次性扫描
clamscan /home - 扫描当前文件夹内所有文件
clamscan --recursive . - 扫描当前文件夹内所有文件(只输出异常的)
clamscan -o --recursive .
- 仅显示感染文件
只展示了感染,ok除外后结果为感染的文件
clamscan -i --recursive .

结果
----------- SCAN SUMMARY -----------
Known viruses: 8707456
Engine version: 1.4.2
Scanned directories: 1
Scanned files: 1
Infected files: 0
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 31.761 sec (0 m 31 s)
Start Date: 2025:05:27 09:54:24
End Date: 2025:05:27 09:54:56
结果描述
原字段 | 含义 |
---|
Known viruses | 已知病毒 |
Engine version | 引擎版本 |
Scanned directories | 扫描目录 |
Scanned files | 扫描文件 |
Infected files | 感染的文件 |
Data scanned | 扫描数据 |
Data read | 数据读取 |
Time | 时间 |
Start Date | 起始日期 |
End Date | 结束日期 |
2.2 clamdscan
以下是 clamdscan
命令的中英文对照表格,整理为清晰的双栏格式:
clamdscan 命令选项对照表
英文选项 | 缩写/参数 | 中文说明 |
---|
--help | -h | 显示帮助信息 |
--version | -V | 打印版本号并退出 |
--verbose | -v | 详细模式(输出更多信息) |
--quiet | | 静默模式(仅输出错误信息) |
--stdout | | 将结果输出到标准输出(不影响调试信息) |
--log=FILE | -l FILE | 将扫描报告保存到指定文件 |
--file-list=FILE | -f FILE | 从指定文件中读取待扫描的文件列表 |
--ping | -p A[:I] | 检测 clamd 服务是否响应,可指定尝试次数 [A] 和间隔时间 [I] |
--wait | -w | 等待 clamd 启动(最长 30 秒),可与 --ping 配合设置检测参数 |
--remove | | 删除受感染文件(谨慎使用) |
--move=DIRECTORY | | 将受感染文件移动到指定目录 |
--copy=DIRECTORY | | 将受感染文件复制到指定目录 |
--config-file=FILE | -c FILE | 从指定配置文件读取配置 |
--allmatch | -z | 发现匹配后继续扫描文件 |
--multiscan | -m | 强制启用多文件扫描模式 |
--infected | -i | 仅输出受感染文件信息 |
--no-summary | | 禁用扫描结束时的汇总信息 |
--reload | | 请求 clamd 重新加载病毒数据库 |
--fdpass | | 将文件描述符传递给 clamd(适用于 clamd 以不同用户运行的情况) |
--stream | | 强制以流模式传输文件到 clamd(用于调试和单元测试) |
使用示例
clamdscan -v /path/to/directory
clamdscan -f file_list.txt -l scan.log
clamdscan --remove /path/to/file
区别clamdscan 与 clamscan
特性 | clamdscan | clamscan |
---|
工作模式 | 客户端模式(连接 clamd 守护进程) | 独立模式(直接调用扫描引擎) |
性能 | 更快(无需每次加载引擎和数据库) | 较慢(每次运行都需初始化) |
资源占用 | 低(共享已运行的 clamd 资源) | 高(每次启动都加载完整引擎和数据库) |
适用场景 | 生产环境、频繁扫描 | 临时扫描、调试 |
多线程支持 | 由 clamd 控制 | 自身支持(--multiscan 参数) |
配置来源 | 使用 clamd 的配置 | 使用命令行参数或 clamscan 配置 |
关键差异说明
- 性能与资源:
clamdscan
依赖后台守护进程 clamd
,避免了重复加载引擎的开销,适合高频率扫描;clamscan
每次独立运行,灵活性高但资源消耗大。 - 多线程:
clamscan
通过 --multiscan
启用多线程扫描,而 clamdscan
的多线程由 clamd
的配置决定。 - 配置方式:
clamdscan
的扫描行为(如最大文件大小、扫描压缩文件等)由 clamd.conf
控制,而 clamscan
通过命令行参数调整。
2.3 pyclamd操作
import pyclamdcd = pyclamd.ClamdNetworkSocket(host='192.168.65.1',port=3310,timeout=15)
print("ClamAV version:", cd.version())
result = cd.multiscan_file('/home')print(result)