Clamscan包含/排除规则的正则表达式语法及相关用法咨询
Clamscan包含/排除规则的正则表达式语法及相关用法咨询
我完全理解你这种找不到明确文档的困惑——ClamAV的命令行文档确实经常省略这些关键细节!让我把自己折腾出来的经验分享给你:
一、正则表达式语法类型
Clamscan使用的是POSIX基本正则表达式(BRE),也就是grep默认使用的那种语法,和扩展正则表达式(ERE,即grep -E用的)有一点区别:
- 像
|(或)、()(分组)这类元字符,在BRE里需要加反斜杠转义才能生效,比如匹配/proc或/sys要写成^/\(proc\|sys\); - 如果是ERE的话直接写
^/(proc|sys)就行,但Clamscan不支持这种写法,必须用转义后的BRE格式。
举个实用的例子:如果你想排除根目录下的proc、sys、dev三个目录,用合并正则的写法就是--exclude-dir=^/\(proc\|sys\|dev\)。
二、--exclude 和 --exclude-dir 的用法区别
你看到有人用--exclude排除目录,这种做法确实可行,但不推荐,原因如下:
--exclude是匹配所有文件或目录的名称,所以它会同时排除名为proc的文件和目录——虽然实际系统里很少会有和系统目录同名的文件,但这种写法不够严谨;--exclude-dir是专门针对目录的规则,只会跳过符合正则的目录,不会影响任何文件,而且扫描时会直接跳过这些目录的遍历,效率比用--exclude更高。
所以优先用--exclude-dir来排除目录,用--exclude来排除特定文件名(比如--exclude=*.tmp排除临时文件)。
实战扫描命令示例
如果你要递归扫描整个根目录,同时排除/proc、/sys、/dev,可以用这条清晰的命令:
clamscan -r / --exclude-dir=^/proc --exclude-dir=^/sys --exclude-dir=^/dev
或者用合并正则的写法(更简洁):
clamscan -r / --exclude-dir=^/\(proc\|sys\|dev\)
这里的^/是为了确保只匹配根目录下的这几个系统目录,不会误排除子目录里同名的文件夹(比如某个用户目录下的proc文件夹)。
备注:内容来源于stack exchange,提问作者Mike Lippert
相关产品推荐
相关产品推荐

