На этот вопрос уже есть ответ здесь:
] У меня мало места на диске, и я заметил, что у меня есть несколько ядер, которые я, вероятно, никогда не собираюсь использовать, занимая место. Была программа под названием компьютерный уборщик, которая убирала вещи (и многие вещи, которые вы не хотел убирать), но я не могу его найти. Есть ли предпочтительная альтернатива?
Большое спасибо!
У меня есть старый ответ на эту тему, который очень полезен: Как найти старые ядра
Он целенаправленно останавливается без удаления пакетов, потому что это большая ответственность для ] мои плечи. Сценарий удалит новые ядра, если вы не перезагрузили их с момента их установки. Он не будет держать тебя за руку.
Я написал быстрый вариант команды, который показывает все, кроме текущего ядра. Вы можете использовать это как основу для удаления, но что бы вы ни делали с этим, вам нужно убедиться, что вы не удаляете ядра, которые вы только что установили.
dpkg -l | grep -Eo "^.i +linux-(image|headers)[^ ]+" | cut -c 5- | grep -v `uname -r`
Во-первых, вам нужно увидеть, какое ядро вы используете в данный момент, потому что вы не должны его удалять. Yoy может видеть, что с помощью команды:
uname -r
Затем вы можете увидеть установленные ядра с помощью команды:
dpkg - список | grep linux-image
И вы можете удалить дополнительное ядро, используя apt-get следующим образом:
sudo apt-get purge linux-image-xxx-x- generic
Где xxx-x - ядро, которое вы хотите удалить. Помните, что вы не должны удалять тот, который используется в данный момент (вывод uname -r). Вам следует сохранить второе ядро в качестве резервной копии на случай, если первое произойдет сбой.
В качестве альтернативы можно привести «Дворник» Ubuntu Tweak, который может удалять неиспользуемые ядра.
Я написал функцию Bash для этой цели. Совместное использование является заботой, поэтому здесь мы используем функцию Bash, которую я успешно использовал в Debian 5 и 6, а также версии Ubuntu между 10.04 и 12.10. Со временем оно немного изменилось, но никогда не подводило меня. Он автоматизирует «процесс принятия решения».
NB: не стесняйтесь указывать на недостатки и предлагать улучшения, и я сделаю все возможное, чтобы их исправить.
function prune-kernels
{
[[ -f "/etc/debian_version" ]] || { echo -e "\033[01;32mERROR:\033[00m This has only been tested on Debian/Ubuntu."; return; }
[[ -e "/vmlinuz" ]] || { echo -e "\033[01;32mERROR:\033[00m Expected /vmlinuz to exist."; return; }
[[ "$UID" -eq "0" ]] || local SUDO=sudo
# Figure out the name of the newest and the previous kernel
local OLDKRNL=$(readlink -f /vmlinuz.old)
local NOWKRNL=$(readlink -f /vmlinuz)
# If vmlinuz doesn't exist, Also prune "/vmlinuz.old"?
[[ -e "/vmlinuz.old" ]] || OLDKRNL="$NOWKRNL"
# Also prune "/vmlinuz.old"? If so, pretend old and new have the same name to skip only the new one
[[ "$1" == "--old" ]] && local OLDKRNL="$NOWKRNL"
# Strip path
OLDKRNL="${OLDKRNL##*/vmlinuz-}"
NOWKRNL="${NOWKRNL##*/vmlinuz-}"
local VERSIONS=$(echo $(for krnl in /boot/vmlinuz-*; do echo "${krnl##*/vmlinuz-}"; done) $(for krnl in $(dpkg -l|command grep 'linux-image'|command grep '^ii'|command grep -v 'meta-package'|command grep 'linux-image-[[:digit:]]\.[[:digit:]]*\.[[:digit:]]'|awk '{print $2}'); do echo ${krnl##linux-image-}; done)|sort|uniq|sed -e "s:$NOWKRNL::g;s:$OLDKRNL::g;s:$(uname -r)::g")
echo -ne "\033[01;32mSkipping \033[01;33mthe following kernels:\033[00m $NOWKRNL"
[[ "$(uname -r)" == "$NOWKRNL" ]] || { echo -ne ", $(uname -r)"; }
echo -ne " (\033[0;32mcurrently running\033[00m)"
[[ "$OLDKRNL" == "$NOWKRNL" ]] || echo -ne ", $OLDKRNL (\033[0;33mold kernel\033[00m)"
echo ""
# Remove packages
local PACKAGES=$(for i in $VERSIONS; do echo -n "linux-image-$i linux-headers-$i "; done)
if [[ -n "$PACKAGES" ]]; then
echo -e "\033[0;32m[STEP 1] \033[01;33mRemoving packages\033[00m"
$SUDO apt-get remove $PACKAGES || { echo -e "\033[01;31mSeems that apt-get was not successful, aborting.\033[00m"; return; }
else
echo -e "\033[01;32mNo packages need to be removed.\033[00m"
fi
# Remove any remaining kernel images etc from /boot
local FILES=$(for fname in $(for i in $VERSIONS; do echo -n "/boot/abi-$i /boot/initrd.img-$i config-$i System.map-$i vmcoreinfo-$i vmlinuz-$i "; done); do [[ -f "$fname" ]] && { echo -n "$fname "; }; done)
if [[ -n "$FILES" ]]; then
echo -e "\033[0;32m[STEP 2] \033[01;33mNow removing remaining files:\033[00m $FILES"
$SUDO rm -f $FILES
else
echo -e "\033[01;32mNothing else to clean up.\033[00m"
fi
}
Поместите функцию в файл и отправьте ее из вашего .bashrc
или просто извлеките из специальной оболочки и запустите ее. Если вы не сделали что-то замысловатое в настройках apt-get
, это будет отображаться перед выполнением действий.
Функция также принимает параметр --old
для удаления всего, кроме работающего ядра. По умолчанию он пропускает работающее и старое (/vmlinuz.old
) ядра во время сокращения.
Также обратите внимание: эта функция прекрасно работает даже в тех случаях, когда работающее ядро старше текущей (ссылка /vmlinuz
) и старой (ссылка /vmlinuz.old
) ядра.
Раскрытие: почти 1: 1 копия из моего более раннего ответа здесь .