Як інструмент, який допоможе вам знайти винуватця, ось dtrace oneliner, який друкує pid та ім’я будь-якого процесу, який відкриває файл для запису, а також ім'я файлу:
dtrace -qn 'syscall::open*:entry /arg1&3/ { printf("%d %s %s\n", pid, execname, copyinstr(arg0)); }'
Його потрібно запускати як root (наприклад, з sudo). Вставте його, grep hosts
щоб уникнути потоплення у виробництві та не пропустити те, що шукаєте:
sudo dtrace -qn 'syscall::open*:entry /arg1&3/ { printf("%d %s %s\n", pid, execname, copyinstr(arg0)); }' | grep hosts
Сподіваємось, це підкаже вам, який процес перезаписує файл. Просто нехай він працює в термінальному вікні, поки воно не спрацьовує.
</speculation>