Ambiente Linux profissional com WSL2 (ou VM)
Objetivos desta aula
- Instalar e validar um Linux utilizável para trabalho real
- Entender a estrutura de diretórios e o modelo de permissões
- Inspecionar processos, serviços e logs com comandos básicos
- Configurar shell, histórico e aliases úteis
- Entender por que trabalhar dentro do filesystem Linux é mais rápido
1. Por que Linux é obrigatório
Praticamente todo servidor, container e nó de Kubernetes que você vai administrar roda Linux. Containers, inclusive, são um recurso do kernel Linux: sem kernel Linux não existe container nativo. Por isso o seu ambiente de estudo precisa ser Linux — não por gosto, mas por semelhança com produção.
2. Três caminhos: WSL2, máquina virtual ou nativo
- WSL2 (Windows): kernel Linux real rodando ao lado do Windows, com integração com o editor e com Docker. É o caminho mais produtivo em Windows.
- Máquina virtual (VirtualBox, UTM, Multipass): útil quando você quer praticar systemd, reboot, disco e rede isolada.
- Linux nativo: melhor desempenho e nenhuma camada intermediária.
Em macOS, use o terminal nativo para o dia a dia mais uma VM leve (por exemplo Multipass) quando precisar de systemd.
3. Instalando passo a passo (Windows)
- Abra o PowerShell como administrador.
- Rode
wsl --install -d Ubuntu-24.04: isso habilita o subsistema, baixa a distribuição e pede reinício. - Garanta a versão 2 com
wsl --set-default-version 2. - No primeiro início, crie usuário e senha do Linux — eles são independentes do Windows.
- Atualize os pacotes e instale utilitários básicos.
Escolha sempre uma versão LTS (suporte longo). Servidores usam LTS, e você quer praticar no mesmo terreno.
4. A anatomia do filesystem
Diretórios que você vai usar todo dia:
/etc— arquivos de configuração do sistema e dos serviços./var/log— logs; o primeiro lugar a olhar em um problema./home/seu-usuario(ou~) — seus arquivos e configurações pessoais./usr/local/bin— binários que você instala manualmente (kubectl, helm)./tmp— arquivos temporários, apagados no reinício./proce/sys— visões do kernel em tempo real, não arquivos de verdade.
5. Permissões: o modelo que explica metade dos erros
Cada arquivo tem dono, grupo e três conjuntos de permissões: leitura (r=4), escrita (w=2) e execução (x=1). Por isso chmod 640 significa dono lê e escreve, grupo lê, outros nada. Em diretórios, x é permissão de entrar.
Quando um comando devolve permission denied, a pergunta correta não é "qual sudo resolve", é: qual usuário está executando e o que ele precisa acessar? Isso vale para chave SSH (600), para o socket do Docker e para volumes de container.
6. Processos: quem está consumindo a máquina
Um processo tem um identificador (PID), um dono e um estado. Ferramentas essenciais: ps aux para listar, top/htop para acompanhar em tempo real, kill para pedir encerramento (sinal TERM) e kill -9 para forçar (sinal KILL). Containers usam exatamente os mesmos conceitos — um container é um processo isolado.
7. Serviços e systemd
Em servidores, programas de longa duração são gerenciados pelo systemd: systemctl status nginx mostra se está rodando, systemctl enable --now ativa no boot e inicia agora, e journalctl -u nginx -f acompanha os logs. No WSL2 o systemd precisa ser habilitado em /etc/wsl.conf; se preferir, pratique serviços em uma VM.
8. Pacotes: instalar sem quebrar o sistema
apt update atualiza a lista de pacotes disponíveis; apt upgrade atualiza o que está instalado; apt install -y pacote instala. Regra prática: em servidores, atualização é mudança — deve ser planejada, registrada e testada, não feita no impulso.
9. Deixando o shell confortável (15 minutos que você usa por anos)
Configure histórico grande com data, aliases para comandos repetidos e um diretório de trabalho próprio. Histórico com data vira documentação do que você fez em um incidente; aliases reduzem erro de digitação em comandos longos como kubectl e terraform.
10. A armadilha do /mnt/c
No WSL2 você pode acessar os arquivos do Windows em /mnt/c, mas cada leitura atravessa uma ponte entre sistemas de arquivos diferentes. O efeito prático é build e instalação de dependências drasticamente mais lentos. Trabalhe sempre em ~/projetos, dentro do filesystem Linux, e abra a pasta pelo editor com integração WSL.
11. Validar em vez de supor
Ao terminar qualquer instalação, confirme com comando: distro e versão, kernel, memória, disco e núcleos de CPU. Esse é exatamente o reflexo que você usará no primeiro minuto de um incidente: coletar fatos antes de formular hipótese.
12. Checagem final da aula
Você deve conseguir: abrir o Linux, dizer a versão do kernel, listar processos, ver espaço em disco, explicar o que significa 644 e mostrar seu ~/projetos/cloudshop criado. Anote no diário as versões encontradas.
Na prática
Instalar e validar o ambiente
bash
# Windows PowerShell (como administrador)
wsl --install -d Ubuntu-24.04 # instala o subsistema + Ubuntu LTS
wsl --set-default-version 2 # garante WSL2 (kernel real)
# Dentro do Ubuntu
lsb_release -a # distro e versao -> Ubuntu 24.04.1 LTS
uname -r # versao do kernel -> 5.15.167.4-microsoft-standard-WSL2
free -h # memoria -> Mem: 7,7Gi disponivel 6,9Gi
df -h / # disco -> /dev/sdc 1007G 3% /
nproc # nucleos de CPU -> 8
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git jq unzip build-essential tree htopPermissões e processos na prática
bash
mkdir -p ~/projetos/cloudshop && cd ~/projetos/cloudshop
echo "segredo=nao" > config.txt
ls -l config.txt # -rw-r--r-- 1 user user 13 ... config.txt (644)
chmod 600 config.txt # so o dono le e escreve (padrao para arquivos sensiveis)
ls -l config.txt # -rw------- 1 user user
ps aux | head -5 # lista processos: USER PID %CPU %MEM COMMAND
ps aux --sort=-%mem | head -5 # os 5 que consomem mais memoria
sleep 300 & # cria um processo em segundo plano -> [1] 4211
kill 4211 # pede encerramento (sinal TERM)
kill -9 4211 2>/dev/null # forca, se o processo ignorou o TERMNota de segurança: Arquivos de configuração com credencial devem ser 600. Chave SSH com permissão aberta é recusada pelo próprio cliente.
Serviços e logs com systemd (VM ou WSL2 com systemd ativo)
bash
sudo apt install -y nginx
systemctl status nginx # Active: active (running) since ...
sudo systemctl enable --now nginx # ativa no boot e inicia agora
curl -sI localhost | head -1 # HTTP/1.1 200 OK
journalctl -u nginx -n 20 --no-pager # ultimas 20 linhas de log do servico
sudo systemctl restart nginx # reinicia o servico apos mudar configuracaoAliases e histórico no ~/.bashrc
bash
cat >> ~/.bashrc <<'EOF'
export HISTSIZE=50000
export HISTFILESIZE=100000
export HISTTIMEFORMAT='%F %T ' # historico com data: vira documentacao de incidente
alias ll='ls -alh'
alias gs='git status -sb'
alias k='kubectl'
alias tf='terraform'
alias dc='docker compose'
EOF
source ~/.bashrc
history | tail -3 # confirma que as datas aparecemNota de segurança: Não guarde tokens em ~/.bashrc: qualquer processo do seu usuário lê o arquivo e ele acaba em backup e screenshot.
Por que isso importa
Ambiente frágil gera falsos problemas. Metade dos 'bugs' de quem está começando é ambiente diferente do servidor.
Erro comum
Trabalhar em /mnt/c/Users/... e concluir que Docker e npm são lentos. O gargalo é a ponte de filesystem.
Dica de produção
Registre no diário a versão exata de cada ferramenta instalada. Diferença de versão é causa comum de 'na minha máquina funciona'.
Pergunta de entrevista
Como você reproduz localmente um problema que só acontece no servidor?
Glossário
- WSL2
- Subsistema Windows para Linux com kernel real, permitindo rodar distribuições Linux com bom desempenho.
- LTS
- Long Term Support: versão com suporte prolongado, preferida em servidores.
- systemd
- Gerenciador de serviços do Linux moderno: inicia, reinicia e supervisiona processos de longa duração.
- journalctl
- Ferramenta que consulta os logs coletados pelo systemd, por serviço e por período.
- PID
- Identificador numérico de um processo em execução.
- chmod
- Comando que altera permissões de leitura, escrita e execução de arquivos e diretórios.
- apt
- Gerenciador de pacotes das distribuições Debian/Ubuntu.
- shell
- Programa que interpreta seus comandos; no curso usamos Bash.
Conexão com o CloudShop
Criar ~/projetos/cloudshop, onde todo o código do projeto viverá.
Quiz da aula
1. Por que evitar trabalhar em /mnt/c no WSL2?
2. O que significa a permissão 640 em um arquivo?
3. Qual comando mostra os logs de um serviço gerenciado pelo systemd?
4. Ao receber 'permission denied', qual é a primeira pergunta correta?
Minhas anotações
Salvo automaticamente neste navegador.