2009-12-14 06:49:35 +0000 2009-12-14 06:49:35 +0000
295
295

Como listar ficheiros de um pacote Debian sem instalar

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

dpkg -L PACKAGENAME

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

Respostas (8)

359
359
359
2009-12-14 15:42:54 +0000

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

dpkg -c package_file.deb

Para trabalhar directamente com nomes de pacotes em vez de ficheiros de pacotes, pode utilizar apt-file. (Pode necessitar de instalar primeiro o pacote apt-file.)

sudo apt-file update        
apt-file list package_name

Como referido no primeiro comentário, o ficheiro apt lista o conteúdo dos pacotes nos seus repositórios Apt já configurados. É irrelevante se algum pacote em particular está ou não instalado.

58
58
58
2009-12-14 08:14:19 +0000

Use --contents em vez de -L:

dpkg --contents PACKAGENAME

Quando usado desta forma, dpkg funciona como um front-end para dpkg-deb, por isso use man dpkg-deb para ver todas as opções.

Também pode usar um browser de arquivo para ver o conteúdo do pacote.

23
23
23
2009-12-14 14:34:45 +0000

A dpkg --contents vai permitir-lhe ver o pacote desinstalado. Se o .deb ainda não estiver no seu sistema, faça

apt-get --download-only install pkgname

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

15
15
15
2013-06-01 13:57:56 +0000

A melhor maneira seria navegar directamente no repositório de pacotes:

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

Exemplo:

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

8
8
8
2015-04-21 21:44:25 +0000

Peguei @baldoz’s http idea e generalizei-o para Ubuntu e Debian, adicionei um pouco de sed e embrulhei-o numa função bash one-liner:

function deb_list () { curl -s $(lsb_release -si | sed -e 's Ubuntu https://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'; }

Utilização:

$ 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

A mesma função em múltiplas linhas:

function deb_list () {
    curl -s $(lsb_release -si \
                | sed -e 's Ubuntu https://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 o url base https://packages.ubuntu.com ou https://packages.debian.org
  2. lsb_Release -sc retorna o nome de código (por exemplo “trusty”, “sid”, etc.) usa-o para construir o URL completo: https://packages.ubuntu.com/trusty/all/curl/filelist
  3. Pegue esse URL com os comandos de enrolar e canalize o html através de três sed. Primeiro captura apenas a lista de arquivos (o que está entre <pre> e </pre> tags); segundo remove quaisquer tags html; terceiro remove quaisquer linhas em branco.

Nota: Não pesquisa PPAs, repositório de fontes alternativas apt e só consulta pacotes oficiais disponíveis para o lançamento do debian/ubuntu que você está rodando.

5
5
5
2017-01-06 03:14:29 +0000

Para todas aquelas pessoas que ainda podem pesquisar este número no Google em Jan 2017, você pode ter algumas coisas legais com versões recentes do apt e dpkg no Debian 8.5 sem baixar nada.

List Contents of Deb File Without 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 o deb não é baixado.

Depois exibe o conteúdo do pacote deb sem descarregá-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 descarregá-lo. * Por exemplo, queremos ler a página man do pacote yade sem instalar este pacote e sem sequer descarregar o pacote deb.

O nome de ficheiro da página man dentro do pacote deb como aconselhado por dpkg -c é ./usr/share/man/man1/yade.1.gz

Para ler a página man na mosca:

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

a página man é apresentada correctamente utilizando a aplicação man.

PS: Acima dos pipes não funciona 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
2
2
2
2014-06-27 15:28:37 +0000

Experimente:

apt-get download packages-name
dpkg --contents *.deb
1
1
1
2015-12-27 13:33:51 +0000

Parece que não é possível antes de o instalar ou extrair a lista do ficheiro .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[^']"))

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

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


Também pode verificar o conteúdo sem descarregar o ficheiro do pacote.

Se conhece o URL do ficheiro .deb, o seguinte comando da shell listará todos os ficheiros do pacote:

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

Parâmetros do pacote: -s - silencioso, -L - siga os links movidos.

Se não conhece o URL, procure por: apt --print-uris, e.g.

apt --print-uris install avis | grep avis