Linux / Comando less: navegar, pesquisar e acompanhar arquivos

O comando less é um paginador interativo: mostra um texto por telas e permite avançar, voltar, pesquisar e saltar para uma linha. Abra um arquivo com less -- arquivo; dentro do leitor, Espaço avança, b volta e q encerra. Ele não precisa ler todo um arquivo regular antes de começar a exibi-lo, embora algumas operações exijam percorrer mais dados.

As práticas usam Bash, less e utilitários GNU como mktemp, seq e grep. A preparação cria dados pequenos em uma pasta exclusiva sob a pasta atual; não lê logs de produção. Execute-a no mesmo terminal e pare se houver erro. As teclas descritas pressupõem um terminal interativo e a configuração habitual do leitor.

O que o less faz?

O leitor recebe um arquivo ou a entrada padrão, como a saída de outro comando. A navegação comum não edita a entrada; a prática de acompanhamento acrescenta intencionalmente uma linha apenas à cópia de demonstração. O site oficial de less e o manual de less documentam as opções e teclas. Configurações locais, versão, atalhos e recursos do terminal podem mudar a aparência e o comportamento.

Sintaxe básica

less [opções]... [arquivo]...

opções e arquivo são marcadores. Confira less --version e less --help; dentro do leitor, h abre a ajuda. Use aspas em caminhos com espaços e -- antes de nomes que possam parecer opções. Sem arquivo, less pode ler a entrada padrão. Os blocos abaixo são comandos do shell; as teclas de navegação são digitadas depois que o leitor abre.

Uso básico do less

Preparar um arquivo e navegar por telas

A preparação cria um log de 120 linhas: failed aparece nas linhas 20 e 90, enquanto FAILED aparece na linha 60. Também cria cópias para outras práticas, uma linha larga com 30 colunas e um arquivo de controle. No fim, -N exibe a numeração. Dentro do leitor, Espaço e b avançam e voltam uma tela; Enter ou a seta para baixo avançam uma linha. Use g e G para início e fim, 30g para a linha 30 e q para sair. A quantidade de linhas por tela depende da janela.

less_start=$PWD
less_demo=$(mktemp -d -p "$PWD" 'less-demo.XXXXXXXX') &&
cd -- "$less_demo" &&
for i in $(seq 1 120); do
  case "$i" in
    20|90) printf 'linha %03d: failed na demonstracao\n' "$i" ;;
    60) printf 'linha %03d: FAILED na demonstracao\n' "$i" ;;
    *) printf 'linha %03d: informacao normal\n' "$i" ;;
  esac
done > system.log &&
cat -- system.log > sample.txt &&
cat -- system.log > application.log &&
cat -- system.log > app.log &&
printf 'inicio|' > access.log &&
printf 'coluna-%02d|' $(seq 1 30) >> access.log &&
printf 'FIM\n' >> access.log &&
printf 'controle intacto\n' > sentinel.txt &&
less -N -- system.log

Pesquisar e repetir na direção correta

Abra a cópia abaixo, volte ao início com g, digite /failed e pressione Enter: com a configuração padrão sensível a maiúsculas, a primeira correspondência está na linha 20. n continua no mesmo sentido até a linha 90; N procura no sentido oposto. Para pesquisar para trás, vá ao fim com G e use ?failed seguido de Enter. Depois de uma pesquisa com ?, n também continua para trás. Os padrões normalmente são expressões regulares; sinais como . podem ter significado especial. As opções e o ponto de partida da busca podem alterar qual linha é encontrada primeiro.

cd -- "$less_demo" &&
less -N -- sample.txt

Ler a saída de outro comando

O pipe | entrega a saída do primeiro comando à entrada de less. Esta prática gera os números de 1 a 120 e abre o paginador; saia com q. Em um Linux com systemd, journalctl --no-pager -b | less pode ler as mensagens do boot atual que sua conta tem permissão para acessar. O primeiro comando precisa existir e produzir dados: a presença do paginador não garante que o comando anterior funcionou. Para serviços, o manual de journalctl explica o journal e seus filtros.

seq 1 120 | less

Reconhecer o fim do arquivo e voltar ao shell

O comando abaixo abre outra cópia do log preparado. Em um terminal interativo, less espera comandos de navegação. Pressione G para chegar à linha 120; uma indicação como (END) pode aparecer no rodapé. Ela representa o fim da entrada e não um bloqueio do programa. Use g para voltar e q para fechar o leitor.

cd -- "$less_demo" &&
less -- sample.txt

Se a saída de less for redirecionada para um arquivo ou outro pipe, ele pode simplesmente copiar a entrada, sem apresentar uma tela interativa. Esse comportamento não verifica atalhos, cores ou paginação. Prompts, mensagens e cores variam com idioma, terminal e configuração. Em uma entrada por pipe, ir ao fim com G pode exigir esperar o produtor terminar.

Principais opções

Opção Efeito na leitura
-N Exibir o número de cada linha do arquivo; não acrescentar esses números ao conteúdo original.
-S Mostrar somente a parte da linha larga que cabe na tela, sem quebrá-la visualmente. As setas horizontais revelam o restante; os dados não são cortados do arquivo.
-i Ignorar maiúsculas e minúsculas se o padrão não contiver letras maiúsculas. Um padrão com maiúsculas volta a distinguir a caixa.
-I Ignorar a diferença de caixa mesmo quando o padrão contém maiúsculas.
-R Interpretar um conjunto limitado de sequências de escape, incluindo cores ANSI por SGR (seleção da apresentação gráfica) e hiperlinks OSC 8 nas versões atuais. Não é um modo que aceite somente cores.
+F Iniciar executando o comando interno F, que espera novos dados no fim da entrada. É diferente de -F, que sai se tudo couber em uma tela.

Exemplos práticos

Mostrar números e percorrer uma linha larga

O arquivo access.log tem uma linha que começa por inicio|, contém coluna-01| até coluna-30| e termina com FIM. Com -NS, o número da linha aparece e o restante fica acessível pelas setas direita e esquerda. A parte fora da tela continua no arquivo. Se o terminal não transmitir as setas como esperado, pressione Esc e depois ) para ir à direita, ou Esc e depois ( para ir à esquerda; são duas teclas em sequência, não simultâneas. Para comparar a busca, reabra system.log com less -Ni -- system.log: /failed também encontra FAILED na linha 60. Com -i, /FAILED distingue a caixa; com -I, também encontra a palavra minúscula. Sempre volte ao início antes de comparar as opções.

cd -- "$less_demo" &&
less -NS -- access.log

Acompanhar uma nova linha de demonstração

O bloco inicia um processo pequeno em segundo plano que espera dois segundos e acrescenta uma única linha ao arquivo de demonstração application.log. Enquanto isso, less entra em +F; a nova linha é linha adicional: acompanhada. Para parar de esperar, use o caractere de interrupção do terminal, normalmente Ctrl+C, depois pesquise ou pressione q para sair. Alguns sistemas também permitem Ctrl+X nesse modo. Pressionar q enquanto o leitor ainda espera pode não encerrar a espera; interrompa-a primeiro. Cada execução deste bloco acrescenta uma linha à cópia de prática, não ao log inicial.

cd -- "$less_demo" &&
{
  (sleep 2; printf 'linha adicional: acompanhada\n' >> application.log) &
  less +F -- application.log
}

Manter cores de uma saída conhecida

O grep abaixo seleciona as linhas 20 e 90 de app.log. --color=always emite sequências de cor mesmo quando a saída é um pipe; -n fornece os números das linhas e -F trata a busca como texto literal. O less -R permite mostrar as cores compatíveis, de acordo com o terminal. Sem a opção no produtor, normalmente não há cor para preservar. A distinção entre cor automática e forçada está no controle de saída do GNU Grep.

cd -- "$less_demo" &&
grep --color=always -n -F -- 'failed' app.log | less -R

Comparar less e outros comandos

Comando Função principal Quando usar
less Navegar e pesquisar nos dois sentidos Arquivos longos e saídas de comandos
more Paginação básica, com recursos que variam por implementação Leitura simples quando estiver disponível
cat Enviar toda a entrada à saída, sem paginação própria Exibir textos curtos ou concatenar dados
tail -f Mostrar o fim e acompanhar acréscimos Monitorar novas linhas de um log

Cuidados importantes

Separar comandos do shell e teclas do leitor

Os blocos que começam por less são executados no shell. As teclas /, ?, g, n e q pertencem ao leitor depois de aberto; digitar a palavra q no shell não fecha um processo anterior. Se uma tecla não funcionar como descrito, consulte h e confira configurações locais. A navegação comum não modifica os dados; funções como abrir um editor ou salvar entrada têm outro efeito e não são necessárias para estas práticas. Depois de sair, volte à pasta anterior com cd -- "$less_start".

Conferir controles de terminal e consumo de memória

O modo padrão torna vários controles visíveis; -R permite apenas um conjunto de escapes, mas inclui hiperlinks OSC 8, além das sequências de cor ANSI SGR. OSC 8 é o tipo de comando de controle usado para esses hiperlinks. O comportamento pode ser ampliado por configuração. Evite trocar -R por -r para resolver uma cor ausente: o modo bruto pode interpretar controles mais amplos e prejudicar a tela. Isso não torna less um validador de arquivos. Em arquivos regulares, a leitura usa buffers; em pipes, o padrão pode alocar mais memória à medida que recebe dados para permitir voltar. Assim, “não ler tudo antes de abrir” não significa “nunca consumir muita memória”. A opção -B limita a alocação automática de buffers de pipes, mas pode perder acesso a dados antigos; não a aplique sem considerar essa troca.

Entender o acompanhamento e a rotação de logs

Se um arquivo for renomeado e outro criado no mesmo caminho, o comando F normalmente continua lendo o arquivo original. A opção --follow-name faz o leitor tentar reabrir pelo nome durante o acompanhamento; confirme sua disponibilidade e a rotação usada pelo serviço. Ela não garante recuperar linhas perdidas em todas as condições. O tail ou ferramentas próprias do serviço podem ser mais adequados para monitoramento contínuo. O cat continua útil quando a intenção é apenas enviar ou combinar um texto curto.

Perguntas frequentes

Como sair do less?

Na navegação normal, pressione q. Se estiver esperando novos dados em F ou +F, interrompa a espera primeiro, normalmente com Ctrl+C, e então pressione q. As teclas dependem da configuração do terminal e do leitor.

Como ir à próxima ocorrência de uma busca?

n repete no sentido da busca anterior; N repete no sentido oposto. Depois de /texto, n segue para frente; depois de ?texto, n segue para trás. Pressione Enter ao terminar de digitar o padrão.

Como evitar a quebra visual de linhas longas?

Abra o arquivo com less -S -- arquivo e use as setas horizontais para revelar o restante. Essa opção muda a exibição, sem remover dados. O uso de cabeçalhos fixos ou configurações locais pode alterar essa apresentação.

less carrega o arquivo inteiro na memória?

Não precisa fazê-lo antes de começar a mostrar um arquivo regular. Ainda assim, buscas distantes, numeração e ida ao fim podem exigir leituras adicionais. A entrada por pipe usa buffers que, por padrão, podem crescer bastante; não suponha memória constante nem navegação instantânea em qualquer entrada.