Que fait le code suivant?
Je l'ai trouvé sur Internet, je l'ai donc copié et collé dans le terminal, mais lorsque j'ai installé un nouveau noyau, il ne détecte que l'ancien.
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
la source
la source
dpkg -l 'linux-image-*'
, qui répertorie tous les packages du noyau installés et en filtre certains pour les supprimerapt-get remove
.update-grub
ralentir (le paquet après). Si vous craignez de ne pas avoir réellement démarré le noyau vers lequel vous tentiez de mettre à niveau, puis de l'exécuteruname -a
, ou mêmedmesg | less
Réponses:
Brisons le code un par un (pour mon système):
Donc, cela ne ferait rien:
Comme vous pouvez le voir, il était très proche de supprimer mon méta-paquet du noyau actuel
linux-image-generic 3.13.0.32.38 amd64 Generic Linux kernel image
(grâce à cette dernièresed '/[0-9]/!d'
ligne), ce qui est faux.En un mot, ce morceau de
sed
a plusieurs problèmes. Vous devez l'éviter pour supprimer vos anciens noyaux.ÉDITER:
J'ai déjà dit que la
sed
commande avait des problèmes. Par extension, je vais supprimer les deux dernières lignes avec le formulaire qui devrait réellement fonctionner dans mon scénario actuel.Les deux dernières lignes sous une forme modifiée:
Donc:
Outpus:
C'est très honteux !!
Maintenant, montrez ce que cela ferait à mon système, avec
--dry-run
laapt-get remove
commande complète :Comme vous le voyez, cela supprimera tous mes noyaux actuels, notez également qu'il ne s'agit que d'une simulation pour correspondre à mon scénario actuel et que l'original
sed
peut être amélioré.** Notez que le code réel fonctionnera si vous effectuez une
reboot
mise à niveau après le noyau comme Oli l'a déjà mentionné .EDIT2:
Voici un script simple mais robuste qui prendra en compte toutes les situations et supprimera les noyaux plus anciens réels:
Si vous avez une version plus récente que la version actuelle, cela vous donnera un avertissement pour redémarrer votre ordinateur en premier. Notez également que les noyaux plus anciens sont préservés pour une bonne raison qui est que si vous gâchez en quelque sorte votre noyau actuel rendant votre système instable, vous devriez pouvoir démarrer dans n'importe quel noyau plus ancien.
la source
apt-get
pièce et quelle sortie avez-vous obtenue?(([a-z]|-)*
, qui est) sans laapt-get
partie avant de la critiquer. Sur mon système, il affiche les lignes suivantes: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
. Est-ce vraiment ce que vous vouliez? (De plus, des points bonus si vous pouvez déterminer quels noyaux j'ai réellement installés.)Il s'agit d'un effort pour supprimer les noyaux qui ne sont pas ceux actuels.
Il y a beaucoup de morceaux de code qui font quelque chose comme ça et ce n'est pas un bon exemple . Il pourrait facilement supprimer les noyaux plus récents qu'actuellement et donc le méta-package qui s'installe (
linux-generic
et al) si vous aviez une mise à niveau et que vous ne redémarriez pas.la source