¿Cuál es la forma correcta de eliminar por completo una aplicación?


546

Busqué esa información en la red y encontré diferentes líneas de comando, como estas:

sudo apt-get remove application
sudo apt-get remove application*

sudo apt-get remove --purge application
sudo apt-get remove --purge application*

sudo apt-get purge application
sudo apt-get purge application*

Entonces, ¿cuál es la forma correcta? ¿Es necesario usar ese "*"?

Después de eso, también encontré estos comandos:

sudo updatedb
sudo locate application
sudo rm -rf (file/folder name)

1
Algunas de sus preguntas pueden ser respondidas en esta publicación: askubuntu.com/questions/1143/how-can-i-uninstall-software
Glutanimate

8
application*en ocasiones puede dar resultados inesperados; por ejemplo, si tiene un archivo en el directorio actual llamado application_information, el shell lo expandirá antes de pasarlo a apt-get. Si esto está sucediendo y desea el asterisco literal, puede usar application\*o'application*'
Izkata

66
application*es aún más peligroso donde no hay archivos en el directorio actual: apt-getusa expresiones regulares, no patrones globales. La gente casi ha borrado todo el sistema tratando de eliminarlo wine*.
Andrea Corbellini

3
¿Puedes aceptar una respuesta? Agradecer a las personas que te respondieron.
m-ric

¡Ni application*tampoco application\*es seguro! Citar *con \o ' 'solo aumenta el riesgo, asegurando que *se pase tal como está apt-get(¡aunque generalmente es de todos modos!), Hace apt-getque interprete el argumento como una expresión regular. En una expresión regular *significa "cero o más del carácter anterior". Una forma común de que el error es desinstalar wine*, la eliminación de todos los envases, win(no wine, win) en cualquier lugar en sus nombres y todos los paquetes en función de cualquiera de ellos. Vea esta explicación y posibles soluciones . @Izkata
Kagan

Respuestas:


705
  • apt-get remove packagename

    eliminará los archivos binarios, pero no la configuración o los archivos de datos del paquete packagename. También dejará las dependencias instaladas con él en el tiempo de instalación intacto.

  • apt-get purge packagename o apt-get remove --purge packagename

    eliminará todo lo relacionado con el paquete packagename, pero no las dependencias instaladas con él en la instalación. Ambos comandos son equivalentes.

    Particularmente útil cuando quiere 'comenzar de nuevo' con una aplicación porque ha estropeado la configuración. Sin embargo, no elimina los archivos de configuración o de datos que residen en los directorios de inicio de los usuarios, generalmente en carpetas ocultas allí. No hay una manera fácil de eliminarlos también.

  • apt-get autoremove

    elimina los paquetes huérfanos, es decir, los paquetes instalados que solían instalarse como una dependencia, pero ya no lo son. Use esto después de eliminar un paquete que tenía dependencias instaladas que ya no le interesan.

  • aptitude remove packagenameo aptitude purge packagename(igualmente)

    también intentará eliminar otros paquetes que fueron requeridos por packagenameon pero no son requeridos por ningún paquete restante. Tenga en cuenta que aptitudesolo recuerda la información de dependencia para los paquetes que ha instalado.

Y existen muchos más. dpkgSe pueden usar comandos de nivel inferior (avanzado) o herramientas GUI como Muon, Synaptic, Software Center, etc. No existe una única "forma correcta" de eliminar aplicaciones o realizar otras tareas que interactúen con la administración de su paquete.

La lista que encontraste son solo ejemplos. Asegúrese de comprender los significados y pruebe lo que quiere hacer antes de aceptar la acción (debe presionar Yantes de que realmente realice las acciones según lo propuesto).

La versión de asterisco en la pregunta es probablemente incorrecta ; apt-getacepta una expresión regular y no un patrón global como el shell. Entonces, ¿qué pasa con

sudo apt-get remove application*

es el siguiente:

  1. El shell intenta expandirse application*mirando los archivos en el directorio actual. Si (como suele ser el caso) no encuentra nada, devuelve el patrón global sin alterar (suponiendo que bashcon el comportamiento predeterminado aquí --- se zshproducirá un error).

  2. apt-geteliminará los paquetes cuyo nombre contiene una cadena que satisface la expresión regular application*, es decir, applicatioseguido de un número arbitrario de n: applicatio, application, applicationn, libapplicatio, etc.

  3. Para ver cómo esto puede ser peligroso, intente (sin root para doble seguridad) apt-get -s remove "wine*"( -ssimulará la cosa en lugar de hacerlo) --- dirá que eliminará todos los paquetes que tienen "win" en su nombre y el dependiente, casi todo el sistema ...

Probablemente, el comando que se entiende es realmente

 sudo apt-get remove "^application.*"

(tenga en cuenta las comillas y el punto) que eliminará todos los paquetes cuyo nombre comienza con application.

Estos comandos,

sudo updatedb                  # <-- updates the locate database (index). harmless
sudo locate application        # <-- locates the file 'application'. harmless
sudo rm -rf (file/folder name) # <-- removes files/dirs recursively. dangerous.

están completamente fuera del alcance de la gestión de paquetes. ¡No elimine archivos que pertenecen a paquetes sin usar el administrador de paquetes! Se confundirá y es la forma incorrecta de hacer las cosas.

Si no sabe a qué paquete pertenece un archivo, intente esto:

dpkg -S /path/to/file

99
La opción --purge también es útil cuando se trata de eliminar por completo las dependencias restantes, incluidos sus archivos de configuración: apt-get-autoremove --purge también es importante tener en cuenta que la opción --purge no afecta a los archivos de configuración en su directorio de inicio. Deberá eliminarlos manualmente.
Glutanimate

1
Hubo un error aquí: apt-get acepta RE, no globs; entonces apt-get remove pack * eliminará todos los paquetes que comiencen con pac seguido de cero o más k ... que normalmente es inesperado. Edité el anser. Ver también askubuntu.com/questions/210976/…
Rmano

Creo que esta respuesta ya no es precisa. Cualquiera de apt remove -s texlive*sus apt-getlíneas de retorno de contraparte, como Note, selecting 'texlive-font-utils' for glob 'texlive*'(lo que implica que sí aceptan globos), seguido de las líneas habituales Package 'texlive-common' is not installed, so not removed, y finalmente Remv, como Remv texlive-font-utils [2015.20160320-1] [...].
Jonathan Y.

@JonathanY. También seleccionaría paquetes no instalados. De todos modos, ¿podría hacer una pregunta NUEVA y elaborar un poco más en detalle cuál es su situación en la pregunta? Me encantaría verlo :)
gertvdijk

No estoy haciendo una nueva pregunta. Estoy señalando un posible cambio ya que esta respuesta se hizo que hace que algunos de los detalles sean incorrectos. A saber, parecería que apt-get remove packa*realmente toma el globo en packa*lugar de mirarlo como una expresión regular: coincide packagepero no pack.
Jonathan Y.

110

Para Ubuntu 12.04 y quizás superior, el método correcto es:

sudo apt-get --purge autoremove packagename

Como se detalla aquí .

No lo use packagename*ya que puede eliminar paquetes no deseados y causar más problemas de los que resuelve. O si debe, al menos ejecutarlo con un -s, --simulate, --dry-runprimera bandera para ver exactamente lo que va a hacer sin hacerlo.


13
esta es la respuesta correcta, breve y concisa:
Anwar

20

Puedes usar este comando:

sudo apt-get purge --auto-remove packagename

Purgará los paquetes necesarios junto con las dependencias que están instaladas con esos paquetes. La --auto-removeopción (ser un alias de autoremove) funciona de forma similar a sudo apt-get autoremove. Al usar este comando podemos ejecutar un solo comando:

sudo apt-get purge --auto-remove packagename

En lugar de:

sudo apt-get purge packagename
sudo apt-get autoremove

2
Aunque tienes razón, también se puede usar sudo apt-get --purge autoremove packagename. El mismo comando aquí
Anwar el

¿El comando completo también se puede escribir como en apt-get autoremove --purgelugar de apt-get purge --auto-remove?
Felwithe

3
¿Puede alguien por favor dispararme?
Martin Andersson

7

Puede usar de forma segura sudo apt-get remove --purge applicationo el sudo apt-get remove applications99% del tiempo. Cuando usa la purgebandera, simplemente elimina todos los archivos de configuración también. Lo que puede o no ser lo que desea, dependiendo de si desea reinstalar dicha aplicación. El application*coincidirá con todas las aplicaciones que se inician con el application, que suelen ser complementos, características adicionales, etc de la aplicación principal que está eliminando. es decir

sudo apt-get remove gedit*

eliminaría gedit, gedit-pluginsy gedit-common. Por lo general, no es necesario hacer esto, ya que la mayoría de los complementos / programas asociados dependen de la aplicación principal y se eliminarán automáticamente (o se marcarán para su eliminación) cuando desinstale la aplicación principal.

Su último comando es eliminar las sobras de las aplicaciones que se sabe que tienen desinstaladores desordenados, y simplemente elimina los restos de la aplicación.


5

Recibí algunos mensajes de error al eliminar un paquete, la única forma en que encontré que funcionó fue esta:

mv /var/lib/dpkg/info/package.* /tmp/
dpkg --remove --force-remove-reinstreq package

Descubrí que aunque solo use

dpkg --remove --force-remove-reinstreq package

no elimina el paquete, me muestra la ruta correcta al archivo para moverlo:

mv /var/lib/dpkg/info/package.* /tmp/

Sustituya el paquete con el nombre de su aplicación. Usa sudo en Ubuntu, conviértete en root en Debian.



1

Depende de la aplicación que quieras eliminar. Siempre asegúrese de verificar sus dependencias antes de emitir el comando yes. Cuando elimina algo mediante la línea de comando, a veces mostrará un puñado de bibliotecas que ya no son necesarias. Estos se pueden eliminar con apt-get autoremove.

Tenga en cuenta que al usar comandos como sudo apt-get remove --purge applicationname puede eliminar algunas dependencias que otras aplicaciones necesitan y, como tal, podría dañar su sistema.

Si desea hacerlo de una manera más segura, siempre puede eliminarlo utilizando solo el centro de software o apt-get remove applicationname. Si las dependencias ya no son necesarias, publique apt-get autoremove más tarde.


Creo que todo el sistema de paquetes de Debian fue diseñado específicamente para no eliminar un paquete si hay otros paquetes que dependen de él. Es posible que (de manera útil) se le pregunte si también desea eliminar todos los paquetes dependientes, y ahí es donde realmente debería leer la lista de paquetes a punto de ser eliminados, que creo que es lo que está tratando de decir.
Xen2050

1

Solo quería aclarar una cosa que parece ser una fuente de confusión aquí. La dpkgutilidad no conoce ni rastrea las dependencias de los paquetes en relación entre sí, lo cual fue una gran razón que aptse desarrolló, creo. Puede leer sobre esto en la sección 8.6 de esta página. Las Preguntas Frecuentes de Debian GNU / Linux - Las herramientas de administración de paquetes de Debian

  • Con apt: si quisiera purgar el paquete A, y tiene una dependencia llamada paquete B, y el paquete B no tenía otros paquetes dependientes, entonces los paquetes A y B serán purgados. Si el paquete B tenía otros paquetes dependientes, solo se purgará el paquete A.

  • Con dpkg: ¿Qué dependencia? ¡Me acabas de decir que purgue el maldito
    paquete, así que eso fue lo que hice! La mala planificación de su parte no
    constituye una emergencia de mi parte.

Dicho esto, aquí hay dos líneas simples que se pueden usar para cada método de purga:

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --dry-run --purge

apt-get autoremove -y; apt-get --dry-run purge -y $(dpkg --list |grep '^rc' |awk '{print $2}')

Elimine el --dry-runpara realizar la operación de purga real en lugar de informar qué acciones habría tomado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.