Алексей Федорчук
Утилита apt
появилась в одноимённом семействе чуть больше полутора лет назад, и с тех пор так и не снискала известности, хотя включает в себя большинство употребимых функций сладкой парочки apt-get
и apt-cache
. Возможно, потому, что при её запуске по сей день выдаётся устрашающее предупреждение:
WARNING: apt does not have a stable CLI interface yet. Use with caution in scripts.
Я применяю утилиту apt
с момента её появления на свет — ибо, по моему скромному ИМХОванию, одна короткая и универсальная команды лучше двух длинных и специализированных. И за это время ничего нестабильного в ней не заметил. А вот различия в умолчальном поведении между apt
и apt-get
— есть. Первая норовит установить не только жёсткие зависимости пакета (depends
), но и рекомендованные (recommends
), чего вторая по умолчанию не делает.
Это легко показать на конкретном примере. Например, в ответ на
$ sudo apt install xsane
последует сообщение о том, что заодно будет установлен и gimp
сотоварищи, типа gimp-data
, тогда как команда
$ sudo apt-get install xsane
ограничится добавлением пакета libgimp.
Эта особенность утилиты apt
, насколько я знаю, не документирована. Как и то, что она способна воспринимать опции, не описанные в man apt
. В частности, некоторые (а возможно, и все — руки не дошли проверить) опции «полноразмерной» утилиты apt-get
. В частности, опцию --no-install-recommends
, принудительно запрещающую установку рекомендаций. То есть команда
$ sudo apt install --no-install-recommends xsane
по своим последствиям будет эквивалентна команде
$ sudo apt-get install xsane
Предвижу возражение, что первая команда ещё длинней второй. Однако никто не заставляет набирать её полностью — особенно если вспомнить о методах интеграции apt и zsh. То есть достаточно добавить в файл ~/.zshrc
такое определение глобального псевдонима:
alias -g in='install --no-install-recommends'
чтобы свести приведённую громоздкую конструкцию к тому же простому apt in
, о котором говорится в заметке по последней ссылке.
Недокументированные опции команды apt
вкупе с механизмом глобальных псевдонимов Zsh можно использовать для расширения её функционала. Например, добавив в ~/.zshrc строку
alias -g rp='remove --purge'
можно получить полный аналог субкоманды purge
для apt-get
. Вероятно,если покумекать, можно найти и другие полезные комбинации «тайных» опций apt и явных Global alias из Zsh. Но мне пока хватило и приведённых.
В обоих случаях при написании примера с командой apt-get $ sudo apt install xsane
-get отсутствует.
cons, спасибо, поправил
Случайно наткнулся на ваш блог, не нашел вкладку «Обо мне» , а было бы интересно. Из контекста удалось понять только то что вы пишете для Linux Format, но я его редко читаю, да и при засилии в нем индийских фамилий как то не заморчиваюсь на авторах.
>То есть команда
>$ sudo apt install —no-install-recommends xsane
>по своим последствиям будет эквивалентна команде
>$ sudo apt-get install xsane
Вроде бы, надо наоборот:
apt install xsane
apt-get —no-install-recommends xsane
Дмитрий, нет, в apt-get опция —no-install-recommends — умолчальная, в apt — нет
из-за чего весь сыр-бор
В менеджере пакетов Synaptic в настройках параметров достаточно отключить опцию Рассматривать как зависимости. Однако при установке некоторых программ без зависимостей они работают не корректно или совсем не хотят запускаться. В таком случае приходится рассматривать рекомендуемые зависимости и доустанавливать необходимые для полноценной работы приложения.
Vita, вызывать Synaptic на каждый чих — не всегда целесообразно.
А на счёт зависимостей — это в общем-то зависит исключительно от майнтайнера, какие считать жёсткими, а какие — любыми прочими. То есть настоящие жёсткие зависимости определяются разработчиком пакета, а вот майнтайнер может добавить в их число и что-то из мягких. Пример xsane тут показательный: в Slackware или Archlinux’е, которые следуют аптсриму, Вы в среди его жёстких зависисмотей не найдёте, например, libgimp, который в deb-пакетах оказывается в Depends.
Алексей! Не так уж часто приходится менять настройки Synaptic. Если только что-то пошло не так… Но заметила, что обновление системы через терминальные команды не всегда полное. При открытии Synaptic обнаруживается ещё несколько обновлений. Но это характерно, скорее всего, только для Ubuntu и на ней based.
>Дмитрий, нет, в apt-get опция —no-install-recommends — умолчальная, в apt — нет
>из-за чего весь сыр-бор
У меня ровно наоборот.
Встретилась такая фраза: «Note that apt-get now installs recommended packages as default and is the preferred program for package management from console to perform system installation and major system upgrades for its robustness.»
https://www.debian.org/doc/manuals/debian-faq/ch-pkgtools.en.html#s-apt-get
Почему сейчас, а раньше? У меня Debian 8.
Сделал так:
sudo echo ‘APT::Install-Recommends «false»;’ >> /etc/apt/apt.conf
после чего «apt-get install» без параметров стал устанавливать без рекомендательных пакетов, «apt install» без параметров продолжает устанавливать также без рекомендаций.
> У меня ровно наоборот.
> У меня Debian 8
Видимо, отличие умолчаний в Debian и Ubuntu.
В частности, в Ubuntu сейчас /etc/apt/apt.conf нет как класса (раньше был).
Vita, у меня прямо противоположные впечатления: apt upgrade чего-то хочет доапгрейдить после Synaptic’а и тем более после mint-update (ну в последнем случае это понятно). Вероятно, зависит от режима обновления Synaptic’а — стандартного или интеллектуального, но не разбирался, так как пользуюсь им в основном для массового удаления, наглядней видно, что purge, а что только remove :)
>В частности, в Ubuntu сейчас /etc/apt/apt.conf нет как класса (раньше был).
В Debian 8 тоже изначально нет, создал его сам.