{
 "grupo": "windows-linux",
 "descricao": "Windows, Linux e administração de sistemas",
 "itens": [
  {
   "id": "windows-linux-listar-processos-e-matar-um",
   "nome": "Listar processos e matar um",
   "receita": "Linux: ps aux | grep nome e kill PID (kill -9 só se não sair); Windows: Get-Process nome | Stop-Process",
   "prova": "o processo some da lista"
  },
  {
   "id": "windows-linux-quem-usa-a-porta",
   "nome": "Quem usa a porta",
   "receita": "Linux: ss -tlnp | grep :PORTA; Windows: Get-NetTCPConnection -LocalPort PORTA e Get-Process -Id",
   "prova": "a saída mostra o PID e o nome do processo"
  },
  {
   "id": "windows-linux-espaco-em-disco",
   "nome": "Espaço em disco",
   "receita": "Linux: df -h e du -sh * | sort -h; Windows: Get-PSDrive e Get-ChildItem | measure",
   "prova": "os maiores diretórios listados"
  },
  {
   "id": "windows-linux-procurar-texto-em-arquivos",
   "nome": "Procurar texto em arquivos",
   "receita": "Linux: grep -rn \"texto\" . ou rg; PowerShell: Select-String -Path *.log -Pattern texto -Recurse",
   "prova": "arquivo e linha encontrados"
  },
  {
   "id": "windows-linux-procurar-arquivo-por-nome",
   "nome": "Procurar arquivo por nome",
   "receita": "Linux: find . -name \"*.log\" -mtime -1; PowerShell: Get-ChildItem -Recurse -Filter *.log",
   "prova": "lista dos arquivos modificados no último dia"
  },
  {
   "id": "windows-linux-permissoes-de-arquivo-no-linux",
   "nome": "Permissões de arquivo no Linux",
   "receita": "chmod 640 arquivo, chown usuario:grupo arquivo; 755 para executável e diretório, nunca 777",
   "prova": "ls -l mostra o dono e as permissões esperadas"
  },
  {
   "id": "windows-linux-permissoes-no-windows",
   "nome": "Permissões no Windows",
   "receita": "icacls caminho /grant usuario:(R) e Get-Acl para listar; use grupos, não usuários soltos",
   "prova": "Get-Acl lista a regra aplicada"
  },
  {
   "id": "windows-linux-criar-um-servico-systemd",
   "nome": "Criar um serviço systemd",
   "receita": "arquivo .service com ExecStart, User, Restart=on-failure, WantedBy; systemctl daemon-reload e enable --now",
   "prova": "systemctl status mostra active (running)"
  },
  {
   "id": "windows-linux-ver-logs-de-um-servico",
   "nome": "Ver logs de um serviço",
   "receita": "journalctl -u serviço -f --since \"1 hour ago\" e -p err para erros",
   "prova": "as linhas recentes do serviço"
  },
  {
   "id": "windows-linux-servico-que-nao-sobe",
   "nome": "Serviço que não sobe",
   "receita": "systemctl status, journalctl -xe, teste o ExecStart na mão com o mesmo usuário",
   "prova": "a causa aparece na mensagem e o serviço sobe"
  },
  {
   "id": "windows-linux-agendar-tarefa-no-linux",
   "nome": "Agendar tarefa no Linux",
   "receita": "crontab -e com caminho absoluto, redirecione a saída, ou use um timer do systemd",
   "prova": "o log mostra a execução no horário"
  },
  {
   "id": "windows-linux-agendar-tarefa-no-windows",
   "nome": "Agendar tarefa no Windows",
   "receita": "Register-ScheduledTask com ação, gatilho e conta; teste com Start-ScheduledTask",
   "prova": "Get-ScheduledTaskInfo mostra a última execução bem-sucedida"
  },
  {
   "id": "windows-linux-variaveis-de-ambiente",
   "nome": "Variáveis de ambiente",
   "receita": "Linux: export em ~/.profile ou /etc/environment; Windows: setx (usuário) ou [Environment]::SetEnvironmentVariable",
   "prova": "o valor aparece em uma nova sessão"
  },
  {
   "id": "windows-linux-path-sem-bagunca",
   "nome": "PATH sem bagunça",
   "receita": "Linux: export PATH=\"$HOME/bin:$PATH\" no ~/.zshrc; Windows: ajuste pelo painel e reabra o terminal",
   "prova": "which/Get-Command acha o comando"
  },
  {
   "id": "windows-linux-ssh-com-chave",
   "nome": "SSH com chave",
   "receita": "ssh-keygen -t ed25519, ssh-copy-id usuario@host, desligue PasswordAuthentication",
   "prova": "login sem senha funciona e senha é recusada"
  },
  {
   "id": "windows-linux-copiar-arquivos-pela-rede",
   "nome": "Copiar arquivos pela rede",
   "receita": "scp para um arquivo, rsync -avz --progress para diretório (--dry-run antes)",
   "prova": "o checksum dos arquivos bate dos dois lados"
  },
  {
   "id": "windows-linux-tunel-ssh",
   "nome": "Túnel SSH",
   "receita": "ssh -L 5433:localhost:5432 usuario@host abre uma porta local para o banco remoto",
   "prova": "conectar em localhost:5433 acessa o remoto"
  },
  {
   "id": "windows-linux-firewall-no-ubuntu",
   "nome": "Firewall no Ubuntu",
   "receita": "ufw default deny incoming; ufw allow 22/tcp e 443/tcp; ufw enable",
   "prova": "ufw status mostra só as portas abertas"
  },
  {
   "id": "windows-linux-firewall-no-windows",
   "nome": "Firewall no Windows",
   "receita": "New-NetFirewallRule -DisplayName x -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow",
   "prova": "Get-NetFirewallRule lista a regra"
  },
  {
   "id": "windows-linux-atualizar-pacotes",
   "nome": "Atualizar pacotes",
   "receita": "apt update && apt upgrade (ou dnf upgrade); no Windows, winget upgrade --all",
   "prova": "lista de pacotes atualizados sem erro"
  },
  {
   "id": "windows-linux-instalar-programa-no-windows",
   "nome": "Instalar programa no Windows",
   "receita": "winget install --id Pacote.Id -e, ou choco install; confira a fonte",
   "prova": "winget list mostra o pacote instalado"
  },
  {
   "id": "windows-linux-powershell-filtrar-e-ordenar",
   "nome": "PowerShell: filtrar e ordenar",
   "receita": "Get-Process | Where-Object CPU -gt 100 | Sort-Object CPU -Descending | Select -First 5",
   "prova": "tabela com os 5 maiores"
  },
  {
   "id": "windows-linux-powershell-exportar-para-csv",
   "nome": "PowerShell: exportar para CSV",
   "receita": "Get-Service | Select Name,Status | Export-Csv saida.csv -NoTypeInformation -Encoding UTF8",
   "prova": "o arquivo abre com colunas corretas"
  },
  {
   "id": "windows-linux-powershell-script-seguro",
   "nome": "PowerShell: script seguro",
   "receita": "Set-StrictMode -Version Latest, $ErrorActionPreference=\"Stop\", try/catch e parâmetros tipados",
   "prova": "um erro proposital interrompe o script com mensagem"
  },
  {
   "id": "windows-linux-politica-de-execucao",
   "nome": "Política de execução",
   "receita": "Set-ExecutionPolicy RemoteSigned -Scope CurrentUser; nunca Bypass global",
   "prova": "Get-ExecutionPolicy -List mostra o escopo"
  },
  {
   "id": "windows-linux-wsl-comecar",
   "nome": "WSL: começar",
   "receita": "wsl --install, escolha a distro, trabalhe dentro do sistema de arquivos do Linux (~), não em /mnt/c",
   "prova": "o projeto no ~ roda mais rápido e o git não reclama de permissão"
  },
  {
   "id": "windows-linux-wsl-acessar-arquivos",
   "nome": "WSL: acessar arquivos",
   "receita": "do Windows, \\\\wsl$\\Distro\\home; do Linux, /mnt/c; use \\\\wsl.localhost no Explorer",
   "prova": "o arquivo editado de um lado aparece no outro"
  },
  {
   "id": "windows-linux-linha-de-fim-e-permissoes-no-git",
   "nome": "Linha de fim e permissões no git",
   "receita": "core.autocrlf=input no Linux/WSL, .gitattributes com eol=lf para scripts",
   "prova": "scripts .sh não quebram com ^M"
  },
  {
   "id": "windows-linux-monitorar-recursos",
   "nome": "Monitorar recursos",
   "receita": "Linux: top/htop, free -h, iostat; Windows: Get-Counter e o Monitor de Desempenho",
   "prova": "o gargalo (CPU, memória ou disco) identificado"
  },
  {
   "id": "windows-linux-compactar-pasta-em-tar-ou-zip",
   "nome": "Compactar pasta em tar ou zip",
   "receita": "tar -czf pacote.tar.gz dir e tar -xzf; PowerShell: Compress-Archive e Expand-Archive",
   "prova": "a lista do pacote bate com o diretório"
  },
  {
   "id": "windows-linux-limpar-o-disco-com-seguranca",
   "nome": "Limpar o disco com segurança",
   "receita": "Linux: journalctl --vacuum-size=200M, apt clean, docker system df; Windows: Limpeza de Disco e cleanmgr",
   "prova": "o espaço livre aumentou e nada importante sumiu"
  },
  {
   "id": "windows-linux-diagnostico-de-rede",
   "nome": "Diagnóstico de rede",
   "receita": "ping, traceroute/tracert, nslookup/dig e curl -v em sequência",
   "prova": "a camada com falha identificada"
  },
  {
   "id": "windows-linux-usuarios-e-grupos",
   "nome": "Usuários e grupos",
   "receita": "Linux: adduser, usermod -aG grupo usuario; Windows: New-LocalUser e Add-LocalGroupMember",
   "prova": "id usuario mostra o grupo"
  },
  {
   "id": "windows-linux-montar-disco-e-fstab",
   "nome": "Montar disco e fstab",
   "receita": "lsblk, mkfs, mount e linha em /etc/fstab por UUID com nofail",
   "prova": "o disco monta após reiniciar"
  },
  {
   "id": "windows-linux-inicializacao-lenta",
   "nome": "Inicialização lenta",
   "receita": "Linux: systemd-analyze blame; Windows: Gerenciador de Tarefas, aba Inicializar",
   "prova": "a lista dos mais lentos e o tempo antes e depois"
  }
 ]
}
