Иногда может возникнуть вопрос: чьих этот файл, откуда вообще взялась эта библиотека? Удобный менеджер пакетов решает очень многие проблемы ОС. Можно с уверенностью сказать, что если вы подружитесь с МП, то подружитесь и с дистрибутивом как таковым. Причем важно освоить именно набор основных команд, и знать где найти дополнительную информацию.


Управление пакетами

Далее следует джентльменский набор необходимых для повседневной рутины команд основных Linux дистрибутивов: установить, обновить и удалить пакет, накатить обновления, проверить зависимости, установить принадлежность файла пакету и пр.


Debian и родственные


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


То, что в примерах aptitude не значит, что он правильнее, чем apt-get. Для меня это всего лишь дело привычки.


$ aptitude install package #установить пакет;
$ aptitude safe-upgrade package #обновить пакет;
$ aptitude update #проверить и установить обновления;
$ aptitude remove package #удалить пакет;
$ aptitude purge package #удалить пакета с концами, все данные и настройки;
$ apt-get dist-upgrade #обновить ОС, killer-feature и оно работает!
$ aptitude search package #искать пакет.
$ apt-cache depends package #зависимости пакета;
$ apt-cache rdepends package #обратные зависимости от пакета.

Некоторые функции доступны с дополнительным МП dpkg.


$ dpkg -l #список установленных программ;
$ dpkg -L package #список файлов пакета

Есть еще такое чудо — wajig. Несмотря на странное звучание, вполне годный МП с человеко-читабельным выводом информации на экран.


Настройка репозиториев производится правкой файла /etc/apt/sources.list


$ wajig install package
$ wajig distupgrade #обновить ОС;
$ wajig install --fileinput filename #установить пакеты списком;
$ wajig listinstalled

В целом ПМ Debian один из лучших, с которыми мне доводилось иметь дело.


Redhat и другие RPM дистрибутивы


RPM нельзя назвать образцовым пакетным менеджером, скорее это был кактус, который мыши употребляли в пищу со слезами на глазах. Затем появились более или менее вменяемые МП: yum, dnf, zypper и другие. Только что на сервере RHEL 7.4 yum за раз обновил более 700 пакетов и ничего при этом не сломал, неплохой результат я считаю.


$ yum install package
$ yum update package
$ yum update
$ yum remove package
$ yum deplist package #зависимости пакета;
$ dnf repoquery --deplist #то же самое, для Fedora
$ yum whatprovides package #установить принадлежность файла какому-либо пакету;
$ yum list all #список всех установленных программ

Команды rpm на те случаи, когда использовать yum не с руки.


$ rpm -i package #установить пакет;
$ rpm -e packate #удалить пакет;
$ rpm -qa #список установленных пакетов;
$ rpm -qi package #вывод информации об установленном пакете;
$ rpm -q --whatrequires package #обратные зависимости от пакета.

Чтобы настроить репозитории Yum, откройте файл /etc/yum.repos.d/*.repo, или используйте команду yum-config-manager.


Zypper


На SuSE Linux используется Zypper / YaST для управления пакетами, движок ZYpp крутится поверх RPM.


$ zypper in mc #установить пакет, если его нет, а противном случае - обновить его;
$ zypper up nginx openssh #обновить программу;
$ zypper se gnome-desktop #найти программу;
$ zypper remove package;
$ zypper se --provides --match-exact hg #установить принадлежность файла какому-либо пакету;
$ zypper se --requires package #обратные зависимости от пакета.

Можно использовать операторы и регулярные выражения.


zypper in 'gcc.i586<5.1'#установить пакет для архитектуры i586, версии младше 5.1;
zypper in php5*;

Управление репозиториями производится командой zypper mr.


$ zypper lr #список реп, укаханы номера репозиториев;
$ zypper mr -d 5 #выключить 5-у репу;
$ zypper mr -e 5 #включить 5-у репу.

Pacman


Этот МП используется в Арче и Manjaro.


$ pacman -S package #установить пакет;
$ pacman -R package #удалить пакет;
$ pacman -Su package #обновить пакет;
$ pacman -Q1 package #список файлов пакета;
$ pacman -Qo filename #установить принадлежность файла какому-либо пакету;
$ whoneeds package #обратные зависимости от пакета;
$ pacman -Qdt #список пакетов-сирот, без обратных зависимостей.

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


$ pacman -Ss package #простой полнотекстовый поиск;
$ pacman -Ss '^vim-' #поиск с регулярными выражениями;
$ pacman -Qs package #поиск среди установленных пакетов;

Настройка репозиториев и зеркал производится из файла /etc/pacman.conf


Gentoo emerge


Конечно же это скорее умозрительный сценарий, чем реальный, так как сложно предположить, что красноглазый пользователь Gentoo Linux не знает необходимых опций emerge. Тем не менее, без этого альманах был бы неполным.


$ emerge package #установить пакет;
$ emerge -av package # интерактивный режим установки пакета;
$ emerge -pv package # показать сценарий установки пакета;
$ emerge -u packave # обновить пакет;
$ emerge -C package # удалить пакет;
$ emerge -auDv world # обновить все программы с учетом зависимостей;
$ emerge -auDNv word # обновить все программы с учетом зависимостей и новых USE опций.

С дополнительными утилитами можно получить больше информации о файлах, ненужных пакетах и т. д.


$ revdep-rebuild #проверить и восстановить неудовлетворенные зависимости;
$ eix package #искать пакет;
$ equery belongs package #установить принадлежность файла какому-либо пакету;
$ equery depends package #обратные зависимости от пакета;
$ equery uses package #USE флаги пакета;
$ qlop -l #история операций emerge;

Репозитории, зеркала и все самое важное для emerge / portage содержится в /etc/make.conf.


Материалы по теме


  1. How To List All Installed Packages In Linux
  2. Package Management Basics: apt, yum, dnf, pkg
  3. 45 Zypper Commands to Manage SUSE Linux Package Management
  4. ArchWiki — pacman

Комментарии (44)


  1. geher
    06.11.2017 18:16

    Есть вариант с apt-get и rpm пакетами (успешно используется в Alt Linux).


    Еще есть такая игрушка, как pkcon (вроде из убунты, но реально встречал только на Sailfish).


    Программа Synaptic с графическим интерфейсом решает 90% задач управления пакетами.


    1. foi
      07.11.2017 04:37

      спрашивал на opennet у евангелиста Alt Linux (М.Шигорина) зачем надо было это делать? Для чего? Мне не ответили и я так и не понял. Может вы в курсе? Это чисто эстетика?


      1. geher
        07.11.2017 09:36

        Могу ошибаться, но вроде придумали apt для rpm не они. Они только прикрутили и доработали под свой дистрибутив.
        Зачем оно было придумано, достоверно, наверное, знает только автор.
        Могу только предположить, что из-за популярности apt-get и прочих apt для пакетов .deb и наличия некоторого числа оберток вокруг apt-get.


      1. Vitls
        07.11.2017 10:31

        На тот момент команде ALT Linux понравилась эстетика apt, а вся автоматизация сборки пакетов была заточена под rpm. Вот и совместили. Результат вполне не плох.


      1. selivanov_pavel
        07.11.2017 15:09

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


  1. rumkin
    06.11.2017 18:27

    Есть еще nixos "pure functional" как утверждают создатели. Выглядит гораздо интереснее прочих вариаций на тему, на мой взгляд.


  1. Merifri
    06.11.2017 18:27

    В debian-based со всеми задачами также успешно справляется и apt.

    apt install package  # установить/обновить пакет
    apt remove package   # удалить пакет
    apt purge package    # удалить с данными/конфигами
    apt update           # обновить информацию о пакетах
    apt upgrade          # обновить пакеты
    apt dist-upgrade     # обновить систему
    apt search package   # найти пакет
    apt depends package  # зависимсости пакета
    apt rdepends package # обратные зависимости
    apt list --installed # список установленных пакетов
    apt show package     # сведения о пакете
    


    Аналогом dpkg -L может быть apt-file.


    1. selivanov_pavel
      06.11.2017 19:24

      Не со всеми. В отличие от apt-get, не умеет --no-install-recommens и --purge.


      1. Merifri
        06.11.2017 20:25

        Может и не со всеми, но с указанными вами задачами точно справится.
        apt install package --install-recommends=no
        И apt remove package --purge тоже умеет.


        1. selivanov_pavel
          06.11.2017 23:14

          Полезно, буду знать. А как вы это нашли? apt help про эти опции молчит и man apt тоже.


          1. Merifri
            06.11.2017 23:22
            +1

            Насколько помню, на эти опции наткнулся благодаря автодополнению:


            $ apt install --
            --allow-change-held-packages   --ignore-missing
            --allow-downgrades             --install-recommends
            --allow-insecure-repositories  --install-suggests
            --allow-remove-essential       --only-upgrade
            --allow-unauthenticated        --print-uris
            --arch-only                    --purge
            --assume-no                    --reinstall
            --assume-yes                   --remove
            --auto-remove                  --show-progress
            --download                     --show-upgraded
            --download-only                --simulate
            --dry-run                      --solver
            --fix-broken                   --target-release
            --fix-missing                  --trivial-only
            --fix-policy                   --upgrade
            --force-yes                    --verbose-versions
            --ignore-hold                  


            1. selivanov_pavel
              06.11.2017 23:40

              Спасибо. С документацией печалька, завёл баг в убунту: https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1730498


              1. Self_Perfection
                07.11.2017 16:45

                Всё ок с документацией:


                   DESCRIPTION
                   apt provides a high-level commandline interface for the package management system. It is intended as an end user interface and enables some options better suited for interactive usage by default compared to more specialized APT tools like apt-get(8) and apt-cache(8).
                
                   Much like apt itself, its manpage is intended as an end user interface and as such only mentions the most used commands and options partly to not duplicate information in multiple places and partly to avoid overwhelming readers with a cornucopia of options and details.

                То есть: тут обзор основных режимов, конкретные флаги смотри в манам к другим утилитам.


                Абзац про install начинается с


                install, remove, purge (apt-get(8))


                Ну то есть см man 8 apt-get. apt install поддерживает все ключи, поддерживаемые apt-get install


                1. selivanov_pavel
                  07.11.2017 17:19

                  Да, невнимательно смотрел, (apt-get(8)) не заметил. Спасибо.


    1. martin_wanderer
      07.11.2017 10:57

      Мне казалось, что, во всяком случае в Убунте, apt считается теперь более предпочтительным, чем apt-get


      1. Merifri
        07.11.2017 12:55

        В документации и handbook-е Debian упоминается, что apt предпочтителнее именно для интерактивного использования (присутствует цветной вывод, индикатор выполения).


        Инструмент apt совмещает функциональность apt-get и apt-cache, а также по умолчанию использует красивый цветной формат вывода, что очень удобно. Для использования в сценариях или для продвинутого использования предпочтительнее использовать apt-get (а иногда он просто необходим). link

        Да и при попытке использования в неинтерактивном режиме он выдаст warning:


        WARNING: apt does not have a stable CLI interface. Use with caution in scripts.


        1. pfg21
          07.11.2017 15:21

          закидайте меня тряпками :) но интерактивность есть в apt кот наплакал :) если уж говорить про интерактивность, то уж aptitude, тут тебе и красивая интерактивная псевдографика и прочий обмен мыслями между пользователем и программной оболочкой…


  1. delvin-fil
    06.11.2017 19:06
    +2

    $ sudo emerge -pvuDN -1 #(aka --oneshot) Обычная установка, но пакеты не будут добавлены в файл world и, следовательно, не будут в дальнейшем обновляться.
    $ sudo emerge -pvuDN --backtrack=COUNT #где COUNT целое значение, обозначает количество обращений к системе контроля ошибок, в случае если определение зависимостей завершается ошибкой по причине конфликта или неразрешенной зависимости (значение по умолчанию: 10).
    $ sudo emerge -pvuDN --keep-going=y # Если "у", то продолжает установку после ошибки настолько, насколько это возможно. При возникновении ошибки зависимости для остальных пакетов автоматически пересчитываются, все пакеты с неудовлетворенными зависимостями автоматически исключаются.
    $ sudo emerge -pvuDN --load-average=LOAD # При выставленной опции новая сборка не будет начата, пока не завершится предыдущая установка, а среднее число процессов на исполнение не ниже LOAD (число с плавающей точкой). Данную опцию рекомендуется использовать в связке с --jobs, чтобы избежать чрезмерной нагрузки.
    $ sudo emerge -pvuDN --jobs=JOBS # Указывает, сколько(JOBS) пакетов будет собираться одновременно. Если задать эту опцию без аргумента, одновременно может выполняться неограниченное количество заданий.


  1. delvin-fil
    06.11.2017 19:43
    +1

    Вообще, в emerge много интересных параметров. Например:
    --buildpkg [ y | n ] (сокращенно -b) Указывает emerge собирать бинарные пакеты для всех обработанных ебилдов, а не только разворачивать.
    --usepkg [ y | n ] (сокращенно -k) Указывает emerge использовать бинарные пакеты (из каталога $PKGDIR), если они доступны, тем самым по возможности избегая продолжительных компиляций.
    --prune (-P) Удаляет из системы все версии пакетов, кроме последних установленных релизов. Для отображения обратных зависимостей используйте с --prune ключ --verbose.
    Ну и --fetchonly (сокращенно -f) для скачивания без установки и --buildpkgonly (сокращенно -B) создает бинарные пакеты для всех обработанных ебилдов без установки — при условии, что все зависимости времени построения уже установлены в системе.
    Весьма гибкая система. Если внимательно прочесть man(русскую версию для gentoo никак «до ума» довести не могу. Есть от calculate, но она весьма скудна), то проблем с зависимостями и обновлением не возникает(кроме случаев «кривой» сборки package мантейнерами. Бывает, да).


  1. powerman
    06.11.2017 20:46

    Ещё из достаточно популярных есть apk — используется в Alpine Linux, который часто встречается в контейнерах докера.


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


  1. sT331h0rs3
    06.11.2017 21:45

    Про dnf забыли.


  1. Shilishper
    06.11.2017 21:45

    Не увидел ответа на вопрос:
    чьих этот файл, откуда вообще взялась эта библиотека?

    dpkg -S


    1. AranelOfDoriath
      07.11.2017 11:50

      rpm -q -f


  1. tenhi_shadow
    06.11.2017 22:33

    не увидел yaourt для арча.
    Работает ещё и для сборки пакетов из aur с repo.archlinux.fr
    там ещё есть powerprill, но я ниасилил :)


    1. DS28
      07.11.2017 08:37

      Или pacaur))

      И для debian указали update, а для арча нет:

      pacman -Sy

      Ну и
      pacman -Su
      pacman -Syu
      


  1. MInner
    06.11.2017 22:33

    snappy?


    1. AntonAlekseevich
      06.11.2017 22:49

      0install? :D


  1. Sjam
    07.11.2017 03:01

    Есть еще urpm/rpmdrake на чем работают Mandriva/Rosa/Mageia


  1. Sjam
    07.11.2017 03:04

    Так же хотел бы добавить такие менеджеры пакетов как opkg/apkg, котрые используются в OpenWRT(LEDE) и alpinelinux


    1. foi
      07.11.2017 04:38

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


  1. monah_tuk
    07.11.2017 05:06

    By the way… Pacman используется в msys2 для Windows.


  1. pulsatrix
    07.11.2017 10:27

    $ aptitude update #проверить и установить обновления;

    Не-а, не установить. Только обновить список. И apt update еще предупреждает об обновлениях, (apt-get и aptitude — нет). Ubuntu16.04, если что.


  1. goomb
    07.11.2017 10:28

    А также XBPS для Void Linux. И eopkg для Solus OS.


  1. mrMaxSimka
    07.11.2017 10:28

    Хоть сценарий с Gentoo и умозрительный, он все же бедней предыдущих. У emerge исчерпывающий мануал, но поиск eix заслуживает отдельного упоминания, поскольку какой пакетный менеджер без поиска?


  1. apterion7
    07.11.2017 10:28

    Не применяйте предложенные варианты использования emerge для Gentoo. Как автор сам признался, тут оно только для галочки, но лучше б он умолчал о portage, чем написал это. Гентушникам оно без пользы, а новички споткнутся. Уважаемый автор, не делайте так больше, пожалуйста.


    1. delvin-fil
      07.11.2017 10:38

      Уважаемый, я с оформлением man застопорился. А перевод готов полностью.
      Что вы имеете сказать по сути вопроса?


  1. sshade
    07.11.2017 10:28

    dnf system-upgrade download --refresh --releasever=26
    dnf system-upgrade reboot

    Действует как
    apt-get dist-upgrade


  1. aleki
    07.11.2017 10:28

  1. worldmind
    07.11.2017 14:09

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


  1. chupasaurus
    07.11.2017 15:30

    Некоторые функции доступны с дополнительным МП dpkg.
    Таки dpkg — это «medium-level» между dpkg-deb, работающий непосредственно с файлами пакетов, и apt/aptitude, предоставляющими полноценный интерфейс для пользователей и активно использующие эту утилиту. В зависимостях у apt отсутствует, поскольку находится в списке базовых системных пакетов.


  1. AndreyNagih
    07.11.2017 15:47

    Как вы думаете, можно ли считать brew пакетным менеджером в macOS? (Хотя бы в том смысле, в котором автор называет emerge пакетным менеджером?)


  1. robux
    08.11.2017 01:53

    Сейчас и так малое количество пользователей линукса сильно фагментировано, это печально.


    Например, в статье тема сторонних [бинарных] репозиториев не раскрыта. А как бы полезно было, если б придумали универсальный формат пакета, интегрируемый как в Debian, так и в CentOS с Arch и Gentoo, так и соответственно — универсальный пакетный менеджер. Тогда все залежи бинарников в PPA и сторонних портежах смогло активно использоваться всеми линуксоидами.


    Трансформеры deb-rpm (типа alien) частично решают проблему, но только для пакетов, имеющих мало зависимостей, да и то: только для отдельных файлов-пакетов — передаваемых без пакетных менеджеров.


    1. pfg21
      08.11.2017 10:29

      универсальный формат — tar-архив дерева файлов комплекта ПО, присутствует что в рпм что в дебе :)

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

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


  1. bormant
    08.11.2017 10:37

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

    Slackware Linux и pkgtools / slackpkg

    # installpkg файл-пакета ... # установить пакеты
    upgradepkg файл-пакета ... # обновить установленные пакеты
    removepkg имя-пакета ...   # удалить пакеты
    removepkg -copy пакет      # создать копию дерева файлов пакета
    explodepkg файл-пакета ... # распаковать пакет, не исполнять сценарии
    makepkg файл-пакета        # собрать поддерево ./ в пакет
    pkgtool                    # dialog-овая установка, удаление, настройка
    
    slackpkg check-updates     # проверить наличие обновлений
    slackpkg update [gpg]      # обновить сведения о пакетах / ключ
    slackpkg install маски     # установить пакеты
    slackpkg reinstall маски   # переустановить пакеты
    slackpkg upgrade маски     # обновить пакеты
    slackpkg upgrade-all       # обновить всё доступное
    slackpkg remove маски      # удалить пакеты
    slackpkg generate-template # создать шаблон
    slackpkg install-template  # установить набор по шаблону
    slackpkg remove-template   # удалить набор по шаблону
    slackpkg clean-system      # удалить сторонние пакеты
    slackpkg file-search файл  # пакет по файлу
    slackpkg search маска      # поиск пакета
    slackpkg blacklist маска   # исключить пакеты из обработки
    slackpkg info пакет        # сведения о пакете
    slackpkg new-config        # выполнить слияние конфигов
    

    Помимо штатных существует также несколько сторонних менеджеров: slapt-get/slapt-src (по мотивам apt), они же в графике: gslapt/sourcery (эта четверка является основным менеджером в Salix, сохраняющем бинарную совместимость со Slackware), sbopkg (автоматизация сборки пакетов по слакбилдам), а также еще некоторое количество, появившихся относительно недавно…