Comando para encontrar o pacote fonte de um binário?


33

Eu sei que há um whichcomando que ecoa o nome completo de um binário (por exemplo which sh). No entanto, tenho certeza de que existe um comando que ecoa o pacote que fornece um binário específico. Existe esse comando? Se assim for, o que é? Eu gostaria de poder executar isso:

commandName ls

e pegue

coreutils

por exemplo.

Respostas:


36

Eu acho que você está procurando o dpkg -Scomando (veja também as opções usadas com freqüência para o dpkg ).


4
Obrigado! dpkg -S `which COMMANDHERE`trabalhou para mim.
Delan Azabani

Gentoo: qfile <name>
Sergei

dpkg -Slocaliza o nome do nome do pacote binário, que pode ser diferente do nome do pacote de origem (código).
Tino

Apenas para completar, -Sé a forma abreviada da --searchopção, que é realmente uma opção para o dpkg-querycomando (mas simples dpkgobras também)
waldyrious

10

Se você deseja encontrar arquivos em um pacote que você não instalou, use o apt-file

apt-get install -y apt-file
apt-file update

Então, para encontrar algo:

apt-file search /usr/bin/file

ou

apt-find search file

Onde "arquivo" é o nome do que você está procurando.

Se você não deseja passar por isso em todos os sistemas debian, pode usar este script:

#!/bin/bash
which apt-get >/dev/null || { echo apt-get not found >&2; exit 1; }
which apt-file >/dev/null || { apt-get install -y apt-file;  apt-file update; }
unset i; IFS=$'\x0a'; select i in $( apt-file search "/$@" ); do 
    test -n "$i" || break; apt-get install "${i%% *}"; done

Acabei de fazer isso, mas parece funcionar bem.

Nota: "dpkg -S" encontra apenas as coisas que você já instalou.


3
O uso do -yparâmetro é perigoso, pode-se dizer sim a várias coisas. No script, pode ser bom, mas o primeiro comando deve realmente ler apt-get install apt-filesem o, -ypois você não pode saber como é o sistema do usuário.
jmiserez
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.