- Sysadminium
- Пакетные менеджеры apt
- Обновление системы
- Обновление кэша пакетов
- Получаем список возможных обновлений
- Обновление системы (без возможности удаления пакетов)
- Обновление системы (с возможностью удаления пакетов)
- Получение информации о пакетах из репозиториев
- Список пакетов в репозиториях
- Поиск пакета по ключевому слову
- Смотрим информацию о пакете
- Поиск зависимостей
- Работа с отдельными пакетами
- Установка пакета
- Удаление пакета без удаления конфигов
- Удаление пакета вместе с конфигами
- Переустановка пакета
- Обновление отдельного приложения
- Скачивание пакета без установки
- Заморозка пакета
- Исправление проблем с пакетами
- Исправление ошибок с зависимостями
- Очистка системы от ненужных пакетов
- Удаление ненужных пакетов
- Очистка кэша
- Мягкая очистка кэша
- Посмотрим на корову 🙂
- Итог
- Как полностью удалить пакет с зависимостями в Linux, использующим пакетный менеджер apt.
Sysadminium
На этом уроке рассмотрим пакетные менеджеры apt и apt-get. Которые используются для работы с пакетами приложений в Linux.
Пакетные менеджеры apt
На этом уроке мы рассмотрим следующие пакетные менеджеры:
- apt-get — используется для установки, удаления, обновления пакетов;
- apt-cache — используется для получения информации о пакетах;
- apt-mark — используется для установок различных меток на пакеты. Например, можно, поставив метку, запретить пакету обновляться;
- apt — утилита основанная на apt-get и apt-cache. Она является более удобной и информативной. В процессе установки пакета, обновления системы или удаления пакета показывает «Прогресс бар». В некоторых случаях выводит больше информации.
Работа с пакетами это административное действие, поэтому вам придётся работать под пользователем root или использовать sudo. Я в примерах буду использовать sudo. Примеры одинаково выполняются и в Debian и в Ubuntu.
Все рассматриваемые команды имеют под-команды, и в зависимости от под-команды могут иметь различные опции. Например переустановка приложения:
$ sudo apt install --reinstall apache2
- apt — сам пакетный менеджер;
- install — под-команда установки пакета;
- —reinstall — опция переустановки;
- apache2 — имя пакета.
Обновление системы
Обновление кэша пакетов
В Debian и Ubuntu прежде чем обновлять систему, нужно выяснить, какие обновления доступны в репозиториях. Это так называемое обновление кэша пакетов. Выполняется оно с помощью команды apt-get update или apt update. Пример:
$ sudo apt-get update $ sudo apt update
При этом команда apt update дополнительно покажет количество пакетов, которые можно обновить и команду с помощью которой можно посмотреть список таких пакетов.
Получаем список возможных обновлений
Если есть пакеты, которые можно обновить, то мы можем посмотреть их с помощью команды apt list —upgradable, а опция -a выводит больше информации. С помощью apt-get это проделать невозможно.
$ sudo apt list --upgradable -a
Обновление системы (без возможности удаления пакетов)
Перед обновлением расскажу про зависимости пакетов. Работа некоторых приложений зависит от других приложений или библиотек. Поэтому почти каждый пакет имеет список зависимостей других пакетов. Обычно вручную с зависимостями не работают. Просто пакетные менеджеры (apt или apt-get) при установке определённого пакета также устанавливают пакеты от которых зависит этот пакет.
Точно также и при обновлении. Если приложение после обновления начало зависеть от других библиотек, то их тоже нужно установить или обновить.
Но бывает ситуация когда некоторые пакеты не совместимы. Например, чтобы обновить пакет требуется установить новые пакеты, но они несовместимы с теми, которые уже установлены. Тут есть два варианта, либо удалить установленные пакеты и выполнить обновление системы, либо не удалять пакеты и прервать обновление.
Без возможности удаления пакетов вы можете выполнить обновление с помощью команд apt-get upgrade и apt upgrade. Например:
$ sudo apt-get upgrade $ sudo apt upgrade
Обновление системы (с возможностью удаления пакетов)
Если вы все-таки хотите обновить пакеты и вас не пугает удаление некоторых пакетов, то выполните следующие команды: apt-get dist-upgrade или apt dist-upgrade. Но это более рискованно, так что обратите особое внимание на то, какие пакеты будут удалены. Ведь удаление некоторых пакетов может просто сломать вашу систему. Пример:
$ sudo apt-get dist-upgrade $ sudo apt dist-upgrade
Получение информации о пакетах из репозиториев
Список пакетов в репозиториях
Чтобы получить список пакетов в репозиториях можно выполнить apt list. Так как это не административное действие, то можно не использовать sudo. Например:
Кстати, утилита apt-get это выполнить не может.
Поиск пакета по ключевому слову
Если мы примерно знаем название приложения, которое нам нужно, то можем попытаться найти пакет используя ключевое слово. При этом поиск идет не только по названию пакетов, но и по его содержимому. Такой поиск выполняется с помощью команд apt-cache search или apt search .
Пример (так как вывод может быть большим, то я использую less):
$ apt-cache search apache | less $ apt search apache | less
Смотрим информацию о пакете
Зная имя пакета, можем посмотреть информацию о нём с помощью команд apt-cache show или apt show .
Пример (так как вывод может быть большим, то я использую less):
$ apt-cache show apache2 | less $ apt show apache2 | less
Поиск зависимостей
Зависимости можно посмотреть в информации о пакете с помощью уже рассмотренных команд apt-cache show или apt show . Но для этого есть ещё одна команда: apt-cache depends или apt depends . Например:
$ apt-cache depends apache2 $ apt depends apache2
Работа с отдельными пакетами
Установка пакета
Установить пакет из репозитория можно с помощью команд apt-get install или apt install . При этом установится пакет и его зависимости. Пример:
$ sudo apt-get install apache2 $ sudo apt install apache2
Удаление пакета без удаления конфигов
Чтобы удалить пакет обычно используют команды apt-get remove или apt remove . Но эти команды удалят только само приложение, не удалив его конфиги. Пример:
$ sudo apt-get remove apache2 $ sudo apt remove apache2
Удаление пакета вместе с конфигами
А чтобы удалить приложение вместе с его конфигами используйте команды apt-get purge или apt purge , например:
$ sudo apt-get purge apache2 $ sudo apt purge apache2
Переустановка пакета
Для переустановки используйте команды apt-get install —reinstall или apt install —reinstall .
$ sudo apt-get install --reinstall apache2 $ sudo apt install --reinstall apache2
Обновление отдельного приложения
Если нам нужно обновить не всю систему а отдельный пакет, то тут нужно использовать знакомую команду apt-get install или apt install . При этом, если пакета нет в системе то он установится, а если есть то обновится. Пример:
$ sudo apt-get install apache2 $ sudo apt install apache2
Скачивание пакета без установки
Если вам просто нужно скачать пакет, а не устанавливать его в систему, то используйте команду apt-get download или apt download . Например:
$ apt-get download apache2 $ apt download apache2
При этом зависимости скачиваться не будут.
Заморозка пакета
Если вы хотите чтобы система больше не обновляла какой-то отдельный пакет то выполните apt-mark hold , например:
$ sudo apt-mark hold apache2
К сожалению с помощью apt это проделать невозможно.
Исправление проблем с пакетами
Исправление ошибок с зависимостями
Если в процессе установки некоторого пакета или при обновлении всей системы вы столкнётесь с проблемой с зависимостями. То можете воспользоваться командами apt-get -f install или apt -f install. Эти команды пытаются решить проблемы с зависимостями путём удаления или установки новых пакетов.
$ sudo apt-get -f install $ sudo apt -f install
Только внимательно смотрите на список удаляемых пакетов!
Очистка системы от ненужных пакетов
Удаление ненужных пакетов
Когда мы устанавливаем пакет то устанавливаются и его зависимости. А при удалении пакета зависимости остаются и больше не используются. Чтобы удалить подобные пакеты, которые установились, но больше не нужны в системе применяются команды apt-get autoremove или apt autoremove. Например:
$ sudo apt-get autoremove $ sudo apt autoremove
Очистка кэша
При установке какого-нибудь пакета, он вначале скачивается в каталог /var/cache/apt/archives/, а затем устанавливается в систему. Эти установочные файлы тоже можно удалять, освобождая место на диске. Для этого используйте команды apt-get clean или apt clean, например
$ sudo apt-get clean $ sudo apt clean
Мягкая очистка кэша
Помимо clean есть более мягкая команда autoclean. Она удалит только те скаченные пакеты, у которых версия ниже чем в репозитории, остальные пакеты не удалятся:
$ sudo apt-get autoclean $ sudo apt autoclean
Посмотрим на корову 🙂
А еще с помощью apt-get и apt мы можем посмотреть на корову:
$ apt moo (__) (oo) /------\/ / | || * /\---/\ ~~ ~~ . "Have you mooed today?". $ apt-get moo (__) (oo) /------\/ / | || * /\---/\ ~~ ~~ . "Have you mooed today?".
Итог
Мы узнали множество команд с помощью которых можем устанавливать и удалять пакеты в систему, а также обновлять её. И проделывать другие вещи.
А также мы узнали что перед установкой deb пакеты скачиваются в каталог /var/cache/apt/archives/. И у пакетов есть зависимости, которые apt или apt-get определяет и автоматически устанавливает.
Как полностью удалить пакет с зависимостями в Linux, использующим пакетный менеджер apt.
При установке программ, при помощи пакетного менеджера apt, у многих часто возникаем вопрос как их удалять. Для этого есть команды:
sudo apt-get autoremove имя_программы
Команда удаляет пакет вместе с зависимости, которые для него устанавливались, и больше ему не нужны.
sudo apt-get remove имя_программы
Команда удаляет пакет не затрагивая зависимости.
sudo apt-get purge имя_программы
Команда удаляет конфигурационные файлы пакета.
Казалось бы, на этом все, но не тут-то было, apt-get autoremove не всегда удаляет всё что было установлено вместе с пакетом.
Что бы наверняка удалить все что было установлено вместе с пакетом, можно посмотреть лог apt:
cat /var/log/apt/history.log | more
Пример вывода этой команды:
Start-Date: 2016-08-03 07:46:19 Commandline: apt-get install samba Install: python-tdb:amd64 (1.3.8-2, automatic), python-samba:amd64 (2:4.3.9+dfsg -0ubuntu0.16.04.2, automatic), python-dnspython:amd64 (1.12.0-1, automatic), sam ba:amd64 (2:4.3.9+dfsg-0ubuntu0.16.04.2), samba-dsdb-modules:amd64 (2:4.3.9+dfsg -0ubuntu0.16.04.2, automatic), libaio1:amd64 (0.3.110-2, automatic), tdb-tools:a md64 (1.3.8-2, automatic), attr:amd64 (1:2.4.47-2, automatic), samba-common:amd6 4 (2:4.3.9+dfsg-0ubuntu0.16.04.2, automatic), samba-vfs-modules:amd64 (2:4.3.9+d fsg-0ubuntu0.16.04.2, automatic), samba-common-bin:amd64 (2:4.3.9+dfsg-0ubuntu0. 16.04.2, automatic), python-ldb:amd64 (2:1.1.24-1ubuntu3, automatic) End-Date: 2016-08-03 07:47:23
Здесь видно что при установке samba, так же были установлены python-tdb, python-samba и т.д. Соответственно для полного удаления установленного пакета можно набрать команду:
sudo apt-get autoremove --purge python-tdb python-samba python-dnspython samba samba-dsdb-modules libaio1 tdb-tools attr samba-common samba-vfs-modules samba-common-bin python-ldb
Для того что бы не искать и не выбирать эти программы из лога вручную можно спарсить лог:
sudo sed -n '/Commandline: apt-get install имя_пакета/,/End-Date:.*/p' /var/log/apt/history.log | sed -n '/Install.*/p' | sed -e s'/Install: //g' | sed -e s'/:amd64 //g' | sed -e s'/(.[^)]*),\//g' | tr '\n' ' '
Внимание: эти команды парсят весь лог, т.е. если несколько раз устанавливалась/удалялась программа, на экран выведутся все программы которые были установлены при каждой установке, не только при последней.
Что бы отображались программы только при последней установке нужно в конце строки заменить «tr ‘\n’ ‘ ‘» на «tail -1», т.е. команда должна быть:
sudo sed -n '/Commandline: apt-get install имя_пакета/,/End-Date:.*/p' /var/log/apt/history.log | sed -n '/Install.*/p' | sed -e s'/Install: //g' | sed -e s'/:amd64 //g' | sed -e s'/(.[^)]*),\//g' | tail -1
На экран выведутся программы, которые были установлены при установке пакета.
Что бы их удалить можно ввести:
sudo sed -n '/Commandline: apt-get install имя_пакета/,/End-Date:.*/p' /var/log/apt/history.log | sed -n '/Install.*/p' | sed -e s'/Install: //g' | sed -e s'/:amd64 //g' | sed -e s'/(.[^)]*),\//g' | tr '\n' ' ' | sudo xargs apt-get autoremove --purge -y
Все что устанавливалось при установке вашего пакета, будет удалено.