История изменений
Исправление megabaks, (текущая версия) :
пока родилось это
#!/bin/bash
SRC="/usr/src/linux"
KERNELS="$(file /boot/* | grep version)"
############################################################################
####### kernel path and real name ##########################################
kernel_version() {
makefile="${SRC}-${1}/Makefile"
if [ -f "${makefile}" ];then
VERSION="$(awk '/^VERSION =/ {print $3}' "${makefile}")"
PATCHLEVEL="$(awk '/^PATCHLEVEL =/ {print $3}' "${makefile}")"
SUBLEVEL="$(awk '/^SUBLEVEL =/ {print $3}' "${makefile}")"
EXTRAVERSION="$(awk '/^EXTRAVERSION =/ {print $3}' "${makefile}")"
FULL_KERNEL="${VERSION}.${PATCHLEVEL}.${SUBLEVEL}${EXTRAVERSION}"
fi
}
true_kernel() {
if [ -n "${1}" ];then
KERNEL="${1##*linux-}"
KERNEL="${KERNEL%/}"
fi
if [ -d "${SRC}-${KERNEL}" ];then
kernel_version ${KERNEL}
else
for kernel in `ls -d --color=never /usr/src/linux-*`;do
kernel="${kernel##*/linux-}"
kernel_version ${kernel}
if [ "${KERNEL}" == "${FULL_KERNEL}" ];then
kernel_version ${kernel}
KERNEL="${kernel}"
break
fi
done
fi
}
############################################################################
while read line;do
FILE="`awk '{print $1}' <<< "${line}"`"
FILE="${FILE%:}"
version="`awk '{print $9}' <<< "${line}"`"
true_kernel ${version}
[ -d "/lib/modules/${version}" ] || REMOVE_FILES+="${FILE}\n"
[ -d "${SRC}-${KERNEL}" ] || REMOVE_FILES+="${FILE}\n"
if [ -d "${SRC}-${KERNEL}" ];then
if ! [ -f "${SRC}-${KERNEL}/COPYING" ];then
REMOVE_DIRS+="${SRC}-${KERNEL}\n"
fi
fi
done <<< "${KERNELS}"
VERSIONS="$(awk '{print $9}' <<< "${KERNELS}")"
for mod_dir in `ls -1 --color=never /lib/modules/ | grep -v "${VERSIONS}"`;do
REMOVE_MOD_DIRS+="/lib/modules/${mod_dir}\n"
done
for src_dir in `ls -d1 --color=never ${SRC}*`;do
[ -f "${src_dir}/COPYING" ] || REMOVE_DIRS+="${src_dir}\n"
done
echo -e "\nБудут удалены следующие файлы:\n"
echo -e "${REMOVE_FILES}" | sort -u | sed '/^$/d'
echo -e "\nБудут удалены следующие диры:\n"
echo -e "${REMOVE_DIRS}" | sort -u | sed '/^$/d'
echo -e "${REMOVE_MOD_DIRS}" | sort -u | sed '/^$/d'
sh kernel-cleaner/kernel-cleaner
Будут удалены следующие файлы:
/boot/3.1.5-pf
/boot/3.1.5-pf1
/boot/3.1.6-pf
/boot/3.2.1-pf
/boot/3.2.1-r2-pf
/boot/3.2.4-pf
/boot/3.2.7-pf
/boot/3.3.2-pf
/boot/3.3.6-pf
/boot/3.4.3-pf
/boot/3.4.3-pf-uksm
/boot/3.4.5-pf-uksm
Будут удалены следующие диры:
/usr/src/linux-2.2.2-ololo
/usr/src/linux-3.3.6-pf
/lib/modules/3.2.1-ololo
/lib/modules/3.2.1-trololo
диры с модулями те, что не фигурируют в ядрах из /boot
+сорс-диры те, что не имеют файл COPYING, т.к. этот файл удаляется портажем как часть сорсов ядра, т.е. это диры от уже удалённых ядер с хламом от сборки
вроде всё...
потестите и напишите - правильно ли оно работает
Исходная версия megabaks, :
пока родилось это
#!/bin/bash
SRC="/usr/src/linux"
KERNELS="$(file /boot/* | grep version)"
############################################################################
####### kernel path and real name ##########################################
kernel_version() {
makefile="${SRC}-${1}/Makefile"
if [ -f "${makefile}" ];then
VERSION="$(awk '/^VERSION =/ {print $3}' "${makefile}")"
PATCHLEVEL="$(awk '/^PATCHLEVEL =/ {print $3}' "${makefile}")"
SUBLEVEL="$(awk '/^SUBLEVEL =/ {print $3}' "${makefile}")"
EXTRAVERSION="$(awk '/^EXTRAVERSION =/ {print $3}' "${makefile}")"
FULL_KERNEL="${VERSION}.${PATCHLEVEL}.${SUBLEVEL}${EXTRAVERSION}"
fi
}
true_kernel() {
if [ -n "${1}" ];then
KERNEL="${1##*linux-}"
KERNEL="${KERNEL%/}"
fi
if [ -d "${SRC}-${KERNEL}" ];then
kernel_version ${KERNEL}
else
for kernel in `ls -d --color=never /usr/src/linux-*`;do
kernel="${kernel##*/linux-}"
kernel_version ${kernel}
if [ "${KERNEL}" == "${FULL_KERNEL}" ];then
kernel_version ${kernel}
KERNEL="${kernel}"
break
fi
done
fi
}
############################################################################
while read line;do
FILE="`awk '{print $1}' <<< "${line}"`"
FILE="${FILE%:}"
version="`awk '{print $9}' <<< "${line}"`"
true_kernel ${version}
[ -d "/lib/modules/${version}" ] || REMOVE_FILES+="${FILE}\n"
[ -d "${SRC}-${KERNEL}" ] || REMOVE_FILES+="${FILE}\n"
if [ -d "${SRC}-${KERNEL}" ];then
if ! [ -f "${SRC}-${KERNEL}/COPYING" ];then
REMOVE_DIRS+="${SRC}-${KERNEL}\n"
fi
fi
done <<< "${KERNELS}"
VERSIONS="$(awk '{print $9}' <<< "${KERNELS}")"
for mod_dir in `ls -1 --color=never /lib/modules/ | grep -v "${VERSIONS}"`;do
REMOVE_MOD_DIRS+="/lib/modules/${mod_dir}\n"
done
for src_dir in `ls -d1 --color=never ${SRC}*`;do
[ -f "${src_dir}/COPYING" ] || REMOVE_DIRS+="${src_dir}\n"
done
echo -e "\nБудут удалены следующие файлы:\n"
echo -e "${REMOVE_FILES}" | sort -u | sed '/^$/d'
echo -e "\nБудут удалены следующие диры:\n"
echo -e "${REMOVE_DIRS}" | sort -u | sed '/^$/d'
echo -e "${REMOVE_MOD_DIRS}" | sort -u | sed '/^$/d'
sh kernel-cleaner/kernel-cleaner
Будут удалены следующие файлы:
/boot/3.1.5-pf
/boot/3.1.5-pf1
/boot/3.1.6-pf
/boot/3.2.1-pf
/boot/3.2.1-r2-pf
/boot/3.2.4-pf
/boot/3.2.7-pf
/boot/3.3.2-pf
/boot/3.3.6-pf
/boot/3.4.3-pf
/boot/3.4.3-pf-uksm
/boot/3.4.5-pf-uksm
Будут удалены следующие диры:
/usr/src/linux-2.2.2-ololo
/usr/src/linux-3.3.6-pf
/lib/modules/3.2.1-ololo
/lib/modules/3.2.1-trololo
диры с модулями те, что не фигурируют в ядрах из /boot
+сорс-диры те, что не имеют файл COPYING, т.к. этот файл удаляется портажем как часть сорсов ядра, т.е. это диры от уже удалённых ядер с хламом от сборки
вроде всё...
потестите и напишите - правильно ли оно работает