Алексей Федорчук
Если пакет apt
выступает эпонимом для всего семейства инструментария APT, то утилита apt
, казалось бы, должна быть центральной в этом пакете. Однако это не так: появилась она недавно (1 апреля 2014 года), функционал её ограничен, и она по сей день имеет репутацию нестабильной. Кроме того, о ней не очень любят говорить вслух. Сказывается и путаница — с одноимённой утилитой, существующей только в реализации для Mint’ов (которая, впрочем, тоже не пользуется большой известностью).
Тем не менее, утилита apt
выполняет все обиходные функции по управлению пакетами, обеспечиваемые утилитами apt-cache
и apt-get
. А в использовании она проще этой «сладкой парочки» уже хотя бы тем, что она одна и короткая. Кроме того, она у неё есть и некоторые дополнительные функции.
Что же касается мнения о нестабильности apt
, оно основано предупреждении, предваряющем её действия:
WARNING: apt does not have a stable CLI interface yet. Use with caution in scripts.
Каковое взывает лишь к острожности при использовании её в скриптах. В интерактивном же режиме, используя утилиту apt
со дня её появления, я не обнаружил никаких «not have a stable». Разве что в дистрибутивах проекта Mint её использование связано с маленьким неудобством: вызывать её следует с указанием полного пути:
$ apt
Ибо в ответ на просто apt
запустится команда /usr/locale/bin/apt
— одноимённая реализация для Mint
В любом случае, запущенная без опций и аргументов, команда apt
выводит краткий список своих внутренних команд, исчерпывающий, тем не менее, её возможности:
apt 1.0.9.8 для amd64 скомпилирован Apr 13 2015 12:50:11 Usage: apt [options] command CLI for apt. Basic commands: list - list packages based on package names search - search in package descriptions show - show package details update - update list of available packages install - install packages remove - remove packages upgrade - upgrade the system by installing/upgrading packages full-upgrade - upgrade the system by removing/installing/upgrading packages edit-sources - edit the source information file
Самая интересная команда из этого списка — первая. Данная без указания опций, она выведет список пакетов из всех подключённых для текущей архитектуры репозиториев, как установленных, так и доступных:
Listing… 0ad/stable 0.0.17-1 amd64 0ad-data/stable 0.0.17-1 all 0ad-data-common/stable 0.0.17-1 all 0ad-dbg/stable 0.0.17-1 amd64 ...
Обращаю внимание на второй компонент каждой строки, следующий после слеша и имени пакета. Это — кодовое имя дистрибутива, содержащего пакет, то есть для Debian это может быть stable
, testing
или unstable
, для Ubuntu — что-нибудь типа vivid
или trusty
, для Mint — betsy
. Это пригодится нам, когда речь до установки пакетов.
Пакеты установленные, в том числе и установленные автоматически, будут помечены соответствующим образом:
... zsh/stable,now 5.0.7-5 amd64 [installed] zsh-common/stable,now 5.0.7-5 all [installed,automatic]
В этот же список попадут и пакеты, установленные помимо репозиториев, вручную, также получив соответствующую отметку:
$ apt list G adobe-source ... adobe-sourcecodepro-fonts/now 2.010-23.1 all [installed,local] adobe-sourcehansans-fonts/now 1.002-5.1 all [installed,local] adobe-sourcesanspro-fonts/now 2.010-18.22 all [installed,local] adobe-sourceserifpro-fonts/now 1.014-6.22 all [installed,local]
Внутренняя команда list
имеет три опции: --installed
, --upgradable
и --all-versions
. Назанчение первых двух очевидно, а третья эквивалентна отсутствию опций (то есть подразумевается по умолчанию).
Внутренняя команда search
предназначена для поиска пакетов, как и одноимённая субкоманда утилиты apt-cache
. В отличие от последней, она, кроме имени пакета, номера версии и краткого описания, выводит также имя содержащей пакет ветки репозитория, и его статус:
$ apt search linux-image-liquorix Sorting… Готово Full Text Search… Готово linux-image-liquorix-686/unstable 4.1-9 i386 Linux image for liquorix on modern PCs linux-image-liquorix-686-pae/unstable 4.1-9 i386 Linux image for liquorix on modern PCs linux-image-liquorix-amd64/unstable,now 4.1-9 amd64 [installed] Linux image for liquorix on 64-bit PCs
Различается вывод этих команд и визуально. Напомню, что во втором случае он выглядит так:
$ apt-cache search linux-image-liquorix linux-image-liquorix-amd64 - Linux image for liquorix on 64-bit PCs linux-image-liquorix-686 - Linux image for liquorix on modern PCs linux-image-liquorix-686-pae - Linux image for liquorix on modern PCs
Казалось бы, мелочь? Однако мелочь эта, как вы скоро увидим, экономит немало времени при массовой установке или удалении пакетов в командной строке.
Следующая внутренняя команда, show
, как и её тёзка из apt-cache
, предназначена для вывода подробной информации и о пакете. И информация эта, как ни странно, будет практически идентичной, разве что в выводе apt show
не указывается архитектура и отсутствуют контрольные суммы для пакета:
$ apt show zsh Package: zsh Version: 5.0.7-5 Installed-Size: 2 023 kB Maintainer: Debian Zsh MaintainersDepends: zsh-common (= 5.0.7-5), libc6 (>= 2.15), libcap2 (>= 1:2.10), libtinfo5 Pre-Depends: dpkg (>= 1.17.14) Recommends: libncursesw5 (>= 5.6+20070908), libpcre3 (>= 8.35) Suggests: zsh-doc Homepage: http://www.zsh.org/ Tag: devel::interpreter, implemented-in::c, interface::shell, network::client, protocol::ftp, role::program, scope::utility Section: shells Priority: optional Download-Size: 700 kB APT-Manual-Installed: yes APT-Sources: http://ftp.by.debian.org/debian/ jessie/main amd64 Packages Description: командная оболочка с большим набором возможностей Zsh — это командный интерпретатор UNIX (shell), используемый как интерактивная оболочка и как оболочка для интерпретатора командных сценариев. Из стандартных оболочек zsh наиболее близок к ksh, но содержит множество расширений. Zsh позволяет редактировать командную строку, имеет встроенную проверку правописания, программируемое дополнение команд, функции оболочки (с автозагрузкой), механизм истории и много других возможностей.
Тогда как в apt-cache show
эти соответствующая информация имеется:
$ apt-cache show zsh Package: zsh Version: 5.0.7-5 Installed-Size: 1976 Maintainer: Debian Zsh MaintainersArchitecture: amd64 Depends: zsh-common (= 5.0.7-5), libc6 (>= 2.15), libcap2 (>= 1:2.10), libtinfo5 Pre-Depends: dpkg (>= 1.17.14) Recommends: libncursesw5 (>= 5.6+20070908), libpcre3 (>= 8.35) Suggests: zsh-doc Description-ru: командная оболочка с большим набором возможностей Zsh — это командный интерпретатор UNIX (shell), используемый как интерактивная оболочка и как оболочка для интерпретатора командных сценариев. Из стандартных оболочек zsh наиболее близок к ksh, но содержит множество расширений. Zsh позволяет редактировать командную строку, имеет встроенную проверку правописания, программируемое дополнение команд, функции оболочки (с автозагрузкой), механизм истории и много других возможностей. Description-md5: a129d6b2d23d2d5d3a6b822d3f8f856d Homepage: http://www.zsh.org/ Tag: devel::interpreter, implemented-in::c, interface::shell, network::client, protocol::ftp, role::program, scope::utility Section: shells Priority: optional Filename: pool/main/z/zsh/zsh_5.0.7-5_amd64.deb Size: 700050 MD5sum: 405400b13af8b9cbd44bdb57a50f0bb0 SHA1: 4c5eebd436b1175cb8bfd498ddb76dfd8abb163c SHA256: 9dea36227c4c199bf36031e6e4f6e6ec4f32f454c2ae48c83149e97b74f6e5ce
Как и в случае apt-cache
, для выполнения трёх описанных команд достаточно прав обычного пользователя. Все остальные команды, рассмотрение которых сейчас последует, требуют привилегий администратора, получаемых командой su
в Debian’е или командой sudo
— в Ubuntu и Mint.
Внутренние команды update
и upgrade
идентичны своим тёзкам из apt-cache
, выполняя обновление локального кеша и пакетов системы. Команда full-upgrade
— полный аналог dist-upgrade
из утилиты apt-get
.
Внутреняя команда install
подобна тёзке из утилиты apt-get
и обычно может использоваться точно так же. Различия начинаются, если в системе включены репозитории, содержащие пакеты с одинаковыми базовыми именами, например, различных веток или релизов дистрибутива Debian. При использовании apt-get
для установки пакета из конкретной ветки необходимо задать репозиторий в явном виде, например:
# apt-get install -t experimental xfce4
Для apt
же достаточно задать в качестве аргумента имя пакета так, как оно выводится командами list
или search
:
# apt install linux-image-liquorix-amd64/unstable
Такая форма аргумента не запрещается и в общем случае. Так что можно, не задумываясь о том, где кончается базовое имя пакета, можно всё делать через «мышиный» буфер — выделив имя в выводе двойным щелчком левой кнопки и вставив его в командную строку щелчком средней.
Описанная возможность очень полезна при установке пакетов, но воистину бесценна при массовом их удалении. Ибо выполняющая его внутренняя команда remove
также во-всём подобна тёзке из apt-get
, за исключением того, что воспринимает аргументы в той же форме, что и install
из apt
:
«»
$ sudo apt remove tcsh/stable
Важно помнить, что apt remove
сохраняет в системе конфигурационные файлы, а аналога apt-get purge
в утилите apt
не предусмотрено.
Действие обеих команд, install
, и remove
, может быть инвертировано. Добавление минуса к имени пакета первой приведёт к удалению его:
$ sudo apt install tcsh-
А добавление плюса в аргументе второй — к установке:
$ sudo apt remove tcsh+
В обоих случаях придётся можно использовать только базовое имя, так что именем репозитория придётся пожертвовать. Но зато это удобно для сиюминутной установки случайно удалённого пакета, или удалению пакета, установленного «на поглядеть»: воответствующая команда просто извлекается из истории и плусуется или минусуется. Правда, фича эта не уникальна — в apt-get
она существует, сколько я его помню.
Наконец, последняя из внутренних команд утилиты apt
носит имя edit-sources
и предназначена для редактирования файла описания репозиториев — /etc/apt/sources.list
. Делает это она не сама по себе, а вызывая редактор, который выбирается при первом запуске:
$ sudo apt edit-sources Select an editor. To change later, run 'select-editor'. 1. /bin/ed 2. /bin/nano <---- easiest 3. /usr/bin/mcedit 4. /usr/bin/vim.tiny
vi
в реинкарнации vim.tiny
.
В Mint'ах команда edit-sources
практически бесполезна, репозитории в них описываются в совсем других файлах. Что и покажет команада
# apt edit-sources
открыв в редакторе такую строку:
#/etc/apt/sources.list
Но в Debian'е и Ubuntu она весьма востребована, например, при обновлении с релиза на релиз.
К сказанному мало что может добавить man-страница — разве что описание опций собственно команды apt
. Их немного, и знакомство с ними я оставляю на произвол читаталя.
Сам же тем временем подведу итог. Из представленного рассмотрения следует, что утилита apt
позволяет выполнять все каждодневные действия с пакетами (кроме purge
, clean
, autoremove
и нескольких ещё более редких), интегрируя большинство возможностей apt-get
и apt-cache
. И потому пребывание её в безвестности можно объяснить только тем, что старые Debian'исты привыкли к последним (а то и к «чистому» dpkg
), а молодые Ubuntu'йцы — к копированию команд с сайтов и блогов своих собратьев. И если в Mint'ах, ввиду наличия собственной тёзки, эпонимичный apt
действительно кажется избыточным, то противопоказаний к применению его в Debian'е и Ubuntu я не вижу ни малейших.
В дебиане уже не популярно писать все репы в /etc/apt/sources.list
Принято создавать отдельные файлы в /etc/apt/sources.list.d/
В большинстве deb based популярно, как Вы говорите, писать оф. репы в /etc/apt/sources.list
А в /etc/apt/sources.list.d/ — дописывать репы неофициальные.
Mint — исключение: он не пишет в /etc/apt/sources.list ничего.