Como listar arquivos de um pacote Debian sem instalar

259

Este comando só pode listar o conteúdo dos pacotes instalados,

dpkg -L PACKAGENAME

mas como listar o conteúdo de um pacote não instalado, para visualizar / examinar o pacote?

    
por Xiè Jìléi 14.12.2009 / 07:49

8 respostas

310

dpkg -c (ou --contents ) lista o conteúdo de um arquivo de pacote .deb (é um front-end para dpkg-deb .)

dpkg -c package_file.deb

Para trabalhar diretamente com nomes de pacotes em vez de arquivos de pacotes, você pode usar apt-file . (Você pode precisar instalar o pacote apt-file primeiro.)

sudo apt-file update        
apt-file list package_name

Como afirmado no primeiro comentário, o apt-file lista o conteúdo para pacotes em seus repositórios do Apt já configurados. É irrelevante se algum pacote específico está ou não instalado.

    
por 14.12.2009 / 16:42
54

Use --contents em vez de -L :

dpkg --contents PACKAGENAME

Quando usado dessa maneira, dpkg age como um front-end para dpkg-deb , então use man dpkg-deb para ver todas as opções.

Você também pode usar um navegador de arquivos para visualizar o conteúdo do pacote.

    
por 14.12.2009 / 09:14
18

dpkg --contents permitirá que você veja o pacote desinstalado. Se o .deb ainda não está no seu sistema, faça

apt-get --download-only install pkgname

O pacote será baixado para /var/cache/apt/archives , mas não será instalado.

    
por 14.12.2009 / 15:34
11

A melhor maneira seria navegar diretamente pelo repositório de pacotes:

http://packages.debian.org/[distro name]/all/[package name]/filelist

Exemplo:

http://packages.debian.org/wheezy/all/transmission-common/filelist

    
por 01.06.2013 / 15:57
7

Eu tirei a ideia http do @ baldoz e generalizou para Ubuntu e Debian, adicionou um pouco de sed e envolveu-o em uma função bash one-liner:

function deb_list () { curl -s $(lsb_release -si | sed -e 's Ubuntu http://packages.ubuntu.com/ ' -e 's Debian https://packages.debian.org/ ')/$(lsb_release -sc)/all/$1/filelist | sed -n -e '/<pre>/,/<\/pre>/p' | sed -e 's/<[^>]\+>//g' -e '/^$/d'; }

Uso:

$ deb_list curl
/usr/bin/curl
/usr/share/doc/curl/changelog.Debian.gz
/usr/share/doc/curl/copyright
/usr/share/doc/curl/NEWS.Debian.gz
/usr/share/man/man1/curl.1.gz

Mesma função em várias linhas:

function deb_list () {
    curl -s $(lsb_release -si \
                | sed -e 's Ubuntu http://packages.ubuntu.com/ ' \
                      -e 's Debian https://packages.debian.org/ '
              )/$(lsb_release -sc)/all/$1/filelist \
      | sed -n -e '/<pre>/,/<\/pre>/p' \
      | sed -e 's/<[^>]\+>//g' -e '/^$/d';
}

Explicado:

  1. lsb_release -si retorna "Ubuntu" ou "Debian" substitui isso pelo URL base http://packages.ubuntu.com ou https://packages.debian.org
  2. lsb_Release -sc retorna o codinome (por exemplo, "trusty", "sid", etc) usa isso para construir o URL completo: http://packages.ubuntu.com/trusty/all/curl/filelist
  3. Busque esse URL com o curl e canalize o html por meio de três comandos sed. Primeiro, captura apenas a lista de arquivos (o que está entre <pre> e </pre> tags); segundo remove quaisquer tags html; terceiro remove qualquer linha em branco.

Nota: Ele não pesquisa os PPAs, alterna os repositórios de fontes apt e consulta apenas os pacotes oficiais disponíveis para o lançamento do debian / ubuntu que você está executando.

    
por 21.04.2015 / 23:44
2

Tente:

apt-get download packages-name
dpkg --contents *.deb
    
por 27.06.2014 / 17:28
1

Parece que não é possível antes de instalá-lo primeiro ou extrair a lista do arquivo .deb .

Tente o seguinte comando:

dpkg --contents <(curl -s $(apt-get install --yes --no-download --reinstall --print-uris language-pack-en | tail -n1 | grep -o "http[^']\+"))

Altere language-pack-en com o nome do seu pacote.

Basicamente lê o arquivo .deb extraído via curl e executa dpkg --contents FILE nele.

Você também pode verificar o conteúdo sem baixar o arquivo do pacote.

Portanto, se você souber o URL do arquivo .deb , o comando shell a seguir listará todos os arquivos do pacote:

dpkg -c <(curl -sL "http://httpredir.debian.org/debian/pool/main/a/avis/avis_1.2.2-4_all.deb")

Curl params: -s - silent, -L - siga os links movidos.

Se você não conhece o URL, busque por: apt --print-uris , por exemplo

apt --print-uris install avis | grep avis
    
por 27.12.2015 / 14:33
1

Para todas as pessoas que ainda podem pesquisar essa questão em janeiro de 2017, você pode ter algumas coisas legais com versões recentes do apt e do dpkg no Debian 8.5 sem baixar nada.

Listar conteúdo do arquivo Deb sem download:

Primeiro, localize a URL completa do arquivo deb:

root@debian:apt-get --print-uris download yade
'http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb' yade_2016.06a-7_amd64.deb 1621148 SHA256:26c0d84484a92ae9c2828edaa63243eb764378d79191149970926aa3ec40cdd4

PS: - print-uris switch imprime a URL do pacote deb mas deb não é baixado.

Em seguida, exiba o conteúdo do pacote deb sem baixá-lo:

root@debian:curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb" |dpkg-deb -c /dev/stdin
drwxr-xr-x root/root         0 2016-12-10 22:18 ./
drwxr-xr-x root/root         0 2016-12-10 22:18 ./usr/
drwxr-xr-x root/root         0 2016-12-10 22:18 ./usr/bin/
-rwxr-xr-x root/root     13184 2016-12-10 22:18 ./usr/bin/yade
.........................more files listed bellow ......................

PS: O mesmo resultado pode ser alcançado com

root@debian:dpkg -c <(curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb")

Extraia um arquivo do pacote deb acima, sem fazer o download.
Por exemplo, queremos ler a página man do pacote yade sem instalar este pacote e sem baixar o pacote deb.

Nome do arquivo da página man dentro do pacote deb, como é recomendado por dpkg -c is ./usr/share/man/man1/yade.1.gz

Para ler a página man on the fly:

root@debian:curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb" |dpkg-deb --fsys-tarfile /dev/stdin |tar -xO ./usr/share/man/man1/yade.1.gz |man /dev/stdin

página man é exibida corretamente usando o aplicativo man.

PS: Os pipes acima não funcionam com o comando ar.

root@debian:apt --version --> apt 1.4~beta2 (amd64)
root@debian:dpkg --version --> Debian 'dpkg' package management program version 1.18.18 (amd64).
root@debian:man --version --> man 2.7.6.1
root@debian:tar --version --> tar (GNU tar) 1.29
    
por 06.01.2017 / 04:14

Tags