¿Cómo difieren los diversos comandos de eliminación de paquetes APT?

17

¿Cuál es la diferencia entre estos comandos?

  1. sudo apt-get autoremove --purge packagenames
  2. sudo apt-get remove --purge packagenames
  3. sudo apt-get purge purge packagenmaes
  4. sudo apt-get remove packagenames
  5. sudo apt-get autoremove
sajjad
fuente

Respuestas:

24

Respuesta rápida

  • remove desinstala los paquetes que llevan su nombre.
  • autoremovedesinstala todos los paquetes instalados automáticamente que ya no son necesarios. Es incorrecto enumerar los nombres de los paquetes después autoremove; serán ignorados (y todos los paquetes elegibles serán eliminados), lo que probablemente no sea lo que pretendes.
  • --purgehace que también se eliminen los archivos de configuración de todo el sistema asociados con la eliminación de paquetes. Debe ir acompañado de un comando, como removeo autoremove. La --purgebandera modifica la acción de un comando; No actúa por sí solo.
  • purgesignifica lo mismo que --purge remove(que es lo mismo que remove --purge). Es incorrecto decir purgedos veces; el segundo purgese interpreta como el nombre de un paquete que se purged, que probablemente no sea lo que pretendes.

Respuesta completa

Para comprender qué hacen esos comandos y en qué se diferencian, es útil (y probablemente incluso esencial) comprender dos conceptos:

  1. La distinción entre paquetes instalados manualmente y paquetes instalados automáticamente
  2. La distinción entre los archivos de paquete de un paquete y sus archivos de configuración

Instalado manualmente vs. instalado automáticamente

Un paquete instalado se instala manual o automáticamente .

Cuando especifica un paquete para la instalación, y está instalado, se instala manualmente .

Pero también se pueden instalar otros paquetes. La mayoría de los paquetes tienen dependencias, otros paquetes que deben instalarse para que esos paquetes funcionen según lo previsto. Cuando instala un paquete, se instalan sus dependencias (es decir, los otros paquetes de los que depende), excepto los que se instalaron anteriormente.

Cuando un paquete no especifica que se instalará, sino que se instala como una dependencia de un paquete que especificó para instalar, se instala automáticamente .

Tenga en cuenta que cuando tiene dos paquetes instalados y uno de ellos es una dependencia de otro, eso no significa que la dependencia se instala automáticamente. También es posible que la dependencia se haya instalado manualmente (es decir, especificado por usted, por ejemplo, instalado antes o al mismo tiempo que el paquete que depende de él).

Finalmente:

  • Si intenta instalar manualmente un paquete que ya está instalado, permanece instalado. Pero si se instaló automáticamente, se realiza un cambio: al intentar instalarlo manualmente, se marcará como instalado manualmente.
  • Puede marcar cualquier paquete como instalado manual o automáticamente (con el apt-markcomando), sin importar cómo o bajo qué circunstancias se instalaron realmente.
  • Los paquetes que vienen preinstalados con su sistema Ubuntu no se instalan automáticamente; algunos vienen marcados como instalados automáticamente y otros vienen marcados como instalados manualmente. Esto es para satisfacer la lógica detrás de distinguir entre paquetes instalados manual y automáticamente: la idea de que algunos paquetes solo son necesarios para el servicio de otros.

Por lo general, para cada paquete instalado automáticamente, tendrá al menos un paquete instalado manualmente que depende de él (y que hizo que se instalara automáticamente). Sin embargo, si luego elimina todos los paquetes instalados manualmente que dependen de un paquete instalado automáticamente, el paquete instalado automáticamente ya no será necesario, pero aún se instalará.

apt-get autoremove elimina los paquetes instalados automáticamente que ya no tienen paquetes instalados manualmente dependiendo de ellos.

Archivos de paquete y archivos de configuración

Un paquete proporciona archivos que pretenden ser y seguir siendo los mismos en todos los sistemas donde está instalada esa versión de ese paquete. Dichos archivos proporcionan ejecutables, recursos, documentación y otros "activos" para los programas instalados. Por lo general, los llamamos "los archivos" que proporciona un paquete.

Pero un paquete también proporciona otros archivos, que están destinados (posiblemente) a ser cambiados. Estos se denominan archivos de configuración global (o de todo el sistema). Casi siempre se instalan en el /etcdirectorio, y se pueden modificar automática y manualmente para cambiar el comportamiento de los programas instalados. Por ejemplo, sudotiene un archivo de configuración /etc/sudoersy un directorio para más archivos de configuración /etc/sudoers.d. Ese archivo, y cualquier archivo agregado a ese directorio, especifican quién puede usar sudode qué manera.

Por lo general, se desea que desinstalar un paquete y luego volver a instalarlo no cambie la forma en que se comporta (a menos que los archivos de su paquete estén dañados y, por supuesto, por eso lo reinstaló). Por lo tanto, normalmente cuando se desinstala un paquete, sus archivos de paquete se eliminan pero sus archivos de configuración de todo el sistema se dejan intactos.

Cuando desinstala un paquete sin especificar que sus archivos de configuración de todo el sistema también deben eliminarse, eso se denomina "eliminar" el paquete.

Si también desea eliminar los archivos de configuración de todo el sistema de un paquete cuando desinstala el paquete, eso se llama "purgar" el paquete.

apt-get removeeliminará un paquete; es decir, desinstalará el paquete pero dejará los archivos de configuración de todo el sistema.

apt-get purgepurgará un paquete; es decir, desinstalará el paquete y también se asegurará de eliminar sus archivos de configuración de todo el sistema.

Otra forma de purgar paquetes es usar la --purgebandera. Eso no dice apt-getqué hacer; en su lugar, modifica qué términos (o "comandos") le removedicen que haga. El --purgeindicador hace que las desinstalaciones de paquetes se acompañen de la eliminación de los archivos de configuración de todo el sistema para los paquetes que se desinstalan. En otras palabras, la --purgebandera convierte las eliminaciones en purgas.

¿Por qué tenemos la --purgebandera cuando tenemos el purgecomando? Después de todo, no es sudo apt-get --purge remove packagenameequivalente a sudo apt-get purge packagename. Son equivalentes Lo que --purgeresulta útil es cuando desea modificar el comportamiento de los comandos que no sean remove.

Por ejemplo, suponga que desea desinstalar paquetes instalados automáticamente que ya no son necesarios (porque ya no hay paquetes instalados manualmente dependiendo de ellos), pero no solo desea eliminar estos paquetes instalados automáticamente, también desea eliminar sus archivos de configuración de todo el sistema. Entonces podrías correr:

sudo apt-get --purge autoremove

Consideremos un uso más de --purge. Hay una bandera llamada --reinstall, que convierte las instalaciones en reinstalaciones. Esto quiere decir que, normalmente, cuando intenta instalar un paquete que ya está instalado, no pasará nada o (si el paquete se marca instalado automáticamente), el paquete se marcará como instalado manualmente. Pero con el --reinstallindicador, la instalación de un paquete que ya está instalado hace que se elimine y luego se vuelva a instalar :

sudo apt-get --reinstall install packagename

Pero suponga que desea eliminar los archivos de configuración de todo el sistema del paquete que está reinstalando. Esto es algo común; cuando un paquete no funciona y no sabe por qué, puede intentar reinstalarlo y también eliminar sus archivos de configuración para que su configuración se restablezca a los valores predeterminados. Para lograr esto, puede ejecutar:

sudo apt-get --purge --reinstall install packagename

La --reinstallinstalación se convierte en la reinstalación (es decir, la eliminación seguida por la instalación), y la --purgeconvierte a la parte retirada de la reinstalación en la purga.

El comportamiento de tus ejemplos

Ahora debe quedar claro exactamente qué hacen cada uno de sus apt-getcomandos de ejemplo :

  • sudo apt-get autoremove --purge packagenames

    Esto purga los paquetes instalados automáticamente que ya no tienen paquetes instalados manualmente que dependen de ellos. Es decir, desinstala esos paquetes (lo que implica eliminar sus archivos de paquete) y también elimina sus archivos de configuración de todo el sistema.

    Aquí packagenamesno hace nada. En particular, si tenía la intención de eliminar los paquetes cuyos nombres figuran allí, entonces esto no se comportará como lo desea.

  • sudo apt-get remove --purge packagenames

    Esto purga packagenames; suponiendo que packagenamessea ​​una lista de nombres de paquetes separados por espacios en blanco, los purgará a todos. Es decir, los desinstalará (lo que implica eliminar sus archivos de paquete) y también eliminará sus archivos de configuración de todo el sistema.

    Si alguno de los paquetes enumerados packagenamesno está instalado, su presencia en la lista no tendrá efecto (excepto que se le informará que no se instaló). Si enumera nombres de paquetes que no son el nombre de ningún paquete real, el comando fallará con un error.unable to locate packagename

  • sudo apt-get purge purge packagenmaes

    Si eliminó una de las apariciones de purgeese comando, sería equivalente a la anterior. Tal como está, intenta purgar un paquete llamado purgey también purgar los paquetes enumerados en packagenames. Como purgeno es el nombre de ningún paquete, fallará con un mensaje de error.

  • sudo apt-get remove packagenames

    Esto elimina los paquetes enumerados en packagenames, lo que implica eliminar sus archivos de paquete. Esto no elimina sus archivos de configuración de todo el sistema (porque es simplemente una eliminación, no una purga).

  • sudo apt-get autoremove

    Esto desinstala los paquetes instalados automáticamente que ya no tienen ningún paquete instalado manualmente que dependa de ellos. Esto implica eliminar sus archivos de paquete, pero no sus archivos de configuración de todo el sistema (es decir, es una eliminación pero no una purga).

Para obtener más información sobre cómo usar apt-get, recomiendo su página de manual . Para obtener información más general, consulte esta guía .

Eliah Kagan
fuente