Frieder108
Anmeldungsdatum: 7. März 2010
Beiträge: 9320
|
ich hab das mal auf nem ungepflegten 16.10 weiter verfolgt: :~$ dpkg -l | grep linux-image*
rc linux-image-4.8.0-14-generic 4.8.0-14.15 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-27-generic 4.8.0-27.29 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-28-generic 4.8.0-28.30 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-29-generic 4.8.0-29.31 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-30-generic 4.8.0-30.32 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-31-generic 4.8.0-31.33 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-32-generic 4.8.0-32.34 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-34-generic 4.8.0-34.36 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-37-generic 4.8.0-37.39 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-38-generic 4.8.0-38.41 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-27-generic 4.8.0-27.29 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-28-generic 4.8.0-28.30 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-29-generic 4.8.0-29.31 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-30-generic 4.8.0-30.32 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-31-generic 4.8.0-31.33 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-32-generic 4.8.0-32.34 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-34-generic 4.8.0-34.36 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-37-generic 4.8.0-37.39 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-38-generic 4.8.0-38.41 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-generic dann mal, wie Hans9876543210 schrieb: | dpkg -l | sed '1,6d' | grep -vE '^ii|^un' | awk '{print $2}' | xargs sudo apt-get -y purge
|
drüber laufen lassen - das entfernt den rc
~$ dpkg -l | grep linux-image*
ii linux-image-4.8.0-27-generic 4.8.0-27.29 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-28-generic 4.8.0-28.30 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-29-generic 4.8.0-29.31 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-30-generic 4.8.0-30.32 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-31-generic 4.8.0-31.33 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-32-generic 4.8.0-32.34 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-34-generic 4.8.0-34.36 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-37-generic 4.8.0-37.39 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-4.8.0-38-generic 4.8.0-38.41 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-27-generic 4.8.0-27.29 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-28-generic 4.8.0-28.30 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-29-generic 4.8.0-29.31 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-30-generic 4.8.0-30.32 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-31-generic 4.8.0-31.33 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-32-generic 4.8.0-32.34 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-34-generic 4.8.0-34.36 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-37-generic 4.8.0-37.39 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-38-generic 4.8.0-38.41 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-generic die Befehle aus dem Artikel hier, also
| dpkg -l 'linux-[ihs]*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | tee zu_entfernende_Kernel
cat zu_entfernende_Kernel | xargs sudo apt-get -y purge
|
liefern dann aber ein sauberes Ergebniss ohne "Dateileiche"
~$ dpkg -l | grep linux-image*
ii linux-image-4.8.0-38-generic 4.8.0-38.41 amd64 Linux kernel image for version 4.8.0 on 64 bit x86 SMP
ii linux-image-extra-4.8.0-38-generic 4.8.0-38.41 amd64 Linux kernel extra modules for version 4.8.0 on 64 bit x86 SMP
ii linux-image-generic Die Anleitung macht also, was sie soll - mein Anliegen mit den rc -Dateien wäre dann wohl unter Systempflege besser aufgehoben und hier vielleicht nur nen Link setzen für Leute wie mich, die bei der Suche nach Entfernen der alten Configs in einem Rutsch auf diesen Artikel stoßen. 😉
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13075
|
Frieder108 schrieb:
die Befehle aus dem Artikel hier, also
| dpkg -l 'linux-[ihs]*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | tee zu_entfernende_Kernel
cat zu_entfernende_Kernel | xargs sudo apt-get -y purge
|
liefern dann aber ein sauberes Ergebniss ohne "Dateileiche"
Vorschlag für eine alternative Befehlsfolge: | $ dpkg -l 'linux-[ihs]*' | awk '/^ii/ && $2 ~ /[0-9]/ && $2 !~ /'"$(uname -r | sed 's#-generic##;s#\.#\\.#g')"'/ {print $2}' >zu_entfernende_Kernel
$ xargs -d \\n -a zu_entfernende_Kernel sudo apt-get -y purge
|
Vorteile m.E.: lesbarer (OK, liegt im Auge des Betrachters) 😉 man könnte apt-get auch ohne "-y" aufrufen, so dass der Nutzer die Möglichkeit der Bestätigung erhält, weil Stdin von xargs nicht umgelenkt wird Der Match für den Ausschluss der aktuellen Version ist etwas robuster, weil Punkte escaped werden Durch "-d \\n" wird xargs angwiesen, ganze Eingabezeilen zu nehmen. Das ist hilfreich, wenn etwas schief gegangen ist und in zu_entfernende_Kernel nicht die Inhalte stecken, die man erwartet. In dem Fall werden Fehler eher auffallen.
Bei mir liefert das dasselbe Ergebnis wie die alte Version, aber wir sollten das noch auf ein paar Systemen testen.
|
TK87
Anmeldungsdatum: 8. Juli 2019
Beiträge: 234
Wohnort: Aachen
|
Moin zusammen, der derzeitige Befehl zum ermitteln alter Kernel... | dpkg -l 'linux-[ihs]*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
|
funktioniert für amd64 nicht mehr. Der Teil:
| uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/"
|
liefert z.B. für 5.10.0-21-amd64 folgendes zurück:
5.10.0-2164
Da hier neben dem generic nun auch amd64 stehen kann, ersetzt das "[^0-9]+ " natürlich nur noch das amd und müsste also mindestens mit "[0-9a-z\-]* " ergänzt werden. Mein Vorschlag, auch nochmal in Bezug auf Lesbarkeit, wäre:
| dpkg -l "linux-[ihs]*" | awk '$1 == "ii" {print $2}' | grep -v "$(uname -r |sed -E 's/-[a-z]+[0-9a-z\-]*$//g')"
|
Irgendwelche Einwände? Gruß Thomas
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 9384
Wohnort: Münster
|
TK87 schrieb: […] der derzeitige Befehl zum ermitteln alter Kernel... | > dpkg -l 'linux-[ihs]*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\([-0-9]*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
>
|
funktioniert für amd64 nicht mehr.
Solche unlesbaren 10000-Tatzelwurm-Befehle sind generell unzuverlässig und gehören daher ausgemerzt. Konkret ermittelt man den aktuell laufenden Kernel und eine Liste aller installierten Kernel ganz einfach mit diesen Befehlen:
uname -r
linux-version list Das erspart einem dann überflüssige Gymnastik mit sed & Co.
[…] Mein Vorschlag, auch nochmal in Bezug auf Lesbarkeit, wäre:
| dpkg -l "linux-[ihs]*" | awk '$1 == "ii" {print $2}' | grep -v "$(uname -r |sed -E 's/-[a-z]+[0-9]*$//g')"
|
Wenn es funktioniert (was ich nicht geprüft habe), sehr viel besser als der ursprüngliche Befehl, aber …
Irgendwelche Einwände?
Ja, mach es noch besser, unter Verwendung der von mir oben genannten Befehle, und vermeide nach Möglichkeit awk, grep und sed
|
TK87
Anmeldungsdatum: 8. Juli 2019
Beiträge: 234
Wohnort: Aachen
|
Moin,
Konkret ermittelt man den aktuell laufenden Kernel und eine Liste aller installierten Kernel ganz einfach mit diesen Befehlen:
uname -r
linux-version list
uname -r nutze ich doch.
Das erspart einem dann überflüssige Gymnastik mit sed & Co.
Nein, tut es nicht. Irgendwelche Einwände?
Ja, mach es noch besser, unter Verwendung der von mir oben genannten Befehle, und vermeide nach Möglichkeit awk, grep und sed
Dann komm doch mal mit einem konkreten Vorschlag, wie das aussehen soll. Mit "linux-version list " allein kommst du nicht weit, die Pakete könnten z.B. unter anderem lauten:
linux-headers-5.10.0-18-amd64
linux-headers-5.10.0-18-common
linux-headers-5.10.0-19-amd64
linux-headers-5.10.0-19-common
linux-headers-5.10.0-21-amd64
linux-headers-5.10.0-21-common
linux-image-5.10.0-18-amd64
linux-image-5.10.0-18-amd64-unsigned
linux-image-5.10.0-19-amd64
linux-image-5.10.0-19-amd64-unsigned
linux-image-5.10.0-20-amd64
linux-image-5.10.0-20-amd64-unsigned
linux-image-5.10.0-21-amd64
linux-image-5.10.0-21-amd64-unsigned
linux-support-5.10.0-18
linux-support-5.10.0-19
linux-support-5.10.0-20
linux-support-5.10.0-21
... Wenn also
~$ uname -r
5.10.0-21-amd64
ergibt, musst du schon das "-amd64 ", oder gar "-amd64-unsigned " löschen, um auch die zu entfernenden Pakete "linux-support-5.10.0-21 " zu finden. Das geht nun mal nur mit awk ,sed ,grep ,cut ,... Gruß Thomas
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Vielleicht kommt ihr mit for folder in /usr/lib/modules/*; echo $folder; done weiter. Als Einzeiler ist es auf jeden Fall sehr unübersichtlich und für Anfänger unlesbar.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13075
|
Inwiefern wird das Skript überhaupt gebraucht? Mit auto-remove werden alte Kernel bei mir zuverlässig entfernt. Ich müsste nachschauen, aber ich bin mir ziemlich sicher, dass ich immer maximal vier Kernels herumliegen habe.
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 9384
Wohnort: Münster
|
rklm schrieb: Inwiefern wird das Skript überhaupt gebraucht? Mit auto-remove werden alte Kernel bei mir zuverlässig entfernt.
Der Artikel stammt wohl aus weit zurück liegenden Zeiten, als „auto-remove für alte Kernel“ noch nicht fest in die Aktualisierungsprozedur eingebaut war.
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
So veraltet ist das gar nicht. In meiner reinen LTS-VM sieht das bspw. so aus:
gnom@ubuntuKVM:~$ ll /usr/lib/modules/
insgesamt 52
drwxr-xr-x 13 root root 4096 Apr 11 11:17 ./
drwxr-xr-x 105 root root 4096 Apr 11 11:13 ../
drwxr-xr-x 2 root root 4096 Apr 26 2022 5.15.0-23-generic/
drwxr-xr-x 2 root root 4096 Mai 30 2022 5.15.0-25-generic/
drwxr-xr-x 2 root root 4096 Jun 30 2022 5.15.0-27-generic/
drwxr-xr-x 2 root root 4096 Jul 14 2022 5.15.0-33-generic/
drwxr-xr-x 2 root root 4096 Jul 28 2022 5.15.0-40-generic/
drwxr-xr-x 2 root root 4096 Sep 6 2022 5.15.0-41-generic/
drwxr-xr-x 2 root root 4096 Sep 21 2022 5.15.0-43-generic/
drwxr-xr-x 2 root root 4096 Jan 6 17:47 5.15.0-47-generic/
drwxr-xr-x 2 root root 4096 Apr 11 11:25 5.15.0-48-generic/
drwxr-xr-x 5 root root 4096 Jan 6 17:45 5.15.0-57-generic/
drwxr-xr-x 5 root root 4096 Apr 11 11:22 5.15.0-69-generic/
gnom@ubuntuKVM:~$ apt -s --purge autoremove
HINWEIS: Dies ist nur eine Simulation!
apt ben\u00f6tigt root-Privilegien f\u00fcr die reale Ausf\u00fchrung.
Behalten Sie ebenfalls in Hinterkopf, dass die Sperren deaktiviert
sind, verlassen Sie sich also bez\u00fcglich des reellen aktuellen
Status der Sperre nicht darauf!
Paketlisten werden gelesen\u2026 Fertig
Abh\u00e4ngigkeitsbaum wird aufgebaut\u2026 Fertig
Statusinformationen werden eingelesen\u2026 Fertig
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 1 nicht aktualisiert.
gnom@ubuntuKVM:~$
Da wäre sicherlich ein Aufräumen angebracht (welches ich aber absichtlich nicht manuell anstoße).
|
TK87
Anmeldungsdatum: 8. Juli 2019
Beiträge: 234
Wohnort: Aachen
|
ChickenLipsRfun2eat schrieb: Vielleicht kommt ihr mit for folder in /usr/lib/modules/*; echo $folder; done weiter.
Nicht wirklich, wenn dem so wäre, könnte man ja auch mit "linux-version list " arbeiten.
Als Einzeiler ist es auf jeden Fall sehr unübersichtlich und für Anfänger unlesbar.
Jetzt entfernen wir uns aber ganz weit von dem eigentlichen Grundgedanken des Skriptansatzes. Es geht ja gerade darum, einen Anfänger eine einfache und schnelle Lösung an die Hand zu geben, ohne dass sich dieser mit der Ganzen Thematik im einzelnen beschäftigen muss. rklm schrieb: Inwiefern wird das Skript überhaupt gebraucht? Mit auto-remove werden alte Kernel bei mir zuverlässig entfernt. Ich müsste nachschauen, aber ich bin mir ziemlich sicher, dass ich immer maximal vier Kernels herumliegen habe.
Imho wären selbst 4 noch min. 2 zu viel. Wenn bei einer Paketaktualisierung "update-initramfs -uk all " angestoßen wird, dauert das Erzeugen von 4 Images immer recht lange. Gruß Thomas
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Naja, mit dpkg-query --show lassen sich die Paketnamen schonmal etwas freier auflisten. Das Problem bleibt die Sortierung. Könnte man etwa so machen: dpkg-query --show linux-{headers-[^generic],image-[^generic]}* | grep -Ev $(uname -r)
Behält dann aber nur den aktuellen Kernel.
|
TK87
Anmeldungsdatum: 8. Juli 2019
Beiträge: 234
Wohnort: Aachen
|
ChickenLipsRfun2eat schrieb: Naja, mit dpkg-query --show
lassen sich die Paketnamen schonmal etwas freier auflisten.
Das listet dann aber auch Pakete auf, die gar nicht installiert sind - was beim entfernen zu Fehlermeldungen führt. Dann schon besser:
| dpkg --get-selections "linux-[ihs]*"
|
Das Problem bleibt die Sortierung. Könnte man etwa so machen: dpkg-query --show linux-{headers-[^generic],image-[^generic]}* | grep -Ev $(uname -r)
Behält dann aber nur den aktuellen Kernel.
Hier bleibt nach wie vor meine oben beschriebene Problematik: Wenn z.B. das Paket "linux-support-5.10.0-21 " installiert ist, würde diese ebenfalls entfernt. "uname -r " ergibt z.B. 5.10.0-21-amd64 Daher ja meine Variante mit sed:
| uname -r |sed -E 's/-[a-z]+[0-9a-z\-]*$//g'
|
so wird der suffix "-amd64 " bzw "-generic " der "uname -r "-Ausgabe entfernt, es bleibt nur noch das "5.10.0-21 " übrig und das Support-Paket bleibt somit erhalten. Gruß Thomas
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
TK87 schrieb: Das listet dann aber auch Pakete auf, die gar nicht installiert sind - was beim entfernen zu Fehlermeldungen führt.
Richtig. Macht nur die Zeile lesbarer. Um das sowohl verständlich zu machen, als auch einfach, wäre vermutlich ein vollständiges Script nötig. Einzeiler haben eben den Nachteil, das sie blind per copy&paste verwendet werden. linux-support-5.10.0-21 ist kein Ubuntu-Paket. Woher hast du das?
|
TK87
Anmeldungsdatum: 8. Juli 2019
Beiträge: 234
Wohnort: Aachen
|
ChickenLipsRfun2eat schrieb: TK87 schrieb: Das listet dann aber auch Pakete auf, die gar nicht installiert sind - was beim entfernen zu Fehlermeldungen führt.
Richtig. Macht nur die Zeile lesbarer. Um das sowohl verständlich zu machen, als auch einfach, wäre vermutlich ein vollständiges Script nötig. Einzeiler haben eben den Nachteil, das sie blind per copy&paste verwendet werden.
Für einen Neuling macht das keinen Unterschied. Ein vollständiges Skript werden die wenigsten analysieren, dieses wird dann auch einfach nur Blind verwendet. Dann ist es m.E.n besser, einfach eine kleine Erläuterung voran zu schreiben wie z.B. Den aktuell verwendeten Kernel kann man sich folgendem Befehl anzeigen lassen:
Alle installierten Kernel-Pakete kann man mit dem Befehl auflisten:
| dpkg --get-selection "linux-[ihs]*"
|
Nun entfernt man alle Pakete, die nicht dem aktuellen Kernel entsprechen. Alternativ kann man dafür auch folgenden Einzeiler verwenden...
so weiß auch ein Anfänger, was passiert da wieso weshalb warum passiert. linux-support-5.10.0-21 ist kein Ubuntu-Paket. Woher hast du das?
Erwischt, hatte gerade nur ein Debian zum Auflisten an der Hand. Für Ubuntu gibt es dafür aber Pakete wie "linux-source-5.10.0-21 " oder auch "linux-signatures-nvdia-5.10.0-21-* ", macht somit keinen Unterschied. Gruß Thomas
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
TK87 schrieb: Dann ist es m.E.n besser, einfach eine kleine Erläuterung wie z.B.… Alternativ kann man dafür auch folgenden Einzeiler verwenden...
Find ich die beste Lösung. Da ist was für die c&p-Fraktion dabei, und gleich eine Erklärung wie das funktioniert. Erwischt, hatte gerade nur ein Debian zum Auflisten an der Hand. Für Ubuntu gibt es dafür aber Pakete wie "linux-source-5.10.0-21 " oder auch "linux-signatures-nvdia-5.10.0-21 ", macht somit keinen Unterschied.
linux-source kann aber weg, wenn es den Kernel eh nicht mehr gibt. Aber um das zu vermeiden, kann man ja nach linux-{image,headers,source} suchen, bzw. wie im aktuellen Beispiel umgesetzt mit linux-[ihs] . Lustig, das ich ausnahmsweise mal die Ubuntu VM an habe und nicht über Debianpakete stolpere 😀 Ich nutze da meist [packages:PAKET:] zum nachgucken.
So auf Anhieb fällt mir aber auch keine sinnvolle Verkürzung ein. Muss ich mal in Ruhe ausprobieren.
|