Como usar o comando tail no Linux

Uma janela de terminal mostrando um prompt do Bash em um laptop Linux estilo Ubuntu.
Fatmawati Achmad Zaenuri / Shutterstock

O tailcomando Linux exibe dados do final de um arquivo. Ele pode até mesmo exibir atualizações que são adicionadas a um arquivo em tempo real. Nós mostramos como usá-lo.

O systemd matou o tail?

O tailcomando mostra os dados do final de um arquivo. Normalmente, novos dados são adicionados ao final de um arquivo, portanto, o tailcomando é uma maneira rápida e fácil de ver as adições mais recentes a um arquivo. Ele também pode monitorar um arquivo e exibir cada nova entrada de texto nesse arquivo à medida que ocorrem. Isso o torna uma ótima ferramenta para monitorar arquivos de log.

Muitas distribuições Linux modernas adotaram systemdgerenciador de sistema e serviço . Este é o primeiro processo executado, possui ID de processo 1 e é o pai de todos os outros processos. Essa função costumava ser controlada pelo init sistema mais antigo .

Junto com essa mudança, veio um novo formato para arquivos de log do sistema. Não são mais criados em texto simples, systemd mas são gravados em formato binário. Para ler esses arquivos de log, você deve usar o journactlutilitário. O tailcomando funciona com formatos de texto simples. Ele não lê arquivos binários. Então, isso significa que o tailcomando é uma solução em busca de um problema? Ainda tem algo a oferecer?

O tailcomando é mais do que mostrar atualizações em tempo real. E, por falar nisso, ainda há muitos arquivos de log que não são gerados pelo sistema e ainda são criados como arquivos de texto simples. Por exemplo, arquivos de log gerados por aplicativos não mudaram seu formato.

Recomendado:  Por que os comandos do Windows PowerShell são chamados de cmdlets?

Usando cauda

Passe o nome de um arquivo para taile ele mostrará as últimas dez linhas desse arquivo. Os arquivos de exemplo que estamos usando contêm listas de palavras classificadas. Cada linha é numerada, portanto, deve ser fácil seguir os exemplos e ver o efeito das várias opções.

cauda lista de palavras.txt

cauda word-list.txt em uma janela de terminal

Para ver um número diferente de linhas, use a opção -n(número de linhas):

tail -n 15 word-list.txt

tail -n 15 word-list.txt em uma janela de terminal

Na verdade, você pode dispensar o “-n”, e apenas usar um hífen “-” e o número. Certifique-se de que não haja espaços entre eles. Tecnicamente, este é um formulário de comando obsoleto , mas ainda está na página de manual e ainda funciona.

tail -12 word-list.txt

tail -12 word-list.txt em uma janela de terminal

Usando cauda com vários arquivos

Você pode tailtrabalhar com vários arquivos de uma vez. Basta passar os nomes dos arquivos na linha de comando:

tail -n 4 list-1.txt list-2.txt list-3.txt

tail -n 4 list-1.txt list-2.txt list-3.txt em uma janela de terminal

Um pequeno cabeçalho é mostrado para cada arquivo para que você saiba a qual arquivo as linhas pertencem.

Exibindo linhas desde o início de um arquivo

O +modificador (contagem desde o início) torna as tail linhas de exibição desde o início de um arquivo, começando em um número de linha específico. Se o seu arquivo for muito longo e você escolher uma linha próxima ao início do arquivo, terá uma grande quantidade de saída enviada para a janela do terminal. Se for esse o caso, faz sentido canalizar a saída de tail para less.

tail +440 list-1.txt

tail +44 list-1.txt em uma janela de terminal

Você pode folhear o texto de maneira controlada .

Saída da cauda exibida em menos em uma janela de terminal

Como existem 20.445 linhas neste arquivo, este comando é equivalente a usar a opção “-6”:

tail +20440 list-1.txt

tail +20440 list-1.txt em uma janela de terminal

Usando bytes com cauda

Você pode dizer tailpara usar deslocamentos em bytes em vez de linhas usando a -copção (bytes). Isso pode ser útil se você tiver um arquivo de texto formatado em registros de tamanho normal. Observe que um caractere de nova linha conta como um byte. Este comando exibirá os últimos 93 bytes no arquivo:

tail -c 93 list-2.txt

tail -c 93 list-2.txt em uma janela de terminal

Você pode combinar a -copção (bytes) com o +modificador (contagem desde o início do arquivo) e especificar um deslocamento em bytes contados a partir do início do arquivo:

tail -c +351053 list-e.txt

tail -c +351053 list-e.txt em uma janela de terminal

Tubulação na cauda

Anteriormente, canalizamos a saída de tailpara less. Também podemos canalizar a saída de outros comandos para tail.

Para identificar os cinco arquivos ou pastas com os horários de modificação mais antigos, use a opção -t(classificar por horário de modificação) com lse canalize a saída para tail.

ls -tl | cauda -5

ls -lt |  cauda -5 em uma janela de terminal

O headcomando lista linhas de texto desde o início de um arquivo . Podemos combinar isso com tailpara extrair uma seção do arquivo. Aqui, estamos usando o headcomando para extrair as primeiras 200 linhas de um arquivo. Isso está sendo canalizado tail, que está extraindo as últimas dez linhas. Isso nos dá as linhas 191 até a linha 200. Ou seja, as últimas dez linhas das primeiras 200 linhas:

head -n 200 list-1.txt | cauda -10

head -n 200 list-1.txt |  cauda -10 em uma janela de terminal

Este comando lista os cinco processos que mais consomem memória.

ps aux | sort -nk +4 | cauda -5

ps aux |  sort -nk +4 |  cauda -5 em uma janela de terminal

Vamos decompô-lo.

Recomendado:  O guia completo para carregar seus gadgets sem fio

O pscomando exibe informações sobre os processos em execução . As opções utilizadas são:

  • a : Liste todos os processos, não apenas para o usuário atual.
  • u : Exibe uma saída orientada ao usuário.
  • x : lista todos os processos, incluindo aqueles que não estão sendo executados em um TTY .

O sortcomando ordena a saída de ps. As opções que estamos usando sortsão:

  • n : classifica numericamente.
  • k +4 : Classifica na quarta coluna.

O tail -5comando exibe os últimos cinco processos da saída classificada. Esses são os cinco processos que mais consomem memória.

Usando cauda para rastrear arquivos em tempo real

O rastreamento de novas entradas de texto que chegam em um arquivo – geralmente um arquivo de log – é fácil com tail. Passe o nome do arquivo na linha de comando e use a -fopção (seguir).

tail -f geek-1.log

tail -f geek-1.log em uma janela de terminal

Conforme cada nova entrada de log é adicionada ao arquivo de log, tail atualiza sua exibição na janela do terminal.

Saída de tail -f geek-1.log em uma janela de terminal

Você pode refinar a saída para incluir apenas linhas de relevância ou interesse particular. Aqui, estamos usando greppara mostrar apenas linhas que incluem a palavra “média”:

tail -f geek-1.log | grep média

tail -f geek-1.log |  grep média em uma janela de terminal

Para acompanhar as alterações em dois ou mais arquivos, passe os nomes dos arquivos na linha de comando:

tail -f -n 5 geek-1.log geek-2.log

tail -f -n 5 geek-1.log geek-2.log em uma janela de terminal

Cada entrada é marcada com um cabeçalho que mostra de qual arquivo o texto veio.

Saída de tail -f -n 5 geek-1.log geek-2.log

A exibição é atualizada cada vez que uma nova entrada chega em um arquivo seguido. Para especificar o período de atualização, use a opção -s(período de suspensão). Isso informa tail para esperar alguns segundos, cinco neste exemplo, entre as verificações de arquivo.

tail -f -s 5 geek-1.log

tail -f -s 5 geek-1.log em uma janela de terminal

É verdade que você não pode dizer olhando para uma captura de tela, mas as atualizações do arquivo acontecem uma vez a cada dois segundos. As novas entradas de arquivo são exibidas na janela do terminal  uma vez a cada cinco segundos.

Recomendado:  Como atualizar seu Amazon Kindle

Saída de tail -f -s 5 geek-1.log

Ao seguir as inclusões de texto em mais de um arquivo, você pode suprimir os cabeçalhos que indicam de qual arquivo de log o texto vem. Use a -qopção (silencioso) para fazer isso:

tail -f -q geek-1.log geek-2.log

tail -f -q geek-1.log geek-2.log em uma janela de terminal

A saída dos arquivos é exibida em uma mistura perfeita de texto. Não há indicação de qual arquivo de log veio cada entrada.

Saída de tail -f -q geek-1.log geek-2.log em uma janela de terminal

cauda ainda tem valor

Embora o acesso aos arquivos de log do sistema agora seja fornecido pelo journalctl, tail ainda tem muito a oferecer. Isso é especialmente verdadeiro quando é usado em conjunto com outros comandos, por piping dentro ou fora de tail.

systemd pode ter mudado o cenário, mas ainda há um lugar para utilitários tradicionais que estão em conformidade com a filosofia Unix de fazer uma coisa e fazê-la bem.