Ошибка выхода из состояния 1, пожалуйста, помогите, поскольку у меня есть крайний срок обучения! [dубликат]

Я пытаюсь сделать do-release-upgrade, но потом я получаю:

Недостаточно свободного места на диске. Обновление прервано. Для обновления требуется в общей сложности 25,7 М свободного места на диске '/ boot'. Пожалуйста, освободите как минимум 25,7 М свободного места на диске / boot. Очистите корзину и удалите временные пакеты прежних установок, используя «sudo apt-get clean».

Вывод df:

237251272 214797108 10402504 96% / udev 488120 4 488116 1% /dev tmpfs 198676 668 198008 1% /run none 5120 0 5120 0% /run/lock none 496684 0 496684 0% /run/shm /dev/sda1 233191 225867 0 100% /boot

Почему при загрузке нет свободного места? Вот результат работы ls -as /boot:

total 221839 4 . 4 .. 645 abi-2.6.32-34-generic-pae 698 abi-2.6.35-30-generic-pae 727 abi-2.6.38-12-generic-pae 727 abi-3.0.0-12-generic-pae 727 abi-3.0.0-13-generic-pae 727 abi-3.0.0-14-generic-pae 727 abi-3.0.0-15-generic-pae 727 abi-3.0.0-16-generic-pae 727 abi-3.0.0-17-generic-pae 727 abi-3.0.0-19-generic-pae 761 abi-3.0.0-20-generic-pae 115 config-2.6.32-34-generic-pae 128 config-2.6.35-30-generic-pae 136 config-2.6.38-12-generic-pae 140 config-3.0.0-12-generic-pae 140 config-3.0.0-13-generic-pae 140 config-3.0.0-14-generic-pae 140 config-3.0.0-15-generic-pae 140 config-3.0.0-16-generic-pae 140 config-3.0.0-17-generic-pae 140 config-3.0.0-19-generic-pae 140 config-3.0.0-20-generic-pae 5 grub 10773 initrd.img-2.6.32-34-generic-pae 13619 initrd.img-2.6.35-30-generic-pae 15365 initrd.img-2.6.38-12-generic-pae 16481 initrd.img-3.0.0-12-generic-pae 16487 initrd.img-3.0.0-13-generic-pae 16501 initrd.img-3.0.0-14-generic-pae 16476 initrd.img-3.0.0-15-generic-pae 16481 initrd.img-3.0.0-16-generic-pae 16478 initrd.img-3.0.0-17-generic-pae 12 lost+found 174 memtest86+.bin 176 memtest86+_multiboot.bin 1700 System.map-2.6.32-34-generic-pae 1841 System.map-2.6.35-30-generic-pae 2115 System.map-2.6.38-12-generic-pae 2141 System.map-3.0.0-12-generic-pae 2141 System.map-3.0.0-13-generic-pae 2143 System.map-3.0.0-14-generic-pae 2146 System.map-3.0.0-15-generic-pae 2147 System.map-3.0.0-16-generic-pae 2147 System.map-3.0.0-17-generic-pae 2148 System.map-3.0.0-19-generic-pae 2149 System.map-3.0.0-20-generic-pae 2 vmcoreinfo-2.6.32-34-generic-pae 2 vmcoreinfo-2.6.35-30-generic-pae 2 vmcoreinfo-2.6.38-12-generic-pae 2 vmcoreinfo-3.0.0-12-generic-pae 2 vmcoreinfo-3.0.0-13-generic-pae 2 vmcoreinfo-3.0.0-14-generic-pae 2 vmcoreinfo-3.0.0-15-generic-pae 2 vmcoreinfo-3.0.0-16-generic-pae 2 vmcoreinfo-3.0.0-17-generic-pae 2 vmcoreinfo-3.0.0-19-generic-pae 2 vmcoreinfo-3.0.0-20-generic-pae 4092 vmlinuz-2.6.32-34-generic-pae 4347 vmlinuz-2.6.35-30-generic-pae 4567 vmlinuz-2.6.38-12-generic-pae 4675 vmlinuz-3.0.0-12-generic-pae 4676 vmlinuz-3.0.0-13-generic-pae 4681 vmlinuz-3.0.0-14-generic-pae 4698 vmlinuz-3.0.0-15-generic-pae 4700 vmlinuz-3.0.0-16-generic-pae 4700 vmlinuz-3.0.0-17-generic-pae 4703 vmlinuz-3.0.0-19-generic-pae 4705 vmlinuz-3.0.0-20-generic-pae

Вывод uname -a:

Linux kitsch 3.0.0-17-generic-pae #30-Ubuntu SMP Thu Mar 8 17:53:35 UTC 2012 i686 i686 i386 GNU/Linux
115
задан 22 July 2014 в 02:40

21 ответ

Ваш / загрузочный раздел заполнен старыми ядрами. Иногда он делает это, не уверен, почему он никогда не фиксируется. Вы можете легко удалить старые ядра, если знаете, в какие пакеты они вошли.

Сначала проверьте uname -a, чтобы проверить вашу текущую версию.

Затем запустите следующую команду:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'

Эта команда отобразит все пакеты, которые вам больше не нужны. Мне не нравится удалять их автоматически, мне нравится контролировать, когда дело доходит до удаления ядер. Поэтому для каждого перечисленного пакета выполните следующие действия:

sudo apt-get -y purge some-kernel-package

Intermezzo

Это intermezzo более подробно описывает, как работают команды, и пытается исправить проблему с помощью linux-libc-dev:amd64. Большинство пользователей могут пропустить этот параграф.

dpkg -l 'linux-*' перечислить все пакеты, имена которых начинаются с 'linux- sed '/^ii/!d; remove all lines that do *not* start with ii` uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/" найти текущую версию ядра ядра /'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d Удалить все строки , кроме тех, которые содержат текущий номер версии ядра ядра s/^[^ ]* [^ ]* \([^ ]*\).*/\1/. Для каждой строки перечисляется только имя пакета /[0-9]/!d Удалить строки, которые не содержат чисел.

Чтобы исправить проблему Фредерика Норда, я думаю, что команда может быть изменена следующим образом:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d;/^linux-\(headers\|image\)/!d'

В основном добавляется дополнительный фильтр:

dpkg -l 'linux-*' укажите все пакеты, имена которых начинаются с 'linux -'

/ Intermezzo

Если some-kernel-package можно заменить одним из перечисленных пакетов. Просто остерегайтесь того, что вы не удаляете пакеты ядра, которые в настоящее время используются (как указано в uname -a), например. sudo apt-get purge -y linux-headers-3.0.0-12 и т. д.

Его можно автоматизировать далее с помощью команды xargs, но мне это не нравится. Это личное дело. Однако вот команда:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

Это то, что выглядит мой /boot, одно запасное ядро ​​(2.6.38-11) и 3.2.0-24 - текущий :

$ ls -l /boot total 59388 -rw-r--r-- 1 root root 730545 Sep 13 2011 abi-2.6.38-11-generic -rw-r--r-- 1 root root 791023 Apr 25 13:51 abi-3.2.0-24-generic -rw-r--r-- 1 root root 130326 Sep 13 2011 config-2.6.38-11-generic -rw-r--r-- 1 root root 140341 Apr 25 13:51 config-3.2.0-24-generic drwxr-xr-x 3 root root 5120 May 27 17:46 grub -rw-r--r-- 1 root root 20883146 Oct 1 2011 initrd.img-2.6.38-11-generic -rw-r--r-- 1 root root 22474219 May 5 09:04 initrd.img-3.2.0-24-generic drwxr-xr-x 2 root root 12288 Apr 16 2009 lost+found -rw-r--r-- 1 root root 176764 Nov 27 11:00 memtest86+.bin -rw-r--r-- 1 root root 178944 Nov 27 11:00 memtest86+_multiboot.bin -rw------- 1 root root 2656297 Sep 13 2011 System.map-2.6.38-11-generic -rw------- 1 root root 2884358 Apr 25 13:51 System.map-3.2.0-24-generic -rw------- 1 root root 1369 Sep 13 2011 vmcoreinfo-2.6.38-11-generic -rw------- 1 root root 4526784 Sep 13 2011 vmlinuz-2.6.38-11-generic -rw------- 1 root root 4965776 Apr 25 13:51 vmlinuz-3.2.0-24-generic

И использование файловой системы:

$ df -h /boot Filesystem Size Used Avail Use% Mounted /dev/sda5 228M 63M 154M 29% /boot
154
ответ дан 18 July 2018 в 02:39

Ваш / загрузочный раздел заполнен старыми ядрами. Иногда он делает это, не уверен, почему он никогда не фиксируется. Вы можете легко удалить старые ядра, если знаете, в какие пакеты они вошли.

Сначала проверьте uname -a, чтобы проверить вашу текущую версию.

Затем запустите следующую команду:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'

Эта команда отобразит все пакеты, которые вам больше не нужны. Мне не нравится удалять их автоматически, мне нравится контролировать, когда дело доходит до удаления ядер. Поэтому для каждого перечисленного пакета выполните следующие действия:

sudo apt-get -y purge some-kernel-package

Intermezzo

Это intermezzo более подробно описывает, как работают команды, и пытается исправить проблему с помощью linux-libc-dev:amd64. Большинство пользователей могут пропустить этот параграф.

dpkg -l 'linux-*' перечислить все пакеты, имена которых начинаются с 'linux- sed '/^ii/!d; remove all lines that do *not* start with ii` uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/" найти текущую версию ядра ядра /'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d Удалить все строки , кроме тех, которые содержат текущий номер версии ядра ядра s/^[^ ]* [^ ]* \([^ ]*\).*/\1/. Для каждой строки перечисляется только имя пакета /[0-9]/!d Удалить строки, которые не содержат чисел.

Чтобы исправить проблему Фредерика Норда, я думаю, что команда может быть изменена следующим образом:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d;/^linux-\(headers\|image\)/!d'

В основном добавляется дополнительный фильтр:

dpkg -l 'linux-*' укажите все пакеты, имена которых начинаются с 'linux -'

/ Intermezzo

Если some-kernel-package можно заменить одним из перечисленных пакетов. Просто остерегайтесь того, что вы не удаляете пакеты ядра, которые в настоящее время используются (как указано в uname -a), например. sudo apt-get purge -y linux-headers-3.0.0-12 и т. д.

Его можно автоматизировать далее с помощью команды xargs, но мне это не нравится. Это личное дело. Однако вот команда:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

Это то, что выглядит мой /boot, одно запасное ядро ​​(2.6.38-11) и 3.2.0-24 - текущий :

$ ls -l /boot total 59388 -rw-r--r-- 1 root root 730545 Sep 13 2011 abi-2.6.38-11-generic -rw-r--r-- 1 root root 791023 Apr 25 13:51 abi-3.2.0-24-generic -rw-r--r-- 1 root root 130326 Sep 13 2011 config-2.6.38-11-generic -rw-r--r-- 1 root root 140341 Apr 25 13:51 config-3.2.0-24-generic drwxr-xr-x 3 root root 5120 May 27 17:46 grub -rw-r--r-- 1 root root 20883146 Oct 1 2011 initrd.img-2.6.38-11-generic -rw-r--r-- 1 root root 22474219 May 5 09:04 initrd.img-3.2.0-24-generic drwxr-xr-x 2 root root 12288 Apr 16 2009 lost+found -rw-r--r-- 1 root root 176764 Nov 27 11:00 memtest86+.bin -rw-r--r-- 1 root root 178944 Nov 27 11:00 memtest86+_multiboot.bin -rw------- 1 root root 2656297 Sep 13 2011 System.map-2.6.38-11-generic -rw------- 1 root root 2884358 Apr 25 13:51 System.map-3.2.0-24-generic -rw------- 1 root root 1369 Sep 13 2011 vmcoreinfo-2.6.38-11-generic -rw------- 1 root root 4526784 Sep 13 2011 vmlinuz-2.6.38-11-generic -rw------- 1 root root 4965776 Apr 25 13:51 vmlinuz-3.2.0-24-generic

И использование файловой системы:

$ df -h /boot Filesystem Size Used Avail Use% Mounted /dev/sda5 228M 63M 154M 29% /boot
154
ответ дан 24 July 2018 в 17:37

Вы можете легко обрабатывать ядра через диспетчер синаптических пакетов. Но сначала вы должны знать текущее имя ядра, которое было выпущено в терминале:

linux@linux-desktop:~$ uname -r 4.4.0-75-generic . По крайней мере, эта версия должна оставаться нетронутой. Откройте синаптический интерфейс и запустите заполняющий фильтр, как показано ниже: Теперь вы можете выбрать все пакеты, которые вы хотите удалить, и сделать следующее: Отметить для полного удаления -> Применить. Я бы предложил сохранить хотя бы последний текущий пакет ядра и одно предыдущее ядро. Например, в этом случае вы можете безопасно избавиться от linux-image-4.4.0-66-generic и linux-image-extra-4.4.0-66-generic, но хорошо сохранить 4.4.0-72 и, конечно же, 4.4.0-75.

0
ответ дан 18 July 2018 в 02:39

Для облегчения командной строки:

https://github.com/erichs/bootnukem

git clone https://github.com/erichs/bootnukem.git cd bootnukem sudo ./install.sh

Затем

sudo bootnukem --dry-run
0
ответ дан 18 July 2018 в 02:39

Работает на Linux Mint 18.3 (на основе Ubuntu 16.04).

sudo apt-get purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1) --assume-yes

Источник: https://ubuntuforums.org/showthread.php?t=2248846& р = 13146650 # post13146650

0
ответ дан 18 July 2018 в 02:39

sudo apt-get autoremove

сделал трюк для меня, он полностью очистил все неиспользуемые пакеты ядра.

43
ответ дан 18 July 2018 в 02:39

По сравнению с другими ответами GUI здесь преимущество этого ответа - это родной Ubuntu Bash, который используется без установки сторонних приложений.

Решение на основе Zenity и Bash

Zenity предоставляет хороший интерфейс GUI для терминала для обработки списка и выбора элементов с помощью радиокнопки:

Текущее загруженное вами ядро ​​не может быть удалено и не включено в список. Сообщается, сколько будет сохранено в каталоге /boot. На вашем диске сохраняется больше, потому что двоичные файлы ядра также находятся в других областях. radio-buttons Теперь включены каталоги /usr/src/*kernel_version* и /lib/modules/*kernel_version*.

Измененная дата открыта с помощью команды stat. В моей системе эта дата «трогается» каждый раз, когда ядро ​​загружается с помощью этого сценария ( ) cron reboot. Однако в вашей системе дата будет датой выпуска ядра, а не в последний раз, когда вы ее загрузили.

apt-get purge дает вам шанс прервать

Вам предоставляется окончательная возможность чтобы просмотреть все, что будет очищено, и посмотреть общее количество дискового пространства (несколько вводящее в заблуждение), которое будет восстановлено:

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]

Код

Скопируйте этот код в исполняемый файл с именем rm-kernels в /usr/local/bin:

#!/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

Измененная дата Вам нужно sudo-разрешение для создания файла, поэтому используйте:

gksu gedit /usr/local/bin/rm-kernels

Чтобы сделать файл исполняемый файл:

sudo chmod +x /usr/local/bin/rm-kernels

ПРИМЕЧАНИЕ. Для версии этого сценария для сервера (текстовый, а не GUI) см .: Как удалить старые версии ядра для очистки меню загрузки?

28 июля 2017 г. Обновления

Вычисленный размер каждого ядра был взят из /boot/*kernel_version*, который состоял из 5 файлов общим объемом ~ 50 МБ. Формула изменилась, чтобы включить файлы в /usr/src/*kernel_version* и /lib/modules/*kernel_version*. Расчетный размер для каждого ядра теперь составляет ~ 400 МБ. Вышеупомянутый код для rm-kernels и rm-kernels-server обновлен.

По умолчанию нужно оценить размер файлов для linux-заголовков на 125 МБ и linux-изображение при 220 МБ, потому что du может быть болезненно медленно, если файлы не находятся в кеше. Чтобы получить реальный размер, используя du, передайте любой параметр сценарию.

Общее количество всех размеров ядра (исключая текущую текущую версию, которая не может быть удалена) теперь отображается в строке заголовка.

Диалоговое окно, используемое для отображения каждого ядра ПРИМЕЧАНИЕ: . Эта дата может быть перезаписана для всех ядер во время резервного копирования или аналогичных операций. В диалоговом окне теперь отображается cron .

1
ответ дан 18 July 2018 в 02:39

Эквивалент принятому ответу - другим (возможно) более простым способом является установка инструмента ubuntu-tweak, его можно скачать здесь. Перейдите в «Дворник» и выберите «Старое ядро» для очистки. Это можно сделать за несколько кликов. (проверено на рабочем столе 14.04)

здесь

7
ответ дан 18 July 2018 в 02:39

Вы можете легко обрабатывать ядра через диспетчер синаптических пакетов. Но сначала вы должны знать текущее имя ядра, которое было выпущено в терминале:

linux@linux-desktop:~$ uname -r 4.4.0-75-generic . По крайней мере, эта версия должна оставаться нетронутой. Откройте синаптический интерфейс и запустите заполняющий фильтр, как показано ниже: Теперь вы можете выбрать все пакеты, которые вы хотите удалить, и сделать следующее: Отметить для полного удаления -> Применить. Я бы предложил сохранить хотя бы последний текущий пакет ядра и одно предыдущее ядро. Например, в этом случае вы можете безопасно избавиться от linux-image-4.4.0-66-generic и linux-image-extra-4.4.0-66-generic, но хорошо сохранить 4.4.0-72 и, конечно же, 4.4.0-75.

0
ответ дан 24 July 2018 в 17:37

Для облегчения командной строки:

https://github.com/erichs/bootnukem

git clone https://github.com/erichs/bootnukem.git cd bootnukem sudo ./install.sh

Затем

sudo bootnukem --dry-run
0
ответ дан 24 July 2018 в 17:37

Работает на Linux Mint 18.3 (на основе Ubuntu 16.04).

sudo apt-get purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1) --assume-yes

Источник: https://ubuntuforums.org/showthread.php?t=2248846& р = 13146650 # post13146650

0
ответ дан 24 July 2018 в 17:37

sudo apt-get autoremove

сделал трюк для меня, он полностью очистил все неиспользуемые пакеты ядра.

43
ответ дан 24 July 2018 в 17:37
  • 1
    это неверно. из man apt-get autoremove используется для удаления пакетов, которые были автоматически установлены для удовлетворения зависимостей для некоторого пакета, и которые больше не нужны. ядро не будет установлено для удовлетворения зависимостей, они будут установлены во время обновлений. – dward 31 May 2014 в 02:44
  • 2
    @neon_overload Я только что опубликовал его, потому что он сделал трюк для меня. – topless 30 July 2014 в 19:20
  • 3
    @dward Это освободило для меня некоторое пространство: перед автозапуском: /dev/sda1, 240M total, 171M used, 57M free, 75% used /boot после: /dev/sda1, 240M total, 129M used, 98M free, 57% used /boot – Stefan Rogin 8 May 2015 в 11:39
  • 4
    @clickstefan первый ответ правильный. см. также askubuntu.com/questions/89710/… – dward 14 May 2015 в 15:39
  • 5
    Должна быть кнопка для выполнения этой задачи в разделе «Недостаточно свободного места на диске». диалог. Это особенно поможет начинающим пользователям, которые не знакомы с командной строкой. – Martin R. 7 January 2016 в 01:28

По сравнению с другими ответами GUI здесь преимущество этого ответа - это родной Ubuntu Bash, который используется без установки сторонних приложений.

Решение на основе Zenity и Bash

Zenity предоставляет хороший интерфейс GUI для терминала для обработки списка и выбора элементов с помощью радиокнопки:

Текущее загруженное вами ядро ​​не может быть удалено и не включено в список. Сообщается, сколько будет сохранено в каталоге /boot. На вашем диске сохраняется больше, потому что двоичные файлы ядра также находятся в других областях. radio-buttons Теперь включены каталоги /usr/src/*kernel_version* и /lib/modules/*kernel_version*.

Измененная дата открыта с помощью команды stat. В моей системе эта дата «трогается» каждый раз, когда ядро ​​загружается с помощью этого сценария ( ) cron reboot. Однако в вашей системе дата будет датой выпуска ядра, а не в последний раз, когда вы ее загрузили.

apt-get purge дает вам шанс прервать

Вам предоставляется окончательная возможность чтобы просмотреть все, что будет очищено, и посмотреть общее количество дискового пространства (несколько вводящее в заблуждение), которое будет восстановлено:

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]

Код

Скопируйте этот код в исполняемый файл с именем rm-kernels в /usr/local/bin:

#!/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

Измененная дата Вам нужно sudo-разрешение для создания файла, поэтому используйте:

gksu gedit /usr/local/bin/rm-kernels

Чтобы сделать файл исполняемый файл:

sudo chmod +x /usr/local/bin/rm-kernels

ПРИМЕЧАНИЕ. Для версии этого сценария для сервера (текстовый, а не GUI) см .: Как удалить старые версии ядра для очистки меню загрузки?

28 июля 2017 г. Обновления

Вычисленный размер каждого ядра был взят из /boot/*kernel_version*, который состоял из 5 файлов общим объемом ~ 50 МБ. Формула изменилась, чтобы включить файлы в /usr/src/*kernel_version* и /lib/modules/*kernel_version*. Расчетный размер для каждого ядра теперь составляет ~ 400 МБ. Вышеупомянутый код для rm-kernels и rm-kernels-server обновлен.

По умолчанию нужно оценить размер файлов для linux-заголовков на 125 МБ и linux-изображение при 220 МБ, потому что du может быть болезненно медленно, если файлы не находятся в кеше. Чтобы получить реальный размер, используя du, передайте любой параметр сценарию.

Общее количество всех размеров ядра (исключая текущую текущую версию, которая не может быть удалена) теперь отображается в строке заголовка.

Диалоговое окно, используемое для отображения каждого ядра ПРИМЕЧАНИЕ: . Эта дата может быть перезаписана для всех ядер во время резервного копирования или аналогичных операций. В диалоговом окне теперь отображается cron .

1
ответ дан 24 July 2018 в 17:37
  • 1
    Ты великолепен! Очень большое спасибо! Ты делаешь меня счастливым! – zhartaunik 16 June 2017 в 19:00

Эквивалент принятому ответу - другим (возможно) более простым способом является установка инструмента ubuntu-tweak, его можно скачать здесь. Перейдите в «Дворник» и выберите «Старое ядро» для очистки. Это можно сделать за несколько кликов. (проверено на рабочем столе 14.04)

здесь

7
ответ дан 24 July 2018 в 17:37
  • 1
    Ситуация с отсутствием места на /boot происходит постоянно, так что это мое любимое решение - легко запускаемое приложение, которое делает работу одним щелчком мыши. – s3m3n 28 December 2015 в 16:33

По сравнению с другими ответами GUI здесь преимущество этого ответа - это родной Ubuntu Bash, который используется без установки сторонних приложений.

Решение Zenity и Bash

Zenity предоставляет хороший интерфейс GUI для терминала для обработки списка и выбора элементов с помощью радиокнопки:

Текущее ядро, с которым вы загрузились, не может быть удалено и isn Включено в список. Сообщается, сколько будет сохранено в каталоге /boot. На вашем диске сохраняется больше, потому что двоичные файлы ядра также находятся в других областях. 27 июля 2017 г. примечание: теперь включены каталоги /usr/src/*kernel_version* и /lib/modules/*kernel_version*.

Измененная дата открыта с помощью команды stat. В моей системе эта дата «коснулась» каждый раз, когда ядро ​​загружается с помощью этого ( Как вы узнаете, когда последняя загрузка ядра была загружена последним? ) cron reboot script , Однако в вашей системе дата будет датой выпуска ядра, а не в последний раз, когда вы ее загрузили.

apt-get purge дает вам шанс прервать

. Вам предоставляется окончательная возможность для просмотра всего, что будет очищено, и увидеть общее пространство на диске (несколько вводящее в заблуждение), которое будет восстановлено:

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] 

Код

Скопируйте этот код в исполняемый файл с именем rm-kernels в /usr/local/bin:

#!/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

ПРИМЕЧАНИЕ: вам нужно sudo-разрешение для создания файла, поэтому используйте:

gksu gedit /usr/local/bin/rm-kernels

Чтобы сделать исполняемый файл:

sudo chmod +x /usr/local/bin/rm-kernels

ПРИМЕЧАНИЕ. Для версии этого сценария на сервере (на основе текста, а не GUI) см .: . Как удалить старые версии ядра для очистки меню загрузки?

< hr>

28 июля 2017 г. Обновления

Вычисленный размер каждого ядра был взят из /boot/*kernel_version*, который состоял из 5 файлов общим объемом ~ 50 МБ. Формула изменилась, чтобы включить файлы в /usr/src/*kernel_version* и /lib/modules/*kernel_version*. Расчетный размер для каждого ядра теперь составляет ~ 400 МБ. Вышеупомянутый код для rm-kernels и rm-kernels-server обновлен. Тем не менее, приведенные выше примеры не отражают эти изменения.

По умолчанию используется размер файлов для linux-заголовков на 125 МБ и linux-изображение при 220 МБ, поскольку du может быть болезненно медленно, если файлы не находятся в кеше. Чтобы получить реальный размер с помощью du, передайте любой параметр сценарию.

Общее количество всех размеров ядра (исключая текущую текущую версию, которая не может быть удалена) теперь отображается в строке заголовка.

Диалоговое окно, используемое для отображения каждой последней даты доступа к ядру. Эта дата может быть перезаписана для всех ядер во время резервного копирования или аналогичных операций. В диалоговом окне теперь отображается измененная дата.

1
ответ дан 31 July 2018 в 20:41

По сравнению с другими ответами GUI здесь преимущество этого ответа - это родной Ubuntu Bash, который используется без установки сторонних приложений.

Решение Zenity и Bash

Zenity предоставляет хороший интерфейс GUI для терминала для обработки списка и выбора элементов с помощью радиокнопки:

Текущее ядро, с которым вы загрузились, не может быть удалено и isn Включено в список. Сообщается, сколько будет сохранено в каталоге /boot. На вашем диске сохраняется больше, потому что двоичные файлы ядра также находятся в других областях. 27 июля 2017 г. примечание: теперь включены каталоги /usr/src/*kernel_version* и /lib/modules/*kernel_version*.

Измененная дата открыта с помощью команды stat. В моей системе эта дата «коснулась» каждый раз, когда ядро ​​загружается с помощью этого ( Как вы узнаете, когда последняя загрузка ядра была загружена последним? ) cron reboot script , Однако в вашей системе дата будет датой выпуска ядра, а не в последний раз, когда вы ее загрузили.

apt-get purge дает вам шанс прервать

. Вам предоставляется окончательная возможность для просмотра всего, что будет очищено, и увидеть общее пространство на диске (несколько вводящее в заблуждение), которое будет восстановлено:

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] 

Код

Скопируйте этот код в исполняемый файл с именем rm-kernels в /usr/local/bin:

#!/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

ПРИМЕЧАНИЕ: вам нужно sudo-разрешение для создания файла, поэтому используйте:

gksu gedit /usr/local/bin/rm-kernels

Чтобы сделать исполняемый файл:

sudo chmod +x /usr/local/bin/rm-kernels

ПРИМЕЧАНИЕ. Для версии этого сценария на сервере (на основе текста, а не GUI) см .: . Как удалить старые версии ядра для очистки меню загрузки?

< hr>

28 июля 2017 г. Обновления

Вычисленный размер каждого ядра был взят из /boot/*kernel_version*, который состоял из 5 файлов общим объемом ~ 50 МБ. Формула изменилась, чтобы включить файлы в /usr/src/*kernel_version* и /lib/modules/*kernel_version*. Расчетный размер для каждого ядра теперь составляет ~ 400 МБ. Вышеупомянутый код для rm-kernels и rm-kernels-server обновлен. Тем не менее, приведенные выше примеры не отражают эти изменения.

По умолчанию используется размер файлов для linux-заголовков на 125 МБ и linux-изображение при 220 МБ, поскольку du может быть болезненно медленно, если файлы не находятся в кеше. Чтобы получить реальный размер с помощью du, передайте любой параметр сценарию.

Общее количество всех размеров ядра (исключая текущую текущую версию, которая не может быть удалена) теперь отображается в строке заголовка.

Диалоговое окно, используемое для отображения каждой последней даты доступа к ядру. Эта дата может быть перезаписана для всех ядер во время резервного копирования или аналогичных операций. В диалоговом окне теперь отображается измененная дата.

1
ответ дан 2 August 2018 в 13:46

По сравнению с другими ответами GUI здесь преимущество этого ответа - это родной Ubuntu Bash, который используется без установки сторонних приложений.

Решение Zenity и Bash

Zenity предоставляет хороший интерфейс GUI для терминала для обработки списка и выбора элементов с помощью радиокнопки:

Текущее ядро, с которым вы загрузились, не может быть удалено и isn Включено в список. Сообщается, сколько будет сохранено в каталоге /boot. На вашем диске сохраняется больше, потому что двоичные файлы ядра также находятся в других областях. 27 июля 2017 г. примечание: теперь включены каталоги /usr/src/*kernel_version* и /lib/modules/*kernel_version*.

Измененная дата открыта с помощью команды stat. В моей системе эта дата «коснулась» каждый раз, когда ядро ​​загружается с помощью этого ( Как вы узнаете, когда последняя загрузка ядра была загружена последним? ) cron reboot script , Однако в вашей системе дата будет датой выпуска ядра, а не в последний раз, когда вы ее загрузили.

apt-get purge дает вам шанс прервать

. Вам предоставляется окончательная возможность для просмотра всего, что будет очищено, и увидеть общее пространство на диске (несколько вводящее в заблуждение), которое будет восстановлено:

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] 

Код

Скопируйте этот код в исполняемый файл с именем rm-kernels в /usr/local/bin:

#!/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

ПРИМЕЧАНИЕ: вам нужно sudo-разрешение для создания файла, поэтому используйте:

gksu gedit /usr/local/bin/rm-kernels

Чтобы сделать исполняемый файл:

sudo chmod +x /usr/local/bin/rm-kernels

ПРИМЕЧАНИЕ. Для версии этого сценария на сервере (на основе текста, а не GUI) см .: . Как удалить старые версии ядра для очистки меню загрузки?

< hr>

28 июля 2017 г. Обновления

Вычисленный размер каждого ядра был взят из /boot/*kernel_version*, который состоял из 5 файлов общим объемом ~ 50 МБ. Формула изменилась, чтобы включить файлы в /usr/src/*kernel_version* и /lib/modules/*kernel_version*. Расчетный размер для каждого ядра теперь составляет ~ 400 МБ. Вышеупомянутый код для rm-kernels и rm-kernels-server обновлен. Тем не менее, приведенные выше примеры не отражают эти изменения.

По умолчанию используется размер файлов для linux-заголовков на 125 МБ и linux-изображение при 220 МБ, поскольку du может быть болезненно медленно, если файлы не находятся в кеше. Чтобы получить реальный размер с помощью du, передайте любой параметр сценарию.

Общее количество всех размеров ядра (исключая текущую текущую версию, которая не может быть удалена) теперь отображается в строке заголовка.

Диалоговое окно, используемое для отображения каждой последней даты доступа к ядру. Эта дата может быть перезаписана для всех ядер во время резервного копирования или аналогичных операций. В диалоговом окне теперь отображается измененная дата.

1
ответ дан 3 August 2018 в 17:57

По сравнению с другими ответами GUI здесь преимущество этого ответа - это родной Ubuntu Bash, который используется без установки сторонних приложений.

Решение Zenity и Bash

Zenity предоставляет хороший интерфейс GUI для терминала для обработки списка и выбора элементов с помощью радиокнопки:

Текущее ядро, с которым вы загрузились, не может быть удалено и isn Включено в список. Сообщается, сколько будет сохранено в каталоге /boot. На вашем диске сохраняется больше, потому что двоичные файлы ядра также находятся в других областях. 27 июля 2017 г. примечание: теперь включены каталоги /usr/src/*kernel_version* и /lib/modules/*kernel_version*.

Измененная дата открыта с помощью команды stat. В моей системе эта дата «коснулась» каждый раз, когда ядро ​​загружается с помощью этого ( Как вы узнаете, когда последняя загрузка ядра была загружена последним? ) cron reboot script , Однако в вашей системе дата будет датой выпуска ядра, а не в последний раз, когда вы ее загрузили.

apt-get purge дает вам шанс прервать

. Вам предоставляется окончательная возможность для просмотра всего, что будет очищено, и увидеть общее пространство на диске (несколько вводящее в заблуждение), которое будет восстановлено:

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] 

Код

Скопируйте этот код в исполняемый файл с именем rm-kernels в /usr/local/bin:

#!/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

ПРИМЕЧАНИЕ: вам нужно sudo-разрешение для создания файла, поэтому используйте:

gksu gedit /usr/local/bin/rm-kernels

Чтобы сделать исполняемый файл:

sudo chmod +x /usr/local/bin/rm-kernels

ПРИМЕЧАНИЕ. Для версии этого сценария на сервере (на основе текста, а не GUI) см .: . Как удалить старые версии ядра для очистки меню загрузки?

< hr>

28 июля 2017 г. Обновления

Вычисленный размер каждого ядра был взят из /boot/*kernel_version*, который состоял из 5 файлов общим объемом ~ 50 МБ. Формула изменилась, чтобы включить файлы в /usr/src/*kernel_version* и /lib/modules/*kernel_version*. Расчетный размер для каждого ядра теперь составляет ~ 400 МБ. Вышеупомянутый код для rm-kernels и rm-kernels-server обновлен. Тем не менее, приведенные выше примеры не отражают эти изменения.

По умолчанию используется размер файлов для linux-заголовков на 125 МБ и linux-изображение при 220 МБ, поскольку du может быть болезненно медленно, если файлы не находятся в кеше. Чтобы получить реальный размер с помощью du, передайте любой параметр сценарию.

Общее количество всех размеров ядра (исключая текущую текущую версию, которая не может быть удалена) теперь отображается в строке заголовка.

Диалоговое окно, используемое для отображения каждой последней даты доступа к ядру. Эта дата может быть перезаписана для всех ядер во время резервного копирования или аналогичных операций. В диалоговом окне теперь отображается измененная дата.

1
ответ дан 5 August 2018 в 03:06

По сравнению с другими ответами GUI здесь преимущество этого ответа - это родной Ubuntu Bash, который используется без установки сторонних приложений.

Решение Zenity и Bash

Zenity предоставляет хороший интерфейс GUI для терминала для обработки списка и выбора элементов с помощью радиокнопки:

Текущее ядро, с которым вы загрузились, не может быть удалено и isn Включено в список. Сообщается, сколько будет сохранено в каталоге /boot. На вашем диске сохраняется больше, потому что двоичные файлы ядра также находятся в других областях. 27 июля 2017 г. примечание: теперь включены каталоги /usr/src/*kernel_version* и /lib/modules/*kernel_version*.

Измененная дата открыта с помощью команды stat. В моей системе эта дата «коснулась» каждый раз, когда ядро ​​загружается с помощью этого ( Как вы узнаете, когда последняя загрузка ядра была загружена последним? ) cron reboot script , Однако в вашей системе дата будет датой выпуска ядра, а не в последний раз, когда вы ее загрузили.

apt-get purge дает вам шанс прервать

. Вам предоставляется окончательная возможность для просмотра всего, что будет очищено, и увидеть общее пространство на диске (несколько вводящее в заблуждение), которое будет восстановлено:

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] 

Код

Скопируйте этот код в исполняемый файл с именем rm-kernels в /usr/local/bin:

#!/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

ПРИМЕЧАНИЕ: вам нужно sudo-разрешение для создания файла, поэтому используйте:

gksu gedit /usr/local/bin/rm-kernels

Чтобы сделать исполняемый файл:

sudo chmod +x /usr/local/bin/rm-kernels

ПРИМЕЧАНИЕ. Для версии этого сценария на сервере (на основе текста, а не GUI) см .: . Как удалить старые версии ядра для очистки меню загрузки?

< hr>

28 июля 2017 г. Обновления

Вычисленный размер каждого ядра был взят из /boot/*kernel_version*, который состоял из 5 файлов общим объемом ~ 50 МБ. Формула изменилась, чтобы включить файлы в /usr/src/*kernel_version* и /lib/modules/*kernel_version*. Расчетный размер для каждого ядра теперь составляет ~ 400 МБ. Вышеупомянутый код для rm-kernels и rm-kernels-server обновлен. Тем не менее, приведенные выше примеры не отражают эти изменения.

По умолчанию используется размер файлов для linux-заголовков на 125 МБ и linux-изображение при 220 МБ, поскольку du может быть болезненно медленно, если файлы не находятся в кеше. Чтобы получить реальный размер с помощью du, передайте любой параметр сценарию.

Общее количество всех размеров ядра (исключая текущую текущую версию, которая не может быть удалена) теперь отображается в строке заголовка.

Диалоговое окно, используемое для отображения каждой последней даты доступа к ядру. Эта дата может быть перезаписана для всех ядер во время резервного копирования или аналогичных операций. В диалоговом окне теперь отображается измененная дата.

1
ответ дан 6 August 2018 в 19:57

По сравнению с другими ответами GUI здесь преимущество этого ответа - это родной Ubuntu Bash, который используется без установки сторонних приложений.

Решение Zenity и Bash

Zenity предоставляет хороший интерфейс GUI для терминала для обработки списка и выбора элементов с помощью радиокнопки:

Текущее ядро, с которым вы загрузились, не может быть удалено и isn Включено в список. Сообщается, сколько будет сохранено в каталоге /boot. На вашем диске сохраняется больше, потому что двоичные файлы ядра также находятся в других областях. 27 июля 2017 г. примечание: теперь включены каталоги /usr/src/*kernel_version* и /lib/modules/*kernel_version*.

Измененная дата открыта с помощью команды stat. В моей системе эта дата «коснулась» каждый раз, когда ядро ​​загружается с помощью этого ( Как вы узнаете, когда последняя загрузка ядра была загружена последним? ) cron reboot script , Однако в вашей системе дата будет датой выпуска ядра, а не в последний раз, когда вы ее загрузили.

apt-get purge дает вам шанс прервать

. Вам предоставляется окончательная возможность для просмотра всего, что будет очищено, и увидеть общее пространство на диске (несколько вводящее в заблуждение), которое будет восстановлено:

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] 

Код

Скопируйте этот код в исполняемый файл с именем rm-kernels в /usr/local/bin:

#!/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

ПРИМЕЧАНИЕ: вам нужно sudo-разрешение для создания файла, поэтому используйте:

gksu gedit /usr/local/bin/rm-kernels

Чтобы сделать исполняемый файл:

sudo chmod +x /usr/local/bin/rm-kernels

ПРИМЕЧАНИЕ. Для версии этого сценария на сервере (на основе текста, а не GUI) см .: . Как удалить старые версии ядра для очистки меню загрузки?

< hr>

28 июля 2017 г. Обновления

Вычисленный размер каждого ядра был взят из /boot/*kernel_version*, который состоял из 5 файлов общим объемом ~ 50 МБ. Формула изменилась, чтобы включить файлы в /usr/src/*kernel_version* и /lib/modules/*kernel_version*. Расчетный размер для каждого ядра теперь составляет ~ 400 МБ. Вышеупомянутый код для rm-kernels и rm-kernels-server обновлен. Тем не менее, приведенные выше примеры не отражают эти изменения.

По умолчанию используется размер файлов для linux-заголовков на 125 МБ и linux-изображение при 220 МБ, поскольку du может быть болезненно медленно, если файлы не находятся в кеше. Чтобы получить реальный размер с помощью du, передайте любой параметр сценарию.

Общее количество всех размеров ядра (исключая текущую текущую версию, которая не может быть удалена) теперь отображается в строке заголовка.

Диалоговое окно, используемое для отображения каждой последней даты доступа к ядру. Эта дата может быть перезаписана для всех ядер во время резервного копирования или аналогичных операций. В диалоговом окне теперь отображается измененная дата.

1
ответ дан 9 August 2018 в 00:24

По сравнению с другими ответами GUI здесь преимущество этого ответа - это родной Ubuntu Bash, который используется без установки сторонних приложений.

Решение Zenity и Bash

Zenity предоставляет хороший интерфейс GUI для терминала для обработки списка и выбора элементов с помощью радиокнопки:

Текущее ядро, с которым вы загрузились, не может быть удалено и isn Включено в список. Сообщается, сколько будет сохранено в каталоге /boot. На вашем диске сохраняется больше, потому что двоичные файлы ядра также находятся в других областях. 27 июля 2017 г. примечание: теперь включены каталоги /usr/src/*kernel_version* и /lib/modules/*kernel_version*.

Измененная дата открыта с помощью команды stat. В моей системе эта дата «коснулась» каждый раз, когда ядро ​​загружается с помощью этого ( Как вы узнаете, когда последняя загрузка ядра была загружена последним? ) cron reboot script , Однако в вашей системе дата будет датой выпуска ядра, а не в последний раз, когда вы ее загрузили.

apt-get purge дает вам шанс прервать

. Вам предоставляется окончательная возможность для просмотра всего, что будет очищено, и увидеть общее пространство на диске (несколько вводящее в заблуждение), которое будет восстановлено:

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] 

Код

Скопируйте этот код в исполняемый файл с именем rm-kernels в /usr/local/bin:

#!/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

ПРИМЕЧАНИЕ: вам нужно sudo-разрешение для создания файла, поэтому используйте:

gksu gedit /usr/local/bin/rm-kernels

Чтобы сделать исполняемый файл:

sudo chmod +x /usr/local/bin/rm-kernels

ПРИМЕЧАНИЕ. Для версии этого сценария на сервере (на основе текста, а не GUI) см .: . Как удалить старые версии ядра для очистки меню загрузки?

< hr>

28 июля 2017 г. Обновления

Вычисленный размер каждого ядра был взят из /boot/*kernel_version*, который состоял из 5 файлов общим объемом ~ 50 МБ. Формула изменилась, чтобы включить файлы в /usr/src/*kernel_version* и /lib/modules/*kernel_version*. Расчетный размер для каждого ядра теперь составляет ~ 400 МБ. Вышеупомянутый код для rm-kernels и rm-kernels-server обновлен. Тем не менее, приведенные выше примеры не отражают эти изменения.

По умолчанию используется размер файлов для linux-заголовков на 125 МБ и linux-изображение при 220 МБ, поскольку du может быть болезненно медленно, если файлы не находятся в кеше. Чтобы получить реальный размер с помощью du, передайте любой параметр сценарию.

Общее количество всех размеров ядра (исключая текущую текущую версию, которая не может быть удалена) теперь отображается в строке заголовка.

Диалоговое окно, используемое для отображения каждой последней даты доступа к ядру. Эта дата может быть перезаписана для всех ядер во время резервного копирования или аналогичных операций. В диалоговом окне теперь отображается измененная дата.

1
ответ дан 14 August 2018 в 18:33

Другие вопросы по тегам:

Похожие вопросы: