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
- Aula 17: Gerenciamento de Processos
1. O Que Você Vai Aprender
- apt: update/install/remove/search
- dpkg: instalação de pacotes .deb locais
- Adicionar PPAs de terceiros
- snap/flatpak: pacotes em container
- pip/npm/cargo: gerenciadores em nível de linguagem
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."
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
# 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
# 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
# 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
# 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
# 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
# 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:
TEXTHit: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
# 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
# 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:
TEXTHit: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
# 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:
TEXTCollecting 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
# 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
#!/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 updateeapt upgrade? R:apt updateatualiza o índice local de pacotes (lista de pacotes e versões disponíveis).apt upgradeefetivamente atualiza os pacotes instalados para versões mais novas. Sempre rodeupdateantes deupgrade.
P: Qual a diferença entre
apt removeeapt purge? R:apt removedesinstala o pacote mas mantém seus arquivos de configuração.apt purgedesinstala o pacote E remove os arquivos de configuração. Usepurgequando quiser uma remoção limpa.
P: Como ver quais arquivos um pacote instalou? R:
dpkg -L nome_do_pacotelista todos os arquivos instalados pelo pacote.dpkg -S /caminho/do/arquivofaz 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 -fpara consertar. Se não resolver, veja se há conflitos entre PPAs (desative os PPAs em conflito). Em último caso, baixe manualmente os pacotes.debe instale comdpkg -i.
📖 Resumo
- Debian/Ubuntu:
apt install/remove/purge/update/upgrade - Pacotes locais:
dpkg -ipara instalar.deb,apt install -fpara resolver dependências - Fontes de terceiros:
add-apt-repository ppa:xxx/yyy - Pacotes em nível de linguagem:
pip installpara Python,npm installpara Node.js apt autoremovelimpa dependências desnecessárias
📝 Exercícios
- Básico (⭐): Use o apt para instalar htop e tree, confirme a instalação e depois use
dpkg -Lpara ver quais arquivos o htop instalou - 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 (comorequestsouflask) - 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