# Guia do Linux/Iniciante+Intermediário/Sistema de gerenciamento de pacotes/dpkg
## dpkg

O dpkg (Debian Package) é o programa responsável pelo gerenciamento de pacotes em sistemas Debian. Sua operação é feita em modo texto e funciona através de comandos, assim caso deseje uma ferramenta mais amigável para a seleção e instalação de pacotes, prefira o dselect (que é um front-end para o dpkg) ou o apt (veja [#s-dpkg-apt apt, Seção 20.2]).
dpkg é muito usado por usuários avançados da Debian e desenvolvedores para fins de instalação, manutenção e construção de pacotes.

### Pacotes

Pacotes Debian são programas colocados dentro de um arquivo identificados pela extensão .deb incluindo arquivos necessários para a instalação do programa, um sistemas de listagem/checagem de dependências, scripts de automatização para remoção parcial/total do pacote, listagem de arquivos, etc.
Um nome de pacote tem a forma nome-versão_revisão.deb

### Instalar pacotes

Use o comando: dpkg -i [NomedoPacote] (ou --install) para instalar um pacote em seu sistema. Talvez ele peça que seja instalado algum pacote que depende para seu funcionamento. Para detalhes sobre dependências veja [#s-dpkg-dependencias Dependências, Seção 20.1.3]. É preciso especificar o nome completo do pacote (com a versão e revisão).

### Dependências

Dependências são pacotes requeridos para a instalação de outro pacote. Na Debian cada pacote contém um programa com uma certa função. Por exemplo, se você tentar instalar o pacote de edição de textos supertext que usa o programa sed, você precisará verificar se o pacote sed está instalado em seu sistema antes de tentar instalar o supertext, caso contrário, o pacote supertext pedirá o sed e não funcionará corretamente. Note que o pacote supertext é apenas um exemplo e não existe (pelo menos até agora :-). O programa dselect faz o trabalho de checagem de dependências automaticamente durante a instalação dos pacotes.
A colocação de cada programa em seu próprio pacote parece ser uma dificuldade a mais para a instalação manual de um certo programa. Mas para os desenvolvedores que mantém os mais de 18730 pacotes existentes na distribuição Debian, é um ponto fundamental, porque não é preciso esperar uma nova versão do supertext ser lançada para instalar a versão mais nova do pacote sed. Por este motivo também é uma vantagem para o usuário.

### Listar pacotes existentes no sistema

Use o comando: dpkg -l [pacote] (--list) para isto.
Na listagem de pacotes também será mostrado o "status" de cada um na coluna da esquerda, acompanhado do nome do pacote, versão e descrição básica. Caso o nome do [pacote] seja omitido, todos os pacotes serão listados.
É recomendado usar "dpkg -l|less" para ter um melhor controle da listagem (pode ser longa dependendo da quantidade de programas instalados).

### Removendo pacotes do sistema

Use o comando: dpkg -r NomedoPacote (--remove) para remover um pacote do sistema completamente. Somente é necessário digitar o nome e versão do pacote que deseja remover, não sendo necessário a revisão do pacote.
O comando dpkg -r não remove os arquivos de configuração criados pelo programa. Para uma remoção completa do programa veja [#s-dpkg-purge Removendo completamente um pacote, Seção 20.1.6].

### Removendo completamente um pacote

Use o comando: dpkg -P [NomedoPacote|-a] (--purge) para remover um pacote e todos os diretórios e arquivos de configuração criados. Não é necessário especificar a revisão do pacote. O comando dpkg --purge pode ser usado após uma remoção normal do pacote (usando dpkg -r).
Caso você usar diretamente o comando dpkg --purge, dpkg primeiro removerá o pacote normalmente (como explicado em [#s-dpkg-r Removendo pacotes do sistema, Seção 20.1.5]) e após removido apagará todos os arquivos de configuração.
Caso especifique a opção -a (ou sua equivalente --pending) no lugar do nome do pacote, todos os pacotes marcados para remoção serão removidos completamente do sistema.
Note que o dpkg --purge somente remove arquivos de configuração conhecidos pelo pacote. Em especial, os arquivos de configuração criados para cada usuário do sistema devem ser removidos manualmente. Seria pedir demais que o dpkg também conhecesse os usuários de nosso sistema ;-).

### Mostrar descrição do pacote

Use o comando: dpkg -I NomedoPacote (--info) para mostrar a descrição do pacote. Entre a descrição são mostradas as dependências do pacote, pacotes sugeridos, recomendados, descrição do que o pacote faz, tamanho e número de arquivos que contém.

### Procura de pacotes através do nome de um arquivo

Use o comando: dpkg -S arquivo (--search) para saber de qual pacote existente no sistema o arquivo pertence.

### Status do pacote

Use o comando: dpkg -s pacote (--status) para verificar o status de um pacote em seu sistema, se esta ou não instalado, configurado, tamanho, dependências, maintainer, etc.
Se o pacote estiver instalado no sistema, o resultado será parecido com o do comando dpkg -c [pacote] (--contents).

### Procurando pacotes com problemas de instalação

A checagem de pacotes com este tipo de problema pode ser feita através do comando:
dpkg -C (--audit)
Será listado todos os pacotes com algum tipo de problema, verifique os detalhes do pacote com "dpkg -s" para decidir como corrigir o problema.

### Mostrando a lista de pacotes do sistema

Use o comando:
dpkg --get-selections
para obter uma lista de seleção dos pacotes em seu sistema. A listagem é mostrada na saí­da padrão, que pode ser facilmente redirecionada para um arquivo usando dpkg --get-selections &gt;dpkg.lista.
A listagem obtida com este comando é muito útil para repetir os pacotes usados no sistema usando o dpkg --set-selections.

### Obtendo uma lista de pacotes para instalar no sistema

Use o comando:
dpkg --set-selections &lt;arquivo
para obter a lista de pacotes que serão instalados no sistema. O uso do dpkg --get-selections e dpkg --set-selections é muito útil durante uma necessidade de reinstalação do sistema GNU/Linux ou repetir a instalação em várias máquinas sem precisar selecionar algumas dezenas entre os milhares de pacotes no dselect.
Após obter a lista com dpkg --get-selections, use dpkg --set-selections &lt;arquivo e então entre no dselect e escolha a opção INSTALL, todos os pacotes obtidos via dpkg --set-selections serão automaticamente instalados.

### Configurando pacotes desconfigurados

Pacotes estão desconfigurados quando, por algum motivo, a instalação do mesmo não foi concluí­da com sucesso. Pode ter faltado alguma dependência, acontecido algum erro de leitura do arquivo de pacote, etc. Quando um erro deste tipo acontece, os arquivos necessários pelo pacote podem ter sido instalados, mas os scripts de configuração pós-instalação não são executados.
Use o comando:
dpkg --configure [NomedoPacote]
Para configurar um pacote. O NomedoPacote não precisa conter a revisão do pacote e extensão.

### Listando arquivos de um pacote

Use o comando: dpkg -c arquivo (--contents) para obter a listagem dos arquivos contidos no pacote. É necessário digitar o nome completo do pacote. O comando dpkg -c é útil para listarmos arquivos de pacotes que não estão instalados no sistema.
Para obter a listagem de arquivos de pacotes já instalados no sistema, use o comando: dpkg -L arquivo. É necessário digitar somente o nome do pacote (sem a revisão e extensão).