Kurz zusammengefasst:

Kurz zusammengefasst:

Ich habe den Befehl apt autoremove ausgeführt, aber diese Ordner bleiben bestehen.

Wie mir der Befehl „du -h -x --max-depth=1 /usr/lib | sort -hr | head -n 10“ zeigte, verbrauchen sie derzeit jeweils fast 1 GB:

858M    /usr/lib/modules
823M    /usr/lib/x86_64-linux-gnu

Wie kann ich das bereinigen? Danke.

Antwort1

Ich musste dies tun, da /usr/lib/modules nach über einem Jahr Verwendung von Linux auf einem Chromebook über 10 GiB Festplattenspeicher beanspruchte (was auf diesem Gerät sehr wertvoll ist) und ich ohnehin immer nur eine einzige Kernel-Instanz ausführen werde. Der Festplattenspeichernotwendigzum Ausführen eines einzelnen Kernels waren lediglich ca. 500 MiB erforderlich. Im Vergleich dazu wurden ca. 5 % des Festplattenspeichers tatsächlich genutzt.

Ich habe selbst eine Lösung gefunden, die auf meiner Distribution (KDE Neon, basierend auf Ubuntu LTS) basiert und aus mehreren Bash-Befehlen besteht, die Folgendes tun:

  • Ermitteln der aktuell ausgeführten Linux-Version
  • Erkennen linux-modules-*von Paketen, die zu Linux-Versionen gehörennichtmomentan laufend
  • Deinstallieren Sie alle linux-modules-*Pakete (und abhängige linux-image-*Pakete), die nicht ausgeführt werden

Beachten Sie, dass ich dies nur getestet habewenn bereits läuftder neueste Linux-Kernel, der auf meiner Distribution installiert ist. Ihre Distribution enthält möglicherweise Pakete, die von einem Metapaket abhängen, z. B. linux-generic-hwe-20.04für Ubuntu 20.04 LTS-basierte Distributionen, und ich habe dieses Skript nicht getestet, wenn ich nach der Installation eines neueren Linux ein älteres Linux ausführe.

Kurz zusammengefasst:

sudo apt remove $(dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "$(uname -r)")

OK, aber was bedeutet das?

Der erste auszuführende Befehl ist uname -r. Dieser gibt die Versionsnummer Ihres aktuell laufenden Linux-Kernels in einem Format wie diesem aus:

$ uname -r
5.15.0-48-generic

Mehr erfahren Sie unterman uname.

Der zweite Befehl, den wir uns ansehen sollten dpkg-query, ist , mit dem wir installierte Pakete auf verschiedene Arten abfragen können. Sie können --listfür eine hübsche, interaktive Anzeige verwenden, aber ich habe mich für die Verwendung entschieden, --showum das Scripting zu vereinfachen.

$ dpkg-query --show 'linux-modules-*'
linux-modules-5.11.0-44-generic 5.11.0-44.48~20.04.2
linux-modules-5.11.0-46-generic 5.11.0-46.51~20.04.1
# etc.

Mehr erfahren Sie unterman dpkg-query.

Ein entschlossener Leser könnte wahrscheinlich herausfinden, wie man die --showformatOption zum Überspringen dieses Schritts nutzt, aber ich bevorzuge einen vertrauteren Ansatz – den cutBefehl. Der cutBefehl nimmt einfach die Standardeingabe, ein optionales Trennzeichen, das mit bereitgestellt wird -d(standardmäßig ein Tabulatorzeichen), und ein Feldargument, das mit bereitgestellt wird -f. In diesem Fall nimmt er die Ausgabe unseres dpkg-queryBefehls und gibt die erste Spalte zurück:

$ dpkg-query --show 'linux-modules-*' | cut -f1
linux-modules-5.11.0-44-generic
linux-modules-5.11.0-46-generic
# etc.

Mehr erfahren Sie unterman cut.

Wir leiten die Ausgabe vonDasin den grepBefehl, mit dem wir Zeilen auswählen können, die einem bestimmten Muster entsprechen - oder in diesem Fall Zeilen, dienicht-v|--invert-matchmit der Option einem bestimmten Muster entsprechen . Das "$(uname -r)"gibt eine Zeile wie zurück 5.15.0-48-generic, die dann als Muster für verwendet wird grep. So wählen wir alle linux-modulesPakete aus, dienichtmomentan laufend.

$ dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "$(uname -r)"
# = dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "5.15.0-48-generic"
linux-modules-5.11.0-44-generic
linux-modules-5.11.0-46-generic
# etc.

Mehr erfahren Sie unterman grep.

Schließlich verwenden wir diese Liste einfach als Argumente für den sudo apt removeBefehl, der den Leuten an dieser Stelle wahrscheinlich so vertraut ist, dass er keiner großen Erklärung bedarf:

$ sudo apt remove $(dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "$(uname -r)")
# = sudo apt remove linux-modules-5.11.0-44-generic linux-modules-5.11.0-46-generic [...]

... aber falls das so istnichtIhnen bekannt,man sudoermöglicht Ihnen, einen Befehl als root, dem Systemadministrator (oder theoretisch einem anderen Benutzer), auszuführen, was erforderlich ist, umman apt, das Pakete und Abhängigkeiten von Debian-basierten (und daher Ubuntu-)Distributionen verwaltet.

Antwort2

Ich habe versucht, /usr/lib zu leeren und habe einen Ansatz gefunden:

apt-show-versions |grep "No available version in archive"

zeigt die Pakete an, die derzeit von keiner Quellenliste bereitgestellt werden (für diese Ubuntu-Version). Dazu gehören beispielsweise manuell installierte Pakete aus früheren Ubuntu-Versionen, wenn Sie Upgrades durchgeführt haben. Das Problem ist, dass es auch Pakete gibt, die ich behalten wollte, wie Slack, Draw.io usw., sodass Sie die Pakete, die Sie nicht mehr benötigen, manuell überprüfen müssen.

Wenn Sie ein Muster in den Paketen finden, die Sie definitiv löschen möchten, wie z. B. Ubuntu 16.04-Pakete auf Ubuntu 22.04, können Sie Folgendes ausführen:

apt-show-versions |grep "No available version in archive" |grep 16.04 |cut -d " " -f1 |xargs apt remove --purge

Antwort3

Einfach gesagt:Nicht.

Theoretisch könnte man Module löschen, die auf dem Rechner, auf dem man sich befindet, nicht benötigt werden, aber wenn man irgendwo einen falschen Schritt macht, besteht das Risiko, dass der Rechner nicht mehr bootet. Und man müsste es für jedes Kernel-Update wiederholen.

Es ist ein Gigabyte. Die Festplatte ist billig. Damit kann man leben.

verwandte Informationen