Пакетные менеджеры apt и apt-get

На этом уроке рассмотрим пакетные менеджеры 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 list




Кстати, утилита 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 определяет и автоматически устанавливает.


















2022-05-25T14:03:59
Администрирование Linux