¿Cómo reinstalar un paquete usando 'apt-get'?

186

Parece que mi aptitudeestá roto de alguna manera:

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]

Entonces me gustaría reinstalar aptitudeusando apt-get.

Desafortunadamente parece apt-getque no tiene una opción de reinstalación.

¿Cómo podría volver aptitudea trabajar?

Es posible que haya encontrado la causa raíz del segfault de aptitude. Así es como puedo reproducirlo:

  1. Inicio de sesión remoto 'ssh' en la máquina Debian a través del terminal rxvt de Cygwin (desde una edición alemana de Windows 7 de 64 bits).
  2. Amplíe la ventana rxvt para que se extienda a través de dos monitores (sí, tengo dos monitores)
  3. Ejecutar aptitude update. Nota: cuando cambio el tamaño del terminal rxvt a normal, ¡no tengo estos fallos de segmentación!
Vokuhila-Oliba
fuente

Respuestas:

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.

Entonces, para usarlo para reinstalar el aptitudeuso:

sudo apt-get install --reinstall aptitude
usuario23307
fuente
14
¿Qué es lo que -A5estás agarrando?
Vokuhila-Oliba
86
hombre grep | grep - "-A"
gravedad
34
¿Qué es lo que --estás molestando?
Desty
13
man getopt, mira debajoPARSING
Tino
28
-A5muestra la línea coincidente más las siguientes 5 líneas. --detiene el análisis de las opciones, por lo tanto, interpreta todo lo que viene después como argumentos posicionales, evitando tener que escapar del guión en la expresión -Aque de otro modo se interpretaría como una opción para grep.
jjmontes
115

Puede reinstalar un paquete con sudo apt-get install --reinstall packagename. Esto elimina completamente el paquete (pero no los paquetes que dependen de él), luego vuelve a instalar el paquete.

Esto puede ser conveniente cuando el paquete tiene muchas dependencias inversas.

Milad Khajavi
fuente
10
Gracias por ser la única respuesta correcta, completa y no sarcástica.
Cerin
66
@Cerin: No diría que las otras respuestas son demasiado sarcásticas: incluso el de "leer la página de manual" en realidad dio la respuesta y cómo encontrarla.
David Spillett
45
@DavidSpillett, estoy totalmente en desacuerdo. Las páginas de manual generalmente están muy mal escritas y son poco amigables para los novatos. Por ejemplo, el párrafo sobre la opción "- reinstalar" no menciona que debe usarlo con el argumento "instalar". Un novato con razón podría preguntar "¿por qué tengo que decirle que instale Y reinstale?" Una respuesta que le dice a alguien a RTFM es el peor tipo de respuesta y me duele verla con la mayoría de los votos, especialmente cuando una respuesta completa y realmente útil está cerca del final.
Cerin
20

¡A veces también necesitas restaurar los archivos de configuración! no solo reinstalar.

sudo apt-get install --reinstall xxxx

Vuelva a instalar la aplicación, mantiene los archivos de configuración.

Esto podría ser útil, pero a veces necesitas comenzar de nuevo, así que lo que uso es esto:

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

entonces

sudo apt-get install xxxx
andreskwan
fuente
66
Y si solo necesita restaurar archivos de configuración, en algunos casos (si son administrados por ucf) debe usarlos UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname].
Skippy le Grand Gourou
2
Esta respuesta merece un GRAN voto positivo. Esto es lo que necesita cuando quiere "reinstalar completamente" un paquete. Por ejemplo, una simple reinstalación de vsftpd no vuelve a crear el archivo de configuración, incluso si el archivo ya no existe. Un "Eliminar + Purgar + (Re) instalar" hace el trabajo en su lugar.
Kar.ma
13

Debe estar seguro de eliminar aptitude y reinstalar, ya que eso no afectará a las otras utilidades de apt. Entonces: apt-get remove aptitudeseguido de apt-get install aptitude, o si eso todavía falla, intente apt-get purge aptitudeseguido de apt-get install aptitude.

Antes de hacer cualquiera de los anteriores, recomiendo un sistema de archivos completo y una comprobación de bloqueo incorrecto en caso de que haya un problema que haya causado el problema (dependiendo del problema, si existe, una actividad adicional podría empeorar las cosas). Además, asegúrese de revisar lo que se eliminará en el paso de eliminar / purgar antes de dejar que continúe (debe hacer una pausa para pedir permiso si se cambia algo adicional como resultado de la eliminación de ese paquete), para verificar dos veces mi pensamiento de que esto es seguro.

David Spillett
fuente
¡Muchas gracias! apt-get removeseguido por apt-get installhizo el truco!
Vokuhila-Oliba
Hace mucho tiempo que hice cosas como a full filesystem checko similares. ¿Podría por favor darme una pequeña pista de cómo hacerlo?
Vokuhila-Oliba
1
fsck -f <block_device>tales como fsck /dev/sda1. El sistema de archivos deberá desmontarse o montarse solo lectura en ese momento, por lo que es probable que este sea su sistema de archivos raíz, debe reiniciar en modo de usuario único o iniciar desde otra cosa como un CD en vivo.
David Spillett
2
Puede usarlo tune2fspara marcar el sistema de archivos como si se hubiera montado más veces que el límite establecido, eso debería forzar una comprobación el próximo inicio. Suponiendo que el sistema de archivos es ext2 / 3/4: tune2fs -C 99 <device>o en caso de que tenga desactivada la verificación basada en el recuento de montaje, actívela al mismo tiempo con algo así tune2fs -c 17 -C 99 <device>.
David Spillett
2
touch / forcefsck; reiniciar
usuario23307
1
sudo apt remove --purge package
sudo apt install package

Es como si nunca antes hubieras instalado el paquete. Estoy haciendo esto a menudo con movimiento y esas cosas.

Niwla23
fuente