Módulo 1.4 Prático

Conceitos essenciais: shell, comandos, pipes, JSON

Domine os fundamentos práticos que todo usuário de CLI precisa: anatomia de comandos, pipes e redirecionamento, processamento de JSON, navegação de arquivos, busca/filtragem e variáveis de ambiente.

6 Tópicos
30 Minutos
Iniciante Nível
Prático Tipo
1

📝 Anatomia de um comando

Todo comando no terminal segue uma estrutura consistente. Entender essa anatomia é como aprender a gramática de uma língua — uma vez que você domina a estrutura, qualquer comando novo se torna intuitivo.

Conceito Principal

A estrutura universal de um comando CLI:

# Estrutura geral:

comando [subcomando] [flags] [argumentos]

# Exemplo real:

git commit -m "mensagem do commit"

git=comando | commit=subcomando | -m=flag | "mensagem..."=argumento

Comando

O programa

Subcomando

A ação

Flags

Modificadores

Argumentos

Os alvos

Flags curtas usam um traço (-v) e podem ser combinadas (-la = -l -a). Flags longas usam dois traços (--verbose) e são mais legíveis. Use --help em qualquer comando para ver as opções disponíveis, e man comando para a documentação completa.

💡 Dica Prática

Quando encontrar um comando desconhecido, use tldr comando (instale via npm install -g tldr) para ver exemplos práticos resumidos. É muito mais rápido que ler a man page completa e suficiente para 90% dos casos.

2

🔗 Pipes e redirecionamento

Pipes e redirecionamento são o superpoder da CLI. Eles permitem conectar programas simples em pipelines complexas e controlar para onde vai a saída de cada comando.

Operadores Essenciais

| Pipe

Conecta a saída (stdout) de um comando à entrada (stdin) do próximo.

ls -la | grep ".js" | wc -l

> Redireciona (sobrescreve)

Envia a saída para um arquivo, substituindo o conteúdo existente.

echo "hello" > arquivo.txt

>> Redireciona (append)

Adiciona a saída ao final de um arquivo, sem substituir.

echo "nova linha" >> log.txt

2>&1 Stderr para stdout

Redireciona mensagens de erro para a mesma saída do stdout. Útil para capturar tudo em logs.

npm build 2>&1 | tee build.log

3

📊 JSON no terminal

JSON é o formato que conecta humanos, APIs e agentes de IA. Dominar ferramentas de processamento de JSON no terminal é uma das habilidades mais valiosas na era dos agentes.

jq — O "sed para JSON"

jq é a ferramenta essencial para filtrar, transformar e extrair dados de JSON no terminal:

# Extrair nomes de todos os usuários

cat dados.json | jq '.users[].name'

# Filtrar usuários com mais de 30 anos

cat dados.json | jq '.users[] | select(.age > 30)'

# Contar itens em um array

cat dados.json | jq '.users | length'

# Transformar formato

cat dados.json | jq '.users[] | {nome: .name, email: .email}'

📊 Ferramentas JSON

jq — Processador de JSON via CLI. Filtra, transforma, formata. Essencial e onipresente.
fx — Visualizador interativo de JSON. Navegue pela estrutura com o teclado e aplique filtros em tempo real.
jless — Pager para JSON, como o less é para texto. Ideal para explorar JSONs grandes.

💡 Dica Prática

Agentes de IA operam com JSON internamente — dominar jq é essencial para inspecionar, debugar e validar o que agentes estão fazendo. Quando um agente retorna dados estruturados, jq permite que você verifique rapidamente se o resultado está correto.

4

📁 Navegação e manipulação de arquivos

Navegar e manipular arquivos pelo terminal é mais rápido que qualquer file manager gráfico — especialmente quando combinado com ferramentas modernas que substituem os utilitários clássicos por versões mais rápidas e informativas.

📊 Comandos Essenciais

ls / eza

Listar arquivos. eza é o substituto moderno com ícones e cores.

cd / z

Navegar entre diretórios. z (zoxide) aprende seus caminhos frequentes.

mkdir / cp / mv / rm

Criar diretórios, copiar, mover e remover arquivos.

find / fd

Buscar arquivos. fd é mais rápido e com sintaxe mais simples.

tree

Visualizar estrutura de diretórios em árvore.

pwd

Mostrar o diretório atual (print working directory).

💡 Dica Prática

Use aliases para comandos frequentes. Adicione ao seu .zshrc: alias ll='eza -la --git', alias ..='cd ..'. Cada segundo economizado por comando se multiplica ao longo do dia.

5

🔍 Busca e filtragem

Encontrar informação rapidamente é talvez a habilidade mais prática no terminal. As ferramentas modernas de busca são ordens de magnitude mais rápidas que seus equivalentes gráficos.

Ferramentas de Busca

grep / ripgrep (rg)

Busca por padrão dentro de arquivos. Ripgrep é o substituto moderno: respeita .gitignore, busca recursiva por padrão, e é 10-100x mais rápido que grep em projetos grandes.

rg "TODO" --type js

awk e sed

Processamento de texto avançado. awk para extrair colunas e computar dados; sed para substituições em massa. Poderosos mas com curva de aprendizado.

awk '{print $1, $3}' dados.txt

fzf — Busca fuzzy interativa

Game changer para produtividade. Busca fuzzy em qualquer lista: arquivos, histórico de comandos, branches git, processos. Integra-se com qualquer comando.

vim $(fzf) # Abre arquivo buscado no vim

📊 Velocidade Comparativa

Em um projeto com 100.000 arquivos, ripgrep (rg) encontra resultados em milissegundos enquanto grep tradicional pode levar segundos. Para agentes que executam dezenas de buscas por sessão, essa diferença é transformadora.

6

⚙️ Variáveis e ambiente

Variáveis de ambiente são o mecanismo que o sistema operacional usa para configurar o comportamento de programas — incluindo agentes de IA. Entender como elas funcionam é fundamental para configurar qualquer ferramenta CLI.

Conceitos Essenciais

PATH

A variável mais importante: lista de diretórios onde o shell procura executáveis. Quando você digita git, o shell procura em cada diretório do PATH até encontrar o binário.

echo $PATH

export e .env

export CHAVE=valor define uma variável para a sessão atual e processos filhos. Arquivos .env armazenam variáveis por projeto (API keys, configurações).

.bashrc / .zshrc

Arquivo de configuração que roda toda vez que uma nova sessão de shell inicia. Aliases, variáveis, funções customizadas — tudo fica aqui para persistir entre sessões.

💡 Dica Prática

Use direnv para gerenciar variáveis de ambiente por diretório. Quando você entra em uma pasta de projeto, direnv carrega automaticamente as variáveis do .envrc local. Muito útil com agentes: cada projeto pode ter sua API key, modelo preferido e configurações específicas carregadas automaticamente.

⚠️ Alerta de Segurança

Nunca commite arquivos .env no Git — eles contêm API keys e segredos. Adicione .env ao seu .gitignore imediatamente. Use .env.example com valores fictícios para documentar as variáveis necessárias.

Resumo Final

Todo comando segue: comando [subcomando] [flags] [argumentos]
Pipes (|) e redirecionamento (>, >>) são o superpoder de composição da CLI
jq é essencial para processar JSON — a língua franca dos agentes
Ferramentas modernas (eza, fd, rg, fzf, zoxide) substituem utilitários clássicos
fzf é um game changer para busca fuzzy interativa em qualquer contexto
direnv gerencia variáveis de ambiente por projeto — ideal para agentes

Próximo módulo: Com os fundamentos dominados, vamos colocar a mão na massa: instalar seu primeiro agente, conversar com IA no terminal, e entender segurança básica.