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ängigelinux-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.04
fü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 --list
für eine hübsche, interaktive Anzeige verwenden, aber ich habe mich für die Verwendung entschieden, --show
um 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 --showformat
Option zum Überspringen dieses Schritts nutzt, aber ich bevorzuge einen vertrauteren Ansatz – den cut
Befehl. Der cut
Befehl 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-query
Befehls 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 grep
Befehl, mit dem wir Zeilen auswählen können, die einem bestimmten Muster entsprechen - oder in diesem Fall Zeilen, dienicht-v|--invert-match
mit 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-modules
Pakete 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 remove
Befehl, 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 sudo
ermö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.