0 XP
Módulo 0 · Boas-vindas e Ambiente

Ambiente Linux profissional com WSL2 (ou VM)

Iniciante 45 min+25 XPWSL2UbuntuShell

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)

  1. Abra o PowerShell como administrador.
  2. Rode wsl --install -d Ubuntu-24.04: isso habilita o subsistema, baixa a distribuição e pede reinício.
  3. Garanta a versão 2 com wsl --set-default-version 2.
  4. No primeiro início, crie usuário e senha do Linux — eles são independentes do Windows.
  5. 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.
  • /proc e /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 htop

Permissõ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 TERM

Nota 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 configuracao

Aliases 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 aparecem

Nota 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. 1. Por que evitar trabalhar em /mnt/c no WSL2?

  2. 2. O que significa a permissão 640 em um arquivo?

  3. 3. Qual comando mostra os logs de um serviço gerenciado pelo systemd?

  4. 4. Ao receber 'permission denied', qual é a primeira pergunta correta?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima