Каким бы инструментом в обычной практике мы не пользовались для установки, обновления и удаления пакетов в системах Linux с пакетным менеджментом, всегда есть интересные опции у команд и малоизвестные команды, которые помогут в необычных ситуациях. В статье рассматриваются linux системы, использующие формат пакетов deb и соответствующий инструментарий по работе с ним.
Ваша система, как живой организм, со временем обрастает новыми установлеными программами, часть которых потом вы удалите или поставите новые пакеты, замещающие по своему функционалу старые. Если с выходом каждого релиза, вы сносите установленную систему и ставите новую с нуля, то ниже советы вам мало помогут. А вот если вы просто штатно переходите с релиза на релиз методом обновления, то скинуть накопленный груз вам помогут следующие команды:
Выводим удалённые пакеты, с сортировкой по убыванию размера, о которых остались запись в базе данных dpkg.
LANG=C dpkg-query --show --showformat='${Package;-50}\t${Installed-Size} ${Status}\n' | sort -r -k 2 -n |grep deinstall
Выполните команду:
sudo apt-get --simulate purge `LANG=C dpkg-query --show --showformat='${Package;-50}\t${Installed-Size} ${Status}\n' | grep -F deinstall | sort -r -k 2 -n | cut -f 1`
и вам покажут, какие пакеты из команды dpkg-query --show будут вычищены вместе с ошмётками конфигурационных файлов и будет удалено любое упоминание в базе данных dpkg. Параметр --simulate, как говорит его название, симулирует, но не выполняет в реале действие. Подумайте хорошенько, сверьте выводы команд и, на свой страх и риск, уберите --simulate, чтобы purge реально вычистил вашу систему от удалённых пакетов, как бы глупо это не звучало.
Во многих дистрибутивах Linux есть механизм установки нового ядра linux. В Debian и Ubuntu используется метапакет linux-image-generic, который всегда указывает на новые ядра в репозитории, и метапакет linux-headers-generic, который указывает на заголовочные файлы последнего ядра. Опять таки, со временем, ядер становится больше и больше ставится заголовочных файлов, которые больше всех пожирают дисковое пространство.
Есть команда, которая одним махом семерых побивахом, то есть удалит пакеты, с лишними ядрами и заголовочными файлами, кроме текущего. Команда опасна по своей природе и поэтому страхуйтесь всегда.
Сначала обновите систему и перезагрузитесь. Командой uname -r
подверьтесь с версией текущего ядра.
Выполните dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1
И сами убедитесь, что в выводе нет вашего ядра. А теперь команда sudo apt-get --simulate purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1)
Все ваши неиспользуемые ядра удалились бы, но параметр --simulate лишь имитирует действие. Включаем мозг и удаляем его, на свой страх и риск.
Все используемые репозитория в системе
sudo grep -RvE "(^#|^$)" /etc/apt/sources.list /etc/apt/sources.list.d/*.list
Вывести репозитория, у которых есть упоминание не про наш релиз.
sudo grep -RvE "(^#|^$)" /etc/apt/sources.list /etc/apt/sources.list.d/*.list | grep -v `lsb_release -sc`
Идеального решения нет, так как сторонние репозитория могут не заморачиваться и для многих систем, основанных на работе apt, сделать репозиторий в стиле
deb http://dl.google.com/linux/chrome/deb/ stable main
Но вышестоящая команда поможет показать такие НЕ-ВАШЕГО-РЕЛИЗА репозитория и вы уже сами решите: всё правильно или вы забыли изменить запись.
Если к вашим репозиториям не достаёт соответствующих криптографических ключей, которыми проверяется подпись сопровождающих пакетов, то есть однострочник, который добавит все недостающие ключи.
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com `sudo apt-get update 2>&1 | grep -o '[0-9A-Z]\{16\}$' | xargs`
"Ну и запросы у вас..." - сказала база данных и повисла.
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -rn | head -n 25
apt-cache search ^php5$
apt-cache search php5
dpkg -l | grep -i firefox
Одна из часто совершаемых ошибок, состоит в том, что человек удаляет какие-либо конфигурационные файлы в каталоге /etc/ и потом у него возникают проблемы при удалении или обновлении пакета. Можно попробовать форсированно переставить пакет с установкой конфигурационных файлов из пакета: sudo apt-get -o DPkg::options::=--force-confmiss --reinstall install ПАКЕТ_ПРОГРАММЫ
Есть команды, которые помогают при проблемах с пакетами. Ситуация обычна такова: вам не дают ни поставить, ни удалить. Столкнуть ситуацию с мёртвой точки помогут:
sudo dpkg --configure -a
sudo apt-get -f install
sudo apt-get upgrade -f
sudo apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
Дополнительные материалы:
Репозитории Ubuntu.
Установка программ в Ubuntu.
Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта
1С под Linux. Ускорение Ubuntu. 21 пример iptables. Цикл статей о Ceph. Убунту в дикой среде. Ubuntu Linux на SSD. Ubuntu для блондинок. Поддержка железа в Linux. BTSync на службе у админа. Андроид программы в Ubuntu. Прокидывание портов для p2p. Анти СПАМ в Postfix. спортивные лагеря