9 exemplos práticos do comando “tail” no Linux

Como usuários do Linux, frequentemente trabalhamos com processos de fundo do Linux em execução prolongada, chamados de daemons ou serviços. Alguns exemplos comuns dos serviços são Secure Shell (sshd), Network Manager (networkd), Volume Manager (LVM), Cron, e a lista continua.

Muitas vezes precisamos monitorar os logs desses serviços para depurar os problemas do sistema. No entanto, um dos principais desafios é que esses serviços geram muitos logs e na maioria das vezes passar por esses logs torna-se complicado, é aí que podemos usar o comando tail.

O comando tail é um utilitário de linha de comando, semelhante ao comando head que lê um arquivo e imprime as últimas 10 linhas (conteúdo) de um ou mais arquivos na saída padrão.

Neste guia prático, aprenderemos sobre o comando tail. Ao final deste guia, os usuários da linha de comando do Linux serão capazes de usar o comando tail de forma eficaz.
Índice

Sintaxe do Comando tail

A sintaxe do comando tail é semelhante a outros comandos do Linux:

$ tail [OPTIONS] [FILE-1] [FILE-2] ...

1. Imprimir as Últimas 10 Linhas de um Arquivo no Linux

Por padrão, o comando tail imprime as últimas 10 linhas do arquivo fornecido, conforme mostrado.

$ tail /var/log/secure


Apr  2 14:17:24 TecMint sshd[201178]: Disconnected from user tecmint 192.168.0.162 port 59774
Apr  2 14:17:24 TecMint sshd[201165]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 14:29:12 TecMint sshd[201366]: Accepted password for tecmint from 192.168.0.162 port 56378 ssh2
Apr  2 14:29:12 TecMint systemd[201371]: pam_unix(systemd-user:session): session opened for user tecmint(uid=1002) by (uid=0)
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session opened for user tecmint(uid=1002) by (uid=0)
Apr  2 14:29:12 TecMint sshd[201382]: Received disconnect from 192.168.0.162 port 56378:11: disconnected by user
Apr  2 14:29:12 TecMint sshd[201382]: Disconnected from user tecmint 192.168.0.162 port 56378
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

Aqui, podemos ver que o comando acima mostra as últimas dez linhas do arquivo /var/log/secure.

2. Imprimir as Últimas N Linhas de um Arquivo no Linux

No último exemplo, o comando imprime as últimas 10 linhas do arquivo fornecido. No entanto, podemos usar a opção -n que nos permite limitar o número de linhas a serem impressas na tela, conforme mostrado.

$ tail -n 3 /var/log/secure

Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

Neste exemplo, podemos ver que agora o comando mostra apenas as últimas três linhas em vez das dez linhas.

3. Ignorar as Primeiras N Linhas de um Arquivo no Linux

Aqui, podemos usar o símbolo de mais (+) com a opção -n, o que nos permite controlar o ponto de partida a partir do arquivo fornecido.

Para entender isso, vamos usar o valor +5 para iniciar a saída a partir da quinta linha:

$ tail -n +5 /var/log/secure

Apr  2 14:17:24 TecMint sshd[201178]: Disconnected from user tecmint 192.168.0.162 port 59774
Apr  2 14:17:24 TecMint sshd[201165]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 14:29:12 TecMint sshd[201366]: Accepted password for tecmint from 192.168.0.162 port 56378 ssh2
Apr  2 14:29:12 TecMint systemd[201371]: pam_unix(systemd-user:session): session opened for user tecmint(uid=1002) by (uid=0)
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session opened for user tecmint(uid=1002) by (uid=0)
Apr  2 14:29:12 TecMint sshd[201382]: Received disconnect from 192.168.0.162 port 56378:11: disconnected by user
Apr  2 14:29:12 TecMint sshd[201382]: Disconnected from user tecmint 192.168.0.162 port 56378
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

4. Mostrar os Últimos N Caracteres do Arquivo

Similar às linhas, também podemos usar o comando para exibir os últimos N caracteres do arquivo usando a opção -c conforme mostrado abaixo:

$ tail -c 7 /var/log/secure

(uid=0)

Neste exemplo, podemos ver que o comando mostra os últimos sete caracteres ASCII do arquivo fornecido.

5. Remover os Primeiros N Caracteres do Arquivo

Da mesma forma, podemos usar o símbolo de mais (+) com a opção -c para pular o primeiro caractere N. Então, vamos pular a primeira linha do arquivo usando o comando abaixo:

$ tail -c +5 /var/log/secure

Apr  2 03:02:59 TecMint sudo[162801]: root : TTY=pts/2 ; PWD=/root ; USER=root ; COMMAND=/bin/dnf install R
Apr  2 03:02:59 TecMint sudo[162801]: pam_unix(sudo:session): session opened for user root(uid=0) by root(uid=0)
Apr  2 03:03:02 TecMint sudo[162801]: pam_unix(sudo:session): session closed for user root
Apr  2 03:11:17 TecMint groupadd[163602]: group added to /etc/group: name=avahi, GID=70
Apr  2 03:11:18 TecMint groupadd[163602]: group added to /etc/gshadow: name=avahi
Apr  2 03:11:18 TecMint groupadd[163602]: new group: name=avahi, GID=70
Apr  2 03:11:19 TecMint useradd[163610]: new user: name=avahi, UID=70, GID=70, home=/var/run/avahi-daemon, shell=/sbin/nologin, from=none
Apr  2 03:13:41 TecMint groupadd[163704]: group added to /etc/group: name=colord, GID=986
Apr  2 03:13:41 TecMint groupadd[163704]: group added to /etc/gshadow: name=colord

Aqui, podemos ver que o comando mostra todas as linhas exceto a primeira linha.

6. Mostrar o Nome do Arquivo no Cabeçalho

Podemos instruir o comando tail para exibir o nome do arquivo atual como um cabeçalho de exibição, o que é útil ao trabalhar com vários arquivos.

Então, vamos usar a opção -v para habilitar o cabeçalho de exibição:

$ tail -n 3 -v /var/log/secure

==>/var/log/secure <==
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

7. Mostrar o Nome do Arquivo como Cabeçalho em Múltiplos Arquivos

Assim como qualquer outro comando de processamento de arquivos, também podemos usar vários arquivos com o comando tail. Nesses casos, o cabeçalho de exibição é usado para separar o conteúdo do arquivo.

$ tail -n 3 -v /var/log/secure /var/log/secure-20230402

==> /var/log/secure <==
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

==> /var/log/secure-20230402 <==
Mar 31 03:50:53 TecMint groupadd[156163]: new group: name=docker, GID=987
Mar 31 04:46:11 TecMint sshd[159403]: Accepted password for root from 192.168.0.162 port 46480 ssh2
Mar 31 04:46:11 TecMint sshd[159403]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

No exemplo acima, podemos ver o cabeçalho de exibição para cada arquivo.

8. Como Desativar o Cabeçalho de Exibição no Arquivo

No exemplo anterior, vimos que o comando habilita o cabeçalho de exibição ao trabalhar com vários arquivos. No entanto, podemos suprimir esse comportamento padrão usando a opção -q.

$ tail -q -n 3 /var/log/secure /var/log/secure-20230402

Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
Mar 31 03:50:53 TecMint groupadd[156163]: new group: name=docker, GID=987
Mar 31 04:46:11 TecMint sshd[159403]: Accepted password for root from 192.168.0.162 port 46480 ssh2
Mar 31 04:46:11 TecMint sshd[159403]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

Aqui, podemos ver que agora o comando exibe o conteúdo do arquivo um após o outro sem nenhum cabeçalho de exibição.

9. Como Observar um Arquivo para Mudanças

Até agora vimos que o comando tail sai uma vez que processa o número necessário de linhas ou caracteres. No entanto, às vezes queremos ver os logs recém-gerados também.

Nesses casos, podemos usar a opção -f com o comando, o que nos permite monitorar o arquivo em busca de mudanças em tempo real.

Para entender isso, primeiro, vamos executar o comando abaixo no primeiro terminal:

$ tail -f /var/log/messages


Apr  2 15:13:28 TecMint NetworkManager[741]:   [1680462808.8441] policy: set-hostname: current hostname was changed outside NetworkManager: 'TecMint'
Apr  2 15:13:28 TecMint systemd[1]: Starting Network Manager Script Dispatcher Service...
Apr  2 15:13:28 TecMint systemd[1]: Started Network Manager Script Dispatcher Service.
Apr  2 15:13:37 TecMint arpwatch[11001]: rename arp.dat -> arp.dat-: Operation not permitted
Apr  2 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: Deactivated successfully.
Apr  2 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: Deactivated successfully.
Apr  2 15:18:03 TecMint systemd[1]: Starting dnf makecache...
Apr  2 15:18:03 TecMint dnf[202235]: Metadata cache refreshed recently.
Apr  2 15:18:03 TecMint systemd[1]: dnf-makecache.service: Deactivated successfully.
Apr  2 15:18:03 TecMint systemd[1]: Finished dnf makecache.

Aqui, podemos ver que o comando está esperando infinitamente após exibir as últimas dez linhas:

Em seguida, abra outro terminal e adicione algum texto ao arquivo numbers-2.txt:

$ echo "View Logs in Real-Time" >> /var/log/messages

Agora, vamos mudar para o primeiro terminal para ver o texto recém-adicionado:

$ tail -f /var/log/messages

Apr  2 15:13:28 TecMint NetworkManager[741]:   [1680462808.8441] policy: set-hostname: current hostname was changed outside NetworkManager: 'TecMint'
Apr  2 15:13:28 TecMint systemd[1]: Starting Network Manager Script Dispatcher Service...
Apr  2 15:13:28 TecMint systemd[1]: Started Network Manager Script Dispatcher Service.
Apr  2 15:13:37 TecMint arpwatch[11001]: rename arp.dat -> arp.dat-: Operation not permitted
Apr  2 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: Deactivated successfully.
Apr  2 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: Deactivated successfully.
Apr  2 15:18:03 TecMint systemd[1]: Starting dnf makecache...
Apr  2 15:18:03 TecMint dnf[202235]: Metadata cache refreshed recently.
Apr  2 15:18:03 TecMint systemd[1]: dnf-makecache.service: Deactivated successfully.
Apr  2 15:18:03 TecMint systemd[1]: Finished dnf makecache.
View Logs in Real-Time

Aqui, podemos ver que o comando tail mostra o texto recém-adicionado.

Você conhece algum outro melhor exemplo do comando tail no Linux? Deixe-nos saber suas opiniões nos comentários abaixo.

Source:
https://www.tecmint.com/tail-command-linux/