Qual è il modo corretto per rimuovere completamente un'applicazione?


546

Ho cercato in rete tali informazioni e ho trovato diverse righe di comando, come queste:

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*

Quindi, qual è il modo corretto? È necessario utilizzare quel "*"?

Successivamente, ho anche trovato questi comandi:

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

1
Ad alcune delle tue domande potrebbe essere data una risposta in questo post: askubuntu.com/questions/1143/how-can-i-uninstall-software
Glutanimate

8
application*a volte può dare risultati inaspettati - ad esempio, se si dispone di un file nella directory corrente denominata application_information, la shell lo espanderà prima che venga passato a apt-get. Se questo accade e vuoi l'asterisco letterale, puoi usare application\*o'application*'
Izkata

6
application*è ancora più pericoloso dove non ci sono file nella directory corrente: apt-getusa espressioni regolari, nessun pattern glob. Le persone hanno quasi cancellato l'intero sistema cercando di rimuoverlo wine*.
Andrea Corbellini,

3
Puoi accettare una risposta? Per essere grato alle persone che ti hanno risposto.
m-ric,

application*, né application\*è sicuro! Citando *con \o ' 'solo aumenta il rischio, assicurando *viene passato come è a apt-get(anche se di solito è comunque!), Provoca apt-getinterpretare l'argomento come regex. In una regex *significa "zero o più del carattere precedente". Una forma comune dell'errore è disinstallare wine*, rimuovendo tutti i pacchetti con win(no wine, win) ovunque nei loro nomi e tutti i pacchetti a seconda di uno di essi. Vedi questa spiegazione e possibili correzioni . @Izkata
Eliah Kagan,

Risposte:


705
  • apt-get remove packagename

    rimuoverà i file binari, ma non i file di configurazione o di dati del pacchetto packagename. Inoltre, le dipendenze installate con esso non verranno toccate durante l'installazione.

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

    rimuoverà tutto ciò che riguarda il pacchetto packagename, ma non le dipendenze installate con esso al momento dell'installazione. Entrambi i comandi sono equivalenti.

    Particolarmente utile quando si desidera "ricominciare tutto" con un'applicazione perché si è incasinata la configurazione. Tuttavia, non rimuove i file di configurazione o di dati che risiedono nelle home directory degli utenti, di solito in cartelle nascoste lì. Non esiste un modo semplice per rimuovere anche quelli.

  • apt-get autoremove

    rimuove i pacchetti orfani, ovvero i pacchetti installati che prima erano installati come dipendenza, ma non lo sono più. Usa questo dopo aver rimosso un pacchetto che aveva installato dipendenze che non ti interessano più.

  • aptitude remove packagenameo aptitude purge packagename(allo stesso modo)

    tenterà anche di rimuovere altri pacchetti richiesti da packagenameon ma non richiesti da tutti i pacchetti rimanenti. Nota che aptitudericorda solo le informazioni sulla dipendenza per i pacchetti che ha installato.

E molti altri esistono. I dpkgcomandi di livello inferiore possono essere utilizzati (avanzati) o strumenti della GUI come Muon, Synaptic, Software Center, ecc. Non esiste un unico "modo corretto" di rimuovere applicazioni o eseguire altre attività che interagiscono con la gestione dei pacchetti.

L'elenco che hai trovato sono solo esempi. Assicurati di aver compreso i significati e di provare cosa vuole fare prima di accettare l'azione (è necessario premere Yprima che esegua effettivamente le azioni come proposto).

La versione dell'asterisco nella domanda è probabilmente errata ; apt-getaccetta un'espressione regolare e non un modello glob come shell. Quindi cosa succede con

sudo apt-get remove application*

è il seguente:

  1. La shell tenta di espandersi application*guardando i file nella directory corrente. Se (come normalmente accade) non trova nulla, restituisce il modello glob inalterato (supponendo bashqui con il comportamento predefinito --- zshverrà fuori errore).

  2. apt-getrimuove i pacchetti il cui nome contiene una stringa che soddisfa l'espressione regolare application*, cioè, applicatioseguiti da un numero arbitrario di n: applicatio, application, applicationn, libapplicatio, etc.

  3. Per vedere come questo può essere pericoloso, prova (senza root per la doppia sicurezza) apt-get -s remove "wine*"( -ssimulerà la cosa invece di farlo) --- dirà che rimuoverà tutti i pacchetti che hanno "win" nel loro nome e il dipendente, quasi l'intero sistema ...

Probabilmente, il comando che si intendeva è davvero

 sudo apt-get remove "^application.*"

(notare le virgolette e il punto) che rimuoverà tutti i pacchetti il ​​cui nome inizia con application.

Questi comandi,

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.

sono completamente al di fuori dell'ambito della gestione dei pacchetti. Non rimuovere i file appartenenti ai pacchetti senza utilizzare Gestione pacchetti! Sarà confuso ed è il modo sbagliato di fare le cose.

Se non sai a quale pacchetto appartiene un file, prova questo:

dpkg -S /path/to/file

9
L'opzione --purge è utile anche quando si tenta di rimuovere completamente tutte le dipendenze rimanenti, compresi i loro file di configurazione: apt-get-autoremove --purge È anche importante notare che i file di configurazione nella directory principale non sono interessati dall'opzione --purge. Questi dovrai rimuovere manualmente.
Glutanimate,

1
Si è verificato un errore qui: apt-get accetta RE, non globs; quindi apt-get remove pack * rimuoverà tutti i pacchetti che iniziano con pac seguito da zero o più k ... che è normalmente inaspettato. Ho modificato la risposta. Vedi anche askubuntu.com/questions/210976/…
Rmano,

Penso che questa risposta non sia più accurata. O le apt remove -s texlive*sue apt-getlinee di ritorno della controparte come Note, selecting 'texlive-font-utils' for glob 'texlive*'(implicando che effettivamente accettano globs), seguite dalle solite Package 'texlive-common' is not installed, so not removed, e infine Remvlinee, come Remv texlive-font-utils [2015.20160320-1] [...].
Jonathan Y.

@JonathanY. Dovresti anche selezionare i pacchetti non installati. Ad ogni modo, potresti per favore porre una NUOVA domanda ed elaborare un po 'più in dettaglio quale sia la tua situazione nella domanda. Sarei felice di vederlo :)
gertvdijk,

Non sto facendo una nuova domanda. Sto indicando una possibile modifica poiché è stata fatta questa risposta che rende errati alcuni dettagli. In altre parole, sembrerebbe che apt-get remove packa*prenda davvero il glob packa*invece di guardarlo come regex: corrisponde packagema non pack.
Jonathan Y.

110

Per Ubuntu 12.04 e forse superiori, il metodo corretto è:

sudo apt-get --purge autoremove packagename

Come dettagliato qui .

Non utilizzare in packagename*quanto ciò può eliminare pacchetti non intenzionali e causare più problemi di quanti ne risolva. Oppure, se è necessario, almeno eseguirlo con un -s, --simulate, --dry-runla bandiera prima per vedere esattamente che cosa farà senza farlo.


13
questa è la risposta corretta, breve e concisa:
Anwar,

20

Puoi usare questo comando:

sudo apt-get purge --auto-remove packagename

Elimina i pacchetti richiesti insieme alle dipendenze installate con tali pacchetti. L' --auto-removeopzione (essendo un alias di autoremove) funziona in modo simile a sudo apt-get autoremove. Usando questo comando possiamo eseguire un singolo comando:

sudo apt-get purge --auto-remove packagename

Invece di:

sudo apt-get purge packagename
sudo apt-get autoremove

2
Anche se hai ragione, ma si può anche usare sudo apt-get --purge autoremove packagename. Stesso 1 comando qui
Anwar,

Il comando completo può anche essere scritto come apt-get autoremove --purgeanziché apt-get purge --auto-remove?
Felwithe il

3
Qualcuno può spararmi per favore?
Martin Andersson, il

7

Puoi utilizzare in sicurezza sudo apt-get remove --purge applicationo il sudo apt-get remove applications99% delle volte. Quando usi il purgeflag, rimuove semplicemente anche tutti i file di configurazione. Quale può essere o meno quello che vuoi, a seconda se vuoi reinstallare detta applicazione. Il application*corrisponderà tutte le applicazioni che iniziano con application, che sono di solito plugin, funzioni aggiuntive, ecc dell'applicazione principale si sta rimuovendo. vale a dire

sudo apt-get remove gedit*

rimuoverebbe gedit, gedit-pluginse gedit-common. In genere non è necessario eseguire questa operazione, poiché la maggior parte dei plug-in / programmi associati dipendono dall'applicazione principale e verranno automaticamente rimossi (o contrassegnati per la rimozione) quando si disinstalla l'applicazione principale.

Il tuo ultimo comando è solo quello di rimuovere gli avanzi dalle applicazioni che sono noti per avere disinstallatori disordinati, e sta rimuovendo tutti i resti dell'applicazione.


5

Ho ricevuto alcuni messaggi di errore durante la rimozione di un pacchetto, l'unico modo per scoprire che funzionava era questo:

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

Ho scoperto che sebbene usando solo

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

non rimuove il pacchetto mi mostra il percorso corretto del file con cui spostarmi:

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

Sostituire il pacchetto con il nome dell'applicazione. Usa sudo in Ubuntu, diventa root in Debian.



1

Dipende dall'applicazione che si desidera rimuovere. Assicurati sempre di controllarne le dipendenze prima di emettere il comando yes. Quando rimuovi qualcosa dalla riga di comando, a volte mostrerà una manciata di librerie che non sono più necessarie. Questi possono essere rimossi con apt-get autoremove.

Attenzione che usando comandi come sudo apt-get remove --purge applicationname può rimuovere alcune dipendenze che sono necessarie ad altre applicazioni e, come tali, potrebbe danneggiare il sistema.

Se vuoi farlo nel modo più sicuro, puoi sempre rimuoverlo usando solo il software center o apt-get remove applicationname. Se le dipendenze non sono più necessarie, emettere apt-get autoremove in seguito.


Penso che l'intero sistema di pacchetti Debian sia stato progettato specificamente per non rimuovere un pacchetto se ci sono altri pacchetti che dipendono da esso. Potrebbe esserti chiesto (utile) se vuoi rimuovere anche tutti i pacchetti dipendenti, ed è qui che dovresti effettivamente leggere l'elenco dei pacchetti che stanno per essere rimossi, che penso sia quello che stai cercando di dire.
Xen2050,

1

Volevo solo chiarire una cosa che sembra essere fonte di confusione qui. L' dpkgutilità non conosce o tiene traccia delle dipendenze dei pacchetti l'una rispetto all'altra, il che è stato un grande motivo che aptcredo sia stato sviluppato. Puoi leggerlo nella sezione 8.6 di questa pagina Le domande frequenti su Debian GNU / Linux - Gli strumenti di gestione dei pacchetti Debian

  • Con apt: se volessi eliminare il pacchetto A, e ha una dipendenza chiamata pacchetto B, e il pacchetto B non avesse altri pacchetti dipendenti, allora i pacchetti A e B verranno eliminati. Se il pacchetto B DID ha altri pacchetti dipendenti, verrà eliminato solo il pacchetto A.

  • Con dpkg: quale dipendenza? Mi hai appena detto di eliminare quel dannato
    pacco, ecco cosa ho fatto! Una cattiva pianificazione da parte tua non
    costituisce un'emergenza da parte mia.

Detto questo, qui ci sono due linee singole che possono essere utilizzate per ciascun metodo di spurgo:

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}')

Rimuovere --dry-runper eseguire l'operazione di eliminazione effettiva invece di segnalare quali azioni avrebbe intrapreso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.