Linux: Gerenciamento de Pacotes

No Linux, você não precisa abrir sites para baixar arquivos exe — um gerenciador de pacotes resolve a instalação com um único comando. Distribuições diferentes usam gerenciadores diferentes, mas o conceito central é o mesmo.

📋 Pré-requisitos: Você já deve conhecer

1. O Que Você Vai Aprender


2. A História de Instalar o Nginx

(1) O Problema: No Windows, Instalar Software É Pesquisar, Baixar, Clicar em "Avançar"

Xiaoming precisava instalar o Nginx no Ubuntu. Por instinto, abriu o navegador e pesquisou "nginx download".

(2) apt Resolve em Uma Linha

Bob disse: "Instalar o Nginx no Ubuntu leva um único comando."

BASH
sudo apt update
sudo apt install nginx -y

30 segundos depois o Nginx estava instalado — dependências resolvidas automaticamente, arquivos de serviço criados, inicialização no boot configurada.

(3) O Benefício: Gerenciadores de Pacotes Mudaram a Forma de Instalar

Xiaoming descobriu que o apt não só instala o software como também resolve sozinho todas as dependências. Ele nunca mais baixou manualmente arquivos exe ou dmg.


3. Pontos-Chave

(1) apt — Gerenciador de Pacotes Debian/Ubuntu

BASH
# Atualiza a lista de fontes de pacotes
sudo apt update

# Atualiza todos os pacotes instalados
sudo apt upgrade -y

> 💡 Dica: `apt update && apt upgrade -y` é a combinação de ouro para manutenção do sistema — o `update` renova a lista de fontes, e o `upgrade` atualiza os pacotes instalados. Sempre rode `update` antes de instalar software novo, senão você pode não encontrar a versão mais recente.

# Instala software
sudo apt install nginx -y
sudo apt install curl wget git vim -y    # Instala vários de uma vez

# Remove software
sudo apt remove nginx                    # Mantém os arquivos de configuração
sudo apt purge nginx                     # Remove também os arquivos de configuração

# Pesquisa
apt search "web server"
apt show nginx                           # Vê as informações do pacote

# Limpeza
sudo apt autoremove                      # Remove dependências desnecessárias
sudo apt autoclean                       # Limpa o cache baixado

(2) dpkg — Instalação Local de Pacotes .deb

BASH
# Instala um arquivo .deb local
sudo dpkg -i pacote.deb

# Se faltarem dependências, conserta com o apt
sudo apt install -f

# Lista pacotes instalados
dpkg -l | grep nginx
dpkg -L nginx                           # Lista os arquivos instalados pelo pacote

# Remove
sudo dpkg -r nome_do_pacote               # Remove
sudo dpkg -P nome_do_pacote               # Purga (incluindo arquivos de configuração)

(3) Fontes de Software e PPA

BASH
# Lista de fontes de pacotes
cat /etc/apt/sources.list

# Adiciona um PPA (Personal Package Archive)
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.12

# Ordem de prioridade das fontes no Ubuntu
# 1. /etc/apt/sources.list
# 2. /etc/apt/sources.list.d/*.list

(4) snap/flatpak — Pacotes em Container

BASH
# snap (já vem no Ubuntu)
snap find "code"                         # Pesquisa
sudo snap install code --classic         # Instala o VS Code
sudo snap install lxd                    # Instala o LXD
sudo snap refresh                        # Atualiza todos os snaps
sudo snap remove code                    # Remove

# recursos do snap: atualização automática, isolamento via sandbox, distribuição cruzada

ℹ️ Nota: apt, snap e flatpak são três soluções de empacotamento diferentes — o apt instala pacotes nativos do sistema (melhor desempenho, mais leve), enquanto snap/flatpak são pacotes em container (isolamento melhor, atualizações automáticas, mas inicialização um pouco mais lenta e maior uso de disco). Prefira o apt no dia a dia; use snap/flatpak quando precisar de suporte entre distribuições ou isolamento via sandbox.

(5) Gerenciadores em Nível de Linguagem

TEXT
# Python
pip install requests                     # Instala pacote Python
pip install -r requirements.txt          # Instala a partir de um arquivo
pip list                                 # Lista pacotes instalados
pip uninstall requests                   # Desinstala
pip freeze > requirements.txt            # Exporta dependências

# Node.js
npm install express                      # Instala pacote
npm install -g typescript                # Instalação global
npm list                                 # Lista pacotes instalados
npx create-react-app my-app              # Roda sem instalar

# Rust
cargo install ripgrep                    # Instala ferramenta
cargo add serde                          # Adiciona dependência ao projeto

(6) ▶ Exemplo: Operações Básicas com apt

BASH
# 1. Atualiza as fontes de pacotes
sudo apt update

# 2. Instala ferramentas comuns de desenvolvimento
sudo apt install -y build-essential curl wget git vim htop

# 3. Procura um pacote
apt search "text editor" | grep -i "vim\|nano"

# 4. Vê informações do pacote
apt show htop

# 5. Remove
sudo apt remove htop
sudo apt autoremove    # Limpa dependências que sobraram

Saída:

TEXT
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
Fetched 119 kB in 1s
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  build-essential curl wget git vim htop
0 upgraded, 6 newly installed, 0 to remove
Need to get 12.3 MB of archives.
Setting up build-essential (12.9ubuntu3) ...
Setting up curl (7.81.0-1) ...
vim - Vi IMproved - enhanced vi editor
htop - interactive processes viewer
Package: htop
Version: 3.0.5-7build2
Priority: optional
Section: utils
Reading package lists... Done
Building dependency tree... Done
The following packages will be REMOVED:
  htop
0 upgraded, 0 newly installed, 1 to remove
Reading package lists... Done
Building dependency tree... Done
The following packages will be REMOVED:
  libhwloc5
0 upgraded, 0 newly installed, 1 to remove

(7) ▶ Exemplo: Instalar Pacote Local com dpkg

BASH
# Baixa o pacote .deb do VS Code
wget https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64 -O code.deb

# Instala
sudo dpkg -i code.deb

# Se aparecer problema de dependências, resolve
sudo apt install -f

# Lista os arquivos instalados pelo VS Code
dpkg -L code | head -20

Saída:

TEXT
--2026-07-07 10:23:01--  https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64
Resolving code.visualstudio.com... 20.190.159.4
HTTP request sent, awaiting response... 302 Found
Length: 95000000 (90M) [application/octet-stream]
Saving to: 'code.deb'
code.deb          100%[==========>] 90.51M  5.2MB/s    in 18s
Selecting previously unselected package code.
Setting up code (1.89.1-1716721786) ...
/usr/share/code/code
/usr/share/code/resources/app/package.json
/usr/share/code/resources/app/product.json
/usr/bin/code
/usr/share/applications/code.desktop
/usr/share/icons/hicolor/512x512/apps/code.png

(8) ▶ Exemplo: Adicionar PPA Para Instalar um Python Mais Novo

BASH
# Ubuntu 22.04 vem com Python 3.10; para o 3.12 é preciso um PPA
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install -y python3.12 python3.12-venv python3.12-distutils

# Verifica
python3.12 --version

Saída:

TEXT
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Get:3 http://ppa.launchpadcontent.net/deadsnakes/ppa/ubuntu jammy InRelease [23.8 kB]
Fetched 23.8 kB in 1s
Reading package lists... Done
The following NEW packages will be installed:
  python3.12 python3.12-venv python3.12-distutils
Setting up python3.12 (3.12.4-1+jammy1) ...
Python 3.12.4

(9) ▶ Exemplo: pip Gerenciando Pacotes Python

BASH
# Instala o framework web Flask
pip install flask

# Cria uma lista de dependências
pip freeze > requirements.txt

# Instala as mesmas dependências em outra máquina
pip install -r requirements.txt

# Instala no diretório do usuário (sem precisar de sudo)
pip install --user black

Saída:

TEXT
Collecting flask
  Downloading flask-3.0.3-py3-none-any.whl (101 kB)
Installing collected packages: flask
Successfully installed flask-3.0.3
flask==3.0.3
werkzeug==3.0.3
jinja2==3.1.4
Collecting black
  Downloading black-24.4.2-py3-none-manylinux1_x86_64.whl (2.2 MB)
Installing collected packages: black
Successfully installed black-24.4.2

(10) ▶ Exemplo: Descobrir os Caminhos dos Pacotes Instalados

BASH
# Vê em quais diretórios o nginx foi instalado
dpkg -L nginx | head -10

# Vê os arquivos de configuração do nginx
dpkg -L nginx | grep -E "\.conf$"

# Descobre a qual pacote um comando pertence
dpkg -S /usr/bin/htop
# htop: /usr/bin/htop

# Inverso — descobre a qual pacote um arquivo pertence
dpkg -S /etc/nginx/nginx.conf
# nginx: /etc/nginx/nginx.conf

Saída:

TEXT
/etc/nginx/nginx.conf
/etc/nginx/sites-available/default
/etc/nginx/sites-enabled/default
/usr/sbin/nginx
/var/www/html/index.html
/etc/nginx/nginx.conf
/etc/nginx/sites-available/default
htop: /usr/bin/htop
nginx: /etc/nginx/nginx.conf

(11) ▶ Exemplo Abrangente: Configurar do Zero um Ambiente de Desenvolvimento Web

BASH
#!/bin/bash
# setup-web-env.sh - Configura do zero um ambiente de desenvolvimento Web

set -e

echo "=== Setting Up Web Development Environment ==="

# 1. Atualiza o sistema
echo ">>> Updating package sources..."
sudo apt update
sudo apt upgrade -y

# 2. Instala ferramentas básicas
echo ">>> Installing basic tools..."
sudo apt install -y build-essential curl wget git vim htop net-tools

# 3. Instala o Nginx
echo ">>> Installing Nginx..."
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

# 4. Instala o Node.js
echo ">>> Installing Node.js 20..."
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

> ⚠️ Atenção: O padrão `curl | bash` (baixar um script da internet e executar direto) traz riscos de ataque à cadeia de suprimentos — se o servidor for comprometido ou o DNS for sequestrado, código malicioso pode ser executado. Em servidores de produção, baixe o script antes, revise o conteúdo e só então execute, ou prefira os repositórios oficiais da distribuição.

# 5. Instala Python 3 + pip
echo ">>> Installing Python 3..."
sudo apt install -y python3 python3-pip python3-venv

# 6. Instala o Docker
echo ">>> Installing Docker..."
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER

# 7. Verificação
echo ""
echo "=== Environment Verification ==="
echo "Nginx: $(nginx -v 2>&1)"
echo "Node.js: $(node --version)"
echo "npm: $(npm --version)"
echo "Python: $(python3 --version)"
echo "Git: $(git --version)"
echo "Docker: $(docker --version)"

echo ""
echo "✅ Environment setup complete! Some changes (like Docker) require re-login to take effect."

❓ Perguntas Frequentes

P: Qual a diferença entre apt update e apt upgrade? R: apt update atualiza o índice local de pacotes (lista de pacotes e versões disponíveis). apt upgrade efetivamente atualiza os pacotes instalados para versões mais novas. Sempre rode update antes de upgrade.

P: Qual a diferença entre apt remove e apt purge? R: apt remove desinstala o pacote mas mantém seus arquivos de configuração. apt purge desinstala o pacote E remove os arquivos de configuração. Use purge quando quiser uma remoção limpa.

P: Como ver quais arquivos um pacote instalou? R: dpkg -L nome_do_pacote lista todos os arquivos instalados pelo pacote. dpkg -S /caminho/do/arquivo faz o inverso — descobre a qual pacote um arquivo pertence.

P: PPAs são seguros? R: PPAs são fontes mantidas por terceiros, com nível de segurança menor que os repositórios oficiais. Só adicione PPAs oficiais de projetos bem conhecidos (como deadsnakes, nginx, git-core). PPAs desconhecidos trazem riscos de segurança.

P: O que fazer em caso de conflitos de dependência? R: Primeiro tente sudo apt install -f para consertar. Se não resolver, veja se há conflitos entre PPAs (desative os PPAs em conflito). Em último caso, baixe manualmente os pacotes .deb e instale com dpkg -i.


📖 Resumo


📝 Exercícios

  1. Básico (⭐): Use o apt para instalar htop e tree, confirme a instalação e depois use dpkg -L para ver quais arquivos o htop instalou
  2. Intermediário (⭐⭐): Use apt search "database" para procurar e instalar um banco (como PostgreSQL ou SQLite), depois use o pip para instalar um pacote Python (como requests ou flask)
  3. Avançado (⭐⭐⭐): Escreva um script de setup one-click que instale git/vim/htop/nginx/nodejs/python3, verificando se cada ferramenta já está instalada para evitar duplicar, e exiba um relatório de verificação de versões no final
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%