Me gustaría obtener una lista de paquetes instalados manualmente por apt
o aptitude
y poder averiguar si un foobar
paquete se instaló manual o automáticamente. ¿Hay alguna forma ordenada de hacerlo desde la línea de comandos?
apt
package-management
aptitude
Umang
fuente
fuente
Respuestas:
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 (6 de julio de 2014) en esta pregunta.
Utilizando
apt-mark
:Utilizando
aptitude
:Muy pocos paquetes aún caen en el olvido, aunque sospecho que estos son realmente instalados por el usuario, ya sea 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, aunque 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í.Utilicé varias otras publicaciones de StackExchange como referencias, sin embargo, ninguna funciona tan bien como la solución anterior:
Ambos enumeran más paquetes que la solución anterior.
EDITAR: qué hacer si ha actualizado desde una versión anterior:
Si ha actualizado Ubuntu de una versión a la siguiente, probablemente necesitará ajustar este proceso. En ese caso, verificaría el archivo de manifiesto de la versión más reciente (ver arriba) además del archivo initial-status.gz de la versión actual. Puede hacerlo fácilmente simplemente agregando otra comparación. Usar solo el archivo de manifiesto no funcionará, ya que desafortunadamente el archivo de manifiesto no contiene todo lo que contiene el archivo initial_status.gz (lo comprobé).
fuente
/var/log/installer/initial-status.gz
falta. ¿También quiero saber si esto depende del marcado de los apartamentosmanual
o no?showmanual
comando (abajo). Y usecomm
para comparar las dos listas (ordenadas). Elshowmanual
resultado me dio 1.840 paquetes únicos más deapt-mark showmanual
no mostrados por este método. NO los paquetes fueron exclusivos de la salida de estecomm
comando. Creo que es más interesante registrar que para mi PC, 894 paquetes se enumeran en Ambos resultados. No estoy seguro de por qué hay una gran discrepancia. Algunos (¿muchos?) Paquetes parecen ser específicos de la versión. Otros como XOrg, componentes GTK ylib*
cosas podrían ser actualizaciones. De todos modos, esta respuesta es un muy buen comienzo.apt-mark showmanual
. Es interesante cuántas diferencias son visibles. su lista tiene 238 paquetes, mientras que showmanual devuelve 1717 paquetes. De los 2179 paquetes instalados, solo hay 223 en ambas listas, 15 están solo en los suyos (ejemplos: nodejs, lightdm) y 223 solo están en showmanual (ejemplos: xserver-xorg, ubuntu-desktop). Parece que su lista es más útil, pero sin saber de dónde provienen estas diferencias, no es fácil decidir ... (pero estoy bastante seguro de que instalé nginx y lightdm manualmente ...) [lo siento, acabo de escribir lo mismo;)]En las versiones más recientes del paquete apt, también existe el comando apt-mark
fuente
linux-image-3.11.0-*-generic
etc. como manuallinux-image-3.13.0-24-generic
es manual pero el actuallinux-image-3.13.0-27-generic
es automático. Parece que una actualización de un paquete de referencia (en este casolinux-image-generic
, que cambió las dependencias), la marca manual se establece automáticamenteapt-get autoremove
. Esto definitivamente no es lo que quieres.Para Ubuntu 16.04, consulte el archivo de registro
/var/log/apt/history.log
.Por ejemplo:
No es perfecto, pero es bastante bueno para dejar en claro exactamente lo que instalé a mano. Coloque un
-B 1
grep para ver cuándo se instaló.Salida de ejemplo
No estoy seguro si esto se repite
aptitude
o no. Parece que no recoge las instalaciones de la aplicación de escritorio Ubuntu Software.fuente
apt-mark showauto | grep -iE '^foobar$'
generará "foobar" si el paquete se instaló automáticamente, nada de lo contrario.aptitude search '!~M ~i'
enumerará los paquetes que no se instalaron automáticamente. Es una lástima que la aptitud no sea parte de la instalación predeterminada en Ubuntu Desktop a partir de 10.10.fuente
aptitude search
muestra TODOS los paquetes, no solo los que se instalan manualmente (supongo que eso es lo que quería el OP)aptitude search '!~M ~i'
y enumera 1043 paquetes. No hay forma de que haya instalado tantos paquetes manualmente.El siguiente script imprimirá todos los paquetes que no están configurados para la instalación automática y, por lo tanto, se instalaron manualmente:
se basa en cómo apt-mark imprime los paquetes instalados automáticamente.
fuente
sys.exit(1)
sinimport sys
puede provocar un error en las versiones más recientes de python. Ya seaimport sys
o usoexit(1)
.Para obtener una lista de todos los paquetes (no instalados, instalados por el usuario o instalados de manera predeterminada, en todos los PPA),
apt
utilice el siguiente método:apt list [option]
Las posibles opciones útiles para esto son:
--installed
para mostrar solo los paquetes que están instalados en el sistema (de más de 50,000+)--manual-installed
para enumerar los paquetes que un comando instaló explícitamente , ya sea directamente o como dependencias.Alternativamente, podrías hacer:
apt list --manual-installed | grep -F \[installed\]
para obtener una lista de los paquetes que resultaron de los comandos del usuario y sus dependencias únicamente, y para obtener información adicional sobre ellos, como la versión y la arquitectura compatibles (x86, x86_64, amd64, todas, etc.)fuente
Como varias personas han comentado, apt-mark showmanual parece estar un poco defectuoso (y lo informé como error 727799 ). Cuando lo estoy usando, en realidad informa muchas cosas que ni siquiera están conectadas / var / lib / apt / extended_states (donde se supone que está almacenado) y apt-get no está registrando cosas como instaladas en / var / lib / apt / extended_states (solo en / var / lib / dpkg / status). El script de Python de txwikinger anterior se basa directamente en / var / lib / apt / extended_states, pero si lo usa hoy, la sintaxis podría no funcionar (la mía acaba de comenzar a generar errores con Kubuntu 13.10). La sintaxis actualizada es:
Para mí, esta fue una lista muy corta de 5 elementos que tampoco parece ser precisa.
fuente
sys.exit(1)
sinimport sys
puede provocar un error en las versiones más recientes de python. Ya seaimport sys
o usoexit(1)
.Me gustaría dar una solución GUI.
Abierto
Synaptic Package Manager
Ir
Status
Hacer clic
Installed (manual)
Le dará la lista de paquetes instalados manualmente por apt o aptitude.
Lamentablemente, no pude encontrar ninguna opción
Custom Filters
para averiguar si unfoobar
paquete se instaló manual o automáticamente.Si el paquete está debajo
Installed
pero no debajoInstalled (manual)
, se instaló automáticamente. Si el paquete está debajoInstalled (manual)
, se instaló manualmente.fuente
Si nadie le da una buena respuesta usando un comando apr-something, puede hacerlo de la manera difícil . Apt-get almacena su información en / var / lib / apt / extended_states. Cualquier archivo que se instale automáticamente se agregará a este archivo. Si instala un paquete que ya está en este archivo manualmente, el paquete permanecerá en este archivo pero con Instalación automática: 0 en la segunda línea. No está borrado.
Nota: Como se esperaba, mejores respuestas que probablemente funcionen si han aparecido cambios en la ubicación de los archivos. Mantengo la mía por si la información sobre la ubicación del archivo es útil.
fuente
apt-get install liferea
y no se instaló, pero obtuve un resultado que era algo así como "marcado como instalado manualmente". Ahora liferea todavía está en el archivo, excepto que la siguiente línea tiene un en0
lugar de un1
. Además, debe cambiar su patrón de expresión regular en" foobar$"
lugar de solofoobar
.Después de buscar mucho en Google, he logrado armar este script. Funciona bien para mí:
fuente
sort -u
lugar desort | unique
. Comoapt-mark
no muestra la arquitectura, debe eliminarla de la salida de dpkg antes de las operaciones establecidas (o usodpkg-query -W -f='${Package}\n'
). Además, dpkg puede enumerar algunos paquetes que no están instalados actualmente. En cuanto a "desc", puede usar `dpkg-query -W -f = '# $ {binary: Summary} \ n' $ pack, que es más rápido.apt-mark
puede mostrar arquitectura para algunos paquetes, pero no para tantosdpkg -l
.apt-cache search
es lento. Obtener una lista de fechas instaladas por adelantado usando algo como help.ubuntu.com/community/ListInstalledPackagesByDate podría ser más eficienteComo dijo Li Lo,
apt-mark showauto
debería obtener una gran lista de cosas instaladas automáticamente.Ahora, para mostrar las cosas que se instalan manualmente, resulta que hay un modificador de búsqueda simple y encantador para la aptitud. Pero no quieres hacer eso. Desea escribir un gran comando bash que haga algo de ciencia espacial.
Nota: Esta es más una ilustración de lo genial que lucirás al eliminar comandos masivos de bash para todos tus amigos.
Lo partí en dos líneas para facilitar la lectura. ¿Qué hace esto?
apt-mark
fuente
comm -3 <(dpkg -l | grep '^ii' | cut -d \ -f 3|sort) <(apt-mark showauto|sort)
es adecuadamente mejor;)Esto enumerará todos los paquetes instalados manualmente sin: dependencias, paquetes desinstalados, paquetes instalados durante la instalación del sistema.
fuente