Otra forma de hacerlo es determinando qué se ha instalado en función de sus "tareas" que determinan los paquetes base para instalar de acuerdo con sus necesidades iniciales.
tasksel --list-tasks
Por lo menos lo tendrías server
. Sin embargo, puede elegir tener más. Para cada una de esas tareas que ha instalado, puede obtener una lista de paquetes que están instalados, el siguiente comando lo hace todo en una línea (desglosado para mayor claridad) para los que he elegido en mi instalación:
(tasksel --task-packages server ; \
tasksel --task-packages openssh-server ; \
tasksel --task-packages lamp-server) | sort | uniq
Un enfoque genérico de lo anterior sería:
(for a in $( tasksel --list-tasks | grep "^i" | awk '{ print $2 }' ) ; \
do tasksel --task-packages $a; done) | sort | uniq
Ahora use apt-cache depends --installed -i --recurse <packagename> | grep -v "^ "
para obtener una lista de dependencias utilizadas por todos los paquetes definidos en la tarea. Esto se puede hacer en una línea de la siguiente manera
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 continuación se enumeran todos los paquetes que están instalados en su sistema (sin incluir las dependencias).
dpkg --get-selections | grep "[[:space:]]install" | awk '{print $1}'
Ahora use el comm
comando para encontrar los que están en la segunda lista solamente (es decir, ignore los que están en ambos archivos y solo en el primer archivo)
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)