0 XP
Módulo 1 · Linux e Sistemas

Filesystem e navegação com intenção

Iniciante 45 min+25 XPShellcoreutilsfindgrep

Objetivos desta aula

  • Entender a hierarquia FHS e o propósito de cada diretório
  • Buscar arquivos e conteúdo rapidamente com find e grep
  • Inspecionar arquivos grandes sem travar o terminal
  • Usar links simbólicos em estratégias de release e rollback
  • Descobrir quem está consumindo espaço em disco

1. Uma árvore só, começando em /

Diferente do Windows, o Linux não tem letras de unidade: tudo parte de /. Discos adicionais são "montados" em um diretório (por exemplo /mnt/dados) e passam a fazer parte da mesma árvore. Entender isso evita confusão quando um disco cheio afeta só parte do sistema.

2. O mapa que acelera qualquer investigação

  • /etc — configuração do sistema e dos serviços.
  • /var — dados que mudam: logs, filas, bancos, caches.
  • /usr — programas e bibliotecas do sistema.
  • /opt — software de terceiros ou da empresa (usaremos /opt/cloudshop).
  • /tmp — temporários, apagados no reinício.
  • /home — arquivos de pessoas.
  • /proc e /sys — visão viva do kernel e dos processos.

Quando alguém disser "a configuração está errada", você já sabe onde olhar; quando disser "o disco encheu", você começa por /var.

3. Caminhos absolutos e relativos

/opt/cloudshop/server.js é absoluto: funciona de qualquer lugar. ./server.js é relativo ao diretório atual. Regra profissional: em scripts, serviços systemd e pipelines use sempre absoluto, porque você não controla de onde o processo será iniciado.

4. Navegar com poucas teclas

pwd diz onde você está, cd - volta ao diretório anterior, cd sozinho vai para a sua home. ls -alh mostra tudo, inclusive arquivos ocultos, com tamanho legível. tree -L 2 dá a visão de estrutura em dois níveis — ótimo para entender um servidor desconhecido.

5. find: buscar por características do arquivo

find filtra por nome (-name), tamanho (-size +50M), tempo de modificação (-mtime -2 = últimas 48 h), tipo (-type f) e permissão (-perm). É a ferramenta para perguntas como "qual arquivo de configuração mudou ontem?" — pergunta que resolve incidentes causados por alteração manual.

6. grep: buscar dentro do conteúdo

grep -rn "DATABASE_URL" /etc/ mostra arquivo e linha. Opções que valem memorizar: -i ignora maiúsculas, -c conta ocorrências, -v inverte a busca, -A3/-B3 mostra linhas de contexto. Onde existir ripgrep (rg), a busca é bem mais rápida.

7. Arquivos gigantes: nunca use cat

Um cat em log de 4 GB inunda o terminal e trava sua sessão no meio da crise. Use tail -n 100 para o fim, tail -f para acompanhar ao vivo, head para o começo e less +G para navegar sem carregar tudo (dentro do less: /termo busca, G vai ao fim, q sai).

8. Montando um filtro em linha de montagem (pipes)

O | liga a saída de um comando à entrada do próximo. É assim que se constrói diagnóstico: grep ERROR app.log | awk '{print $1}' | sort | uniq -c | sort -rn | head responde "quais horários concentram erros?". Aprenda quatro peças — grep, awk, sort, uniq — e você resolve a maioria das análises sem instalar nada.

9. Metadados: stat e ls -l

stat arquivo mostra dono, grupo, permissões, tamanho e três datas (acesso, modificação, mudança de metadados). Em investigação, a data de modificação prova se alguém alterou a configuração antes da falha — evidência objetiva em vez de suposição.

10. Links simbólicos e a estratégia de release

Um symlink é um atalho para outro caminho. Deploy clássico: cada versão em /opt/cloudshop/releases/2026-09-06 e um link current apontando para a ativa. Publicar é trocar o link; reverter também. Isso dá rollback praticamente instantâneo, mesma ideia que Kubernetes implementa com Deployments.

11. Espaço em disco: df e du

df -h responde "quanto falta em cada ponto de montagem"; du -xh --max-depth=1 /var | sort -h responde "quem está ocupando". Faça sempre nessa ordem: primeiro identifique a partição cheia, depois desça no diretório culpado. Lembre também de df -i: é possível ter espaço livre e ficar sem inodes por excesso de arquivos pequenos.

12. Rotina de primeiros 60 segundos em servidor desconhecido

uname -a e lsb_release -a (que sistema é), df -h (disco), systemctl list-units --type=service --state=running (o que roda), ls /etc | less e ls /var/log (onde estão config e logs). Escreva o resultado no runbook do módulo.

Na prática

Comandos de navegação e busca que você usará todo dia

bash

pwd                                 # onde estou -> /home/usuario
ls -alh /etc | head                 # listar com tamanho legivel
tree -L 2 /var 2>/dev/null || ls -R /var | head

find /var/log -name "*.log" -size +50M          # logs grandes
find /etc -name "*.conf" -mtime -2              # config alterada nas ultimas 48h
grep -rn "DATABASE_URL" /etc/cloudshop/ 2>/dev/null
# /etc/cloudshop/app.env:4:DATABASE_URL=postgres://...

tail -n 100 -f /var/log/syslog       # acompanhar em tempo real (Ctrl+C sai)
less +G /var/log/syslog              # abrir no fim sem carregar tudo
stat /etc/hosts                      # metadados: dono, permissao, datas
du -xh --max-depth=1 /var | sort -h  # quem ocupa espaco -> 2,1G /var/log

Nota de segurança: Evite grep recursivo em / como root: além de lento, pode expor conteúdo sensível no histórico do terminal.

Análise de log com pipes (sem instalar nada)

bash

# Quantos erros por hora no log da aplicacao
grep "ERROR" /var/log/cloudshop/app.log | awk '{print substr($2,1,2)}' | sort | uniq -c | sort -rn | head
#  142 14      <- pico de erros as 14h
#   87 15

# Top 5 mensagens de erro repetidas
grep "ERROR" /var/log/cloudshop/app.log | cut -d' ' -f4- | sort | uniq -c | sort -rn | head -5

# IPs que mais acessaram (log do nginx)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -5

Release com symlink: publicar e reverter em segundos

bash

sudo mkdir -p /opt/cloudshop/releases/2026-09-06
# ... copia os arquivos da nova versao para a pasta acima ...
sudo ln -sfn /opt/cloudshop/releases/2026-09-06 /opt/cloudshop/current
ls -l /opt/cloudshop/current
# current -> /opt/cloudshop/releases/2026-09-06

sudo systemctl restart cloudshop-api      # servico aponta para /opt/cloudshop/current

# Rollback: basta apontar para a versao anterior
sudo ln -sfn /opt/cloudshop/releases/2026-09-01 /opt/cloudshop/current
sudo systemctl restart cloudshop-api

Disco cheio: investigação em ordem

bash

df -h                       # /dev/root 40G 40G 0 100% /   <- partição cheia
df -i                       # confira tambem inodes (IUse% 100% e problema diferente)
sudo du -xh --max-depth=1 / | sort -h | tail -5
#  1,2G /usr
#  6,8G /var          <- desca aqui
sudo du -xh --max-depth=1 /var | sort -h | tail -3
#  5,9G /var/log
sudo find /var/log -type f -size +200M -exec ls -lh {} \;
sudo journalctl --vacuum-size=500M   # libera espaco do journal com criterio

Nota de segurança: Nunca apague log "para liberar espaço" antes de coletar a evidência do incidente: copie o trecho relevante primeiro.

Por que isso importa

Em incidente, velocidade de navegação define quantos minutos o serviço fica fora. Quem procura arquivo com clique perde a janela.

Erro comum

Usar cat em arquivos enormes e travar a sessão SSH durante a crise.

Dica de produção

Prefira less +G e tail -f; e sempre confirme com stat quem é o dono do arquivo de configuração.

Pergunta de entrevista

Onde você procuraria a configuração e os logs de um serviço desconhecido em um servidor?

Glossário

FHS
Filesystem Hierarchy Standard: convenção sobre o propósito de cada diretório.
symlink
Atalho que aponta para outro caminho, usado em estratégias de release/rollback.
ponto de montagem
Diretório onde um disco ou partição é acoplado à árvore de arquivos.
inode
Estrutura que representa um arquivo no filesystem; podem esgotar mesmo com espaço livre.
pipe
Operador | que liga a saída de um comando à entrada do próximo.
glob
Padrão como *.log usado pelo shell para expandir nomes de arquivos.
stat
Comando que exibe metadados de um arquivo: dono, permissões, tamanho e datas.

Conexão com o CloudShop

Definir /opt/cloudshop para a aplicação e /var/log/cloudshop para os logs.

Quiz da aula

  1. 1. Onde ficam, por convenção, os arquivos de configuração do sistema?

  2. 2. Qual comando encontra arquivos de configuração alterados nas últimas 48 horas?

  3. 3. O disco está em 100% e você precisa achar o culpado. Qual sequência é correta?

  4. 4. Por que usar symlink 'current' em deploy?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima