Pular para o conteúdo

Arch Linux - Como listar comando e seu respectivo pacote

Dica publicada em Linux / Comandos
Perfil removido removido
Hits: 9.989 Categoria: Linux Subcategoria: Comandos
  • Indicar
  • Impressora
  • Denunciar

Arch Linux - Como listar comando e seu respectivo pacote

Esta dica é útil quando precisamos saber em qual pacote instalado contém determinado comando ou binário. Por exemplo, o “/usr/bin/startx”.

No Slackware, o comando seria da seguinte forma:

# grep <comando> /var/log/packages/*

O comando acima retorna a localização de <comando> e seu respectivo pacote.

No Arch Linux, existe uma forma semelhante de se fazer isso.

# pacman -Qq | xargs pacman -Ql | grep <comando>

Por exemplo, para sabermos qual pacote é responsável por disponibilizar o comando "startx":

# pacman -Qq | xargs pacman -Ql | grep startx$

O resultado do comando acima:
xorg-xinit /usr/bin/startx

A expressão regular startx$, informa ao comando grep que retorne apenas resultados que terminem em startx.

Por exemplo: /usr/bin/startx

Isto evita que resultados como: /usr/share/man/man1/startx.1.gz, sejam retornados.

Se não usássemos o '$' no comando acima, o resultado seria isto:

# pacman -Qq | xargs pacman -Ql | grep startx
xorg-xinit /usr/bin/startx
xorg-xinit /usr/share/man/man1/startx.1.gz

Listando outros comandos, o resultado seria imenso se não usar o '$' no final do comando.

Para simplificar o comando de busca, podemos criar um 'alias' denominado 'grep_pkg', adicionando a seguinte linha no “~/.bashrc”:

alias grep_pkg='pacman -Qq | xargs pacman -Ql | grep'


Sendo assim, executando:

# grep_pkg startx$

O resultado seria mesmo. ;-)

Copiando e colando texto da web sem formatação

Traduzindo programas no Ubuntu 7.04

Shutter: captura de tela e edição

O que fazer após instalar LMDE 3

Instale o Spotify no Ubuntu e derivados

Gerenciar pacotes em baixo nível no Debian

LXDE - Preferências da Área de Trabalho

Limite de banda (bandwidth) nos comandos scp e rsync

Listando arquivos pela data

Buscando palavras (strings) em arquivos dentro de diretório recursivamente

#1 Comentário enviado por eldermarco em 29/03/2012 - 11:53h
Olá,

Você pode usar o comando pkgfile para isso. Por exemplo, no caso do comando startx:

$ pkgfile startx
extra/xorg-xinit

Bem simples.
#2 Comentário enviado por andre.vmatos em 29/03/2012 - 13:12h
Ou então pegar o path completo do binário e verificar a qual pacote ele pertence:
# pacman -Qo `which startx`
#3 Comentário enviado por removido em 29/03/2012 - 18:39h
Olá,

Obrigado pelo esclarecimento, sou um new user no Arch. O pkgfile, se não me engano, só lista pacotes que pertencem a arvore oficial do arch, ou estou enganado? Tentei listar um binário que construí usando o pkgbuild, e não apareceu...

Quanto ao "pacman -Qo", perfeito, era o que eu precisava. Valeu pela dica. Fiz de uma forma "Slackware" para listar os pacotes no arch, ainda não conheço bem o pacman e suas ferramentas.
#4 Comentário enviado por eldermarco em 29/03/2012 - 20:31h
@run4n. Está enganado. Mas não completamente. Para um dado arquivo de um dado pacote o pkgfile procura por ele nos repositórios adicionados no seu sistema. Por exemplo, eu adicionei o archlinuxfr como repositório no meu sistema também. E veja:

$ pkgfile yaourt
archlinuxfr/yaourt

Isso porque existe um arquivo archlinuxfr.db em /var/lib/pacman/sync que é mantido atualizado toda vez que sincronizo os os repositórios. Ele procura nesses arquivos. Isso explica também o porquê de não aparecer os pacotes do AUR. As coisas são diferentes nesse caso, não existe um arquivo .db com todos os arquivos de um dado pacote. Com relação aos que você criou, você poderia setar um repositório local no diretório /srv e manter ele atualizado, O yaourt permite salvar pacotes compilados no diretório de escolha do usuário. Daí o pkgfile irá mostrar eles também. No entanto, nesse caso eu acho mais prática a dica do andre.vmatos.
#5 Comentário enviado por removido em 30/03/2012 - 07:08h
Obrigado elder pela explicação.

Estou gostando muito do Arch, pra mim ele é um Slackware tunado com pacotes mais novos e cheio de novidades. rs

E até que o arch é estável, mesmo usando pacotes tão recentes. Pelo menos aqui não estou tendo problemas com instabilidade.
#6 Comentário enviado por removido em 30/03/2012 - 08:33h
me tirem uma duvida...
o atibuto Q do pacman não eh pra buscar dados da base local???
sendo assim, porque todo esse comando???

o resultado desse comando:
$ pacman -Qq | xargs pacman -Ql | grep vinagre$
vinagre /usr/bin/vinagre

é igual ao desse!!
$ which vinagre
/usr/bin/vinagre

não seria mais fácil usar apenas o which? ou esse comando mostra algo mais que eu ainda não percebi?
#7 Comentário enviado por eldermarco em 30/03/2012 - 09:34h
@run4n, Eu também gostei bastante do Arch. Pra mim ele não foi instável não.

@undr3ad, É sim. Você não entendeu bem esse comando. Ele diz o seguinte: Pegue só o nome de todos os pacotes instalados no sistema (pacman -Qq) e então, para cada um deles, pegue todos os todos os seus arquivos (xargs pacman -Ql) e então filtre e exiba na tela apenas aquele em que a linha terminar em vinagre (grep vinagre$).

Poderia se fazer assim também, conforme sugerido pelo colega mais acima:

$ pacman -Qo `which vinagre`

Desde que saiba pelo menos o nome de um arquivo que pertença ao pacote do que você quer descobrir o nome.
#8 Comentário enviado por removido em 30/03/2012 - 12:47h
@undr3ad,

é isso mesmo que o @eldermarco explicou. Todo o comando pode ser simplificado com o "pacman -Qo", inclusive biliotecas, man pages, e arquivos de configuração, o pacman retorna o nome do pacote.

Contribuir com comentário

Entre na sua conta para comentar.