Arch Linux - Como listar comando e seu respectivo pacote

Publicado por Ruan em 29/03/2012

[ Hits: 7.474 ]

 


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. ;-)

Outras dicas deste autor

Instalando a última versão do Firefox no Slackware com AutoUpdate

Montando um disco virtual (.vdi) no sistema hospedeiro

Removendo por completo o snappy do Ubuntu 20.04

Slackware "Debiano"

mysqldump - Unknown table 'COLUMN_STATISTICS' in ... [Resolvido]

Leitura recomendada

Ativando a conta root no Ubuntu

Mais um vídeo do LinuxTips: sysdig

Resposta automática no seu e-mail

Substituição de strings no VI

Vídeo aula: Como colocar wallpaper comum a todos os usuários

  

Comentários
[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 ruankl 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 ruankl 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 undr3ad 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 ruankl 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