Outra maneira de fazer isso é determinar o que foi instalado com base em suas "tarefas", que determinam os pacotes base a serem instalados de acordo com suas necessidades iniciais.
tasksel --list-tasks
No mínimo, você teria server
. No entanto, você pode optar por ter mais. Para cada uma dessas tarefas que você instalou, é possível obter uma lista dos pacotes instalados. O comando a seguir faz tudo em uma linha (discriminada por questão de clareza) para as que eu escolhi na minha instalação:
(tasksel --task-packages server ; \
tasksel --task-packages openssh-server ; \
tasksel --task-packages lamp-server) | sort | uniq
Uma abordagem genérica para o acima seria:
(for a in $( tasksel --list-tasks | grep "^i" | awk '{ print $2 }' ) ; \
do tasksel --task-packages $a; done) | sort | uniq
Agora use apt-cache depends --installed -i --recurse <packagename> | grep -v "^ "
para obter uma lista de dependências usadas por todos os pacotes definidos na tarefa. Isso pode ser feito em uma linha da seguinte maneira
apt-cache depends --installed -i --recurse \
$(for a in $( tasksel --list-tasks | \
grep "^i" | \
awk '{ print $2 }' ) ; \
do tasksel --task-packages $a; done) | grep -v "^ " | sort | uniq
A seguir, lista todos os pacotes que estão instalados no seu sistema (não incluindo dependências).
dpkg --get-selections | grep "[[:space:]]install" | awk '{print $1}'
Agora use o comm
comando para encontrar os que estão na segunda lista apenas (ou seja, ignore os que estão nos dois arquivos e apenas no primeiro arquivo)
comm -13 <(apt-cache depends --installed -i --recurse \
$(for a in $( tasksel --list-tasks | \
grep "^i" | \
awk '{ print $2 }' ) ; \
do tasksel --task-packages $a; done) | grep -v "^ " | sort ) \
<( dpkg --get-selections | grep "[[:space:]]install" | \
awk '{print $1}' | sort)