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?http://releases.ubuntu.com/releases/trusty/ubuntu-14.04-desktop-amd64.manifest
y el adicional| sed "s/ *$//"
pero aún no dados.apt-mark showmanual | sort -u
, como se muestra en otras respuestas. Más simple y no depende deaptitude
cuál no está instalado por defecto.Puede usar cualquiera de estos dos one-liners. Ambos producen exactamente el mismo resultado en mi máquina y son más precisos que todas las soluciones propuestas hasta ahora (julio de 2014) en esta pregunta. Son una combinación de las dos respuestas (1) y (2) . Tenga en cuenta que originalmente publiqué esta respuesta aquí .
Utilizando
apt-mark
:Utilizando
aptitude
:Muy pocos paquetes aún se quedan atrás, aunque sospecho que estos son realmente instalados por el usuario, ya sea justo después de la instalación a través de la configuración de localización del idioma o, por ejemplo, a través del instalador de códec Totem. Además, las versiones de encabezado de Linux también parecen acumularse, a pesar de que solo he instalado el metapaquete no específico de la versión. Ejemplos:
Como funciona
sed
elimina el espacio en blanco restante al final de la línea.Otras posibilidades no funcionan tan bien:
ubuntu-14.04-desktop-amd64.manifest
archivo ( aquí para Ubuntu 14.04) en lugar de/var/log/installer/initial-status.gz
. Se muestran más paquetes como instalados manualmente aunque no lo sean.apt-mark showauto
lugar de/var/log/installer/initial-status.gz
.apt-mark
por ejemplo, no incluye el paquete xserver-xorg, mientras que el otro archivo sí.Ambos enumeran más paquetes que la solución anterior.
fuente
De acuerdo a
man apt-mark
:fuente
showmanual
muestra cosas comoxserver-xorg-video-vesa
, que juro que no instalé manualmente.Aquí hay algunos resultados de muestra de
cat /var/log/apt/history.log
:En cuanto a su pregunta, filtre las cosas con grep (
cat /var/log/apt/history.log | grep Commandline
).Tenga en cuenta que estos archivos están rotados, así que busque otros para no perderse nada:
NOTA :
Commandline
, por lo que elgrep
truco no funcionará con ellos.fuente
aptitude
y otros administradores de paquetes. Si sus registros se han girado, entonces no tiene suerte.Me encontré con esta hermosa línea mientras buscaba esta consulta
El único revestimiento es
Este oneliner filtra los paquetes instalados por el sistema utilizando registros de
/var/log/installer/initial-status.gz
Publicaré el enlace al hilo original cuando lo encuentre, ya que este oneliner no es mío y parece que no puedo recordar dónde lo vi.
fuente
Le gustaría echar un vistazo a este artículo .
Al final del artículo, hay un script de Python que debe hacer lo que quieras.
Fue escrito para (k) ubuntu . pero también debería funcionar para Ubuntu .
fuente
A continuación se muestra una adición a Steven D's respuesta .
La siguiente línea parece estar truncando los nombres de paquetes con 32 caracteres:
Esto parece funcionar:
ver esta respuesta
fuente
Revisa
/var/log/apt/term.log
fuente
También puede mirar el archivo
/var/lib/apt/extended_states
.Esto es útil si desea saber qué se instaló en una partición antigua.
fuente
¡Muchas gracias y felicidades a quienes crearon esa joya de guión!
Quería agregar mis 2 ¢ y añadí la fecha de instalación que deduzco de $ info.
No dominé los detalles de por qué los archivos $ info se actualizan o no y cuándo, pero funciona en la práctica.
Mi secuencia de comandos enumera las últimas actualizaciones de paquetes de no dependencia agregados después de la instalación.
Al darle una verificación periódica, estaba viendo lo que habría registrado manualmente sin una sola falla.
Es decir, lotes de paquetes instalados por la misma razón. Desafortunadamente, las actualizaciones rompen ese orden.
Después de una actualización del sistema, tenía una lista de mis paquetes agregados que la actualización no actualizó, seguidos de los que sí.
¡Ordenado! Disfrutar.
fuente