Files
oam/knowledge base/clamav.md
2025-01-24 19:13:27 +01:00

2.3 KiB

ClamAV

  1. TL;DR
  2. Gotchas
  3. Further readings
    1. Sources

TL;DR

Usage
# Manually update the virus definitions.
# Do this once **before** starting a scan or the daemon.
# The definitions updater daemon **must be stopped** to avoid its complaints.
sudo systemctl stop 'clamav-freshclam' \
&& sudo 'freshclam' \
&& sudo systemctl enable --now 'clamav-freshclam'

# Scan specific files or directories.
clamscan 'path/to/file'
clamscan --recursive 'path/to/dir'

# Only scan files in a list.
clamscan -i -f '/tmp/scan.list'

# Only return specific results.
clamscan --infected '/home/'
clamscan --suppress-ok-results 'Downloads/'

# Save results to files.
clamscan --bell -i -r '/home' -l 'output.txt'

# Delete infected files.
clamscan -r --remove '/home/user'
clamscan -r -i --move='/home/user/infected' '/home/'

# Limit CPU usage.
nice -n 15 clamscan \
&& clamscan --bell -i -r '/home'

# Use multiple threads.
find . -type f -printf "'%p' " | xargs -P "$(nproc)" -n 1 clamscan
find . -type f | parallel --group --jobs 0 -d '\n' clamscan {}

Gotchas

  • The --fdpass option of clamdscan (with the d in the command name) sends a file descriptor to clamd rather than a path name, avoiding the need for the clamav user to be able to read everyone's files.

  • clamscan is designed to be single-threaded, so it willfully uses a single CPU thread when scanning files or directories from the command line.
    Use xargs or another executor to run scans in parallel:

    find . -type f -printf "'%p' " | xargs -P $(nproc) -n 1 clamscan
    find . -type f | parallel --group --jobs 0 -d '\n' clamscan {}
    

Further readings

Sources