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 é uma ferramenta para tornar algumas operações comuns do Portage mais simples. Junto de outras operações, ela pode exibir dependências de pacotes, metadata, e arquivos instalados.

Instalação

Emerge

Equery é parte de um conjunto de ferramentas instalado com o pacote app-portage/gentoolkit:

root #emerge --ask app-portage/gentoolkit

Para informações sobre a instalação do equery ou outras ferramentas visite o artigo Gentoolkit.

Uso

Introdução

equery é uma ferramenta que exibe informações úteis sobre os pacotes instalados no sistema. equery é baseado num sistema de módulos. Todo módulo tem um nome curto. Por exemplo, rodar equery l gcc é o mesmo que rodar equery list gcc. Invocando a opção --help (equery --help) irá mostrar opções globais e listar todos os módulos disponíveis e seus nomes curtos. Adicionar o nome de um módulo ao final (equery --help module) irá mostrar a tela de ajuda para este módulo específico. Por último, rodar man equery fornecerá também uma explicação detalhada de todos os módulos e opções disponíveis junto de alguns exemplos úteis.

Abaixo está uma lista de funcionalidades que funcionam na maioria dos módulos.

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

Assim como o emerge, equery não entende nomes parciais de pacotes:

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

Diferente do emerge, equery aceita englobamento estilo shell no nome do pacote e/ou categoria:

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

A maioria dos módulos do equery tem múltipla saída:

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)

Alguns módulos também permitem totalmente expressões regulares:

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
[...]
Note
O suporte a englobamento substituiu algumas opções antigas do equery. Por exemplo, para agir em todos os pacotes em um certo conjunto, use um '*' (asterisco). Para agir em todos os pacotes de uma categoria, use 'nome-da-categoria/*'.
Warning
Não esqueça de colocar a entrada entre aspas ao usar caracteres especiais do shell como asteriscos ou sinais de maior que/menor que.

As próximas seções neste documento darão uma introdução rápida aos diferentes módulos do equery.

Capacidades

Para uma lista de todas as capacidades do equery, apenas rode o seguinte comando sem argumentos:

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

Aliases

Uma abordagem comum ao trabalhar com o equery é criar aliases. Ao usar o bash eles normalmente são colocados no arquivo ~/.bashrc:

FILE ~/.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'

Encontrando um pacote ao qual um arquivo pertence (b)

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

belongs procura por arquivos correspondendo à uma expressão regular com a opção -f. A opção -e para a busca ao encontrar um resultado correspondente. Como nenhum arquivo em seu sistema deve ser propriedade de dois pacotes, esta é uma otimização segura.

Uma versão encurtada de belongs (b) também pode ser usada. Por exemplo, para listar a qual pacote equery pertence:

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)

Visualizando entradas do ChangeLog com changes (c)

changes permite ao usuário visualizar entradas do ChangeLog para uma ou várias versões de um pacote. Imagine após rodar um emerge --sync, o Portage exibir uma mensagem dizendo que será atualizado. Para ver o que mudou este comando pode ser usado:

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.

Verificando integridade de pacotes com check (k)

Por vezes é útil verificar a integridade dos pacotes. equery pode verificar MD5 bem como timestamps para indicar quando um pacote pode estar corrompido, substituído ou removido.

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

Listando todos os pacotes que dependem de outro com depends (d)

Já se perguntou por que um certo pacote foi instalado no sistema? equery pode dizer quais pacotes listam este como dependência com a opção depends. Inclua dependências indiretas com a opção -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)
[...]

Um segundo exemplo lista todos os pacotes dependendo diretamente de 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)
Nota
Esta saída irá incluir dependências opcionais controladas pelas flags USE, isto é, a USE acl em (acl ? >=sys-fs/udev-146-r1) acima, mesmo se essa flag USE não estiver ativa. Um pacote apenas será uma dependência se essa flag USE estiver ativa.

Obtendo gráficos de dependências com depgraph (g)

depgraph é o oposto de depends. Ele irá encontrar todos os ebuilds dos quais um dado pacote depende (e não os ebuilds que dependem deste pacote). Quando ele encontra uma dependência, irá recursivamente buscar as dependências daquele pacote. Controle o quão a fundo a árvore consegue com a opção --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)
[...]

Reparou como jre é uma dependência direta e jdk é uma dependência indireta se a USE flag java USE está definida?

Listando arquivos instalados por um pacote com files (f)

equery pode listar todos os arquivos instalados por um ebuild com o módulo files. Tente --tree para obter um layout de diretório de fácil leitura. Use --filter para encontrar apenas um determinado tipo de arquivo. Por exemplo, para encontrar onde executáveis foram instalados use --filter=cmd, ou para encontrar rapidamente o local do arquivo de configuração tente --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
[...]

Outro exemplo, para listar todos os arquivos instalados pelo 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

Descrições de outros módulos e flags de linha de comando adicionais podem ser encontrados na man page do equery (man equery).

Procurando por pacotes que tem uma USE flag específica com hasuse (h)

hasuse pode ser usado para encontrar pacotes com uma determinada USE flag. hasuse não irá indicar se a flag foi habilitada ou não; simplesmente exibe uma lista de ebuilds que tem a flag consultada como opção. Veja a seção EXAMPLES de hasuse na man page do equery para mais dicas sobre como obter este tipo de informação.

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)

Listando pacotes com list (l)

list é um módulo simples, porém poderoso para listar pacotes instalados da árvore do Portage ou de um overlay.

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)
[...]

A consulta padrão irá buscar pacotes instalados para o nome de pacote informado. Passado com '*' exibe os pacotes no conjunto. No campo mais à esquerda é possível ver que todos os pacotes acima estão I(nstalados) e oriundos da árvore do P(ortage). Eles não estão mascarados (o segundo campo está vazio), e todos estão instalados no slot padrão (0).

Use opções locais para buscar pacotes na árvore do Portage e overlays.

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)

Neste é possível ver que a versão 7.2.182 está instalado e não há versões disponíveis de um overlay. Usuários podem ver quais versões estão mascaradas com ~ no segundo campo.

Visualizando metadata de pacotes com meta (m)

Cada pacote na árvore do Portage fornece ao menos algum metadata sobre seu mantenedor, etc. O amontoado de informações úteis depende de quanto os mantenedores decidiram fornecer. Sem opções, meta retorna algumas informações básicas e úteis.

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

Alguns mantenedores fornecem informações extras sobre os pacotes que podem ser úteis:

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.

Encontrando tamanho de pacotes com size (s)

Já ficou curioso pra saber quanto espaço um pacote está ocupando? Como um pacote pode ter seus arquivos em um número de diretórios, o comando du -hc de sempre pode não dar a noção correta. Mas não se preocupe, equery ao resgate!

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

Use size para exibir o espaço total usado em unidades legíveis e listar o número total de arquivos que um pacote possui. Para obter o tamanho total em bytes use --bytes.

Listando USE flags por pacote com uses (u)

O módulo do equery uses fornece informações sobre quais USE flags estão disponíveis para um certo pacote e quais dessas flags estão ativas no momento.

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)

Aqui está um número de USE flags ativas no pacote de plugins do gstreamer, mas pode ser visto que há outras USE flags disponíveis. Para mais informações sobre USE flags, consulte o capítulo USE Flags do Gentoo Handbook.

Encontrando o caminho dos ebuilds com which (w)

which é um script simples para ajudar os usuários a encontrar rapidamente o caminho de um ebuild. Se o nome de um pacote não versionado é passado usando which retornará o caminho para a versão do ebuild instalável mais recente. Em outras palavras, irá retornar o ebuild que o Portage usaria se emerge example/package fosse digitado. which também aceita um pacote versionado para conseguir o caminho para o ebuild citado.

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

Por último, se nenhuma das funcionalidade acima do equery deram alguma resposta, tente usar which para buscar manualmente um ebuild com programas tais como cat, less ou grep:

user $grep HOMEPAGE $(equery which gentoolkit)
HOMEPAGE="http://www.gentoo.org/proj/en/portage/tools/index.xml"
Warning
Esteja atento que equery atualmente altera o formato da saída se a mesma é empilhada. O formato vertical visa ser mais fácil de ser analisado por outras ferramentas, mas pode ser desativado adicionando a opção --no-pipe. Ao escrever scripts que usem equery fique atento a este comportamento.

Veja também

  • q applets- Uma coleção de ferramentas auxiliares pequenas e rápidas do Portage escritas em C.
  • eix- Um conjunto de utilitários para pesquisas e diferenças na árvore local do Portage e overlays usando cache binário.
  • Gentoolkit - Um conjunto de ferramentas para facilitar a administração de um sistema Gentoo.