Составить список популярных пакетных менеджеров и команд их вызова. Разные дистры используют разные менджеры (apt и yum встречаются чаще всего, ЕМНИП).
Для каждого менеджера попытаться получить список установленных пакетов. Также иметь ввиду, что данного менеджера может и не быть на данной машине.
Свести результаты в один список.
Например, для дистров, которые используют apt (Debian и его потомки), это либо apt-mark showmanual
, либо apt list --installed | grep -v 'automatic'
(чтобы исключить пакеты, которые были поставлены как зависимости для других). Но и там будут пакеты, поставленные при установке ОС.
Если хочется ну прямо супер детальный анализ... найти все файлы, помеченные как исполняемые. Потом узнать список установленных пакетов. Для каждого пакета узнать список установленных файлов. Исключить эти файлы из числа найденных. То, что останется, было установлено помимо менеджера пакетов и потому заслуживает более пристального внимания. Но сам понимаешь, это долго и жорко, ну и всё равно может не дать 100% покрытия. Грубо говоря, если некий файл script.sh не помечен как исполняемый, его всё равно можно запустить через bash script.sh
.
Я думаю, стоит обращать внимание, если в списке установленных пакетов есть wine, mono или виртуальные машины. В остальном... вряд ли что-то найдётся.