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