Что делает следующий код?
Я нашел его в интернете, поэтому скопировал и вставил в терминал, но когда я установил новое ядро, оно обнаруживает только старое.
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
источник
источник
dpkg -l 'linux-image-*'
, в котором перечислены все установленные пакеты ядра и отфильтрованы некоторые из них для удаленияapt-get remove
.update-grub
(package postinst). Если вы беспокоитесь о том, что на самом деле вы не загрузили ядро, которое пытались обновить, запуститеuname -a
или даже запуститеdmesg | less
Ответы:
Давайте разберем код один за другим (для моей системы):
Так что это ничего не будет делать:
Как вы можете видеть, это было очень близко к удалению моего текущего метапакета ядра
linux-image-generic 3.13.0.32.38 amd64 Generic Linux kernel image
(благодаря этой последнейsed '/[0-9]/!d'
строке), что неправильно.Короче говоря, у этой части
sed
есть несколько проблем. Вы должны избегать этого, чтобы удалить ваши старые ядра.РЕДАКТИРОВАТЬ:
Я уже говорил, что у
sed
команды есть проблемы. Ради расширения я собираюсь удалить последние две строки с формой, которая на самом деле должна работать в моем текущем сценарии.Последние две строки в измененном виде:
Так:
Outpus:
Это очень опасно!
Теперь покажем, что это будет делать с моей системой,
--dry-run
выполнив полнуюapt-get remove
команду:Как вы видите, это удалит все мои текущие ядра, также обратите внимание, что это всего лишь симуляция, соответствующая моему текущему сценарию, и оригинал
sed
можно улучшить.** Обратите внимание, что реальный код будет работать, если выполнить
reboot
обновление после ядра, как уже упоминал Оли .EDIT2:
Вот простой, но надежный скрипт, который учитывает все ситуации и удаляет действующие старые ядра:
Если у вас есть какая-либо версия, более новая, чем текущая, это предупредит вас о перезагрузке компьютера. Также обратите внимание, что старые ядра сохраняются по уважительной причине: если вы каким-то образом испортите свое текущее ядро, сделав вашу систему нестабильной, вы сможете загрузить любое старое ядро.
источник
apt-get
части и какой выход вы получили?(([a-z]|-)*
, то есть) безapt-get
части перед критикой. В моей системе, он выводит следующие строки: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
. Это действительно то, что вы хотели? (Кроме того, бонусные баллы, если вы можете выяснить, какие ядра я на самом деле установил.)Это попытка удалить ядра, которые не являются текущими.
Есть много кусков кода, которые делают что-то подобное, и это не очень хороший пример . Он может легко удалить более новые, чем текущие ядра и, следовательно, метапакет, который устанавливается (
linux-generic
и др.), Если у вас было обновление и вы не перезагружались.источник