Linux / Comando head: mostrar as primeiras linhas ou bytes
O comando head mostra o início de cada arquivo ou da entrada padrão. Sem opções, imprime até dez linhas; use -n para escolher a quantidade de linhas e -c para escolher bytes. Ele serve para conferir cabeçalhos e amostras sem editar a entrada.
As opções seguem o head do GNU Coreutils, comum em distribuições Linux. As práticas usam Bash, utilitários GNU e find. A preparação abaixo cria arquivos pequenos em uma pasta exclusiva sob a pasta atual; os exemplos seguintes usam essa mesma pasta e não dependem de logs de produção.
Com vários arquivos, o comando normalmente identifica cada conjunto de linhas com o nome da origem. As contagens negativas do GNU head têm outro objetivo: excluir apenas o final, imprimindo o restante. Isso pode gerar uma saída grande e não equivale a limitar a leitura a poucas linhas.
Sintaxe básica
head [opções]... [arquivo]...
opções e arquivo são marcadores. Sem arquivo, ou com - no lugar de um nome, head lê a entrada padrão. Confira head --version, head --help e man head na instalação de destino: implementações como BSD e BusyBox podem ter diferenças. Use aspas em caminhos com espaços e -- antes dos nomes.
Uso básico do head
Preparar os arquivos e mostrar dez linhas
Execute o bloco no mesmo terminal e pare se a preparação falhar. O log principal tem 30 linhas numeradas; app.log e worker.log têm oito linhas cada. O CSV tem um cabeçalho e dez registros simples, sem quebras de linha dentro dos campos. sample.bin contém 2.048 bytes ASCII conhecidos, e utf8.txt contém a palavra ação seguida de uma quebra de linha. A última chamada mostra linha 01 até linha 10; o arquivo continua com as 30 linhas.
head_start=$PWD
head_demo=$(mktemp -d -p "$PWD" 'head-demo.XXXXXXXX') &&
cd -- "$head_demo" &&
printf 'linha %02d\n' $(seq 1 30) > access.log &&
printf 'app %02d\n' $(seq 1 8) > app.log &&
printf 'worker %02d\n' $(seq 1 8) > worker.log &&
{
printf 'produto,quantidade\n'
for i in $(seq 1 10); do printf 'item%02d,%d\n' "$i" "$i"; done
} > sales.csv &&
for i in $(seq 1 128); do printf '0123456789abcdef'; done > sample.bin &&
printf 'ação\n' > utf8.txt &&
printf 'controle intacto\n' > sentinel.txt &&
mkdir -- logs &&
for i in $(seq 1 25); do
printf 'log %02d\n' "$i" > "logs/$(printf '%02d' "$i").log"
done &&
head -- access.log
Escolher o número de linhas
O exemplo imprime linha 01 até linha 25. Se o arquivo tiver menos linhas que o limite, head mostra apenas as disponíveis, sem completar a saída com linhas vazias. A opção -n 0 não imprime linhas; para selecionar só a primeira, use -n 1.
cd -- "$head_demo" &&
head -n 25 -- access.log
Escolher bytes e examinar dados com segurança
O exemplo seleciona 64 bytes do arquivo conhecido e os envia ao od, que os mostra em hexadecimal. Em -An -tx1 -v, a saída não tem endereços, cada grupo representa um byte hexadecimal e linhas repetidas não são abreviadas por um asterisco. O resultado contém quatro linhas com 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66: a codificação de 0123456789abcdef. Para dados binários desconhecidos, essa visualização evita enviar caracteres de controle diretamente ao terminal.
cd -- "$head_demo" &&
head -c 64 -- sample.bin | od -An -tx1 -v
Conferir a saída de um pipe
O comando printf fornece três linhas pela entrada padrão. head -n 2 seleciona as duas primeiras, preservando seu conteúdo e sua ordem. Não é necessário criar um arquivo intermediário.
printf 'um\ndois\ntres\n' | head -n 2
Saída esperada:
um
dois
Neste exemplo pequeno, a saída esperada é apenas um e dois, cada palavra em uma linha. Em uma produção maior, head pode encerrar antes de o produtor terminar de escrever. O processo anterior pode então receber SIGPIPE, o sinal associado à escrita em um pipe sem leitor; isso precisa ser considerado ao verificar falhas em automações.
Principais opções
| Opção | Efeito no GNU head |
|---|---|
-n NUM |
Imprimir até NUM linhas de cada entrada; -n 0 não imprime linhas. |
-c NUM |
Imprimir até NUM bytes, sem contar caracteres Unicode. |
-q |
Ocultar os cabeçalhos com nomes de arquivos, inclusive com várias entradas; não remover linhas do conteúdo. |
-v |
Mostrar cabeçalhos com nomes, mesmo quando há apenas um arquivo. |
-n -NUM |
Imprimir tudo, exceto as últimas NUM linhas de cada entrada. |
-c -NUM |
Imprimir tudo, exceto os últimos NUM bytes de cada entrada. |
Por exemplo, head -n -2 -- app.log mostra as seis primeiras linhas do arquivo de oito linhas, e head -c -4 -- sample.bin mostra 2.044 dos 2.048 bytes. Se a quantidade a excluir for maior ou igual ao tamanho da entrada, não sobra conteúdo. Ao excluir zero, como em -n -0, toda a entrada é selecionada: é diferente de -n 0. Em streams, o programa precisa manter informação sobre o final ainda não conhecido; não use uma contagem negativa esperando a mesma parada antecipada de um limite positivo.
Exemplos práticos
Inspecionar o cabeçalho e cinco linhas de um CSV
Na preparação, cada registro ocupa exatamente uma linha. Por isso, seis linhas correspondem ao cabeçalho produto,quantidade e aos cinco registros de item01,1 até item05,5. head não interpreta CSV: um campo entre aspas pode conter quebras de linha, como descreve a RFC 4180 sobre CSV. Nesse caso, seis linhas físicas não representam necessariamente cinco registros completos. Use um leitor de CSV quando precisar contar registros respeitando esse formato.
cd -- "$head_demo" &&
head -n 6 -- sales.csv
Comparar os inícios de vários logs
A saída mostra o cabeçalho ==> app.log <==, cinco linhas de app, uma separação em branco e o cabeçalho de worker.log com suas cinco linhas. Sem -v, vários arquivos também recebem cabeçalhos por padrão; a opção apenas os força inclusive para uma única origem. -q os oculta. O limite é aplicado a cada arquivo separadamente, não ao total combinado.
cd -- "$head_demo" &&
head -v -n 5 -- app.log worker.log
Limitar uma lista produzida por outro comando
A preparação cria 25 arquivos com nomes simples em logs. O exemplo lista esses arquivos, ordena os caminhos no locale C e mostra os primeiros 20, de ./logs/01.log até ./logs/20.log. A ordenação torna a seleção reproduzível; sem sort, a ordem de find não deve ser tratada como ordem alfabética ou cronológica. A busca permanece dentro da pasta de prática.
cd -- "$head_demo" &&
find ./logs -type f -name '*.log' -print | LC_ALL=C sort | head -n 20
A lista por linhas funciona para estes nomes controlados. Em scripts que tratam nomes arbitrários, uma quebra de linha pode fazer parte do próprio nome. A documentação do GNU find recomenda considerar -print0; o GNU head oferece -z para contar itens separados pelo byte NUL. Todo o pipeline precisa usar o mesmo separador, por exemplo sort -z ao ordenar esses itens; não basta trocar só uma etapa.
Comparar head, tail, sed e less
| Comando | Função principal | Quando usar |
|---|---|---|
head |
Selecionar a parte inicial | Cabeçalhos e amostras no começo |
tail |
Mostrar ou acompanhar o final | Ver últimas linhas ou novas gravações |
sed |
Selecionar e transformar linhas | Extrair intervalos ou editar um fluxo |
less |
Navegar e pesquisar interativamente | Explorar diferentes partes de um texto |
Cuidados importantes
Distinguir bytes e caracteres
Em UTF-8, ação e a quebra de linha ocupam sete bytes: 61 c3 a7 c3 a3 6f 0a. head -c 2 -- utf8.txt | od -An -tx1 -v mostra 61 c3, cortando a codificação de ç pela metade. Já head -n 1 -- utf8.txt preserva a linha inteira. Para contar caracteres Unicode, escolha uma ferramenta que conheça a codificação; -c não passa a contar caracteres só porque o terminal usa UTF-8.
Preservar a ordem e verificar a entrada
head usa a ordem que recebeu. As primeiras linhas de um arquivo não são necessariamente os registros mais recentes nem os maiores valores. Se esse for o objetivo, escolha e aplique a ordenação adequada antes de selecionar a amostra; inverter linhas também não garante ordem cronológica. A leitura não edita a entrada, mas um redirecionamento do shell para o mesmo arquivo, como head arquivo > arquivo, pode truncá-lo antes da leitura. Não use o arquivo de entrada como destino. Depois das práticas, volte à pasta anterior com cd -- "$head_start".
Verificar o estado de todos os comandos do pipeline
No Bash, o estado do pipeline normalmente é o do último comando. Com pipefail, passa a ser o estado não zero mais à direita, ou zero se todos tiverem sucesso. Portanto, uma falha do produtor pode ficar oculta sem essa opção; por outro lado, SIGPIPE pode produzir um estado não zero quando head já recebeu a amostra pedida. Para investigar no Bash, capture "${PIPESTATUS[@]}" imediatamente após o pipeline, antes que outro comando substitua esses valores. Não descarte todos os erros com uma regra genérica: diferencie a parada prevista de problemas reais de leitura, permissão ou execução. A ocorrência de SIGPIPE depende também do volume, do buffer e do escalonamento; uma amostra pequena pode terminar sem ele.
Perguntas frequentes
Quantas linhas o head imprime por padrão?
Até dez linhas de cada entrada. Se houver menos linhas, imprime somente as disponíveis. Isso não altera o arquivo nem acrescenta linhas para alcançar o limite.
Como mostrar apenas a primeira linha?
Use head -n 1 -- arquivo, substituindo arquivo pelo caminho desejado. Para a primeira linha da saída de outro comando, passe essa saída por um pipe para head -n 1.
Qual comando mostra as últimas linhas?
tail seleciona o final. Para acompanhar novas gravações, ele também oferece opções como -f. Já head -n -2 no GNU exclui as duas últimas linhas e mostra o restante; não é uma forma de mostrar somente o final.
Como selecionar exatamente o primeiro 1 KiB?
No GNU head, head -c 1K -- arquivo seleciona até 1.024 bytes; o sufixo KiB também representa essa unidade. Para um limite decimal de 1.000 bytes, use -c 1000. O arquivo precisa ter pelo menos o tamanho pedido para produzir essa quantidade. Confira os sufixos aceitos por outras implementações.




