apt-file – Localizando arquivos em pacotes

O apt-file é uma ferramenta de linha de comando para procurar arquivos em pacotes para o sistema de gerenciamento de pacotes APT. Esta ferramenta é muito útil em diversos casos, como por exemplo lembrar o nome de um comando mas não de um pacote. Veremos a seguir alguns exemplos de utilização do comando apt-file.

Antes de utilizar o apt-file, é necessário que seua lista de arquivos seja sincronizada com a lista dos repositórios Debian este procedimento deve ser realizado com o comando apt-file update, como demonstrado a seguir:

leandro@matrix:~$ apt-file update
apt-file is now using the user's cache directory.
If you want to switch back to the system-wide cache directory,
 run 'apt-file purge'
Downloading complete file http://http.debian.net/debian/dists/jessie/main/Contents-amd64.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 23.2M  100 23.2M    0     0  1619k      0  0:00:14  0:00:14 --:--:-- 2344k
Downloading complete file http://http.debian.net/debian/dists/jessie/contrib/Contents-amd64.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 81710  100 81710    0     0  59503      0  0:00:01  0:00:01 --:--:-- 59503
Downloading complete file http://http.debian.net/debian/dists/jessie/non-free/Contents-amd64.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  694k  100  694k    0     0   413k      0  0:00:01  0:00:01 --:--:-- 1813k
Ignoring source without Contents File:
  http://security.debian.org/dists/jessie/updates/main/Contents-amd64.gz
Downloading complete file http://ftp.br.debian.org/debian-multimedia/dists/jessie/main/Contents-amd64.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  197k  100  197k    0     0   422k      0 --:--:-- --:--:-- --:--:--  422k

Para listar todos os arquivos que contém um pacote, podemos utilizar o seguinte exemplo:

leandro@matrix:~$ apt-file list sysstat 
sysstat: /etc/cron.d/sysstat
sysstat: /etc/cron.daily/sysstat
sysstat: /etc/init.d/sysstat
sysstat: /etc/sysstat/sysstat
sysstat: /etc/sysstat/sysstat.ioconf
sysstat: /usr/bin/cifsiostat
sysstat: /usr/bin/iostat
sysstat: /usr/bin/mpstat
sysstat: /usr/bin/nfsiostat
sysstat: /usr/bin/pidstat
sysstat: /usr/bin/sadf
sysstat: /usr/bin/sar.sysstat
sysstat: /usr/lib/sysstat/debian-sa1
sysstat: /usr/lib/sysstat/sa1
sysstat: /usr/lib/sysstat/sa2

O parâmetro list funciona de forma semelhante ao comando dpkg -l.  Com o parâmetro search, pesquisamos as ocorrências com o nome de terminado arquivo dentro dos pacotes disponíveis no repositório. Por exemplo, para verificar em qual pacote está o arquivo resolv.conf podemos utilizar a seguinte linha de comandos:

leandro@matrix:~$ apt-file search resolv.conf
cloud-init: /etc/cloud/templates/resolv.conf.tmpl
debian-lan-config: /usr/share/debian-lan-config/fai/config/files/etc/resolv.conf/DISKLESS_CLIENT
dhcpcd5: /lib/dhcpcd/dhcpcd-hooks/20-resolv.conf
gscanbus: /etc/guid-resolv.conf
gscanbus: /etc/oui-resolv.conf
manpages: /usr/share/man/man5/resolv.conf.5.gz
manpages-de: /usr/share/man/de/man5/resolv.conf.5.gz
manpages-es: /usr/share/man/es/man5/resolv.conf.5.gz
manpages-fr: /usr/share/man/fr/man5/resolv.conf.5.gz
manpages-ja: /usr/share/man/ja/man5/resolv.conf.5.gz
manpages-pl: /usr/share/man/pl/man5/resolv.conf.5.gz
manpages-pt: /usr/share/man/pt/man5/resolv.conf.5.gz
namebench: /usr/share/namebench/templates/resolv.conf.tmpl
resolvconf: /etc/resolvconf/resolv.conf.d/base
resolvconf: /etc/resolvconf/resolv.conf.d/head
rinse: /usr/lib/rinse/common/10-resolv.conf.sh
switchconf: /usr/share/doc/switchconf/examples/home/etc/resolv.conf
switchconf: /usr/share/doc/switchconf/examples/work/etc/resolv.conf

Desta forma recebemos todas as ocorrências de pacotes que possuem resolv.conf em seu nome. Porém geralmente procuramos por aruivos binários, desta forma podemos redirecionar a saída para um pipe:

leandro@matrix:~$ apt-file search lsblk |grep bin
util-linux: /bin/lsblk

Desta forma a saída torna-se mais limpa e o entendimento mais simples. A seguir são exibidas mais algumas opções úteis do comando apt-file:

-a, –architecture architecture
Define  para arquitetura. Esta opção é útil para procurar pacotes de uma arquitetura diferente do que a instalada no sistema.

-c, –cache cache-directory
Define o diretório de cache ao invés dopadrão. Se executado como um usuário diferente do root, localiza-se em $HOME/.cache/apt-file with fall-back ao invés de /var/cache/apt/apt-file. Este último quando executado como root.

-d, –cdrom-mount cdrom-mount-point
Utiliza cdrom’s ao invés de repositórios.

-l, –package-only
Exibe somente nomes de pacotes ao invés de nomes de arquivos.

 -s, –sources-list sources.list
Define um arquivo sources.list diferente do padrão /etc/apt/sources.list, útil para procurar pacotes em outros releases.

-v, –verbose
Executa o apt-file no modo verbose.

-x, –regexp
Utiliza explressões regulares em Perl. Veja perlreref(1) para mais detalhes. Sem esta opção, o padrão é tratado como uma string literal para procurar.

O comando apt-file é muito útil na administração de sistemas Debian, ele pode efetuar desde pequenas buscas até buscas mais detalhadas em repositórios remotos.