¿Cómo reinstalar muchos paquetes eliminados a la vez?

8

Usé el sudo apt-get remove pythoncomando y accidentalmente eliminé un montón de paquetes que se requerían. Ingresé a través de la línea de comandos e instalé ubuntu-desktop nuevamente, pero faltan otros paquetes, y estoy buscando una manera de reinstalar fácilmente los paquetes eliminados. Como existe el registro en el centro de software, quería preguntar cuál sería la forma más fácil de deshacer los cambios o extraer la lista de paquetes eliminados del centro de software ...

nota: escribí sudo apt-get install .... .... ... ...alrededor de dos docenas de esos programas eliminados en esa lista, pero cuando presioné enter no instaló ninguno de ellos porque no se pudieron encontrar algunos nombres de paquetes.

Los programas fueron eliminados en la misma fecha.

Logan
fuente
1
Mire adentro/var/log/apt/history.log
Lekensteyn

Respuestas:

16

Antes que nada, permítanme decir que eliminar pythonpuede llevar a que muchos comandos fundamentales ya no funcionen. Entonces no sé si lo que sigue funcionará.

En segundo lugar, supongo que el package names couldn't be founderror que tiene se deriva de un nombre mal escrito en la línea de comando o de un paquete instalado localmente y no disponible en los repositorios.

Luego, para obtener un registro de los paquetes eliminados, en relación con el último dpkgregistro disponible (no creo que deba tener en cuenta los registros anteriores):

awk '$3 == "remove" { print $1, $2, $4 }' /var/log/dpkg.log | tee list

Luego edite el listarchivo creado en el directorio actual y solo deje líneas relativas a los paquetes que desea reinstalar, según la marca de tiempo de la línea. Digamos que guarda el archivo modificado en list-mod.

Para reinstalar esos paquetes, use el siguiente comando:

sudo apt-get --simulate install $(awk '{ print $3 }' list-mod)

Inserté la --simulateopción para ver qué haría el comando. Si todo está bien, vuelva a ejecutar el comando con esa opción eliminada.

Si el comando dice que no se pueden encontrar algunos paquetes, simplemente quítelos list-mode intente nuevamente.

enzotib
fuente
¡Gracias, pude reinstalar los paquetes que necesitaba! Sin embargo, una pregunta es que hay más de 200 paquetes eliminados en el registro del centro de software, pero el archivo de la lista tenía alrededor de 150, ¿significa esto que dpkg.log no contiene instalaciones automáticas / paquetes dependientes? de nuevo, gracias por esta solución :)
Logan
1
Ese archivo de registro contiene todos los instalados, actualizados eliminan o paquete purgados, y con cada aplicación desde dpkga apt-get, aptitude, Synaptic, Centro de Software, gdebietc. Se puede dar un vistazo a más viejos dpkg.logarchivos, ver ls -lrt /var/log/dpkg.log*.
enzotib
1
@enzotib Ejecuté un script para purgar los encabezados de Linux antiguos, y creo que la expresión regular coincidía con muchos de los paquetes que no quería eliminar (¡¡¡¡¡¡¡¡¡¡¡¡muy importante !!)). Tu respuesta me salvó de cierto desastre.
shivisuper
1
@enzotib Acabas de salvarme de reinstalar mi sistema operativo después de ejecutar un script incorrecto. ¡Gracias!
brndn2k
dice 0 actualizado, 0 instalado, 0 para eliminar y 50 no actualizado
James Casia
2

Entonces, sucede que cometo un error similar: en sudo apt-get purge python3.6*lugar de sudo apt-get purge python3.6.*.

Pude arreglarlo bastante rápido, con los siguientes pasos:

  1. Abrió el registro vim /var/log/history.log.
  2. Busqué mi comando incorrecto usando el comando vim /python3.6\*.
  3. Había una línea Purge: unity-control-center-signon:amd64 (0.1.7~+14.04.20140211.2-0ubuntu4), ...con una larga lista de paquetes purgados (en caso de eliminación comenzará Remove:), que copié en otro archivo sin la Purge:parte para trabajar con él.
  4. En ese archivo ejecuté el comando vim: %s/:[^,]*,//gque eliminó la parte de la versión y me dejó con una lista de paquetes unity-control-center-signon lxc ....
  5. Finalmente copié una línea del paso anterior y ejecuté: sudo apt-get install unity-control-center-signon lxc ...y así fue como se solucionó.
Nikita
fuente
para mí fue/var/log/apt/history.log
Taylor