Por que vejo um número diferente de pacotes em / usr / share / doc e ao usar o comando dpkg -l?

0
user@host:~$ dpkg -l | tail -n +6 | wc -l
1212
user@host:~$ ls /usr/share/doc/ | wc -l
1148

Meu objetivo é coletar informações de licença para todos os pacotes instalados. Usar o comando dpkg -l me fornece 1212 registros, mas só vejo 1148 diretórios em /usr/share/doc/ . O que poderia explicar essa discrepância?

    
por jeebface 05.10.2017 / 20:22

2 respostas

1

Aqui está uma maneira de descobrir isso: comparação.

deltik@node51 [~]$ dpkg -l | tail -n +6 | wc -l
3170
deltik@node51 [~]$ ls /usr/share/doc/ | wc -l
2964

Cada linha de dpkg -l | tail -n +6 é formatada assim:

ii  zram-config                                                 0.5                                                      all          Upstart job to enable zram support

Cada linha de ls /usr/share/doc/ é formatada assim:

zram-config

Para que os comandos correspondam entre si, eles teriam que se parecer com dpkg -l | tail -n +6 | awk '{print $2}' | sort -h e ls /usr/share/doc/ | sort -h .

Agora coloque as saídas em dois arquivos:

deltik@node51 [~]$ dpkg -l | tail -n +6 | awk '{print $2}' | sort -h > /tmp/a.txt
deltik@node51 [~]$ ls /usr/share/doc/ | sort -h > /tmp/b.txt

E diferencie-os (use colordiff para facilitar a visualização):

colordiff /tmp/{a,b}.txt

No meu sistema, vi esses padrões:

  • Se você tiver duas arquiteturas diferentes, verá que /usr/share/doc/ mostra apenas o pacote básico sem a arquitetura adicionada:

    305,308c305,306
    < gcc-5-base:amd64
    < gcc-5-base:i386
    < gcc-6-base:amd64
    < gcc-6-base:i386
    ---
    > gcc-5-base
    > gcc-6-base
    

    Isso representa a maior parte da diferença no meu sistema multiarch ( i386 e amd64 ).

  • Se você ignorar as diferentes arquiteturas do comando dpkg -l ( dpkg -l | tail -n +6 | awk '{print $2}' | awk -F":" '{print $1}' | sort -h | uniq > /tmp/a.txt ), verá que alguns pacotes não colocam nada em /usr/share/doc/ , como os pacotes que começam com linux-image .

  • Ou há um nome de pasta diferente em /usr/share/doc/ , como NetworkManager para o network-manager package ou HTML para vários pacotes do KDE.

por 05.10.2017 / 21:12
1

Existem dois motivos comuns para isso:

  1. Nem todos os pacotes contêm dados reais. Alguns são os chamados "metapacotes", que consistem apenas em uma lista de dependências (os principais pacotes para a maioria dos ambientes de desktop são bons exemplos). Alguns são pacotes 'virtuais', que existem para fornecer uma maneira fácil de depender de um determinado serviço sem importar qual implementação é usada (o pacote 'init' no Debian é um desses exemplos). O Debian também tem 'pacotes fictícios de transição' que existem para garantir que as dependências ainda sejam resolvidas corretamente durante as atualizações (porque o próprio dpkg não tem como renomear os pacotes instalados).
  2. Você pode ter alguns pacotes que foram removidos, mas ainda tem arquivos de configuração presentes no sistema. O comando dpkg que você deu ainda listará esses pacotes ao lado daqueles que estão instalados, mas eles quase nunca terão um diretório em /usr/share/doc .
por 05.10.2017 / 21:03