In cosa differiscono i vari comandi di rimozione dei pacchetti APT?


17

Qual è la differenza tra questi comandi?

  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

Risposte:


24

Risposta rapida

  • remove disinstalla i pacchetti che prendono il nome.
  • autoremovedisinstalla tutti i pacchetti installati automaticamente che non sono più necessari. Non è corretto elencare i nomi dei pacchetti dopo autoremove; verranno ignorati (e verranno rimossi tutti i pacchetti idonei), che probabilmente non è quello che intendi.
  • --purgecausa anche la rimozione dei file di configurazione a livello di sistema associati alla rimozione dei pacchetti. Deve essere accompagnato da un comando, come removeo autoremove. Il --purgeflag modifica l'azione di un comando; non agisce da solo.
  • purgesignifica la stessa cosa di --purge remove(che è la stessa di remove --purge). Non è corretto dirlo purgedue volte; il secondo purgeviene interpretato come il nome di un pacchetto da purged, che probabilmente non è quello che intendi.

Risposta completa

Per capire cosa fanno questi comandi e come sono diversi, aiuta (ed è probabilmente anche essenziale) a comprendere due concetti:

  1. la distinzione tra pacchetti installati manualmente e pacchetti installati automaticamente
  2. la distinzione tra i file di pacchetto di un pacchetto e i suoi file di configurazione

Installato manualmente o installato automaticamente

Un pacchetto installato può essere installato manualmente o automaticamente .

Quando si specifica un pacchetto per l'installazione, ed è installato, viene installato manualmente .

Ma possono anche essere installati altri pacchetti. La maggior parte dei pacchetti ha dipendenze - altri pacchetti che devono essere installati, affinché quei pacchetti funzionino come previsto. Quando si installa un pacchetto, vengono installate le sue dipendenze (ovvero gli altri pacchetti da cui dipende), ad eccezione di quelle installate in precedenza.

Quando un pacchetto non viene specificato dall'utente per l'installazione, ma viene invece installato come dipendenza di un pacchetto specificato per l'installazione, viene automaticamente installato.

Si noti che quando sono installati due pacchetti e uno di essi è una dipendenza di un altro, ciò non significa che la dipendenza sia installata automaticamente. È anche possibile che la dipendenza sia stata installata manualmente (ad esempio, specificata dall'utente, ad esempio, installata prima o contemporaneamente al pacchetto che dipende da essa).

Infine:

  • Se si tenta di installare manualmente un pacchetto che è già installato, rimane installato. Ma se è stato installato automaticamente, viene apportata una modifica: il tentativo di installarlo manualmente lo contrassegnerà come installato manualmente.
  • È possibile contrassegnare qualsiasi pacchetto come installato manualmente o automaticamente (con il apt-markcomando), indipendentemente da come o in quali circostanze siano stati effettivamente installati.
  • I pacchetti preinstallati con il tuo sistema Ubuntu non sono tutti installati automaticamente; alcuni vengono contrassegnati come installati automaticamente e altri vengono contrassegnati come installati manualmente. Questo per soddisfare la logica alla base della distinzione tra pacchetti installati manualmente e automaticamente - l'idea che alcuni pacchetti siano necessari solo al servizio di altri.

In genere, per ogni pacchetto installato automaticamente avrai almeno un pacchetto installato manualmente che dipende da esso (e che ha causato l'installazione automatica). Tuttavia, se quindi si rimuovono tutti i pacchetti installati manualmente che dipendono da un pacchetto installato automaticamente, il pacchetto installato automaticamente non sarà più necessario, ma verrà comunque installato.

apt-get autoremove rimuove automaticamente i pacchetti installati che non hanno più pacchetti installati manualmente a seconda di essi.

File del pacchetto e file di configurazione

Un pacchetto fornisce file che intendono essere e rimanere gli stessi su tutti i sistemi in cui è installata quella versione di quel pacchetto. Tali file forniscono eseguibili, risorse, documentazione e altre "risorse" per i programmi installati. Di solito abbiamo semplicemente chiamato questi "file" forniti da un pacchetto.

Ma un pacchetto fornisce anche altri file, che sono destinati (possibilmente) a essere cambiati. Questi sono chiamati file di configurazione globali (o di sistema). Sono quasi sempre installati nella /etcdirectory e possono essere modificati automaticamente e manualmente per cambiare il comportamento dei programmi installati. Ad esempio, sudoha un file di configurazione /etc/sudoerse una directory per altri file di configurazione /etc/sudoers.d. Quel file e tutti i file aggiunti a quella directory specificano chi è autorizzato a utilizzare sudoin quali modi.

In genere si desidera che la disinstallazione di un pacchetto e la sua successiva installazione non cambino il modo in cui si comporta (a meno che i suoi file del pacchetto non fossero corrotti ed è per questo che lo hai reinstallato, ovviamente). Pertanto, in genere quando un pacchetto viene disinstallato, i file del pacchetto vengono eliminati ma i suoi file di configurazione a livello di sistema non vengono toccati.

Quando si disinstalla un pacchetto senza specificare che i file di configurazione a livello di sistema dovrebbero essere eliminati, si parla di "rimozione" del pacchetto.

Se si desidera eliminare anche i file di configurazione a livello di sistema di un pacchetto quando si disinstalla il pacchetto, si parla di "eliminazione" del pacchetto.

apt-get removerimuoverà un pacchetto; cioè, disinstallerà il pacchetto ma lascerà i suoi file di configurazione a livello di sistema.

apt-get purgeeliminerà un pacchetto; cioè, disinstallerà il pacchetto e si assicurerà anche di eliminare i suoi file di configurazione a livello di sistema.

Un altro modo per eliminare i pacchetti è usare la --purgebandiera. Questo non dice apt-getcosa fare; invece, modifica quali termini (o "comandi") gli removedicono di fare. Il --purgeflag fa sì che qualsiasi disinstallazione dei pacchetti sia accompagnata dall'eliminazione dei file di configurazione a livello di sistema per i pacchetti che vengono disinstallati. In altre parole, la --purgebandiera trasforma le rimozioni in purghe.

Perché abbiamo la --purgebandiera quando abbiamo il purgecomando? Dopo tutto, non è sudo apt-get --purge remove packagenameequivalente a sudo apt-get purge packagename. Sono equivalenti. È --purgeutile quando si desidera modificare il comportamento di comandi diversi da remove.

Ad esempio, supponiamo che tu voglia disinstallare i pacchetti installati automaticamente che non sono più necessari (perché non ci sono più pacchetti installati manualmente a seconda di essi), ma non vuoi solo rimuovere questi pacchetti installati automaticamente, ma vuoi anche eliminare i loro file di configurazione a livello di sistema. Quindi potresti eseguire:

sudo apt-get --purge autoremove

Consideriamo un altro uso di --purge. C'è un flag chiamato --reinstall, che trasforma le installazioni in reinstallazione. Ciò significa che, normalmente, quando si tenta di installare un pacchetto che è già installato, non accadrà nulla o (se il pacchetto è contrassegnato come installato automaticamente) il pacchetto verrà contrassegnato come installato manualmente. Ma con il --reinstallflag, l'installazione di un pacchetto che è già installato provoca la sua rimozione e la successiva installazione :

sudo apt-get --reinstall install packagename

Supponiamo di voler eliminare i file di configurazione di sistema del pacchetto che si sta reinstallando. Questo è abbastanza comune; quando un pacchetto non funziona e non sai perché, potresti provare a reinstallarlo e anche a eliminare i suoi file di configurazione in modo che la sua configurazione sia ripristinata ai valori predefiniti. Per raggiungere questo obiettivo, puoi eseguire:

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

L' --reinstallinstallazione trasforma l'installazione in reinstallazione (ovvero la rimozione seguita dall'installazione) e --purgetrasforma la parte di rimozione dell'installazione in eliminazione.

Il comportamento dei tuoi esempi

Ora dovrebbe essere chiaro esattamente cosa fanno ciascuno dei tuoi apt-getcomandi di esempio :

  • sudo apt-get autoremove --purge packagenames

    Questo elimina automaticamente i pacchetti installati che non dispongono più di pacchetti installati manualmente che dipendono da essi. Cioè, disinstalla quei pacchetti (che comporta l'eliminazione dei file dei pacchetti) e cancella anche i loro file di configurazione a livello di sistema.

    Qui, packagenamesnon fa niente. In particolare, se intendevi rimuovere solo i pacchetti i cui nomi sono elencati lì, questo non si comporterà come previsto.

  • sudo apt-get remove --purge packagenames

    Questo cancella packagenames; supponendo che packagenamessia un elenco separato da spazi di nomi di pacchetti, eliminerà tutti. Cioè, li disinstallerà (il che comporta l'eliminazione dei file del pacchetto) e eliminerà anche i loro file di configurazione a livello di sistema.

    Se uno qualsiasi dei pacchetti elencati packagenamesnon è installato, la sua presenza nell'elenco non avrà alcun effetto (tranne che vi verrà comunicato che non è stato installato). Se si elencano nomi di pacchetti che non sono il nome di alcun pacchetto effettivo, il comando non riuscirà con un errore.unable to locate packagename

  • sudo apt-get purge purge packagenmaes

    Se hai rimosso una delle occorrenze di purgein quel comando, sarebbe equivalente alla precedente. Allo stato attuale, tenta di eliminare un pacchetto chiamato purgee anche di eliminare i pacchetti elencati in packagenames. Dato che purgenon è il nome di alcun pacchetto, fallirà con un messaggio di errore.

  • sudo apt-get remove packagenames

    Ciò rimuove i pacchetti elencati in packagenames, che comporta l'eliminazione dei file dei pacchetti. Questo non cancella i loro file di configurazione a livello di sistema (perché è semplicemente una rimozione, non una purga).

  • sudo apt-get autoremove

    Ciò disinstalla automaticamente i pacchetti installati che non dispongono più di pacchetti installati manualmente che dipendono da essi. Ciò comporta l'eliminazione dei file dei pacchetti, ma non dei file di configurazione a livello di sistema (ovvero, è una rimozione ma non un'eliminazione).

Per ulteriori informazioni su come utilizzare apt-get, raccomando la sua pagina di manuale . Per informazioni più generali, consultare questa guida .

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.