¿Qué hace el siguiente código?
Lo encontré en Internet, así que lo copié y lo pegué en la terminal, pero cuando instalé un nuevo kernel solo detecta el antiguo.
sudo apt-get remove --purge $(dpkg -l 'linux-image-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d')
command-line
apt
kernel
sed
medo_alouane
fuente
fuente
dpkg -l 'linux-image-*'
, que enumera todos los paquetes de kernel instalados y filtra algunos de ellos para su eliminaciónapt-get remove
.update-grub
paquete (postinst) sea más lento. Si le preocupa no haber arrancado realmente el núcleo al que estaba intentando actualizar, luego ejecuteuname -a
, o inclusodmesg | less
Respuestas:
Rompamos el código uno por uno (para mi sistema):
Entonces esto no haría nada:
Como puede ver , estuvo muy cerca de eliminar mi metapaquete actual del núcleo
linux-image-generic 3.13.0.32.38 amd64 Generic Linux kernel image
(gracias a esta últimased '/[0-9]/!d'
línea), lo cual está mal.En pocas palabras, esta pieza
sed
tiene varios problemas. Debe evitarlo para eliminar sus núcleos más antiguos.EDITAR:
Ya he dicho que el
sed
comando tiene problemas. En aras de la extensión, voy a eliminar las dos últimas líneas con el formulario que realmente debería estar funcionando en mi escenario actual.Las dos últimas líneas en forma modificada:
Entonces:
Outpus:
¡Eso es muy peligroso!
Ahora muestra lo que esto le haría a mi sistema, con
--dry-run
elapt-get remove
comando completo :Como puede ver, eliminará todos mis núcleos actuales, también tenga en cuenta que esto es solo una simulación para que coincida con mi escenario actual y que el original
sed
pueda mejorarse.** Tenga en cuenta que el código real funcionará si se realiza una
reboot
actualización posterior del núcleo como ya mencionó Oli .EDIT2:
Aquí hay un script simple pero robusto que considerará todas las situaciones y eliminará los núcleos anteriores reales:
Si tiene una versión más nueva que la actual, esto le dará una advertencia para reiniciar su computadora primero. También tenga en cuenta que los núcleos más antiguos se conservan debido a una buena razón: si de alguna manera arruina su núcleo actual haciendo que su sistema sea inestable, entonces debería poder iniciar en cualquier núcleo más antiguo.
fuente
apt-get
pieza y qué resultado obtuviste?(([a-z]|-)*
, de que es) sin laapt-get
pieza antes de criticarlo. En mi sistema, que da salida a las siguientes líneas:linux-image-3.13-
,linux-image-3.13-
,linux-image-extra-3.13-
,linux-image-extra-3.13-
,linux-image-3.13.0.49-generic
. ¿Es eso realmente lo que pretendías? (Además, puntos de bonificación si puede averiguar qué núcleos realmente he instalado.)Este es un esfuerzo para eliminar los núcleos que no son los actuales.
Hay muchos bits de código por ahí que hacen algo como esto y este no es un buen ejemplo . Podría eliminar fácilmente los núcleos más nuevos que los actuales y, por lo tanto, el metapaquete que se instala (
linux-generic
et al) si tuviera una actualización y no se reiniciara.fuente