Как известно, при удалении программы штатными средствами с помощью менеджеров управления пакетами, таких как apt-get, aptitude или synaptic, конфигурационные файлы по умолчанию не удаляются. Можно принудительно заставить удалить все файлы настроек, выбрав соответствующие команды при удалении пакетов, но это сопровождается рядом неудобств. Во-первых, надо вручную указывать все пакеты, для которых необходимо удалить файлы конфигурации. Во-вторых, так можно делать только с установленными пакетами, то есть, если программа была раньше установлена, а в последствии удалена, то для удаления ее конфигурационных файлов ее надо поставить заново. Неудобно, правда?
Но нет проблем, которые невозможно решить!
Стереть файлы настроек удаленных программ нам поможет aptitude. Поэтому, если его нет, придется его установить:
Так же потребуются grep и gawk, которые скорее всего уже установлены в системе.
Итак, приступим. Тем, кто не хочет читать весь очищения системы от лишних файлов конфигурации предлагается прокрутить в самый конец статьи, где приведена полученная команда.
Для тех, кто решил разобраться в процессе, расскажу поподробнее.
Сначала мы получим список удаленных программ, для которых остались файлы конфигурации. Делается это очень просто — получаем список всех пакетов, и выбираем нужные. В debian-based дистрибутивах список пакетов можно получить командой
Нужные нам пакеты помечаются в этом списке символами "rc" в начале строки. Символ "r" значит что пакет удален, а "c" — что конфигурационные файлы пакета все еще установлены. Поэтому для отделения мух от котлет воспользуемся программой grep:
Здесь символ "^" обозначает начало строки.
Если число таких пакетов очень велико, то можно добавить в конвеер команд more или less (по вкусу). Например так:
Подсчитать число пакетов, для которых сохранены конфигурационные файл можно с добавив команду wc с ключем -l, который заставляет считать строки:
Теперь подумаем что мы можем сделать с плученным списком. Aptitude при работе из командной строки может стирать конфигурационные файлы даже уже удаленных программ. Делается это следующим образом:
Таким образом, нам надо извлечь из полученного списка удаленных пакетов их названия и записать в одну строку, разделяя пробелами, что бы можно было подставить в командную строку. Для этого напишем небольшую программу на gawk:
Думаю тут необходимо дать небольшие комментарии. Все тело этой небольшой программы заключено в одинарные кавычки. Ключевое слово BEGIN указывается что за ним идет блок, который будет выполнен лишь один раз, в самом начале выполнения. В нем мы указываем, что в качестве разделителя строки будем использовать пробел (FS = " "). После этого идет блок, который будет выполняться для каждой строки, поступающей на вход программе. В нем мы берем строковую переменную str и прибавляем второе слово каждой входной строки (а это у нас имя пакета), разделяя их пробелом. Наконец, команды, следующие за ключевым словом END, будут выполнены лишь один раз, в самом конце программы. В нем мы лишь выводим на экран полученную строку. Что бы посмотреть что у нас получилось, выполним следующую команду:
В результате у нас на экране должны появится имена всех пакетов, которые нам надо удалить.
Если же для некоторых программ обязательно сохранить файлы конфигурации, то можно поступить следующим образом. Сначала выводим список пакетов в файл, например:
Затем, используя любимый текстовый редактор, удаляем строки с именами пакетов, для которых мы хотим сохранить настройки. Послу этого выводим полученных список на вход нашей программе:
Дальнейшие рассуждения я буду проводить считая что у нас нет исключений, поэтому те, кто хочет сохранить настройки для некоторых программ, должны быть аккуратнее.
Подадим полученный список на вход aptitude для этого воспользуемся специальными кавычками — "`". Результат выполнения команды, описанной в этих кавычках будет подставлен вместо нее. То есть необходимо сделать так:
Что бы aptitude не просил подтверждения для удаления настроек укажем ключ -y. Для того что бы отключить вывод на экран какой-либо информации, добавим в конец команды перенаправление — «1>/dev/null 2>&1».
Таким образом, у нас получилось следующее:
В заключение скажу, что после удаления таким образом конфигурационных файлов от 22 стертых ранее пакетов, свободное место увеличилось на 2 Мб.
Но нет проблем, которые невозможно решить!
Необходимые программы
Стереть файлы настроек удаленных программ нам поможет aptitude. Поэтому, если его нет, придется его установить:
# apt-get install aptitude
Так же потребуются grep и gawk, которые скорее всего уже установлены в системе.
Получение списка удаленных программ
Итак, приступим. Тем, кто не хочет читать весь очищения системы от лишних файлов конфигурации предлагается прокрутить в самый конец статьи, где приведена полученная команда.
Для тех, кто решил разобраться в процессе, расскажу поподробнее.
Сначала мы получим список удаленных программ, для которых остались файлы конфигурации. Делается это очень просто — получаем список всех пакетов, и выбираем нужные. В debian-based дистрибутивах список пакетов можно получить командой
$ dpkg -l
Нужные нам пакеты помечаются в этом списке символами "rc" в начале строки. Символ "r" значит что пакет удален, а "c" — что конфигурационные файлы пакета все еще установлены. Поэтому для отделения мух от котлет воспользуемся программой grep:
$ dpkg -l | grep ^rc
Здесь символ "^" обозначает начало строки.
Если число таких пакетов очень велико, то можно добавить в конвеер команд more или less (по вкусу). Например так:
$ dpkg -l | grep ^rc | less
Подсчитать число пакетов, для которых сохранены конфигурационные файл можно с добавив команду wc с ключем -l, который заставляет считать строки:
$ dpkg -l | grep ^rc | wc -l
Удаление ненужных конфигов
Теперь подумаем что мы можем сделать с плученным списком. Aptitude при работе из командной строки может стирать конфигурационные файлы даже уже удаленных программ. Делается это следующим образом:
# aptitude purge имя_пакета
Таким образом, нам надо извлечь из полученного списка удаленных пакетов их названия и записать в одну строку, разделяя пробелами, что бы можно было подставить в командную строку. Для этого напишем небольшую программу на gawk:
BEGIN {FS = " "} {str = str " " $2} END {print str}
Думаю тут необходимо дать небольшие комментарии. Все тело этой небольшой программы заключено в одинарные кавычки. Ключевое слово BEGIN указывается что за ним идет блок, который будет выполнен лишь один раз, в самом начале выполнения. В нем мы указываем, что в качестве разделителя строки будем использовать пробел (FS = " "). После этого идет блок, который будет выполняться для каждой строки, поступающей на вход программе. В нем мы берем строковую переменную str и прибавляем второе слово каждой входной строки (а это у нас имя пакета), разделяя их пробелом. Наконец, команды, следующие за ключевым словом END, будут выполнены лишь один раз, в самом конце программы. В нем мы лишь выводим на экран полученную строку. Что бы посмотреть что у нас получилось, выполним следующую команду:
$ dpkg -l | grep ^rc | gawk 'BEGIN {FS = " "} {str = str " " $2} END {print str}'
В результате у нас на экране должны появится имена всех пакетов, которые нам надо удалить.
Если же для некоторых программ обязательно сохранить файлы конфигурации, то можно поступить следующим образом. Сначала выводим список пакетов в файл, например:
$ dpkg -l | grep ^rc > /tmp/packets_list
Затем, используя любимый текстовый редактор, удаляем строки с именами пакетов, для которых мы хотим сохранить настройки. Послу этого выводим полученных список на вход нашей программе:
$ cat /tmp/packets_list | gawk 'BEGIN {FS = " "} {str = str " " $2} END {print str}'
Дальнейшие рассуждения я буду проводить считая что у нас нет исключений, поэтому те, кто хочет сохранить настройки для некоторых программ, должны быть аккуратнее.
Подадим полученный список на вход aptitude для этого воспользуемся специальными кавычками — "`". Результат выполнения команды, описанной в этих кавычках будет подставлен вместо нее. То есть необходимо сделать так:
# aptitude purge `dpkg -l | grep ^rc | gawk 'BEGIN {FS = " "} {str = str " " $2} END {print str}'`
Что бы aptitude не просил подтверждения для удаления настроек укажем ключ -y. Для того что бы отключить вывод на экран какой-либо информации, добавим в конец команды перенаправление — «1>/dev/null 2>&1».
Таким образом, у нас получилось следующее:
# aptitude -y purge `dpkg -l | grep ^rc | gawk 'BEGIN {FS = " "} {str = str " " $2} END {print str}'` 1>/dev/null 2>&1
Краткие выводы
В заключение скажу, что после удаления таким образом конфигурационных файлов от 22 стертых ранее пакетов, свободное место увеличилось на 2 Мб.