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?
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?
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.
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.
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:
https://packages.ubuntu.com
ou https://packages.debian.org
https://packages.ubuntu.com/trusty/all/curl/filelist
<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.
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
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