Ubuntu dpkg e .deb

Um arquivo .deb é um programa empacotado no formato do Debian e do Ubuntu, como um instalador .exe no Windows. O dpkg é a ferramenta que instala, remove e consulta esses pacotes. O apt, que você já conhece, usa o dpkg por baixo dos panos.

Você vai aprender
  • A diferença entre apt e dpkg, e quando usar cada um.
  • Três formas de instalar um .deb baixado de um site.
  • Como descobrir quais arquivos um pacote instalou e de qual pacote veio um arquivo.
  • Como ler a tabela do dpkg -l (o que significam ii, rc, iU).
  • Como consertar o sistema quando uma instalação é interrompida no meio.

Antes do comando: o que é um pacote

Um pacote .deb é um arquivo compactado com três coisas dentro:

  1. Os arquivos do programa, já com o caminho onde devem ficar (/usr/bin/nano, /etc/nanorc…).
  2. Informações: nome, versão, descrição e a lista de dependências (outros pacotes que ele precisa para funcionar).
  3. Scripts que rodam antes e depois de instalar, como "criar um usuário" ou "ligar um serviço".

O Ubuntu registra cada pacote instalado num banco de dados em /var/lib/dpkg/. É esse banco que o dpkg consulta quando você pergunta "o nano está instalado?".

apt × dpkg: quem faz o quê

aptdpkg
Baixa da internetSim, dos repositóriosNão. Só trabalha com arquivos que já estão no disco
Resolve dependênciasSim, baixa o que faltarNão. Se faltar algo, para no meio
Consulta o que está instaladoUm pouco (apt list --installed)Muito (-l, -L, -S, -s)
Uso no dia a diaInstalar, atualizar, removerConsultar e consertar

Resumindo: para instalar, use o apt; para investigar, use o dpkg.


Instalar um .deb baixado

Alguns programas (Google Chrome, Zoom, Discord…) oferecem um .deb para baixar no site. Imagine que a Ana baixou programa_2.1_amd64.deb para a pasta Downloads.

Forma 1 (recomendada): apt install ./arquivo.deb

sudo
Roda como administrador. Instalar programas mexe no sistema todo.
apt install
O apt, no modo instalar.
./programa_2.1_amd64.deb
O arquivo. O ./ é obrigatório: diz "é um arquivo nesta pasta", e não um pacote do repositório.
$ sudo apt install ./programa_2.1_amd64.deb
[sudo: authenticate] Senha:
Nota, selecionando 'programa' em vez de './programa_2.1_amd64.deb'
Instalando:
  programa
Instalando dependências:
  libfoo2                                            « o apt achou e vai baixar o que falta
Resumo:
  Atualizando: 0, Instalando: 2, Removendo: 0, Não atualizando: 0
  Tamanho de download: 84,2 kB
Você quer continuar? [S/n] S

O apt lê as dependências de dentro do .deb, baixa as que faltam dos repositórios e instala tudo de uma vez. A saída varia de programa para programa; os nomes e tamanhos acima são ilustrativos.

Por que o ./?

Sem ele, sudo apt install programa_2.1_amd64.deb procura um pacote com esse nome nos repositórios e responde que não encontrou. O ./ (ou um caminho como ~/Downloads/programa.deb) avisa que é um arquivo.

Forma 2: dpkg -i

sudo
Precisa de administrador.
dpkg
O programa (de Debian package).
-i
De install, "instalar". No dpkg, as ações são opções com hífen.
programa_2.1_amd64.deb
O arquivo. Aqui o ./ não é necessário.

O dpkg não baixa nada. Se faltar uma dependência, a instalação fica pela metade:

$ sudo dpkg -i programa_2.1_amd64.deb
Selecionando pacote previamente não selecionado programa.
Desempacotando programa (2.1) ...
dpkg: dependency problems prevent configuration of programa:
 programa depends on libfoo2; however:
  O pacote libfoo2 não está instalado.              « faltou uma dependência
dpkg: error processing package programa (--install):
 problemas de dependência - deixando desconfigurado

Repare que a mensagem mistura inglês e português: parte da tradução do dpkg não está pronta no Ubuntu 26.04. "depends on … however" quer dizer "depende de … porém".

Para terminar a instalação, peça ao apt que baixe o que falta:

sudo apt
O apt como administrador.
-f
De fix broken, "consertar o que está quebrado". Forma longa: --fix-broken.
install
Sem nome de pacote: instala só o que falta para os pacotes pela metade.
$ sudo apt -f install

Forma 3: duplo clique no arquivo

No desktop, dê duplo clique no .deb no app Arquivos. Ele abre a Central de Aplicativos, que instala com dependências, como o apt.

Qual forma usar?

FormaBaixa dependências?Melhor quando…
sudo apt install ./arq.debSimSempre que houver internet. É a forma padrão.
sudo dpkg -i arq.debNãoMáquina sem internet, com todas as dependências já instaladas.
Duplo cliqueSimVocê está no desktop e prefere a interface gráfica.
Atenção: .deb roda como administrador

Um pacote é instalado com poder total sobre o sistema, e seus scripts podem fazer qualquer coisa. Só instale .deb baixado do site oficial do programa. Nunca instale um .deb recebido por mensagem ou de um site desconhecido.


Espiar um .deb antes de instalar

Você pode ver o que tem dentro de um pacote sem instalar nada, e sem sudo:

$ dpkg -I programa_2.1_amd64.deb
 Package: programa
 Version: 2.1
 Architecture: amd64
 Depends: libc6 (>= 2.38), libfoo2           « o que ele precisa
 Description: um programa de exemplo
$ dpkg -c programa_2.1_amd64.deb
drwxr-xr-x root/root         0 2026-09-01 10:00 ./usr/bin/
-rwxr-xr-x root/root    184320 2026-09-01 10:00 ./usr/bin/programa   « onde ele vai ficar
OpçãoOrigemMostra
-I (i maiúsculo)infoNome, versão, dependências, descrição
-ccontents, "conteúdo"A lista de arquivos e onde serão instalados

Consultar pacotes instalados

Estas consultas não precisam de sudo: só leem o banco de dados.

Listar: -l

dpkg
O programa.
-l
De list, "listar".
nano curl
Opcional: só esses pacotes. Sem nomes, lista todos (são milhares).
$ dpkg -l nano curl
+-- Desired=Unknown/Install/Remove/Purge/Hold
|+- Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
||+ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||| Nome           Versão            Arquitetura  Descrição
+++-==============-=================-============-=======================================================
ii  curl           8.18.0-1ubuntu2.7 amd64        command line tool for transferring data with URL syntax
ii  nano           8.7.1-1ubuntu0.1  amd64        small, friendly text editor inspired by Pico

As três primeiras linhas são a legenda das letras que aparecem antes do nome. As que mais importam:

CódigoSignificadoO que fazer
iiInstalado e funcionandoNada, está tudo certo
rcRemovido, mas a configuração ficou (foi usado remove, não purge)sudo apt purge pacote para limpar
iUDesempacotado, mas não configurado (instalação pela metade)sudo dpkg --configure -a
iFA configuração falhouLeia o erro e rode sudo apt -f install
hiInstalado e "congelado" (hold): não será atualizadoVeja apt-mark em apt

Para procurar um pacote no meio de todos, combine com grep:

$ dpkg -l | grep openssh
ii  openssh-client  1:10.0p1-5ubuntu1  amd64  secure shell (SSH) client, for secure access to remote machines

Os arquivos de um pacote: -L

Quer saber onde um programa foi parar? O -L (de list files) mostra todos os arquivos que um pacote instalou:

$ dpkg -L nano | head -8
/.
/etc
/etc/nanorc                          « o arquivo de configuração
/usr
/usr/bin
/usr/bin/nano                        « o programa
/usr/share
/usr/share/doc

De qual pacote veio este arquivo? -S

O -S (de search, "procurar") faz o caminho contrário: você dá o arquivo e ele diz o pacote.

dpkg
O programa.
-S
Procura qual pacote instalou o arquivo.
/usr/bin/nano
O caminho completo do arquivo.
$ dpkg -S /usr/bin/nano
nano: /usr/bin/nano
$ dpkg -S /usr/bin/ls
coreutils-from-uutils: /usr/bin/ls        « no 26.04, o ls vem da versão em Rust

Não sabe o caminho? Use o which para descobrir e passe o resultado direto:

$ dpkg -S $(which curl)
curl: /usr/bin/curl

O $(which curl) roda o which primeiro e coloca a resposta no lugar. Isso se chama substituição de comando.

Detalhes de um pacote: -s

$ dpkg -s nano
Package: nano
Status: install ok installed               « está instalado corretamente
Priority: important
Section: editors
Installed-Size: 872                        « em KiB
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Version: 8.7.1-1ubuntu0.1
Depends: libc6 (>= 2.38), libncursesw6 (>= 6), libtinfo6 (>= 6)

O que o comando devolve

Em scripts, o código de saída do dpkg -s responde "está instalado?": 0 se sim, 1 se não.

$ dpkg -s nano > /dev/null 2>&1; echo $?
0                                          « instalado
$ dpkg -s htop > /dev/null 2>&1; echo $?
1                                          « não instalado

O > /dev/null 2>&1 joga fora toda a saída, para mostrar só o código. Veja Redirecionamento.


Remover com o dpkg

$ sudo dpkg -r programa      # remove, mantendo a configuração
$ sudo dpkg -P programa      # remove tudo, inclusive a configuração

-r é de remove e -P de purge ("expurgar"). Mesmo assim, prefira sudo apt remove e sudo apt autoremove: o apt também tira as dependências que ficaram sem uso.


Consertar uma instalação interrompida

Se a energia caiu ou a internet parou no meio de uma atualização, os pacotes podem ficar "desconfigurados". O próximo apt avisa:

$ sudo apt upgrade
Erro: dpkg foi interrompido, você deve executar manualmente 'sudo dpkg --configure -a' para corrigir o problema.

A mensagem já diz o comando. Rode na ordem:

  1. Terminar a configuração pendente.
    sudo dpkg
    O dpkg como administrador.
    --configure
    Configura pacotes que foram desempacotados mas não configurados.
    -a
    De all: todos os pendentes.
    $ sudo dpkg --configure -a
  2. Baixar dependências que faltarem.
    $ sudo apt -f install
  3. Atualizar normalmente.
    $ sudo apt update && sudo apt upgrade

Quando não funciona

"a operação solicitada requer privilégios de superusuário"
$ dpkg -i programa_2.1_amd64.deb
dpkg: erro: a operação solicitada requer privilégios de superusuário

O que aconteceu: instalar e remover mexem no sistema e exigem administrador.

Como resolver: coloque sudo na frente. Consultas (-l, -L, -S, -s) não precisam.

"nenhum pacote encontrado correspondente a…"
$ dpkg -l htop
dpkg-query: nenhum pacote encontrado correspondente a htop

O que aconteceu: o pacote não está instalado, ou o nome está errado. O dpkg só conhece o que está instalado; ele não procura nos repositórios.

Como resolver: para procurar no repositório, use apt search htop. Para instalar, sudo apt install htop.

"nenhum caminho encontrado correspondente ao padrão"
$ dpkg -S /usr/local/bin/meuscript
dpkg-query: nenhum caminho encontrado correspondente ao padrão /usr/local/bin/meuscript

O que aconteceu: o arquivo não veio de nenhum pacote. Foi criado à mão, por um script de instalação, ou por snap/flatpak.

Como resolver: isso é normal para arquivos em /usr/local, /opt e na sua pasta pessoal. Programas snap ficam em /snap e são consultados com snap list.

"Não foi possível obter a trava" (lock)
$ sudo dpkg -i programa_2.1_amd64.deb
dpkg: erro: dpkg frontend lock was locked by another process with pid 4321

O que aconteceu: outro programa está instalando pacotes agora, normalmente a atualização automática.

Como resolver: espere alguns minutos e tente de novo. Veja quem é com ps -fp 4321. Não apague os arquivos de trava em /var/lib/dpkg/: isso pode corromper o banco de pacotes. A página apt detalha esse caso.


Referência de opções

OpçãoDescriçãoPrecisa de sudo?Exemplo
-iInstala um arquivo .debSimsudo dpkg -i arq.deb
-rRemove, mantendo a configuraçãoSimsudo dpkg -r pacote
-PRemove tudo (purge)Simsudo dpkg -P pacote
-lLista pacotes (aceita padrão: 'nginx*')Nãodpkg -l 'python3*'
-LArquivos de um pacote instaladoNãodpkg -L curl
-SQual pacote instalou o arquivoNãodpkg -S /usr/bin/ssh
-sEstado e detalhes de um pacoteNãodpkg -s nano
-IInformações de um arquivo .debNãodpkg -I arq.deb
-cArquivos dentro de um .debNãodpkg -c arq.deb
--configure -aTermina configurações interrompidasSimsudo dpkg --configure -a
--get-selectionsLista simples de pacotes (útil para backup)Nãodpkg --get-selections > pacotes.txt

Exercícios

1. Instalar um .deb da forma recomendada

Complete para instalar o arquivo zoom_amd64.deb, que está na pasta atual, deixando o apt resolver as dependências:

sudo apt install

2. De onde veio esse arquivo?

Complete para descobrir qual pacote instalou /usr/bin/ssh:

dpkg /usr/bin/ssh

3. Instalação interrompida

O apt disse que o dpkg foi interrompido. Complete o comando de conserto:

sudo dpkg

4. No dpkg -l, um pacote aparece com rc. O que isso significa?

5. Por que sudo apt install ./arq.deb é preferível a sudo dpkg -i arq.deb?


Resumo

  • Para instalar um .deb: sudo apt install ./arquivo.deb (com o ./).
  • O dpkg é a ferramenta de consulta: -l lista, -L mostra arquivos, -S acha o pacote de um arquivo, -s mostra detalhes.
  • Consultas não precisam de sudo; instalar e remover precisam.
  • ii = instalado; rc = sobrou configuração; iU/iF = algo ficou pela metade.
  • Instalação interrompida: sudo dpkg --configure -a e depois sudo apt -f install.