Поиск по сайту:

Основы управления пакетами Ubuntu и Debian


Введение

Управление пакетами — одна из основных функций системы Linux. Формат упаковки и инструменты управления пакетами различаются от дистрибутива к дистрибутиву, но в большинстве дистрибутивов используется один из двух основных наборов инструментов.

Для дистрибутивов на основе Red Hat Enterprise Linux (таких как сам RHEL и Rocky Linux) формат упаковки RPM и инструменты упаковки, такие как rpm и yum, являются общими. Другое основное семейство, используемое Debian, Ubuntu и родственными дистрибутивами, использует формат упаковки .deb и такие инструменты, как apt и dpkg.

В последние годы появилось больше вспомогательных менеджеров пакетов, предназначенных для работы параллельно с основными инструментами apt и dpkg: например, Homebrew, перенесенный из macOS, предоставляет команды- линейные инструменты, которые могут быть установлены отдельными пользователями, чтобы избежать конфликта с системными пакетами.

В этом руководстве вы познакомитесь с некоторыми из наиболее распространенных инструментов управления пакетами, которые системные администраторы используют в системах Debian и Ubuntu. Это можно использовать в качестве краткого справочника, когда вам нужно знать, как выполнить задачу управления пакетами в этих системах.

Предпосылки

  • Сервер Ubuntu 20.04 или Debian и пользователь без полномочий root с привилегиями sudo. Вы можете узнать больше о том, как настроить пользователя с этими привилегиями, в нашем руководстве Initial Server Setup with Ubuntu 20.04.

Шаг 1 – Обзор инструментов управления пакетами Debian

Экосистема Debian/Ubuntu использует довольно много различных инструментов управления пакетами для управления программным обеспечением в системе.

Большинство этих инструментов взаимосвязаны и работают с одними и теми же базами данных пакетов. Некоторые из этих инструментов пытаются обеспечить интерфейсы высокого уровня для системы упаковки, в то время как другие утилиты концентрируются на обеспечении низкоуровневой функциональности.

подходящий

Команда apt, вероятно, является наиболее часто используемым членом набора инструментов apt для создания пакетов. Его основная цель — взаимодействие с удаленными репозиториями, поддерживаемыми командой упаковки дистрибутива, и выполнение действий с доступными пакетами.

Набор apt в целом работает, извлекая информацию из удаленных репозиториев в кэш, поддерживаемый в локальной системе. Команда apt используется для обновления локального кеша. Он также используется для изменения состояния пакета, то есть для установки или удаления пакета из системы.

Как правило, apt будет использоваться для обновления локального кеша и внесения изменений в работающую систему.

Примечание. В более ранних версиях Ubuntu основная команда apt была известна как apt-get. Его упростили, но вы по-прежнему можете вызывать его с помощью apt-get по привычке или для обратной совместимости.

apt-кэш

Еще одним важным членом набора apt является apt-cache. Эта утилита использует локальный кэш для запроса информации о доступных пакетах и их свойствах.

Например, каждый раз, когда вы хотите найти определенный пакет или инструмент, который будет выполнять определенную функцию, apt-cache — хорошее место для начала. Это также может быть информативно о том, какая именно версия пакета будет предназначена для процедуры. Информация о зависимостях и обратных зависимостях — это еще одна область, где полезен apt-cache.

дпкг

В то время как предыдущие инструменты были сосредоточены на управлении пакетами, хранящимися в репозиториях, команду dpkg можно также использовать для работы с отдельными пакетами .deb. Инструмент dpkg на самом деле отвечает за большую часть скрытой работы приведенных выше команд; apt обеспечивает дополнительную поддержку, в то время как dpkg взаимодействует с самими пакетами.

В отличие от команд apt, dpkg не может автоматически разрешать зависимости. Его главная особенность — возможность работать с пакетами .deb напрямую, а также его способность анализировать пакет и узнавать больше о его структуре. Хотя он может собирать некоторую информацию об установленных в системе пакетах, его не следует использовать в качестве основного диспетчера пакетов. На следующем шаге вы узнаете о передовых методах обновления пакетов.

Шаг 2 — Обновление кэша пакетов и системы

Инструменты управления пакетами Debian и Ubuntu помогают поддерживать список доступных пакетов вашей системы в актуальном состоянии. Они также предоставляют различные методы обновления пакетов, установленных на вашем сервере.

Обновление локального кэша пакетов

Удаленные репозитории, которые ваши инструменты упаковки используют для получения информации о пакетах, постоянно обновляются. Однако по историческим причинам большинство инструментов управления пакетами Linux предназначены для работы непосредственно с локальным кешем этой информации. Этот кеш необходимо периодически обновлять.

Обычно рекомендуется обновлять локальный кеш пакетов перед выполнением других команд пакета. Это гарантирует, что вы работаете с самой последней информацией о доступном программном обеспечении. Некоторые команды установки завершатся ошибкой, если вы работаете с устаревшей информацией о пакете.

Чтобы обновить локальный кеш, используйте команду apt с подкомандой update:

  1. sudo apt update

Это откроет обновленный список доступных пакетов в репозиториях, которые вы отслеживаете.

Обновление пакетов

Команда apt различает две разные процедуры обновления. Первая процедура обновления (описанная в этом разделе) может использоваться для обновления любых компонентов, не требующих удаления компонентов. Чтобы узнать, как обновить и разрешить apt удалять и менять местами компоненты по мере необходимости, см. раздел ниже.

Это может быть очень важно, если вы ни при каких обстоятельствах не хотите удалять какой-либо из установленных пакетов. Однако некоторые обновления включают замену системных компонентов или удаление конфликтующих файлов. Эта процедура игнорирует любые обновления, требующие удаления пакета:

  1. sudo apt upgrade

Вторая процедура обновит все пакеты, даже те, которые требуют удаления пакетов. Это часто необходимо, так как зависимости для пакетов меняются.

Обычно удаляемые пакеты заменяются функциональными эквивалентами во время процедуры обновления, поэтому в целом это безопасно. Тем не менее, рекомендуется следить за удаляемыми пакетами на случай, если некоторые важные компоненты помечены для удаления. Чтобы выполнить это действие, введите:

  1. sudo apt full-upgrade

Это обновит все пакеты в вашей системе. На следующем шаге вы узнаете о загрузке и установке новых пакетов.

Шаг 3 – Загрузка и установка пакетов

Поиск пакетов

Первым шагом при загрузке и установке пакетов часто является поиск в репозиториях вашего дистрибутива пакетов, которые вы ищете.

Поиск пакетов — это одна операция, которая нацелена на кэш пакетов для получения информации. Для этого используйте apt-cache search. Имейте в виду, что вы должны убедиться, что ваш локальный кеш обновлен с помощью sudo apt update перед поиском пакетов:

  1. apt-cache search package

Поскольку эта процедура только запрашивает информацию, она не требует привилегий sudo. Любой выполненный поиск будет рассматривать имена пакетов, а также полные описания пакетов.

Например, если вы ищете htop, вы увидите такие результаты:

  1. apt-cache search htop
Output
aha - ANSI color to HTML converter htop - interactive processes viewer libauthen-oath-perl - Perl module for OATH One Time Passwords

Как видите, у вас есть пакет с именем htop, но вы также можете увидеть две другие программы, каждая из которых упоминает htop в поле полного описания пакета (т. описание рядом с выводом является лишь кратким описанием).

Установите пакет из репозиториев

Чтобы установить пакет из репозиториев, а также все необходимые зависимости, вы можете использовать команду apt с аргументом install.

Аргументами для этой команды должны быть имя пакета или имена, как они помечены в репозитории:

  1. sudo apt install package

Вы можете установить сразу несколько пакетов, разделив их пробелом:

  1. sudo apt install package1 package2

Если запрошенный вами пакет требует дополнительных зависимостей, они будут напечатаны в стандартный вывод, и вас попросят подтвердить процедуру. Это будет выглядеть примерно так:

  1. sudo apt install apache2
Output
Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: apache2-data Suggested packages: apache2-doc apache2-suexec-pristine apache2-suexec-custom apache2-utils The following NEW packages will be installed: apache2 apache2-data 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 236 kB of archives. After this operation, 1,163 kB of additional disk space will be used. Do you want to continue [Y/n]?

Как видите, несмотря на то, что нашей целью установки был пакет apache2, пакет apache2-data необходим в качестве зависимости. В этом случае вы можете продолжить, нажав Enter или \Y, или отменить, набрав \n.

Установите определенную версию пакета из репозиториев

Если вам нужно установить определенную версию пакета, вы можете указать нужную версию с помощью =, например:

sudo apt install package=version

Версия в этом случае должна соответствовать одному из номеров версий пакета, доступных в репозитории. Это означает использование схемы управления версиями, применяемой в вашем дистрибутиве. Доступные версии можно найти с помощью apt-cache policy package:

  1. apt-cache policy nginx
Output
nginx: Installed: (none) Candidate: 1.18.0-0ubuntu1.2 Version table: 1.18.0-0ubuntu1.2 500 500 http://mirrors.linux-console.net/ubuntu focal-updates/main amd64 Packages 500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages 1.17.10-0ubuntu1 500 500 http://mirrors.linux-console.net/ubuntu focal/main amd64 Packages

Перенастроить пакеты

Многие пакеты содержат сценарии настройки после установки, которые автоматически запускаются после завершения установки. Они часто содержат подсказки администратору для выбора конфигурации.

Если вам нужно выполнить эти (и дополнительные) действия по настройке позже, вы можете использовать команду dpkg-reconfigure. Эта команда просматривает переданный ей пакет и повторно запускает все команды после настройки, включенные в спецификацию пакета:

  1. sudo dpkg-reconfigure package

Это позволит вам получить доступ к тем же (а часто и к другим) подсказкам, которые вы запускали при установке.

Выполните пробный запуск действий пакета

Много раз вам захочется увидеть побочные эффекты процедуры, прежде чем фактически выполнять команду. apt позволяет вам добавить флаг -s для «симуляции» процедуры.

Например, чтобы увидеть, что будет сделано, если вы решите установить пакет, вы можете ввести:

  1. apt install -s package

Это позволит вам увидеть все зависимости и изменения в вашей системе, которые произойдут, если вы удалите флаг -s. Одним из преимуществ этого является то, что вы можете видеть результаты процесса, который обычно требует привилегий root, без использования sudo.

Например, если вы хотите оценить, что будет установлено с пакетом apache2, вы можете ввести:

  1. apt install -s apache2
Output
NOTE: This is only a simulation! apt needs root privileges for real execution. Keep also in mind that locking is deactivated, so don't depend on the relevance to the real current situation! Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: apache2-data Suggested packages: apache2-doc apache2-suexec-pristine apache2-suexec-custom apache2-utils The following NEW packages will be installed: apache2 apache2-data 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all]) Inst apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64]) Conf apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all]) Conf apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64])

Вы получаете всю информацию о пакетах и версиях, которые будут установлены, без необходимости завершения фактического процесса.

Это также работает с другими процедурами, такими как обновление системы:

  1. apt -s dist-upgrade

По умолчанию apt запрашивает у пользователя подтверждение для многих процессов. Сюда входят установки, требующие дополнительных зависимостей, и обновления пакетов.

Чтобы обойти эти обновления и по умолчанию принять любое из этих приглашений, вы можете передать флаг -y при выполнении этих операций:

  1. sudo apt install -y package

Это установит пакет и любые зависимости без дополнительных запросов от пользователя. Это также можно использовать для процедур обновления:

  1. sudo apt dist-upgrade -y

Исправление сломанных зависимостей и пакетов

Бывают случаи, когда установка может завершиться неудачно из-за зависимостей или других проблем. Один из распространенных сценариев, когда это может произойти, — это установка пакета .deb с помощью dpkg, который не разрешает зависимости.

Команда apt может попытаться разобраться в этой ситуации, передав ей команду -f.

  1. sudo apt install -f

Это выполнит поиск любых неудовлетворенных зависимостей и попытается установить их, чтобы исправить дерево зависимостей. Если ваша установка жаловалась на проблему с зависимостями, это должен быть ваш первый шаг в попытке решить ее. Если вы не можете решить проблему таким образом, и вы установили сторонний пакет, вам следует удалить его и найти более новую версию, которая более активно поддерживается.

Скачать пакет из репозиториев

Есть основные случаи, когда может быть полезно загрузить пакет из репозиториев без его фактической установки. Вы можете сделать это, запустив apt с аргументом download.

Поскольку это только загрузка файла и не влияет на фактическую систему, привилегии sudo не требуются:

  1. apt download package

Это загрузит указанные пакеты в текущий каталог.

Установите пакет .deb

Хотя большинство дистрибутивов рекомендуют устанавливать программное обеспечение из поддерживаемых ими репозиториев, некоторые поставщики предоставляют необработанные файлы .deb, которые вы можете установить в своей системе.

Для этого вы используете dpkg. dpkg в основном используется для работы с отдельными пакетами. Он не пытается выполнить установку из репозитория, а вместо этого ищет пакеты .deb в текущем каталоге или по указанному пути:

  1. sudo dpkg --install debfile.deb

Важно отметить, что инструмент dpkg не реализует никакой обработки зависимостей. Это означает, что если есть какие-либо неудовлетворенные зависимости, установка завершится ошибкой. Однако он помечает необходимые зависимости, поэтому, если все зависимости доступны в репозиториях, вы можете удовлетворить их, набрав после этого:

  1. sudo apt install -f

Это установит все неудовлетворенные зависимости, в том числе помеченные dpkg. На следующем шаге вы узнаете об удалении некоторых установленных вами пакетов.

Шаг 4 – Удаление пакетов и удаление файлов

В этом разделе обсуждается, как удалять пакеты и очищать файлы, которые могут остаться после операций с пакетами.

Удалить пакет

Чтобы удалить установленный пакет, используйте apt remove. Это удалит большинство файлов, которые пакет установил в систему, за одним заметным исключением.

Эта команда оставляет файлы конфигурации на месте, чтобы ваша конфигурация оставалась доступной, если вам потребуется переустановить приложение позднее. Это полезно, потому что означает, что любые настроенные вами файлы конфигурации не будут удалены, если вы случайно избавитесь от пакета.

Чтобы выполнить эту операцию, вам необходимо указать имя пакета, который вы хотите удалить:

  1. sudo apt remove package

Пакет будет удален, за исключением файлов конфигурации.

Удаление пакета и всех связанных файлов конфигурации

Если вы хотите удалить пакет и все связанные с ним файлы из вашей системы, включая файлы конфигурации, вы можете использовать apt purge.

В отличие от упомянутой выше команды remove, команда purge удаляет все. Это полезно, если вы не хотите сохранять файлы конфигурации или если у вас возникли проблемы и вы хотите начать с чистого листа.

Имейте в виду, что как только ваши файлы конфигурации будут удалены, вы не сможете их восстановить:

  1. sudo apt purge package

Теперь, если вам когда-нибудь понадобится переустановить этот пакет, будет использоваться конфигурация по умолчанию.

Удалите все автоматические зависимости, которые больше не нужны

При удалении пакетов из вашей системы с помощью apt remove или apt purge целевой пакет будет удален. Однако любые зависимости, которые были автоматически установлены для выполнения требований установки, останутся позади.

Чтобы автоматически удалить любые пакеты, которые были установлены как зависимости, которые больше не требуются каким-либо пакетам, вы можете использовать команду autoremove:

  1. sudo apt autoremove

Если вы хотите удалить все связанные файлы конфигурации из удаляемых зависимостей, вам нужно добавить параметр --purge в команду autoremove. Это также очистит файлы конфигурации, как и команда purge для целевого удаления:

  1. sudo apt --purge autoremove

Очистить устаревшие файлы пакетов

Поскольку пакеты добавляются и удаляются из репозиториев сопровождающими пакетов дистрибутива, некоторые пакеты устареют.

Инструмент apt может удалить в локальной системе любые файлы пакетов, связанные с пакетами, которые больше не доступны в репозиториях, с помощью команды autoclean.

Это освободит место на вашем сервере и удалит любые потенциально устаревшие пакеты из вашего локального кеша.

  1. sudo apt autoclean

На следующем шаге вы узнаете больше о способах запроса пакетов без необходимости их установки.

Шаг 5 – Получение информации о пакетах

Каждый пакет содержит большое количество метаданных, к которым можно получить доступ с помощью инструментов управления пакетами. В этом разделе будут продемонстрированы некоторые распространенные способы получения информации о доступных и установленных пакетах.

Чтобы показать подробную информацию о пакете в репозиториях вашего дистрибутива, вы можете использовать apt-cache show. Целью этой команды является имя пакета в репозитории:

  1. apt-cache show nginx

Это отобразит информацию о любых кандидатах на установку рассматриваемого пакета. Каждый кандидат будет иметь информацию о своих зависимостях, версии, архитектуре, конфликтах, фактическом имени файла пакета, размере пакета и установке, а также подробное описание среди прочего.

Output
Package: nginx Architecture: all Version: 1.18.0-0ubuntu1.2 Priority: optional Section: web Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Debian Nginx Maintainers <pkg-nginx-maintainers@lists.alioth.debian.org> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 44 Depends: nginx-core (<< 1.18.0-0ubuntu1.2.1~) | nginx-full (<< 1.18.0-0ubuntu1.2.1~) | nginx-light (<< 1.18.0-0ubuntu1.2.1~) | nginx-extras (<< 1.18.0-0ubuntu1.2.1~), nginx-core (>= 1.18.0-0ubuntu1.2) | nginx-full (>= 1.18.0-0ubuntu1.2) | nginx-light (>= 1.18.0-0ubuntu1.2) | nginx-extras (>= 1.18.0-0ubuntu1.2) Filename: pool/main/n/nginx/nginx_1.18.0-0ubuntu1.2_all.deb …

Чтобы отобразить дополнительную информацию о каждом из кандидатов, включая полный список обратных зависимостей (список пакетов, зависящих от запрошенного пакета), вместо этого используйте команду showpkg. Это будет включать информацию об отношении этого пакета к другим пакетам:

  1. apt-cache showpkg package

Показать информацию о пакете .deb

Чтобы показать подробности о файле .deb, вы можете использовать флаг --info с командой dpkg. Целью этой команды должен быть путь к файлу .deb:

  1. dpkg --info debfile.deb

Это покажет вам некоторые метаданные о рассматриваемом пакете. Это включает в себя имя и версию пакета, архитектуру, для которой он был создан, размер и требуемые зависимости, описание и конфликты.

Чтобы конкретно перечислить зависимости (пакеты, от которых зависит этот пакет) и обратные зависимости (пакеты, которые зависят от этого пакета), вы можете использовать утилиту apt-cache.

Для обычной информации о зависимости вы можете использовать подкоманду depends:

  1. apt-cache depends nginx
Output
nginx |Depends: nginx-core |Depends: nginx-full |Depends: nginx-light Depends: nginx-extras |Depends: nginx-core |Depends: nginx-full |Depends: nginx-light Depends: nginx-extras

Это покажет информацию о каждом пакете, который указан как жесткая зависимость, предложение, рекомендация или конфликт.

Если вам нужно узнать, какие пакеты зависят от определенного пакета, вы можете передать этот пакет в apt-cache rdepends:

  1. apt-cache rdepends package

Показать установленные и доступные версии пакетов

Часто в репозиториях есть несколько версий пакета с одним пакетом по умолчанию. Чтобы увидеть доступные версии пакета, вы можете использовать политику apt-cache:

  1. apt-cache policy package

Это покажет вам, какая версия установлена (если есть), пакет, который будет установлен по умолчанию, если вы не укажете версию с помощью команды установки, и таблицу версий пакетов с весом, указывающим приоритет каждой версии.

Это можно использовать для определения того, какая версия будет установлена и какие альтернативы доступны. Поскольку здесь также перечислены репозитории, в которых находится каждая версия, это можно использовать для определения того, заменяют ли какие-либо дополнительные репозитории пакеты из репозиториев по умолчанию.

Показать установленные пакеты с помощью dpkg -l

Чтобы показать пакеты, установленные в вашей системе, у вас есть несколько отдельных опций, которые различаются по формату и детализации вывода.

Первый метод предполагает использование либо команды dpkg, либо команды dpkg-query с флагом -l. Вывод обеих этих команд идентичен. Без аргументов выдает список всех установленных или частично установленных пакетов в системе. Вывод будет выглядеть следующим образом:

  1. dpkg -l
Output
Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-===========================================-=======================================-============-===================================================================================================================== ii account-plugin-generic-oauth 0.10bzr13.03.26-0ubuntu1.1 amd64 GNOME Control Center account plugin for single signon - generic OAuth ii accountsservice 0.6.34-0ubuntu6 amd64 query and manipulate user account information ii acl 2.2.52-1 amd64 Access control list utilities ii acpi-support 0.142 amd64 scripts for handling many ACPI events ii acpid 1:2.0.18-1ubuntu2 amd64 Advanced Configuration and Power Interface event daemon . . .

Вывод продолжается для каждого пакета в системе. В верхней части вывода вы можете увидеть значения первых трех символов в каждой строке. Первый символ указывает на желаемое состояние пакета. Может быть:

  • у: неизвестно
  • я: установлено
  • r: удалено
  • p: очищено
  • h: версия сохранена.

Второй символ указывает на фактическое состояние пакета, известное системе упаковки. Это могут быть:

  • n: не установлено
  • я: установлено
  • c: файлы конфигурации присутствуют, но приложение удалено.
  • u: Распакован. Файлы распакованы, но еще не настроены.
  • f: пакет установлен наполовину, что означает, что в процессе установки произошел сбой, который остановил операцию.
  • w: пакет ожидает запуска от другого пакета.
  • p: пакет запущен другим пакетом.

Третий символ, который будет пустым местом для большинства пакетов, имеет только один потенциальный вариант:

  • r: указывает на необходимость переустановки. Обычно это означает, что пакет поврежден и находится в нерабочем состоянии.

Остальные столбцы содержат имя пакета, версию, архитектуру и описание.

Показать состояния установки отфильтрованных пакетов

Если вы добавите шаблон поиска после шаблона -l, dpkg выведет список всех пакетов (независимо от того, установлены они или нет), которые содержат этот шаблон. Например, вы можете искать библиотеки обработки YAML здесь:

  1. dpkg -l libyaml*
Output
Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-===============-============-============-=================================== ii libyaml-0-2:amd 0.1.4-2ubunt amd64 Fast YAML 1.1 parser and emitter li ii libyaml-dev:amd 0.1.4-2ubunt amd64 Fast YAML 1.1 parser and emitter li un libyaml-perl <none> (no description available) un libyaml-syck-pe <none> (no description available) ii libyaml-tiny-pe 1.51-2 all Perl module for reading and writing

Как видно из первого столбца, третий и четвертый результаты не установлены. Это дает вам каждый пакет, соответствующий шаблону, а также их текущее и желаемое состояние.

Альтернативный способ отобразить пакеты, установленные в вашей системе, — использовать dpkg –get-selections.

Это предоставляет список всех пакетов, установленных или удаленных, но не очищенных:

  1. dpkg --get-selections

Чтобы различать эти два состояния, вы можете направить вывод из dpkg в awk для фильтрации по состоянию. Чтобы увидеть только установленные пакеты, введите:

  1. dpkg --get-selections | awk '$2 ~ /^install/'

Чтобы получить список удаленных пакетов, файлы конфигурации которых не были очищены, вместо этого вы можете набрать:

  1. dpkg --get-selections | awk '$2 !~ /^install/'

Вы также можете узнать больше о конвейерной передаче вывода команд через awk,

Поиск установленных пакетов

Чтобы выполнить поиск определенного пакета в установленной базе пакетов, вы можете добавить строку фильтра пакета после параметра --get-selections. Это поддерживает сопоставление с подстановочными знаками. Опять же, это покажет все пакеты, которые установлены или у которых все еще есть файлы конфигурации в системе:

  1. dpkg --get-selections libz*

Вы снова можете фильтровать, используя выражения awk из последнего раздела.

Список файлов, установленных пакетом

Чтобы узнать, за какие файлы отвечает пакет, вы можете использовать флаг -L с командой dpkg:

  1. dpkg -L package

Это распечатает абсолютный путь к каждому файлу, которым управляет пакет. Это не будет включать файлы конфигурации, созданные процессами в пакете.

Чтобы узнать, какой пакет отвечает за определенный файл в вашей файловой системе, вы можете передать абсолютный путь команде dpkg с флагом -S.

Это распечатает пакет, который установил рассматриваемый файл:

  1. dpkg -S /path/to/file

Имейте в виду, что любые файлы, перемещенные на место послеустановочными сценариями, не могут быть снова привязаны к пакету с помощью этого метода.

Найдите, какой пакет предоставляет файл, не устанавливая его

Используя dpkg, вы можете узнать, какому пакету принадлежит файл, используя параметр -S. Однако бывают случаи, когда вам может понадобиться знать, какой пакет предоставляет файл или команду, даже если у вас не установлен соответствующий пакет.

Для этого вам потребуется установить утилиту под названием apt-file. Это поддерживает свою собственную базу данных информации, которая включает в себя путь установки каждого файла, контролируемого пакетом в базе данных.

Установите пакет apt-file как обычно:

  1. sudo apt update
  2. sudo apt install apt-file

Теперь обновите базу данных инструмента и найдите файл, набрав:

  1. sudo apt-file update
  2. sudo apt-file search /path/to/file

Это будет работать только для местоположений файлов, которые устанавливаются непосредственно пакетом. Любой файл, созданный с помощью сценариев после установки, не может быть запрошен. На следующем шаге вы узнаете, как импортировать и экспортировать списки установленных пакетов.

Шаг 6 – Перенос списков пакетов между системами

Много раз вам может понадобиться создать резервную копию списка установленных пакетов из одной системы и использовать его для установки идентичного набора пакетов в другой системе. Это также полезно для целей резервного копирования. В этом разделе показано, как экспортировать и импортировать списки пакетов.

Если вам нужно реплицировать набор пакетов, установленных в одной системе, в другую, вам сначала нужно будет экспортировать список пакетов.

Вы можете экспортировать список установленных пакетов в файл, перенаправив вывод dpkg --get-selections в текстовый файл:

  1. dpkg --get-selections > ~/packagelist.txt

Вы также можете узнать больше о перенаправлении ввода и вывода.

Затем этот список можно скопировать на второй компьютер и импортировать.

Вам также может потребоваться создать резервную копию списков источников и списка доверенных ключей. Вы можете сделать резервную копию своих исходников, создав новый каталог и скопировав их из конфигурации системы в /etc/apt/:

  1. mkdir ~/sources
  2. cp -R /etc/apt/sources.list* ~/sources

Любые ключи, которые вы добавили для установки пакетов из сторонних репозиториев, можно экспортировать с помощью apt-key exportall:

  1. apt-key exportall > ~/trusted_keys.txt

Теперь вы можете перенести файл packagelist.txt, каталог sources и файл trusted_keys.txt на другой компьютер для импорта.

Импорт списка пакетов

Если вы создали список пакетов с помощью dpkg --get-selections, как показано выше, вы также можете импортировать пакеты на другой компьютер с помощью команды dpkg.

Во-первых, вам нужно добавить доверенные ключи и реализовать списки источников, которые вы скопировали из первой среды. Предполагая, что все резервные копии данных были скопированы в домашний каталог нового компьютера, вы можете ввести:

  1. sudo apt-key add ~/trusted_keys.txt
  2. sudo cp -R ~sources/* /etc/apt/

Затем очистите состояние всех ненужных пакетов с нового компьютера. Это гарантирует, что вы применяете изменения с чистого листа. Это необходимо сделать с помощью учетной записи root или привилегий sudo:

  1. sudo dpkg --clear-selections

Это пометит все несущественные пакеты для удаления. Вам следует обновить локальный список пакетов, чтобы в вашей установке были записи обо всем программном обеспечении, которое вы планируете установить. Фактическая процедура установки и обновления будет выполняться с помощью инструмента под названием dselect.

Вы должны убедиться, что инструмент dselect установлен. Этот инструмент поддерживает свою собственную базу данных, поэтому вам также необходимо обновить ее, прежде чем вы сможете продолжить:

  1. sudo apt update
  2. sudo apt install dselect
  3. sudo dselect update

Затем вы можете применить список пакетов поверх текущего списка, чтобы настроить, какие пакеты следует сохранить или загрузить:

  1. sudo dpkg --set-selections < packagelist.txt

Это устанавливает правильные состояния пакета. Чтобы применить изменения, запустите apt dselect-upgrade:

  1. sudo apt dselect-upgrade

Это загрузит и установит все необходимые пакеты. Он также удалит все пакеты, помеченные для отмены выбора. В конце концов, ваш список пакетов должен совпадать со списком пакетов предыдущего компьютера, хотя файлы конфигурации все равно нужно будет скопировать или изменить. Вы можете использовать такой инструмент, как etckeeper, для переноса файлов конфигурации из каталога /etc.

На следующем и последнем шаге вы узнаете о работе со сторонними репозиториями пакетов.

Шаг 7 — Добавление репозиториев и PPA

Хотя набор репозиториев по умолчанию, предоставляемый большинством дистрибутивов, как правило, наиболее удобен в сопровождении, бывают случаи, когда могут быть полезны дополнительные источники. В этом разделе вы узнаете, как настроить инструменты упаковки для доступа к дополнительным источникам.

Альтернативой традиционным репозиториям в Ubuntu являются PPA или личные архивы пакетов. Другие разновидности Linux обычно используют другие, но похожие концепции сторонних репозиториев. Обычно PPA имеют меньшую область действия, чем репозитории, и содержат целевые наборы приложений, поддерживаемые владельцем PPA.

Добавление PPA в вашу систему позволяет вам управлять пакетами, которые они содержат, с помощью ваших обычных инструментов управления пакетами. Это можно использовать для предоставления более современных пакетов, которые не включены в репозитории дистрибутива. Позаботьтесь о том, чтобы вы добавляли только те PPA, которым вы доверяете, так как вы позволите нестандартному сопровождающему создавать пакеты для вашей системы.

Чтобы добавить PPA, вы можете использовать команду add-apt-repository. Цель должна включать метку ppa:, за которой следует имя владельца PPA на панели запуска, косая черта и имя PPA:

  1. sudo add-apt-repository ppa:owner_name/ppa_name

Вас могут попросить принять ключ упаковщика. После этого в вашу систему будет добавлен PPA, что позволит вам устанавливать пакеты с помощью обычных команд apt. Перед поиском или установкой пакетов обязательно обновите локальный кеш информацией о вашем новом PPA:

  1. sudo apt update

Вы также можете напрямую редактировать конфигурацию репозитория. Вы можете либо отредактировать файл /etc/apt/sources.list, либо поместить новый список в каталог /etc/apt/sources.list.d. Если вы пойдете по этому последнему пути, имя создаваемого файла должно заканчиваться на .list:

  1. sudo nano /etc/apt/sources.list.d/new_repo.list

Внутри файла вы можете добавить расположение нового репозитория, используя следующий формат:

deb_or_deb-src url_of_repo release_code_name_or_suite component_names

Различные части спецификации репозитория:

  • deb или deb-src: определяет тип репозитория. Обычные репозитории помечаются как deb, а исходные репозитории начинаются с deb-src.
  • url: основной URL репозитория. Это должно быть место, где можно найти репозиторий.
  • кодовое название или комплект выпуска: обычно это кодовое название выпуска вашего дистрибутива, но это может быть и любое имя, используемое для идентификации определенного набора пакетов, созданных для вашей версии дистрибутива.
  • имена компонентов: метки для выбора пакетов, которые вы хотите иметь доступными. Это различие часто предоставляется сопровождающим репозитория, чтобы выразить что-то о надежности или лицензионных ограничениях программного обеспечения, которое оно содержит.

Вы можете добавить эти строки в файл. Большинство репозиториев содержат информацию о точном формате, который следует использовать. В некоторых других дистрибутивах Linux вы можете добавлять дополнительные источники репозитория, фактически устанавливая пакеты, которые содержат только файл конфигурации для этого репозитория, что соответствует тому, как работают менеджеры пакетов.

Заключение

Управление пакетами, пожалуй, самый важный аспект администрирования системы Linux. Существует множество других операций по управлению пакетами, которые вы можете выполнять, но в этом руководстве представлены базовые принципы работы с Ubuntu, многие из которых можно распространить на другие дистрибутивы с небольшими изменениями.

Далее вы можете узнать больше об управлении пакетами на других платформах.