Was macht der folgende Code?
Ich habe es im Internet gefunden, also habe ich es kopiert und in das Terminal eingefügt, aber wenn ich einen neuen Kernel installiert habe, erkennt er nur den alten.
sudo apt-get remove --purge $(dpkg -l 'linux-image-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d')
command-line
apt
kernel
sed
medo_alouane
quelle
quelle
dpkg -l 'linux-image-*'
, die alle installierten Kernel-Pakete auflistet und einige davon zum Löschen herausfiltertapt-get remove
.update-grub
herumliegen, verursachen keine Probleme, außer dass sie Speicherplatz beanspruchen und (Paket nach der Installation) langsamer machen. Wenn Sie befürchten, dass Sie den Kernel, auf den Sie ein Upgrade durchführen wollten, nicht gestartet haben, führen Sie ihn ausuname -a
oder sogardmesg | less
Antworten:
Lassen Sie uns den Code einzeln brechen (für mein System):
Das würde also nichts bewirken:
Wie Sie sehen , war es sehr nahe daran, mein aktuelles Kernel-Metapaket zu entfernen
linux-image-generic 3.13.0.32.38 amd64 Generic Linux kernel image
(dank dieser letztensed '/[0-9]/!d'
Zeile), was falsch ist.Kurz gesagt, dieses Stück
sed
hat mehrere Probleme. Sie sollten es vermeiden, um Ihre älteren Kernel zu entfernen.BEARBEITEN:
Ich habe bereits gesagt, dass der
sed
Befehl Probleme hat. Aus Gründen der Erweiterung werde ich die letzten beiden Zeilen mit dem Formular entfernen, das in meinem aktuellen Szenario tatsächlich funktionieren sollte.Die letzten beiden Zeilen in modifizierter Form:
So:
Outpus:
Das ist sehr unangenehm !!
Zeigen Sie nun, was dies für mein System bedeuten würde, und geben Sie
--dry-run
den vollständigenapt-get remove
Befehl ein:Wie Sie sehen, werden alle meine aktuellen Kernel entfernt. Beachten Sie auch, dass dies nur eine Simulation ist, die meinem aktuellen Szenario entspricht und das Original
sed
verbessert werden kann.** Beachten Sie, dass der eigentliche Code funktioniert, wenn Sie ein
reboot
Upgrade nach dem Kernel durchführen, wie Oli bereits erwähnt hat .EDIT2:
Hier ist ein einfaches, aber robustes Skript, das alle Situationen berücksichtigt und die tatsächlich älteren Kernel entfernt:
Wenn Sie eine neuere Version als die aktuelle haben, erhalten Sie eine Warnung, dass Sie Ihren Computer zuerst neu starten müssen. Beachten Sie auch, dass die älteren Kernel aus einem guten Grund erhalten bleiben. Wenn Sie Ihren aktuellen Kernel irgendwie durcheinander bringen und Ihr System instabil machen, sollten Sie in der Lage sein, in jeden älteren Kernel zu booten.
quelle
apt-get
Teils und welche Ausgabe haben Sie erhalten?(([a-z]|-)*
) ohne dasapt-get
Teil ausgeführt, bevor ich es kritisiert habe. Auf meinem System, gibt er die folgenden Zeilen:linux-image-3.13-
,linux-image-3.13-
,linux-image-extra-3.13-
,linux-image-extra-3.13-
,linux-image-3.13.0.49-generic
. Ist das wirklich das, was du beabsichtigt hast? (Außerdem Bonuspunkte, wenn Sie herausfinden können, welche Kernel ich tatsächlich installiert habe.)Dies ist ein Versuch, Kernel zu entfernen, die nicht der aktuelle sind.
Es gibt viele Code-Teile, die so etwas tun, und dies ist kein gutes Beispiel . Es könnte leicht neuere als aktuelle Kernel und damit das Metapaket entfernen, das (
linux-generic
ua) installiert wird, wenn Sie ein Upgrade hatten und nicht neu starten.quelle