Equery

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Equery and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎italiano • ‎português do Brasil • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어

equery это инструмент, делающий некоторые операции Portage проще. Среди прочих операций есть возможность показать зависимости пакетов, метаданные и установленные файлы.

Установка

Emerge

Equery является частью набора инструментов, установленных пакетом app-portage/gentoolkit.

root #emerge --ask app-portage/gentoolkit

Для получения информации об установке equery или других инструментов посетите статью Gentoolkit.

Использование

Введение

equery — это инструмент, который показывает полезную информацию об установленных в системе пакетах. equery сделан на основе модулей. У каждого модуля есть короткое имя. Например, запустить equery l gcc это тоже самое, что и запустить equery list gcc. Если вызвать опцию the --help, то (equery --help) отобразит глобальные опции и список всех доступных модулей с их короткими именами. Если добавить имя модуля в конце (equery --help module), то отобразится справочная информация для этого модуля. И, наконец, проверьте man equery, который также предоставит подробные объяснения для всех доступных модулей и опций, только теперь с полезными примерами.

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

user $equery --quiet list gcc
sys-devel/gcc-4.3.2-r3
user $equery --quiet list sys-devel/gcc
sys-devel/gcc-4.3.2-r3
user $equery --quiet list '>=sys-devel/gcc-4'
sys-devel/gcc-4.3.2-r3

Как и emerge, equery не понимает частичные названия пакетов:

user $equery check zilla
!!! No package found matching zilla

В отличие от emerge, equery может принимать подстановку подобно shell в категории и/или названии пакета:

user $equery check '*zilla*'
 * Checking www-client/mozilla-firefox-3.0.14 ...
    90 out of 90 files passed
user $equery check 'www-c*/*'
 * Checking www-client/links-2.2 ...
   30 out of 30 files passed
 * Checking www-client/mozilla-firefox-3.0.14 ...
   90 out of 90 files passed

Большинство модулей equery принимают многократный ввод:

user $equery hasuse sse sse2
 * Searching for USE flag sse ...
[IP-] [  ] media-libs/flac-1.2.1-r3 (0)
[IP-] [  ] media-libs/speex-1.2_beta3_p2 (0)
  
 * Searching for USE flag sse2 ...
[IP-] [  ] dev-libs/openssl-0.9.8k (0)
[IP-] [  ] x11-libs/pixman-0.16.0 (0)

Несколько модулей также позволяют полностью регулярные выражения:

user $equery -q list --portage-tree --full-regex '[kr]?flickr.*'
dev-dotnet/flickrnet-bin-2.2
dev-ruby/flickr-1.0.2-r1
dev-ruby/flickr-1.0.2-r2
dev-ruby/rflickr-20060201
media-gfx/kflickr-0.6
[...]
Заметка
Поддержка подстановки заменена несколькими старыми опциями в equery. Например, чтобы взаимодействовать со всеми пакетами в определенном сете, используйте '*'. Чтобы взаимодействовать со всеми пакетами в категории, используйте 'category-name/*'.
Предупреждение
Не забывайте помещать ввод в кавычки при использовании каких-либо символов оболочки shell, такие как звездочки или знаки больше/меньше.

Следующие несколько разделов в этом документе дают краткий обзор других модулей equery.

Возможности

Чтобы увидеть все возможности equery, просто запустите его без всяких опций:

user $equery
Gentoo package query tool
Usage: equery [global-options] module-name [module-options]
 
modules (short name)
 (b)elongs               list what package FILES belong to
 (c)hanges               list changelog entries for ATOM
 chec(k)                 verify checksums and timestamps for PKG
 (d)epends               list all packages directly depending on ATOM
 dep(g)raph              display a tree of all dependencies for PKG
 (f)iles                 list all files installed by PKG
 h(a)s                   list all packages for matching ENVIRONMENT data stored in /var/db/pkg
 (h)asuse                list all packages that have USE flag
 ke(y)words              display keywords for specified PKG
 (l)ist                  list package matching PKG
 (m)eta                  display metadata about PKG
 (s)ize                  display total size of all files owned by PKG
 (u)ses                  display USE flags for PKG
 (w)hich                 print full path to ebuild for PKG

Алиасы

Часто, при работе с equery, создают алиасы для удобства. При использовании bash их размещают обычно в файле ~/.bashrc:

Файл ~/.bashrc
alias eqf='equery f'
alias equ='equery u'
alias eqh='equery h'
alias eqa='equery a'
alias eqb='equery b'
alias eql='equery l'
alias eqd='equery d'
alias eqg='equery g'
alias eqc='equery c'
alias eqk='equery k'
alias eqm='equery m'
alias eqy='equery y'
alias eqs='equery s'
alias eqw='equery w'

Поиск пакета, которому принадлежит файл с помощью belongs (b)

user $equery belongs -e /usr/bin/glxgears
 * Searching for /usr/bin/glxgears ...
 x11-apps/mesa-progs-7.5.1 (/usr/bin/glxgears)

belongs может искать файлы, соответствующие регулярному выражению с помощью опции -f. Опция -e прекращает поиск после того, как найдет совпадение. Поскольку ни один файл в системе не должен принадлежать двум пакетам, это безопасная оптимизация.

Также можно использовать короткую версию belongs (b). Например, чтобы показать какому пакету принадлежит equery:

user $equery b equery
 * Searching for equery ... 
app-portage/gentoolkit-0.3.0.8-r2 (/usr/lib/python-exec/python2.7/equery)
app-portage/gentoolkit-0.3.0.8-r2 (/usr/lib64/python3.3/site-packages/gentoolkit/test/equery)
app-portage/gentoolkit-0.3.0.8-r2 (/usr/bin/equery -> ../lib/python-exec/python-exec2)
app-portage/gentoolkit-0.3.0.8-r2 (/usr/lib64/python2.7/site-packages/gentoolkit/equery)
app-portage/gentoolkit-0.3.0.8-r2 (/usr/lib/python-exec/python3.3/equery)
app-portage/gentoolkit-0.3.0.8-r2 (/usr/lib64/python2.7/site-packages/gentoolkit/test/equery)
app-portage/gentoolkit-0.3.0.8-r2 (/usr/lib64/python3.3/site-packages/gentoolkit/equery)

Просмотр ChangeLog с помощью changes (c)

changes позволяет пользователю просматривать ChangeLog для одной или нескольких версий пакета. Допустим, после запуска emerge --sync Portage выводит сообщение говорящее, что нужно обновить его. Чтобы увидеть что изменится, можно использовать эту команду:

user $equery changes portage
*portage-2.1.6.13 (03 May 2009)
  
  03 May 2009; Zac Medico <zmedico@gentoo.org> +portage-2.1.6.13.ebuild:
  2.1.6.13 bump. This fixes bug #268398 (document econf automatic die)
  and bug #267104 (handle insufficient space interaction with userfetch).
  Bug #268228 tracks all bugs fixed since 2.1.6.11.

Проверка целостности пакета с помощью check (k)

Иногда бывает полезно проверить целостность пакета. equery может проверить контрольные суммы MD5, а также временные метки, чтобы определить, когда пакет мог быть поврежден, заменен или удален.

user $equery check gentoolkit
 * Checking app-portage/gentoolkit-0.3.0_rc7 ...
   71 out of 71 files passed

Показать список всех пакетов зависящих от пакета с помощью depends (d)

Никогда не задумывались, почему определенный пакет был установлен в системе? equery может сказать, какие пакеты являются зависимостями, с помощью depends. Включая косвенные зависимости с помощью опции -D.

user $equery depends pygtk
 * Searching for pygtk ...
app-admin/pessulus-2.24.0 (>=dev-python/pygtk-2.6.0)
app-editors/gedit-2.24.3 (python ? >=dev-python/pygtk-2.12)
dev-libs/libgweather-2.24.3 (python ? >=dev-python/pygtk-2)
dev-python/gnome-python-base-2.22.3 (>=dev-python/pygtk-2.10.3)
dev-python/gnome-python-desktop-base-2.24.1 (>=dev-python/pygtk-2.10.3)
[...]

Второй пример показывает список пакетов непосредственно зависящих от udev:

user $equery d udev
sys-auth/consolekit-0.4.5_p20120320 (acl ? >=sys-fs/udev-146-r1)
sys-fs/cryptsetup-1.4.1 (>=sys-fs/udev-124)
                        (>=sys-fs/udev-182[static-libs])
                        (<=sys-fs/udev-171-r6)
sys-fs/lvm2-2.02.88 (>=sys-fs/udev-151-r4)
virtual/dev-manager-0 (sys-fs/udev)
x11-libs/cairo-1.10.2-r2 (drm ? >=sys-fs/udev-136)
Заметка
Вывод включает в себя дополнительные зависимости, регулируемые USE-флагами, например, acl USE в (acl ? >=sys-fs/udev-146-r1) в вышеприведенном примере, даже если этот USE-флаг не установлен. Пакет является зависимостью только в том случае, если USE-флаг установлен.

Получение графа зависимостей с помощью depgraph (g)

depgraph является противоположностью depends. Он найдет все ebuild от которых зависит пакет (не ebuild, которые зависят от этого пакета). Когда он находит зависимость, то будет рекурсивно искать зависимости для этой зависимости. Контроль глубины древа поиска осуществляется опцией --depth.

user $equery depgraph mozilla-firefox
 * Searching for mozilla-firefox ...
 * dependency graph for www-client/mozilla-firefox-2.0.0.19:
`-- www-client/mozilla-firefox-2.0.0.19
 `-- virtual/jre-1.6.0 (virtual/jre) [java]
  `-- virtual/jdk-1.6.0 (virtual/jdk-1.6.0*)
  `-- dev-java/icedtea6-bin (unable to resolve: package masked or removed)
   `-- dev-java/sun-jdk-1.6.0.15
    `-- dev-java/java-sdk-docs-1.6.0.10 [doc]
     `-- app-arch/unzip-6.0-r1
      `-- app-arch/bzip2-1.0.5-r1 [bzip2]
    `-- sys-libs/glibc-2.9_p20081201-r2
     `-- sys-devel/gettext-0.17 [nls]
      `-- virtual/libiconv-0 (virtual/libiconv)
[...]

Обратите внимание, как jre является прямой зависимостью и jdk становится косвенной зависимостью, если задействован USE-флаг java.

Вывод списка файлов, установленных пакетом с помощью files (f)

equery может показать список всех файлов, установленных с помощью ebuild, используя модуль files. Попробуйте --tree, чтобы получить удобочитаемую структуру директорий. Используйте --filter, чтобы найти определенный тип файла. Например, чтобы найти, где были установлены исполняемые файлы, используйте --filter=cmd и для того, чтобы быстро найти местоположение файла конфигурации, попробуйте --filter=conf.

user $equery files --tree gentoolkit
 * Searching for gentoolkit ...
 * Contents of app-portage/gentoolkit-0.3.0_rc7:
 /etc
   > /eclean
      + distfiles.exclude
      + packages.exclude
   > /env.d
      + 99gentoolkit-env
   > /revdep-rebuild
      + 99revdep-rebuild
 /usr
   > /bin
      + eclean
      + eclean-dist -> eclean
      + eclean-pkg -> eclean
      + epkginfo
      + equery
      + eread
      + euse
      + glsa-check
      + revdep-rebuild
   > /lib
      > /python2.6
         > /site-packages
            > /gentoolkit
            + gentoolkit-0.3.0_rc7-py2.6.egg-info
               + __init__.py
               > /equery
                  + __init__.py
                  + belongs.py
                  + changes.py
                  + check.py
                  + depends.py
                  + depgraph.py
                  + files.py
[...]

Другой пример показывает все файлы установленные пакетом media-sound/ncmpcpp:

user $equery f ncmpcpp
 * Searching for ncmpcpp ...
 * Contents of media-sound/ncmpcpp-0.5.10:
/usr
/usr/bin
/usr/bin/ncmpcpp
/usr/share
/usr/share/bash-completion
/usr/share/bash-completion/ncmpcpp
/usr/share/doc
/usr/share/doc/ncmpcpp-0.5.10
/usr/share/doc/ncmpcpp-0.5.10/AUTHORS.bz2
/usr/share/doc/ncmpcpp-0.5.10/NEWS.bz2
/usr/share/doc/ncmpcpp-0.5.10/config.bz2
/usr/share/doc/ncmpcpp-0.5.10/keys.bz2
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/ncmpcpp.1.bz2

Описание для других модулей и дополнительных флагов командной строки можно найти в equery man page (man equery).

Ищите пакеты, имеющие конкретный USE-флаг, с помощью hasuse (h)

hasuse может быть использован для поиска пакетов с определенным USE-флагом. hasuse не отобразит включен флаг или нет; он просто выводит список ebuild, у которых имеется запрашиваемый флаг в качестве опции. Смотрите раздел EXAMPLES для hasuse в equery man странице для получения дополнительной информации.

user $equery hasuse qt3 qt4
 * Searching for USE flag qt3 ...
[IP-] [  ] app-crypt/pinentry-0.7.5 (0)
[IP-] [  ] net-dns/avahi-0.6.24-r2 (0)
[IP-] [  ] net-wireless/wpa_supplicant-0.6.9 (0)
  
 * Searching for USE flag qt4 ...
[IP-] [  ] net-dns/avahi-0.6.24-r2 (0)
[IP-] [  ] net-wireless/wpa_supplicant-0.6.9 (0)

Список пакетов с помощью list (l)

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

user $equery list '*'
 * Searching for * ...
[IP-] [  ] app-admin/eselect-1.2.3 (0)
[IP-] [  ] app-admin/eselect-ctags-1.10 (0)
[IP-] [  ] app-admin/eselect-esd-20060719 (0)
[IP-] [  ] app-admin/eselect-fontconfig-1.0 (0)
[IP-] [  ] app-admin/eselect-opengl-1.0.8-r1 (0)
[IP-] [  ] app-admin/eselect-python-20090824 (0)
[IP-] [  ] app-admin/eselect-ruby-20081227 (0)
[IP-] [  ] app-admin/eselect-vi-1.1.5 (0)
[IP-] [  ] app-admin/perl-cleaner-1.05 (0)
[IP-] [  ] app-admin/pessulus-2.24.0 (0)
[IP-] [  ] app-admin/python-updater-0.7 (0)
[IP-] [  ] app-admin/sudo-1.7.2_p1 (0)
[...]

Стандартный запрос будет искать установленные пакеты для заданного имени пакета. Указывание '*' отобразит все пакеты в сете. В крайнем левом поле, можно увидеть, что все вышеперечисленные пакеты установлены I(nstalled) и из дерева P(ortage). Они не замаскированы (второе поле пустым), и все они установлены в слот по умолчанию (0).

Используйте локальные параметры для поиска пакетов в дереве Portage и оверлеях.

user $equery list -po vim
 * Searching for vim ...
[-P-] [  ] app-editors/vim-7.0.235 (0)
[-P-] [ ~] app-editors/vim-7.0.243 (0)
[-P-] [  ] app-editors/vim-7.1.123 (0)
[-P-] [ ~] app-editors/vim-7.1.330 (0)
[-P-] [  ] app-editors/vim-7.2 (0)
[-P-] [ ~] app-editors/vim-7.2.108 (0)
[IP-] [  ] app-editors/vim-7.2.182 (0)
[-P-] [ ~] app-editors/vim-7.2.238 (0)
[-P-] [ ~] app-editors/vim-7.2.264 (0)

В этом примере можно увидеть, что версия 7.2.182 установлена и нет версий, доступных из оверлея. Пользователи могут увидеть, какие версии замаскированы keyword ~ во втором поле.

Просмотр метаданных пакета с помощью meta (m)

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

user $equery meta gnucash
 * app-office/gnucash [gentoo]
 Maintainer:  tove@gentoo.org (Torsten Veller)
 Upstream:    None specified
 Location:    /usr/portage/app-office/gnucash
 Keywords:    2.2.9-r1:0: alpha amd64 ppc sparc x86
 Keywords:    2.2.9-r2:0:
 Keywords:    2.3.8:0:
 Keywords:    2.3.10:0: ~alpha ~amd64 ~ppc ~sparc ~x86

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

user $equery meta --description emacs
 * app-editors/emacs
  GNU Emacs is an extensible, customizable text editor - and more. At its core
  is an interpreter for Emacs Lisp, a dialect of the Lisp programming language
  with extensions to support text editing. The features of GNU Emacs include:
   * Content-sensitive editing modes, including syntax coloring, for a wide
     variety of file types including plain text, source code, and HTML.
   * Complete built-in documentation, including a tutorial for new users.
   * Support for many languages and their scripts, including all the European
     "Latin" scripts, Russian, Greek, Japanese, Chinese, Korean, Thai,
     Vietnamese, Lao, Ethiopian, and some Indian scripts.
   * Highly customizable, using Emacs Lisp code or a graphical customization
     interface.
   * A large number of extensions that add other functionality, including a
     project planner, mail and news reader, debugger interface, calendar, and
     more. Many of these extensions are distributed with GNU Emacs; others are
     available separately.

Определение размера пакета с помощью size (s)

Когда-нибудь было любопытно узнать, сколько места занимает конкретный пакет? Поскольку пакет может иметь свои файлы в нескольких каталогах, обычный du -hc не сможет дать корректную информацию. Не волнуйтесь, equery поможет!

user $equery size openoffice-bin
 * app-office/openoffice-bin-3.1.1
         Total files : 4624
         Total size  : 361.38 MiB

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

Список USE-флагов по-пакетно с помощью uses (u)

Модуль uses из equery может предоставить информацию о том, какие USE-флаги доступны для определенного пакета, и какие из этих флагов в настоящее время активны.

user $equery uses gst-plugins-meta
 * Searching for gst-plugins-meta ...
[ Legend : U - flag is set in make.conf       ]
[        : I - package is installed with flag ]
[ Colors : set, unset                         ]
 * Found these USE flags for media-plugins/gst-plugins-meta-0.10-r2:
 U I
 + + X      : Adds support for X11
 - - a52    : Enables support for decoding ATSC A/52 streams used in DVD
 + + alsa   : Adds support for media-libs/alsa-lib (Advanced Linux Sound
              Architecture)
 - - dvb    : Adds support for DVB (Digital Video Broadcasting)
 + + dvd    : Adds support for DVDs
 + + esd    : Adds support for media-sound/esound (Enlightened Sound Daemon)
 + + ffmpeg : Enable ffmpeg-based audio/video codec support
 + + flac   : Adds support for FLAC: Free Lossless Audio Codec
 - - mad    : Adds support for mad (high-quality mp3 decoder library and cli
              frontend)
 + + mpeg   : Adds libmpeg3 support to various packages
 - - mythtv : Support for retrieval from media-tv/mythtv backend
 + + ogg    : Adds support for the Ogg container format (commonly used by
              Vorbis, Theora and flac)
 - - oss    : Adds support for OSS (Open Sound System)
 + + theora : Adds support for the Theora Video Compression Codec
 + + vorbis : Adds support for the OggVorbis audio codec
 - - xv     : Adds in optional support for the Xvideo extension (an X API for
              video playback)

Здесь несколько USE-флагов, которые включены в метапакете плагинов gstreamer, но, как можно увидеть, доступны и другие USE-флаги. За более подробной информацией о USE flags, пожалуйста обратитесь к главе USE-флаги из Gentoo Handbook.

Поиск пути к ebuild с помощью which (w)

which представляет собой простой скрипт, который поможет пользователям быстро найти путь к ebuild-файлу. Если which указать пакет без версии, то он вернет путь к самому новому ebuild, который можно установить. Другими словами, это бы вернуло ebuild, который Portage использовал бы, если была бы использована команда emerge example/package. which также понимает версии пакета и вернет путь к этому ebuild.

user $equery which gnome
/usr/portage/gnome-base/gnome/gnome-2.26.3.ebuild

И, наконец, если ни одна из перечисленных выше опций equery не нашли что искали, попробуйте использовать which для поиска вручную ebuild вместе с такими программами как cat, less или grep:

user $grep HOMEPAGE $(equery which gentoolkit)
HOMEPAGE="http://www.gentoo.org/proj/en/portage/tools/index.xml"
Предупреждение
Знайте, что equery в настоящее время меняет формат вывода, если оно направлено через pipe. Формат pipe предназначен для облегчения анализа утилитами, но это можно отключить, добавив опцию --no-pipe. Если пишете скрипты, которые используют equery, то должны быть осведомлены о таком поведении.

Смотрите также

  • q applets — коллекция небольших и быстрых вспомогательных инструментов Portage, написанных на языке C.
  • eix — набор утилит для поиска и сравнения локального дерева Portage и оверлеев с помощью бинарного кэша.
  • Gentoolkit — набор инструментов для упрощения администрирования системы Gentoo.