Para pacotes instalados
Esse é um trabalho para dpkg-query
.
dpkg-query -S /path/to/file
fornece o nome do pacote que instalou o arquivo correspondente. Você vai querer usar o caminho exato para obter uma saída sem desordem, por sorte /sbin/ifconfig
como no seu caso pode ser facilmente recuperado com which
:
$ dpkg-query -S $(which ifconfig)
net-tools: /sbin/ifconfig
Inversamente, dpkg-query -L PACKAGENAME
imprime uma lista de arquivos instalados pelo pacote fornecido, por exemplo:
$ dpkg-query -L net-tools | grep ^/sbin/
/sbin/nameif
/sbin/ipmaddr
/sbin/plipconfig
/sbin/ifconfig
/sbin/route
/sbin/mii-tool
/sbin/iptunnel
/sbin/rarp
/sbin/slattach
Veja man dpkg-query
para mais.
Para pacotes ainda não instalados
apt-file
fornece algumas opções que podemos usar para se livrar da saída de desordem:
-l, --package-only Only display package name; do not display file names. -x, --regexp Treat pattern as a (perl) regular expression. See perlreref(1) for details. Without this option, pattern is treated as a literal string to search for.
Portanto, para procurar o pacote de um comando, a seguinte linha pode ser usada:
apt-file -lx search "/COMMAND$"
Para facilitar, vamos definir uma função:
$ findpkg() { apt-file -lx search "/$";}
$ findpkg ifconfig
net-tools
Veja man apt-file
para mais informações sobre este comando e < href="https://perldoc.perl.org/perlre.html#Regular-Expressions"> perldoc.perl.org para uma introdução sobre expressões regulares perl.