Co robi następujący kod?
Znalazłem go w Internecie, więc skopiowałem go i wkleiłem do terminala, ale kiedy zainstalowałem nowe jądro, wykrywa ono tylko stary.
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
źródło
źródło
dpkg -l 'linux-image-*'
, które wyświetla listę wszystkich zainstalowanych pakietów jądra i filtruje niektóre z nich w celu ich usunięciaapt-get remove
.update-grub
spowalniania (pakiet postinst). Jeśli martwisz się, że tak naprawdę nie uruchomiłeś jądra, na które próbujesz uaktualnić, a następnie uruchomićuname -a
, a nawetdmesg | less
Odpowiedzi:
Złammy kod jeden po drugim (dla mojego systemu):
To by nic nie zrobiło:
Jak widać , było bardzo blisko usunięcia mojego obecnego pakietu meta jądra
linux-image-generic 3.13.0.32.38 amd64 Generic Linux kernel image
(dzięki tej ostatniejsed '/[0-9]/!d'
linii), co jest złe.Krótko mówiąc, ten kawałek
sed
ma kilka problemów. Powinieneś tego unikać, aby usunąć starsze jądra.EDYTOWAĆ:
Powiedziałem już, że
sed
polecenie ma problemy. Ze względu na rozszerzenie zamierzam usunąć dwa ostatnie wiersze z formularzem, który powinien działać w moim bieżącym scenariuszu.Ostatnie dwa wiersze w zmodyfikowanej formie:
Więc:
Outpus:
To bardzo dengerous !!
Teraz pokazuję, co zrobiłoby to z moim systemem, wykonując
--dry-run
pełneapt-get remove
polecenie:Jak widzisz, usunie wszystkie moje obecne jądra, zauważ również, że jest to tylko symulacja pasująca do mojego obecnego scenariusza, a oryginał
sed
można poprawić.** Zauważ, że rzeczywisty kod będzie działał, jeśli wykonasz
reboot
aktualizację po jądrze, jak już wspomniał Oli .EDYCJA 2:
Oto prosty, ale solidny skrypt, który weźmie pod uwagę wszystkie sytuacje i usunie rzeczywiste starsze jądra:
Jeśli masz wersję nowszą niż bieżąca, pojawi się ostrzeżenie, aby najpierw ponownie uruchomić komputer. Zauważ też, że starsze jądra są zachowane z dobrego powodu, który jest taki, że jeśli w jakiś sposób zepsujesz swoje obecne jądro, powodując niestabilność systemu, powinieneś być w stanie uruchomić się na dowolnym starszym jądrze.
źródło
apt-get
części i jaki wynik uzyskałeś?(([a-z]|-)*
, że jest), bezapt-get
części przed krytykując go. W moim systemie, wyprowadza następujące wiersze: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
. Czy to naprawdę to, co zamierzałeś? (Również punkty bonusowe, jeśli możesz dowiedzieć się, które jądra faktycznie zainstalowałem.)Jest to próba usunięcia jądra, które nie jest bieżące.
Istnieje wiele fragmentów kodu, które robią coś takiego, a to nie jest dobry przykład . Może łatwo usunąć nowsze niż obecnie jądra, a zatem meta-pakiet, który instaluje się (
linux-generic
i wsp.), Jeśli masz aktualizację i nie uruchamiasz się ponownie.źródło