¿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-grubpaquete (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 | lessRespuestas:
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
sedtiene varios problemas. Debe evitarlo para eliminar sus núcleos más antiguos.EDITAR:
Ya he dicho que el
sedcomando 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-runelapt-get removecomando 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
sedpueda mejorarse.** Tenga en cuenta que el código real funcionará si se realiza una
rebootactualizació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-getpieza y qué resultado obtuviste?(([a-z]|-)*, de que es) sin laapt-getpieza 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-genericet al) si tuviera una actualización y no se reiniciara.fuente