Ubuntu: Alte Kernel Entfernen

So um das Blog mal wieder etwas mit Inhalt zu füllen hier mein Versuch die sed Magie von http://rattenfurz.wordpress.com/2012/11/16/ungenutzte-ubuntu-kernel-entfernen/  zum entfernen alter Kernel unter Ubuntu zu verstehen. Ich hab zwar gerade auch git Aufgesetzt um so etwas nicht zu verlieren aber so profitiert vielleicht noch wer davon?  Ich habe dabei versucht den großen Block in kleinere Aufzusplitten die zu verstehen und das ganze dann wieder zum großen ganzen zusammenzusetzen.


# skript von http://rattenfurz.wordpress.com/2012/11/16/ungenutzte-ubuntu-kernel-entfernen/
# erläuterungen von Sandzwerg nach der sed Dokumentation auf http://www.grymoire.com/Unix/Sed.html#uh-1

# Anmerkungen:
# (,),+, werden mit \ escaped
#
# dpkg -l 'linux-*'liste alle pakete auf die mit "linux-" beginnen
# sed gesplitet in 3 ersetzungen getrennt durch ;
# Einzeln:
# /^ii/!d alles was mit ii installiert nicht löschen(den Rest schon) ii steht in dpkg für installed
#
# /'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d
# unteraufruf uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/"
# uname -r Liste die Kernelversion(Nummer z.b. 3.2.0-34-generic)
# sed "s/\(.*\)-\([^0-9]\+\)/\1/"
# Matche alles(.*) bis zum bindestrich auf den ein nicht aus Zahlen bestehendes wort folgt [^0-9] und ersetze es durch alles vor dem Bindestrich (Ansprechbar durch die runden Klammern)
# => Unteraufruf Ende rückgabe Nummer des aktuelle Kernels
# =>Lösch den Aktuellen Kernel aus der Liste der installierten Kernel
#
# s/^[^ ]* [^ ]* \([^ ]*\).*/\1/
# Matche alle Linie die mit einem Wort(das nicht aus einem Space besteht) beginnen auf die ein nichtleeres Wort folgt auf die ein nichtleeres Wort folgt auf die ein geklammertes nichtleeres wort folgt auf die irgendetwas folgt und ersetzte es durch das wort in klammern
# /[0-9]/!d
# Lösche alles dessen vorheriges sed Argument(das in Klammern) nicht mit einer Zahl beginnt
# übergebe die liste an paketen an sudo apt-get purge per xargs welches die Argumente so splittet das die liste für den aufruf nicht zu lang wird. -y sorgt dafür das die Kernel ohne weitere rückfrage gelöscht werden

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

Wie ihr seht war ich etwas Geizig mit Zeilenumbrüchen, das wurde bei mir visuell Automatisch umgebrochen und ich bin gerade zu Faul es zu ändern also müsst ihr wohl damit leben 😛