Solo el código
aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
| cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt
Explicación
Una forma de pensar sobre este problema es dividir esto en tres partes:
- ¿Cómo obtengo una lista de paquetes no instalados como dependencias?
- ¿Cómo obtengo una lista de los paquetes instalados por defecto?
- ¿Cómo puedo obtener la diferencia entre estas dos listas?
¿Cómo obtengo una lista de paquetes no instalados como dependencias?
El siguiente comando parece funcionar en mi sistema:
$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
Se pueden encontrar enfoques similares en los enlaces que Gilles publicó como un comentario a la pregunta. Algunas fuentes afirman que esto solo funcionará si utilizó aptitude para instalar los paquetes; sin embargo, casi nunca uso aptitude para instalar paquetes y descubrí que esto todavía funcionaba. Esto --disable-columns
evita que la aptitud rellene las líneas de los nombres de los paquetes con espacios en blanco que dificultarían la comparación a continuación. El | sort -u
ordena el archivo y elimina los duplicados. Esto hace que el paso final sea mucho más fácil.
¿Cómo obtengo una lista de los paquetes instalados por defecto?
Nota: Esta sección comienza con una 'ruta incorrecta' que creo que es ilustrativa. El segundo fragmento de código es el que funciona.
Esto es un poco más complicado. Inicialmente pensé que una buena aproximación serían todos los paquetes que son dependencias de los metapaquetes ubuntu-minimal, ubuntu-standard, ubuntu-desktop y los diversos paquetes relacionados con el kernel de linux. Algunos resultados en las búsquedas de Google parecían utilizar este enfoque. Para obtener una lista de estas dependencias, primero probé lo siguiente (que no funcionó):
$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u
Esto parece omitir algunos paquetes que sé que tuvieron que venir por defecto. Todavía creo que este método debería funcionar si uno construye la lista correcta de metapaquetes.
Sin embargo, parece que los espejos de Ubuntu contienen un archivo "manifiesto" que contiene todos los paquetes en la instalación predeterminada. El manifiesto para Ubuntu 12.04.3 está aquí:
http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest
Si busca a través de esta página (o la página de un espejo más cercano a usted):
http://mirror.pnl.gov/releases/precise/
Debería poder encontrar el archivo ".manifest" que corresponde a la versión y arquitectura que está utilizando. Para extraer solo los nombres de los paquetes, hice esto:
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt
Es probable que la lista ya esté ordenada y sea única, pero quería estar seguro de que estaba ordenada correctamente para facilitar el siguiente paso. Luego puse la salida en defaultinstalled.txt
.
¿Cómo puedo obtener la diferencia entre estas dos listas?
Esta es la parte más fácil ya que la mayoría de los sistemas tipo Unix tienen muchas herramientas para hacer esto. La comm
herramienta es una de las muchas formas de hacer esto:
comm -23 currentlyinstalled.txt defaultinstalled.txt
Esto debería imprimir la lista de líneas que son exclusivas del primer archivo. Por lo tanto, debe imprimir una lista de paquetes instalados que no están en la instalación predeterminada.
aptitude search '~i!~M' -F %p
no lo hace?