Redirecionamento e pipes
O terminal fica exponencialmente mais útil no momento em que você aprende a ligar a saída de um comando na entrada de outro.
Todo comando de terminal, por padrão, imprime o resultado na tela. Mas a tela não é o único destino possível — você pode redirecionar essa saída pra um arquivo, ou "encanar" ela direto pra dentro de outro comando. Isso é o que torna o terminal muito mais que uma lista de comandos isolados: dá pra combiná-los.
> — redirecionar a saída pra um arquivo (sobrescrevendo)
O sinal > pega tudo que o comando imprimiria na tela e manda pra dentro de um arquivo em vez disso.
echo "primeira linha" > notas.txt
cat notas.txtAté aqui parece só uma forma diferente de criar arquivo. O detalhe importante aparece se você rodar de novo:
echo "segunda linha" > notas.txt
cat notas.txtA "primeira linha" sumiu. > sobrescreve o conteúdo do arquivo inteiro toda vez que roda — não acrescenta, substitui.
>> — acrescentar sem apagar o que já tinha
Quando o objetivo é adicionar uma linha nova sem perder o que já estava no arquivo, o operador certo é >> (dois sinais de maior):
echo "primeira linha" > notas.txt
echo "segunda linha" >> notas.txt
cat notas.txtEssa confusão entre > e >> é um dos erros mais comuns de quem está começando — usar > quando queria acrescentar acaba apagando tudo que existia no arquivo sem aviso nenhum.
< — redirecionar um arquivo pra ser a entrada de um comando
O sentido contrário também existe: < alimenta um comando com o conteúdo de um arquivo, em vez do comando ter que abrir o arquivo ele mesmo.
wc -l < notas.txtwc -l (word count, contando linhas) recebeu o conteúdo de notas.txt como entrada e respondeu que o arquivo tem 2 linhas — sem que wc precisasse saber o nome do arquivo, só recebeu o conteúdo já pronto.
| — o pipe, encanando um comando no outro
O pipe (|) é o operador mais poderoso dos três: ele pega a saída de um comando e usa como entrada do próximo, sem precisar de arquivo intermediário nenhum.
ls -la | grep ".txt"Aqui, ls -la lista tudo da pasta normalmente, mas em vez de essa lista ir pra tela, ela é "encanada" (o |) direto pra dentro do grep ".txt", que filtra e mostra só as linhas que contêm .txt. O resultado final na tela já vem filtrado — você nunca vê a lista completa passando por trás.
Dá pra encadear vários pipes seguidos, cada comando refinando o resultado do anterior:
ls -la | grep ".txt" | wc -lLista tudo → filtra só o que tem .txt → conta quantas linhas sobraram. Três comandos simples combinados resolvem uma pergunta que nenhum dos três resolveria sozinho.
Exercício
Você quer saber quantos arquivos .log existem na pasta atual, sem listar cada um — só o número final. Combine ls, grep e wc -l num único comando com pipes.