Como reinstalar um pacote usando o 'apt-get'?

186

Parece que o meu aptitudeestá de alguma forma quebrado:

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]

Então, eu gostaria de reinstalar aptitudeusando apt-get.

Infelizmente, parece apt-getque não tem uma opção de reinstalação.

Como eu poderia voltar aptitudea trabalhar?

É possível que eu tenha encontrado a causa raiz do segfault do aptitude. Aqui está como eu posso reproduzi-lo:

  1. logon remoto 'ssh' na máquina Debian através do terminal rxvt da Cygwin (a partir de uma edição alemã do Windows 7 de 64 bits).
  2. Amplie a janela rxvt para que se estenda por dois monitores (sim, eu tenho dois monitores)
  3. Corra aptitude update. Nota: quando redimensiono o terminal rxvt para normal, não tenho essas falhas de segmentação!
Vokuhila-Oliba
fonte

Respostas:

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.

Portanto, para usá-lo para reinstalar, aptitudeuse:

sudo apt-get install --reinstall aptitude
user23307
fonte
14
o que -A5você está saudando?
Vokuhila-Oliba
86
homem grep | grep - "-A"
grawity 30/01
34
O que --você está esperando?
Desty 11/09/14
13
man getopt, olhe emPARSING
Tino
28
-A5mostra a linha correspondente mais as 5 linhas a seguir. --interrompe a análise das opções, interpretando, assim, tudo o que vem depois como argumentos posicionais, evitando ter que escapar do traço na expressão -Aque, de outra forma, seria interpretada como uma opção de grep em si.
Jjmontes
115

Você pode reinstalar um pacote com sudo apt-get install --reinstall packagename. Isso remove completamente o pacote (mas não os pacotes que dependem dele) e depois reinstala o pacote.

Isso pode ser conveniente quando o pacote tiver muitas dependências reversas.

Milad Khajavi
fonte
10
Obrigado por ser a única resposta correta, completa e não irritante.
Cerin
6
@Cerin: eu não chamaria as outras respostas excessivamente sarcásticas: até a "leia a página do manual" realmente deu a resposta, bem como a forma de encontrá-la.
precisa
45
@ DavidSpillett, eu discordo totalmente. As páginas de manual geralmente são muito mal escritas e são muito hostis para iniciantes. Por exemplo, o parágrafo na opção "--reinstall" não menciona que você deve usá-lo com o argumento "install". Um novato pode legitimamente perguntar "por que tenho que dizer para instalar e reinstalar?" Uma resposta que diz a alguém para RTFM é o pior tipo de resposta e me dói vê-la com mais votos, especialmente quando uma resposta completa e realmente útil está perto do fundo.
Cerin
20

Às vezes você precisa restaurar os arquivos de configuração também! não apenas reinstalar.

sudo apt-get install --reinstall xxxx

Reinstale o aplicativo, mantém os arquivos de configuração.

Isso pode ser útil, mas às vezes você precisa começar do zero, então o que eu uso é este:

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

então

sudo apt-get install xxxx
andreskwan
fonte
6
E se você precisar restaurar apenas os arquivos de configuração, em alguns casos (se eles forem gerenciados pelo ucf), use UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname].
Skippy le Grand Gourou
2
Esta resposta merece uma votação GRANDE. É isso que você precisa quando deseja "reinstalar completamente" um pacote. Por exemplo, uma simples reinstalação do vsftpd não recria o arquivo de configuração, mesmo que o arquivo não exista mais. Uma "Remover + Limpar + (Re) instalação" faz o trabalho.
Kar.ma
13

Você deve estar seguro para remover o aptitude e reinstalar, pois isso não afetará os outros utilitários do apt. Então: apt-get remove aptitudeseguido por apt-get install aptitude, ou se isso ainda falhar, tente apt-get purge aptitudeseguido por apt-get install aptitude.

Antes de executar qualquer uma das opções acima, recomendo uma verificação completa do sistema de arquivos e do bloqueio incorreto, caso haja um problema que causou o problema (dependendo do problema, se houver, mais atividades poderão piorar as coisas). Além disso, verifique o que será removido na etapa remover / remover antes de continuar (deve fazer uma pausa para pedir permissão se algo extra for alterado como resultado da remoção desse pacote), para verificar novamente meu pensamento de que isso é seguro.

David Spillett
fonte
Muito obrigado! apt-get removeseguido por apt-get installfez o truque!
precisa saber é o seguinte
Faz muito tempo que fiz coisas parecidas a full filesystem checkou similares. Você poderia me dar uma pequena dica de como fazer isso?
Vokuhila-Oliba
1
fsck -f <block_device>tais como fsck /dev/sda1. O sistema de arquivos precisará ser desmontado ou montado somente leitura no momento. Assim, como é provável que seja o seu sistema de arquivos raiz, você deve reiniciar no modo de usuário único ou inicializar a partir de algo mais como um CD ao vivo.
David Spillett
2
Você pode tune2fsmarcar o sistema de arquivos como tendo sido montado mais vezes do que o limite definido, o que deve forçar uma verificação na próxima inicialização. Supondo que o sistema de arquivos seja ext2 / 3/4: tune2fs -C 99 <device>ou, caso você tenha a verificação baseada em contagem de montagem desativada, ligue-o ao mesmo tempo com algo parecido tune2fs -c 17 -C 99 <device>.
precisa saber é o seguinte
2
touch / forcefsck; reinicialização
user23307
1
sudo apt remove --purge package
sudo apt install package

É como se você nunca tivesse instalado o pacote antes. Eu estou fazendo isso frequentemente com movimento e essas coisas.

Niwla23
fonte