I blog this because the original blog doesn’t exists any longer.Ich blogge das hier, weil der ursprüngliche Blogeintrag nicht mehr vorhanden ist.
I want to remove all old kernel packages from my system ( Ubuntu Linux ). I found this command:Ich wollte alle alten Kernelpakete von meinem Linux entfernen. Ich fand diesen Befehl:
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
But you shouldn’t use linux commands from the internet which you didn’t understand. The above one looks very cryptic. Let’s splitt it in its parts. (They are separated by “ | „)Allerdings sollte man keine Befehle aus dem Internet einfach ausführen ohne ihn zu verstehen. Dieser hier sieht auf den ersten Blick besonders kryptisch aus. Schauen wir uns die Teile genauer an. (Sie sind unterteilt durch “ | „.)
The last part is the most important. It requires sudo and purges the packages. The „xargs“ shows that the previous output is a list which is send so the command after the xargs command. This command will be executed for each element of the list.(sudo apt-get -y purge)Der letzte Teil ist am wichtigesten. Er benötigt sudo und entfernt die Pakete. Der „xargs“ zeigt, dass er von den vorangegangenen Befehlen eine Liste bekommt. Für jedes Element in der Liste wird der Befehl nach dem „xargs“ ausgeführt. (http://unixhelp.ed.ac.uk/CGI/man-cgi?xargs)
The commands before are two „sed“ commands. This commands only filter/transform the previous output which is an „dpkg -l“ that gives a list of packages.Die Befehle davor sind zwei „sed“ Befehle, welche die Ausgabe filtern/transformieren. Diese Ausgabe ist der Befehl davor, ein „dpkg -l“ der eine Paketliste ausgibt. (http://unixhelp.ed.ac.uk/CGI/man-cgi?sed)
The conclusion is the first command gives a list of packages, the second and third one filter/transform the list and the last one removes the packages. We can execute the first three commands without any effect and without sudo.Die Zusammenfassung ist, dass der erste Befehl eine Paketliste liefert, die durch zwei „sed“-Befehle gefiltert/umgewandelt wird und anschließend wird für jedes Element dieser Liste ein „apt-get -y purge“ ausgeführt. Es ist also sicher die ersten drei auszuführen um sich die Liste einmal anzuzeigen.
$ dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
linux-headers-3.11.0-12
linux-headers-3.11.0-12-generic
linux-headers-3.11.0-13
linux-headers-3.11.0-13-generic
linux-headers-3.11.0-14
linux-headers-3.11.0-14-generic
linux-headers-3.11.0-15
linux-headers-3.11.0-15-generic
linux-headers-3.11.0-17
linux-headers-3.11.0-17-generic
linux-headers-3.11.0-18
linux-headers-3.11.0-18-generic
linux-image-3.11.0-12-generic
linux-image-3.11.0-13-generic
linux-image-3.11.0-17-generic
linux-image-3.11.0-18-generic
linux-image-extra-3.11.0-17-generic
linux-image-extra-3.11.0-18-generic
linux-signed-image-3.11.0-18-generic
Ok this is the list of packages wich should removed.Ok das ist also die Liste der Pakete, die entfernt werden soll.
This are all kernels below the currently running. If you look at the second sed you see the „uname -r“ command.Dies sind alle Kernelpakete mit Ausnahme von dem der gerade läuft. Wenn man sich den zweiten „sed“-Befehl anschaut, findet man dort den Befehl „uname -r“.
$ uname -r
3.11.0-19-generic
This command returns the currently running kernel version. The second sed command removes it from the list.Dieser Befehl liefert die Version des aktuell laufenden Kernels. Der zweite Befehl in der Liste filtert diesen also herraus.
Pingback: Ubuntu: apt-get -f fails, "no space left on device", apt-get autoremove doesn't work. - Wiser Coder