Come reinstallare un pacchetto usando 'apt-get'?


186

Sembra che il mio aptitudesia in qualche modo rotto:

sudo aptitude update
0% [Working]Segmentation fault

dmesg
[223282.616599] aptitude[30972]: segfault at 67707f ip 7f954dcfae5d sp 7ffff5a5f950 error 4 in libapt-pkg-libc6.7-6.so.4.6.0[7f954dca5000+bd000]

Quindi vorrei reinstallare aptitudeutilizzando apt-get.

Sfortunatamente sembra apt-getche non abbia un'opzione di reinstallazione.

Come potrei tornare aptitudea lavorare?

È possibile che ho trovato la causa principale del segreto di aptitude. Ecco come posso riprodurlo:

  1. 'ssh' effettua il login remoto nella macchina Debian tramite il terminale rxvt di Cygwin (da un'edizione tedesca di Windows 7 a 64 bit).
  2. Ingrandisci la finestra di rxvt in modo che si estenda su due monitor (sì, ho due monitor)
  3. Corri aptitude update. Nota: quando ridimensiono il terminale rxvt alla normalità, non ho questi errori di segmentazione!

Risposte:


320
$ man apt-get | grep reinsta -A2
       --reinstall
           Re-Install packages that are already installed and at the newest
           version. Configuration Item: APT::Get::ReInstall.

Quindi, per usarlo per reinstallare aptitudeutilizzare:

sudo apt-get install --reinstall aptitude

14
che -A5cosa stai mangiando?
Vokuhila-Oliba,

86
uomo grep | grep - "-A"
gravità

34
Che --cosa stai prendendo in giro?
Desty,

13
man getopt, guarda sottoPARSING
Tino

28
-A5mostra la riga corrispondente più le seguenti 5 righe. --interrompe l'analisi delle opzioni, interpretando così tutto ciò che viene dopo come argomenti posizionali, evitando di dover sfuggire al trattino nell'espressione -Ache altrimenti verrebbe interpretata come un'opzione per grep stesso.
Jjmontes,

115

È possibile reinstallare un pacchetto con sudo apt-get install --reinstall packagename. Ciò rimuove completamente il pacchetto (ma non i pacchetti che dipendono da esso), quindi reinstalla il pacchetto.

Questo può essere utile quando il pacchetto ha molte dipendenze inverse.


10
Grazie per essere l'unica risposta corretta, completa, non snarky.
Cerin,

6
@Cerin: Non definirei le altre risposte eccessivamente snarky: anche quella "leggi la man page" in realtà ha dato la risposta e come trovarla.
David Spillett,

45
@DavidSpillett, sono fortemente in disaccordo. Le pagine man sono generalmente scritte in modo molto scadente e sono molto ostili ai neofiti. Ad esempio, il paragrafo sull'opzione "--reinstall" non menziona la necessità di utilizzarlo con l'argomento "install". Un principiante potrebbe legittimamente chiedere "perché devo dirlo per installare E reinstallare?" Una risposta che dice a qualcuno di RTFM è il peggior tipo di risposta e mi fa male vederla con il maggior numero di voti, specialmente quando una risposta completa e realmente utile è quasi in fondo.
Cerin,

20

A volte è necessario ripristinare anche i file di configurazione! non solo reinstallare.

sudo apt-get install --reinstall xxxx

Reinstallare l'applicazione, mantiene i file di configurazione.

Questo potrebbe essere utile, ma a volte è necessario ricominciare da capo, quindi quello che uso è questo:

sudo dpkg -r xxxx //to remove that xxxx package
sudo dpkg -P xxxx //to purge all related files

poi

sudo apt-get install xxxx

6
E se hai bisogno di ripristinare solo i file di configurazione, in alcuni casi (se sono gestiti da ucf) dovresti usare UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname].
Skippy le Grand Gourou,

2
Questa risposta merita un GRANDE voto. Questo è ciò di cui hai bisogno quando vuoi "reinstallare completamente" un pacchetto. Ad esempio, una semplice reinstallazione di vsftpd non ricrea il file di configurazione, anche se il file non esiste più. Un "Rimuovi + Elimina + (Reinstalla) installa invece il lavoro.
Kar.ma,

13

Dovresti essere sicuro di rimuovere aptitude e reinstallarlo, poiché ciò non influirà sulle altre utility apt. Quindi: apt-get remove aptitudeseguito da apt-get install aptitude, o se l'errore persiste, provare apt-get purge aptitudeseguito da apt-get install aptitude.

Prima di eseguire una delle precedenti operazioni, consiglio un file system completo e un controllo dei blocchi danneggiati nel caso in cui vi sia un problema che ha causato il problema (a seconda del problema, se ce n'è uno, ulteriori attività potrebbero peggiorare le cose). Inoltre, assicurati di rivedere ciò che verrà rimosso nel passaggio di rimozione / eliminazione prima di lasciarlo procedere (dovrebbe mettere in pausa per chiedere l'autorizzazione se qualcosa in più viene modificato a seguito della rimozione di quel pacchetto), per ricontrollare il mio pensiero che questo è salvo.


Molte grazie! apt-get removeseguito da ha apt-get installfatto il trucco!
Vokuhila-Oliba,

È molto tempo fa che ho fatto cose simili a full filesystem checko simili. Potresti per favore darmi un breve suggerimento su come farlo?
Vokuhila-Oliba,

1
fsck -f <block_device>come fsck /dev/sda1. Il file system dovrà essere smontato o montato in sola lettura al momento, quindi è probabile che questo sia il tuo filesystem di root. Dovresti riavviare in modalità utente singolo o avviare da qualcos'altro come un cd live.
David Spillett,

2
È possibile utilizzare tune2fsper contrassegnare il filesystem come montato più volte del limite impostato, che dovrebbe forzare un controllo all'avvio successivo. Supponendo che il filesystem sia ext2 / 3/4: tune2fs -C 99 <device>o nel caso in cui il controllo basato sul conteggio dei montaggi sia disattivato, accenderlo contemporaneamente con qualcosa del genere tune2fs -c 17 -C 99 <device>.
David Spillett,

2
touch / forcefsck; riavvio
user23307

1
sudo apt remove --purge package
sudo apt install package

È come se non avessi mai installato il pacchetto prima d'ora. Lo sto facendo spesso con movimento e cose del genere.

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.