Иногда может возникнуть вопрос: чьих этот файл, откуда вообще взялась эта библиотека? Удобный менеджер пакетов решает очень многие проблемы ОС. Можно с уверенностью сказать, что если вы подружитесь с МП, то подружитесь и с дистрибутивом как таковым. Причем важно освоить именно набор основных команд, и знать где найти дополнительную информацию.
Далее следует джентльменский набор необходимых для повседневной рутины команд основных 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
.
Материалы по теме
Комментарии (44)
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.selivanov_pavel
06.11.2017 19:24Не со всеми. В отличие от
apt-get
, не умеет--no-install-recommens
и--purge
.Merifri
06.11.2017 20:25Может и не со всеми, но с указанными вами задачами точно справится.
apt install package --install-recommends=no
Иapt remove package --purge
тоже умеет.selivanov_pavel
06.11.2017 23:14Полезно, буду знать. А как вы это нашли?
apt help
про эти опции молчит иman apt
тоже.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
selivanov_pavel
06.11.2017 23:40Спасибо. С документацией печалька, завёл баг в убунту: https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1730498
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
martin_wanderer
07.11.2017 10:57Мне казалось, что, во всяком случае в Убунте, apt считается теперь более предпочтительным, чем apt-get
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.
pfg21
07.11.2017 15:21закидайте меня тряпками :) но интерактивность есть в apt кот наплакал :) если уж говорить про интерактивность, то уж aptitude, тут тебе и красивая интерактивная псевдографика и прочий обмен мыслями между пользователем и программной оболочкой…
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) пакетов будет собираться одновременно. Если задать эту опцию без аргумента, одновременно может выполняться неограниченное количество заданий.
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 мантейнерами. Бывает, да).
powerman
06.11.2017 20:46Ещё из достаточно популярных есть
apk
— используется в Alpine Linux, который часто встречается в контейнерах докера.
Но польза от описанного списка команд практически нулевая — примерно то же самое становится очевидно из вывода
--help
любого менеджера пакетов. Что было бы полезным, так это описание типовых задач с указанием особенностей каждого дистрибутива — например какие есть варианты полного обновления системы (только безопасность, все пакеты, все с удалением устаревших, автоматическое обновление не требующее ручного вмешательства) и чем они отличаются (например какие дополнительные операции вроде ручного обновления изменённых конфигов, разрешения конфликтов, ручного перезапуска сервисов, etc. требуются после обновлений), как выбрать нужную версию устанавливаемого пакета (включая доступные варианты и способы подключения других репозиториев), как найти доступные версии нужного пакета (в т.ч. зная какой бинарник нужно установить но не зная как называется пакет в этом дистрибутиве), etc.
Shilishper
06.11.2017 21:45Не увидел ответа на вопрос:
чьих этот файл, откуда вообще взялась эта библиотека?
dpkg -S
tenhi_shadow
06.11.2017 22:33не увидел yaourt для арча.
Работает ещё и для сборки пакетов из aur с repo.archlinux.fr
там ещё есть powerprill, но я ниасилил :)DS28
07.11.2017 08:37Или pacaur))
И для debian указали update, а для арча нет:
pacman -Sy
Ну и
pacman -Su pacman -Syu
pulsatrix
07.11.2017 10:27$ aptitude update #проверить и установить обновления;
Не-а, не установить. Только обновить список. Иapt update
еще предупреждает об обновлениях, (apt-get и aptitude — нет). Ubuntu16.04, если что.
mrMaxSimka
07.11.2017 10:28Хоть сценарий с Gentoo и умозрительный, он все же бедней предыдущих. У emerge исчерпывающий мануал, но поиск eix заслуживает отдельного упоминания, поскольку какой пакетный менеджер без поиска?
apterion7
07.11.2017 10:28Не применяйте предложенные варианты использования emerge для Gentoo. Как автор сам признался, тут оно только для галочки, но лучше б он умолчал о portage, чем написал это. Гентушникам оно без пользы, а новички споткнутся. Уважаемый автор, не делайте так больше, пожалуйста.
delvin-fil
07.11.2017 10:38Уважаемый, я с оформлением man застопорился. А перевод готов полностью.
Что вы имеете сказать по сути вопроса?
sshade
07.11.2017 10:28dnf system-upgrade download --refresh --releasever=26
dnf system-upgrade reboot
Действует как
apt-get dist-upgrade
worldmind
07.11.2017 14:09wajig это очень грамотная обёртка над хаотичным набором дебиановских тулзов, может не во всём идеальная, но только она и годится на гордое звание пакетного менеджера, остальное это лишь отдельные части системы управления пакетами.
Большой плюс, особенно для новичков, что в одном man'е можно узреть все возможности, получается единая дока по управлению пакетами.
chupasaurus
07.11.2017 15:30Некоторые функции доступны с дополнительным МП dpkg.
Таки dpkg — это «medium-level» между dpkg-deb, работающий непосредственно с файлами пакетов, и apt/aptitude, предоставляющими полноценный интерфейс для пользователей и активно использующие эту утилиту. В зависимостях у apt отсутствует, поскольку находится в списке базовых системных пакетов.
AndreyNagih
07.11.2017 15:47Как вы думаете, можно ли считать brew пакетным менеджером в macOS? (Хотя бы в том смысле, в котором автор называет emerge пакетным менеджером?)
robux
08.11.2017 01:53Сейчас и так малое количество пользователей линукса сильно фагментировано, это печально.
Например, в статье тема сторонних [бинарных] репозиториев не раскрыта. А как бы полезно было, если б придумали универсальный формат пакета, интегрируемый как в Debian, так и в CentOS с Arch и Gentoo, так и соответственно — универсальный пакетный менеджер. Тогда все залежи бинарников в PPA и сторонних портежах смогло активно использоваться всеми линуксоидами.
Трансформеры deb-rpm (типа alien) частично решают проблему, но только для пакетов, имеющих мало зависимостей, да и то: только для отдельных файлов-пакетов — передаваемых без пакетных менеджеров.
pfg21
08.11.2017 10:29универсальный формат — tar-архив дерева файлов комплекта ПО, присутствует что в рпм что в дебе :)
далее начинаются внешние потребности: инсталяционные скрипты и зависимости от других пакетов, вот тут уже бывает сложно и немашиночитаемо, человек обычно погуглив справляется, а вот для машины такие сентенции не доступны.
вообще что красношапку, соотвественно настроив репозиторий, можно поставить из дебов, да и наоборот — без разницы, это всего лишь инструмент, он делает то, на что запрограмирован.
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 (автоматизация сборки пакетов по слакбилдам), а также еще некоторое количество, появившихся относительно недавно…
geher
Есть вариант с apt-get и rpm пакетами (успешно используется в Alt Linux).
Еще есть такая игрушка, как pkcon (вроде из убунты, но реально встречал только на Sailfish).
Программа Synaptic с графическим интерфейсом решает 90% задач управления пакетами.
foi
спрашивал на opennet у евангелиста Alt Linux (М.Шигорина) зачем надо было это делать? Для чего? Мне не ответили и я так и не понял. Может вы в курсе? Это чисто эстетика?
geher
Могу ошибаться, но вроде придумали apt для rpm не они. Они только прикрутили и доработали под свой дистрибутив.
Зачем оно было придумано, достоверно, наверное, знает только автор.
Могу только предположить, что из-за популярности apt-get и прочих apt для пакетов .deb и наличия некоторого числа оберток вокруг apt-get.
Vitls
На тот момент команде ALT Linux понравилась эстетика apt, а вся автоматизация сборки пакетов была заточена под rpm. Вот и совместили. Результат вполне не плох.
selivanov_pavel
В то время значительная часть софта для Linux была готова для сборки rpm, но пакетные менеджеры для rpm были не слишком хороши. Зато был готовый хороший пакетный менеджер apt. Сложно скажать, съэкономили они усилия на написание собственного пакетного менеджера или потратили их больше, перепиливая apt под неродной формат, но логика решения понятна.