dev/bash/delunpack/delunpack.sh

80 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
# Очистка системы от ненужных пакетов.
# Список нужных пакетов должен быть представлен в файле exclude_hand.lst
# !!! Файл exclude_base.lst можно получить во время базовой установки, используя mkbaselist.sh !!!
exclbase=exclude_base.lst
exclhand=exclude_hand.lst
if [ `whoami` != "root" ]; then
echo "Внимание! Для запуска программы требуются права root."
echo "Используйте \$su -c './`basename $0`'"
echo "Или \$sudo `basename $0`"
echo "После чего введите пароль администратора"
exit 1
fi
debout=margin_out.lst
debout2=margin_out2.lst
tmpfile=tmp-delunpack.sh-`date +%s`
touch $debout2
while true ; do
# Получаем список всех ненужных файлов в $debout
./margin.sh >$tmpfile
{
while true ; do
read a
#a=${a#[^ ]*\ }
if [ "$a" == "" ]; then break ; fi
grep -E "\<$a\>" $exclbase &>/dev/null || grep -E "\<$a\>" $exclhand &>/dev/null
if [[ $? == 0 ]]; then continue; fi
echo $a
done
} <$tmpfile >$debout
rm -f $tmpfile
# Проверяем - остались ли ненужные пакеты
# read a <$debout
# if [ "$a" == "" ]; then break ; fi # выходим, если больше удалять нечего
cmp $debout $debout2 &>/dev/null
if [[ $? == 0 ]]; then break; fi # выходим, если больше удалять нечего
cp $debout $debout2
# Удаляем все пакеты, представленные в $debout
keep=`cat exclude_base.lst; cat exclude_hand.lst`
{
while true ; do
read a
if [ "$a" == "" ]; then break; fi
# Проверяем - не найден ли пакет, удаляемый по зависимостям
# в списках пакетах, нужных пользователю
contin=false
for a in `apt-get -s -y remove --purge $a|grep Remv|cut -d ' ' -f2`; do
if [[ `echo $keep|grep -E "\<$a\>"` ]]; then contin=true; fi
done
if [[ $contin == true ]]; then echo "Пакет, удаляемый по зависимостям...contcontcont" ; continue; fi
echo ">>> Удаляем пакет $a <<<"
apt-get -y remove --purge $a
if [ $? != 0 ]; then
echo "Невозможно удалить пакет."
exit 1
fi
done
} <$debout
done
rm -f $debout
rm -f $debout2
echo "Удаление пакетов завершено."
echo "Список оставшихся пакетов можно посмотреть, выполнив команду \$./margin.sh"
exit 0