Каждый раз, когда я устанавливаю новое ядро Linux, оно остается в grub_config, что каждый раз делает меню загрузки длиннее.
Я знаю, что могу вручную перебрать установленные пакеты и удалить их.
Есть ли в Ubuntu более простой способ очистить их или не давать им отображаться в списке загрузки?
sudo apt autoremove
Эта команда удаляет пакеты, которые были автоматически установлены для удовлетворения зависимостей, но теперь уже не зависело. Это включает в себя старые версии для Linux-заголовков-и
Linux-образ-`. (Также об этом процессе, оставляя один запасной версия ядра вокруг как запасной вариант!)
Последние версии Grub2, установленных в Ubuntu автоматически отображать последние ядра и скрывает старых ядрах, которые вы могли установить.
Если вы не видите свой grub - то не забудьте нажать кнопку <и>сдвиг</КБД> а также во время загрузки.
Как вы видите, отображается только последний ядра.
Если вы выберите показанный вариант (пресс <и>введите</роз>) тогда все старые ядра становятся видны и доступны для загрузки.
Первая загрузка с последней доступной ядра.
Есть несколько способов удалить старые ядра. Лично я бы't нажмите компьютеру дворником с это признал, чтобы сломать ваш компьютер с ее предложениями.
синаптической
Альтернативой является Synaptic (судо АПТ устанавливать синаптические
)
поиск ОС Linux-изображения нажмите правой кнопкой мыши на ядро и выбрать полное удаление и, наконец, нажмите кнопку Применить кнопка для удаления ядра.
Повторите поиск, но на этот раз для Linux-заголовок - вы можете удалить соответствующие заголовки для ядра, выбранные ранее.
Synaptic хотя и не будет пытаться проверить то, что вы пытаетесь удалить... вы можете случайно удалить ваши новые ядра или даже удалить все свои ядра через этот инструмент, оставив вас с незагружаемой Ubuntu!.
Не забудьте проверить, какое ядро вы используете тип:
uname -r
Результат будет похож на:
Запомните результат и убедитесь, что вы Дон'т удалить соответствующую картинку или заголовок.
Моя рекомендация состоит в том, чтобы сохранить по крайней мере два или лучше три ядра, включая последние. Причиной этой рекомендации является, что вы будете иметь по крайней мере один/два других ядер для загрузки, если по какой-либо причине последней версии ядра вы не можете загрузиться с или введения регресс возможностей, таких как осколки, беспроводной интернет.
Во-первых, перезагрузите систему, чтобы убедиться, что с помощью последней версии ядра. Затем откройте терминал и проверьте вашего текущего ядра:
uname -r
НЕ УДАЛЯЙТЕ ЭТО ЯДРО!
Далее, введите команду ниже, чтобы просмотреть список всех установленных ядер в системе.
dpkg --list 'linux-image-*'
Найти все ядра, которые ниже, чем вашего текущего ядра. Когда вы знаете, какие ядра, удалить, продолжить ниже, чтобы удалить его. Выполните команды для удаления ядра вы выбрали.
sudo apt-get purge linux-image-x.x.x-x-generic
Наконец, выполните команды ниже, чтобы обновить файл grub2
sudo update-grub2
Перезагрузите систему.
Мою команду, чтобы удалить старые ядра (это также освобождает дисковое пространство)
dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge
Объяснение (помните, |
используется вывода предыдущей команды в качестве входных данных для следующего)
команда grep Linux-образ
ищет установленную образов Linuxв awk '{ печать $2 }'
просто выходы 2-го столбца (это название пакета)СЭД -Н '/'
uname-Р'/г;п'
печать строки до текущей версии ядраРазмотка СЭД
вызов:
-Н
говорит СЭД
, чтобы быть спокойным`uname-Р
выводит текущие установки релиза ядра - мы включаем его в обратные кавычки, так что на выходе включает в себя как часть команды (вы можете увидеть это как
$(uname-Р)` /КОЕ/г
говорит стоп, когда вы подходите 'что-то' (в этом случае, то вывод uname-р
) - в /
объемный регулярное выражениеР
печать ;
это команда separtor, так/что-то/м;р` говорит бросить, когда вы подходите что-то, еще печататьв целом, СЭД -Н '/'
uname-Р'/г;п'
- это печать строк, пока он не совпадет с текущим именем ядра.
Если вы'вновь параноик (как я), вы можете сделать последнюю часть `команды xargs Эхо судо apt-получить -г продувки так, что команда, чтобы очистить старые ядра напечатали, то вы можете увидеть, что ничего неожиданного не включается перед запуском.
Модифицированный вариант для удаления заголовков:
dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge
dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge
Примечание: СЭД
ссылка изменен. в "$(uname-Р | СЭД "и с/\([0-9.-]*\)-\([^0-9]\+\)/\1/&и")"
в экстрактах только версию (например, на "3.2.0-44", У) , без ТО " универсального" или аналогичная от uname-Р
Все-в-одном версию, чтобы удалить изображения и заголовки (совмещает два предыдущих версиях):
echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge
$ sudo apt autoremove
...
The following packages will be REMOVED:
linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-image-4.4.0-57-generic linux-image-extra-4.4.0-57-generic linux-tools-4.4.0-57 linux-tools-4.4.0-57-generic
Я считаю, что это самый простой и быстрый способ. Он сохраняет последнюю версию ядра, а также еще два:
sudo apt-get install bikeshed
sudo purge-old-kernels
Чтобы изменить количество дополнительных ядер, которые хранятся:
sudo purge-old-kernels --keep 3
Удаление записей из grub 2 Записи должны быть удалены путем редактирования или удаления файлов в /etc/харч.папка д. Файл /boot/grub/с жратвы.файл cfg только для чтения и, как правило, не требуют редактирования.
Слишком Много Ядер?
Если вы не уверены, ядра, которое вы используете, в тип терминал uname-Р.
Ядра удаляются через apt (Synaptic или с "apt-получить удалить" и т. д.) автоматически обновить жратвы.требуется cfg и никаких действий пользователя.
Отличный инструмент для удаления ядер (и меню) - это Убунту-твик, безопасный и простой в использовании GUI-приложения.
Установить Ubuntu твик
Убунту-твик будет доступен в разделе Приложения и gt; Инструменты системы.
Удалить Старые Записи Ядра
Выбрать и"Пакет уборщик" на левом и "чистые ядра" из правой панели.
Нажмите и"разблокировка и" кнопка в правом нижнем углу, введите Ваш пароль.
Выберите из списка изображений и заголовков ядра, которые вы хотите удалить. Ядра использовать не указан.
Нажмите и"очистки" на кнопку в правом нижнем углу, чтобы удалить выбранные изображения и заголовки ядра.
Удаление операционной системы из меню grub
Другие операционные системы, которые были удалены с компьютера будут удалены из меню раз и"обновление-жратва", которая запускается как root.
Пункты меню расположены в меню Файл grub2 скриптами. Если вы Don'т хотите, чтобы другие операционные системы должны быть введены в меню, Отключить в /etc/харч.д/30_osprober
Выполните эту команду, чтобы остановить выполнение скрипта
судо команду chmod -х /и т. д./харч.д/30_os-проберитесь
DISABLE_30_OS-проберитесь='правда' В /и т. д./По умолчанию/жратву
Удалить Memtest86+ из меню grub
судо команду chmod -х /и т. д./харч.д/20_memtest86+
Примечание: После обновления ядра добавляется новая запись в меню grub.Вы можете удалить старые, если вы хотите.Однако, большинство опытных пользователей помогут вам сохранить по крайней мере один запасной вход на случай, если что-то пойдет не так с обновлением и вам нужно, чтобы загрузить старую версию ядра для устранения неполадок.
Альтернативный способ, чтобы удалить записи ядра (до 10.04)
для жратвы не для grub2
Вы можете найти его в разделе Система>>Управление>> Вы видите на втором скриншоте вы можете выбрать, сколько ядер показывает? Я обычно просто держать его на 1, но когда я получаю обновления ядра я всегда изменить его на 2 до перезагрузки, поэтому я могу выбрать старую ядра, если ядро имеет проблемы с моим железом. Как только я узнаю новое ядро хорошо работает я изменить его обратно на 1.
Чисто командной строки, это позволит удалить все, кроме текущего и второй ток (через в "-2" в голове команды ниже):
OLD=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- |
awk '{print "linux-image-" $0 " linux-headers-" $0}' )
if [ -n "$OLD" ]; then
apt-get -qy remove --purge $OLD
fi
apt-get -qy autoremove --purge
Обновление: зачистка старого ядра
- это устаревший в настоящее время.
Я сделал скрипт для очистки ядра даже в сложных условиях. Это называется Линукс-очистить
и вы можете найти его здесь.
Если вы просто хотите, чтобы очистить ядра (и соответствующие пакеты), которые старше, чем в настоящее время используется ядра, когда система не нарушена, вы могли бы использовать скрипт.
Существует также страница документацию Ubuntu, что я внес свой вклад, касающиеся удаления старых ядер здесь.
Вы можете следить за используя в "автоматической-обновления и" раздел пакет из автоматическое обновление безопасности статьи на Убунту Вики, чтобы выполнить это.
Вам нужно изменить следующую строку В /и т. д./кв/АПТ.конф.д/50unattended-обновления файл;
//Unattended-Upgrade::Remove-Unused-Dependencies "false";
с
Unattended-Upgrade::Remove-Unused-Dependencies "true";
чтобы автоматически удалить старые пакеты, в том числе ядер.
Также удалите или закомментируйте строку
"^linux-image.*";
в "NeverAutoRemove" в раздел файл /и т. д./кв/АПТ.конф.д/01autoremove.
Самый быстрый/простой способ (применяется по крайней мере с 12.04) возможно, что уже поставляется с Ubuntu-это apt-получить
. Выполните следующие действия, если вы хотите удалить все старые версии ядра, которые не используются (за исключением предыдущего, что вы не используете. Это, чтобы убедиться, что если текущая версия ядра не удается, в некотором роде, вы сможете вернуться к предыдущему состоянию). Выполните следующие действия:
sudo apt-get autoclean
Это позволит устранить любые старые файлы (включая версии ядра), вы можете иметь. Обратите внимание, что если у вас есть много старых версий, это займет некоторое время, так как он должен убедиться, что удаление версии ядра не имеет никаких проблем. Для меня, удаление последней 12 версии ядра заняла около 2 минут. Вы также можете сделать следующее:
sudo apt-get clean
Которая позволит устранить все загружены и сохранены в папке кэша апта. Наконец у вас есть:
sudo apt-get autoremove
что бы проверить любые неиспользуемые пакеты и удалить их при необходимости. Это очень удобно для тех библиотек и пакетов зависимостей, которые больше не нужны быть установлены какие-либо приложения.
Чтобы выяснить, что ядра и заголовков устанавливаются использовать
dpkg -l | grep linux-image
dpkg -l | grep linux-headers
Затем вы можете удалить их по одному или вместе, просто убедитесь, что держать самых последних.
Есть также некоторые полезные команды и скрипты для автоматизации удаления.
http://ubuntuforums.org/showthread.php?t=1658648
Следующие требования для удаления всех неиспользуемых ядер и заголовков:
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | grep -v hwe | xargs sudo apt-get purge
(используйте apt-получить -г
снять без вопросов)
Вот что происходит при запуске на 18.04.1:
~$ dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]
\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | xargs sudo apt-get -y purge
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
linux-headers-4.15.0-33* linux-headers-4.15.0-33-generic* linux-headers-4.15.0-34* linux-headers-4.15.0-34-generic* linux-image-4.15.0-33-generic* linux-image-4.15.0-34-generic*
linux-modules-4.15.0-33-generic* linux-modules-4.15.0-34-generic* linux-modules-extra-4.15.0-33-generic* linux-modules-extra-4.15.0-34-generic*
0 upgraded, 0 newly installed, 10 to remove and 1 not upgraded.
After this operation, 671 MB disk space will be freed.
(Reading database ... 227403 files and directories currently installed.)
Removing linux-headers-4.15.0-33-generic (4.15.0-33.36) ...
Removing linux-headers-4.15.0-33 (4.15.0-33.36) ...
Removing linux-headers-4.15.0-34-generic (4.15.0-34.37) ...
Removing linux-headers-4.15.0-34 (4.15.0-34.37) ...
Removing linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...
Removing linux-image-4.15.0-33-generic (4.15.0-33.36) ...
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-4.15.0-33-generic
/etc/kernel/postrm.d/zz-update-grub:
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-36-generic
Found initrd image: /boot/initrd.img-4.15.0-36-generic
Found linux image: /boot/vmlinuz-4.15.0-34-generic
Found initrd image: /boot/initrd.img-4.15.0-34-generic
Adding boot menu entry for EFI firmware configuration
done
Removing linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...
Removing linux-image-4.15.0-34-generic (4.15.0-34.37) ...
I: /vmlinuz.old is now a symlink to boot/vmlinuz-4.15.0-36-generic
I: /initrd.img.old is now a symlink to boot/initrd.img-4.15.0-36-generic
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-4.15.0-34-generic
/etc/kernel/postrm.d/zz-update-grub:
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-36-generic
Found initrd image: /boot/initrd.img-4.15.0-36-generic
Adding boot menu entry for EFI firmware configuration
done
Removing linux-modules-4.15.0-33-generic (4.15.0-33.36) ...
Removing linux-modules-4.15.0-34-generic (4.15.0-34.37) ...
(Reading database ... 156180 files and directories currently installed.)
Purging configuration files for linux-image-4.15.0-34-generic (4.15.0-34.37) ...
Purging configuration files for linux-modules-4.15.0-33-generic (4.15.0-33.36) ...
dpkg: warning: while removing linux-modules-4.15.0-33-generic, directory '/lib/modules/4.15.0-33-generic' not empty so not removed
Purging configuration files for linux-modules-4.15.0-34-generic (4.15.0-34.37) ...
Purging configuration files for linux-image-4.15.0-33-generic (4.15.0-33.36) ...
Purging configuration files for linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...
Purging configuration files for linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...
~$ uname -r
4.15.0-36-generic
Computer Janitor может очищать старые ядра и, как я полагаю, установлен по умолчанию в Ubuntu (но не в Kubuntu).
GRUB 1, если вы его используете, имеет опцию в /boot/grub/menu.lst
, чтобы указать, сколько ядер он должен показывать максимально. GRUB 2, насколько я могу судить, не имеет.
Чтобы удалить старые ядра образов Linux, сначала загрузитесь в ядро, которое вы хотите сохранить.
Вы также можете проверить версию ядра с помощью команды uname -r
, чтобы по ошибке не удалить не то ядро.
Теперь зайдите в менеджер пакетов synaptic и найдите linux-image
и удалите все старые версии, кроме той, которая показана верхней командой. Как правило, я предпочитаю использовать последнюю версию.
Теперь при перезагрузке вы увидите более чистое меню grub.
Вы можете установить Убунту-твик, а затем перейдите в приложения -и GT; система инструмент -и GT; Убунту твик и
выберите пакет чище и чистые ядра. его не показывают в настоящее время используется ядра, так что вы всегда будете в безопасности.
Лично мне нравится использовать Synaptic
. Это позволяет мне чувствовать себя более уверенным в том, что происходит. Единственное приложение, которое я использовал для удаления старых ядер, это Ubuntu Tweak.
Как удалить ядра, которые вы не используете:
uname -a
в терминалеВы можете удалить старые ядра (Linux-образ-...
пакеты), используя Synaptic, и удаляет их из меню загрузки. Будьте осторожны, чтобы не удалить работающего ядра (вы можете проверить свою версию с uname-Р
).
Имейте в виду, что наличие одного или двух предыдущих версий могут помочь вам устранить, если что-то пойдет не так.
Кроме того, вы можете редактировать/удалять записи вручную (gksu команду gedit /загрузки/grub/харч.cfg
и), но они будут заново генерируются при обновлении до новых версий ядра.
Если вы думаете об удалении режим восстановления опций - Дон'т. Они могут пригодиться, если вы ломаете что-то, что мешает вам от загрузки.
Обратитесь к этой страницы.
Это чисто решение для командной строки.
Сначала создайте список всех установленных версий ядра кроме запущенных ядра:
dpkg-query -W -f='${Package}\n' |
grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
grep -v $(uname -r | cut -d- -f1,2))
Также можно создать список всех установленных версий ядра, кроме последних двух:
dpkg-query -W -f='${Package}\n' |
grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
sort -V | head -n -2)
Изучите список. Убедитесь, что версий ядра, которое вы хотите сохранить, не были частью списка. Использовать uname-r с командой, чтобы увидеть версию текущего ядра.
Если вы довольны результатами вы можете использовать команду apt-получить удалить пакеты.
Первый пробный прогон (с помощью первого генератора как пример):
sudo apt-get --dry-run purge $(
dpkg-query -W -f='${Package}\n' |
grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
grep -v $(uname -r | cut -d- -f1,2)))
Затем реальный пробег:
sudo apt-get purge $(
dpkg-query -W -f='${Package}\n' |
grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
grep -v $(uname -r | cut -d- -f1,2)))
Если вы хотите автоматизировать процесс, то добавить параметр - да
:
sudo apt-get --yes purge $(
...)
Преимущество этого ответа является родным Убунту Баш используется без установки сторонних приложений. Пользователи других ядер, которые не'т использовать АПТ
или `обновить можно изменить этот скрипт, чтобы удовлетворить их потребности.
Этот ответ базируется на (https://askubuntu.com/questions/892076/how-to-selectively-purge-old-kernels-all-at-once/892077#892077).
Решение, основанное # Зениты
Зениты обеспечивает хороший графический интерфейс для терминала для обработки списка и выбора элементов с радио-кнопки,:
Как показывает название текущего ядра загрузке вы не может быть удален, и это'т включены в список. Указанный размер сколько будет сохранен в каталоге/Boot`. Более сохранен на диске, потому что исполняемые файлы ядра тоже проживают в других областях. 27 июля 2017, внимание: директорий в/usr/src/иверсия_ядра " и " /библиотека/модули/версия_ядра теперь также включены.
В дата изменения было обнаружено с помощью команды стат
. На моей системе эта дата является то"задел" на каждый раз, когда ядро загружается с помощью этого (https://askubuntu.com/questions/841810/how-do-you-find-out-when-a-specific-kernel-version-was-last-booted) хрона перезагрузки скрипта. Однако, в системе дата будет дата релиза ядра, не в последний раз загрузился он.
apt-получить продувки
дает вам шанс прерватьВам предоставляется последняя возможность для просмотра все, что будет очищено и увидеть общее дисковое пространство (несколько вводит в заблуждение), что будут восстановлены:
The following packages will be REMOVED:
linux-headers-4.7.1-040701* linux-headers-4.7.1-040701-generic*
linux-headers-4.7.2-040702* linux-headers-4.7.2-040702-generic*
linux-headers-4.7.3-040703* linux-headers-4.7.3-040703-generic*
linux-headers-4.8.1-040801* linux-headers-4.8.1-040801-generic*
linux-headers-4.8.10-040810* linux-headers-4.8.10-040810-generic*
linux-headers-4.8.11-040811* linux-headers-4.8.11-040811-generic*
linux-headers-4.8.4-040804* linux-headers-4.8.4-040804-generic*
linux-headers-4.8.5-040805* linux-headers-4.8.5-040805-generic*
linux-image-4.7.1-040701-generic* linux-image-4.7.2-040702-generic*
linux-image-4.7.3-040703-generic* linux-image-4.8.1-040801-generic*
linux-image-4.8.10-040810-generic* linux-image-4.8.11-040811-generic*
linux-image-4.8.4-040804-generic* linux-image-4.8.5-040805-generic*
0 upgraded, 0 newly installed, 24 to remove and 2 not upgraded.
After this operation, 2,330 MB disk space will be freed.
Do you want to continue? [Y/n]
Скопируйте этот код в исполняемый файл с именем РМ-ядра в/usr/местные/Бен
:
в
#!/bin/bash
# NAME: rm-kernels
# PATH: /usr/local/bin
# DESC: Provide zenity item list of kernels to remove
# DATE: Mar 10, 2017. Modified Jul 28, 2017.
# NOTE: Will not delete current kernel.
# With 10 kernels on an SSD, empty cache from sudo prompt (#) using:
# # free && sync && echo 3 > /proc/sys/vm/drop_caches && free
# First time for `du` 34 seconds.
# Second time for `du` 1 second.
# PARM: If any parm 1 passed use REAL kernel size, else use estimated size.
# By default `du` is not used and estimated size is displayed.
# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
zenity --error --text "root access required. Use: sudo rm-kernels"
exit 99
fi
OLDIFS="$IFS"
IFS="|"
choices=()
current_version=$(uname -r)
for f in /boot/vmlinuz*
do
if [[ $f == *"$current_version"* ]]; then continue; fi # skip current version
[[ $f =~ vmlinuz-(.*) ]]
v=${BASH_REMATCH[1]} # example: 4.9.21-040921-generic
v_main="${v%-*}" # example: 4.9.21-040921
# Kernel size in /boot/*4.9.21-040921-generic*
s=$(du -ch /boot/*-$v* | awk '/total/{print $1}')
if [[ $# -ne 0 ]] ; then # Was a parameter passed?
if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
# Kernel headers size in /usr/src/*4.9.21-040921*
s2=$(du -ch --max-depth=1 /usr/src/*-$v_main* | awk '/total/{print $1}')
else
s2="0M" # Linux Headers are not installed
fi
# Kernel image size in /lib/modules/4.9.21-040921-generic*
s3=$(du -ch --max-depth=1 /lib/modules/$v* | awk '/total/{print $1}')
else
# Estimate sizof of optional headers at 125MB and size of image at 220MB
if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
s2="125M"
else
s2="0M" # Linux Headers are not installed
fi
s3="220M"
fi
# Strip out "M" provided by human readable option of du and add 3 sizes together
s=$(( ${s//[^0-9]*} + ${s2//[^0-9]*} + ${s3//[^0-9]*} ))
t=$(( t + s ))
s=$s" MB"
d=$(date --date $(stat -c %y $f) '+%b %d %Y') # Last modified date for display
choices=("${choices[@]}" false "$v" "$d" "$s")
done
# adjust width & height below for your screen 640x480 default for 1920x1080 HD screen
# also adjust font="14" below if blue text is too small or too large
choices=(`zenity \
--title "rm-kernels - Total: $t MB excluding: $current_version" \
--list \
--separator="$IFS" \
--checklist --multiple \
--text '<span foreground="blue" font="14">Check box next to kernel(s) to remove</span>' \
--width=640 \
--height=480 \
--column "Select" \
--column "Kernel Version Number" \
--column "Modified Date" \
--column " Size " \
"${choices[@]}"`)
IFS="$OLDIFS"
i=0
list=""
for choice in "${choices[@]}" ; do
if [ "$i" -gt 0 ]; then list="$list- "; fi # append "-" from last loop
((i++))
short_choice=$(echo $choice | cut -f1-2 -d"-")
header_count=$(find /usr/src/linux-headers-$short_choice* -maxdepth 0 -type d | wc -l)
# If -lowlatency and -generic are purged at same time the _all header directory
# remains on disk for specific version with no -generic or -lowlatency below.
if [[ $header_count -lt 3 ]]; then
# Remove all w.x.y-zzz headers
list="$list""linux-image-$choice- linux-headers-$short_choice"
else
# Remove w.x.y-zzz-flavour header only, ie -generic or -lowlatency
list="$list""linux-image-$choice- linux-headers-$choice"
fi
done
if [ "$i" -gt 0 ] ; then
apt-get purge $list
fi
Примечание: Вы должны судо разрешение на создание файла, так что используйте:
gksu gedit /usr/local/bin/rm-kernels
Чтобы использовать исполняемый файл:
sudo chmod +x /usr/local/bin/rm-kernels
РМ-ядер-сервер-это сервер версии для выборочного удаления ядра все сразу. Вместо GUI (графический) диалоговое окно текстовое диалоговое окно используется для выбора ядра для продувки.
судо АПТ установить диалог
Диалоговое окно по умолчанию установка Ubuntu Desktop, но не в сервер Ubuntu.
Образец ## экран
#!/bin/bash
# NAME: rm-kernels-server
# PATH: /usr/local/bin
# DESC: Provide dialog checklist of kernels to remove
# Non-GUI, text based interface for server distro's.
# DATE: Mar 10, 2017. Modified Jul 28, 2017.
# NOTE: Will not delete current kernel.
# With 10 kernels on an SSD, empty cache from sudo prompt (#) using:
# # free && sync && echo 3 > /proc/sys/vm/drop_caches && free
# First time for `du` 34 seconds.
# Second time for `du` 1 second.
# PARM: If any parm 1 passed use REAL kernel size, else use estimated size.
# By default `du` is not used and estimated size is displayed.
# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
echo "root access required. Use: sudo rm-kernels-server"
exit 99
fi
# Must have the dialog package. On Servers, not installed by default
command -v dialog >/dev/null 2>&1 || { echo >&2 "dialog package required but it is not installed. Aborting."; exit 99; }
OLDIFS="$IFS"
IFS="|"
item_list=() # Deviate from rm-kernels here.
current_version=$(uname -r)
i=0
for f in /boot/vmlinuz*
do
if [[ $f == *"$current_version"* ]]; then continue; fi # skip current version
[[ $f =~ vmlinuz-(.*) ]]
((i++)) # Item List
v=${BASH_REMATCH[1]} # example: 4.9.21-040921-generic
v_main="${v%-*}" # example: 4.9.21-040921
# Kernel size in /boot/*4.9.21-040921-generic*
s=$(du -ch /boot/*-$v* | awk '/total/{print $1}')
if [[ $# -ne 0 ]] ; then # Was a parameter passed?
if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
# Kernel headers size in /usr/src/*4.9.21-040921*
s2=$(du -ch --max-depth=1 /usr/src/*-$v_main* | awk '/total/{print $1}')
else
s2="0M" # Linux Headers are not installed
fi
# Kernel image size in /lib/modules/4.9.21-040921-generic*
s3=$(du -ch --max-depth=1 /lib/modules/$v* | awk '/total/{print $1}')
else
# Estimate sizof of optional headers at 125MB and size of image at 220MB
if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
s2="125M"
else
s2="0M" # Linux Headers are not installed
fi
s3="220M"
fi
# Strip out "M" provided by human readable option of du and add 3 sizes together
s=$(( ${s//[^0-9]*} + ${s2//[^0-9]*} + ${s3//[^0-9]*} ))
t=$(( t + s ))
s=$s" MB"
d=$(date --date $(stat -c %y $f) '+%b %d %Y') # Last modified date for display
item_list=("${item_list[@]}" "$i" "$v ! $d ! $s" off)
done
cmd=(dialog --backtitle "rm-kernels-server - Total: $t MB excluding: $current_version" \
--title "Use space bar to toggle kernel(s) to remove" \
--column-separator "!" \
--separate-output \
--ascii-lines \
--checklist " Kernel Version --------- Modified Date Size" 20 60 15)
selections=$("${cmd[@]}" "${item_list[@]}" 2>&1 >/dev/tty)
IFS=$OLDIFS
if [ $? -ne 0 ] ; then
echo cancel selected
exit 1
fi
i=0
choices=()
for select in $selections ; do
((i++))
j=$(( 1 + ($select - 1) * 3 ))
choices[i]=$(echo ${item_list[j]} | cut -f1 -d"!")
done
i=0
list=""
for choice in "${choices[@]}" ; do
if [ "$i" -gt 0 ]; then list="$list- "; fi # append "-" from last loop
((i++))
short_choice=$(echo $choice | cut -f1-2 -d"-")
header_count=$(find /usr/src/linux-headers-$short_choice* -maxdepth 0 -type d | wc -l)
# If -lowlatency and -generic are purged at same time the _all header directory
# remains on disk for specific version with no -generic or -lowlatency below.
if [[ $header_count -lt 3 ]]; then
# Remove all w.x.y-zzz headers
list="$list""linux-image-$choice- linux-headers-$short_choice"
else
# Remove w.x.y-zzz-flavour header only, ie -generic or -lowlatency
list="$list""linux-image-$choice- linux-headers-$choice"
fi
done
if [ "$i" -gt 0 ] ; then
apt-get purge $list
fi
Примечание: при вызове окна
директива --в ASCII-строк, передаются на замену линии-рисовать расширенного набора символов (которые
СШне'т нравится) с "+-----+" ПО для рисования коробки. Если вам не нравится этот вид, вы можете использовать директиву
--нет-линии без коробки вообще.
Расчетный размер каждого ядра была взята с /загрузки/*версия_ядра*
, которые были 5 файлы общим объемом ~50 МБ. Формула была изменена, чтобы включать файлы в/usr/src/иверсия_ядра " и " /библиотека/модули/версия_ядра`. Расчетный размер для каждого ядра составляет сейчас ~400 МБ. Приведенный выше код для РМ-ядра " и " РМ-ядра сервера была обновлена. Однако, образцы экранов, приведенные выше, не отражают этих изменений.
По умолчанию, чтобы оценить размер файлов для linux-headers на 125 МБ и linux-image в 220 Мб, потому что " дю " может быть болезненно медленным, если файлы находятся в кэше. Чтобы получить реальный размер, используя " дю " передавать все параметры скрипта.
Общая сумма всех размеров ядра (без учета текущей версии, которые не могут быть удалены) сейчас показывают в строке заголовка.
Диалоговое окно используется для отображения каждого ядра'ы последняя дата доступа. Эта дата может получить массовую перезапись для всех ядер во время резервного копирования или других подобных операций. Теперь диалоговое окно показывает Дата изменения вместо.
Принято отвечать, используя СЭД
для удаления старых ядер постоянно имеет какие-то недостатки, если кто еще не перезагрузили компьютер после обновления ядра команды тоже удалить новым ядром.
Вот альтернативное решение, которое будет учитывать все ситуации, чтобы удалить только актуальная старых ядрах:
в
#!/bin/bash
kernels=( $(grep -Po "^linux-image-[^-]+-[^-]+-generic\b" < <(dpkg --get-selections)) )
cur_rel=$(grep -Po ".*(?=-[a-z]*$)" < <(uname -r))
for kernel in "${kernels[@]}"; do
ker_rel=$(grep -Po "[0-9].*(?=-[a-z]*)" <<< "$kernel")
dpkg --compare-versions "$ker_rel" gt "$cur_rel" && echo "Please Restart your computer first" && break
dpkg --compare-versions "$ker_rel" lt "$cur_rel" && sudo apt-get remove "$kernel"
done
Если у вас есть какие-либо версии новее, чем нынешний, это даст вам предупреждение, чтобы перезагрузить сначала компьютер. Также обратите внимание, что в старых ядрах сохраняются по уважительной причине, что если вы каким-то образом испортить вашего текущего ядра, что делает систему неустойчивой, то вы должны быть в состоянии загрузиться в любой старой версией ядра.
Простой способ избавиться от почти всех устаревших пакетов, пакетов больше нет ни в одном списке пакета, наряду с устаревшими ядрами, чтобы сделать одно из следующих действий:
dpkg --purge $(aptitude search ?obsolete)
Однако, этого будет не хватать пакеты, которые все еще рекомендуют другие пакеты, и -Р/ - без-рекомендует аргумент не решает эту проблему.
программа dselect после переключения режима сортировки с 'О' будут показаны все устаревшие пакеты, в том числе способностей не попадает, но некоторые люди не'т, как его использовать.
ailurus имеет функцию удаления старых ядер, а также неиспользованные конфигураций. Я лично удалить его вручную с помощью Synaptic. Вы можете установить ailurus от getdeb, а также ППА