9 Exemplos Práticos do Comando Tail no Linux

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

Muitas vezes precisamos monitorar os logs desses serviços para depurar problemas no 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 trabalhoso, é aqui que podemos usar o comando tail.

O comando tail é uma utilidade 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 poderão usar o comando tail de forma eficaz.
Tabela de Conteúdos

Sintaxe do Comando tail

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

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

1. Imprimir Últimas 10 Linhas do Arquivo no Linux

Por padrão, o comando tail imprime as últimas 10 linhas do arquivo fornecido, como 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 Últimas N Linhas do 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, como 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.

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

Aqui, podemos usar o símbolo de adição (+) 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 começar a saída da 5ª 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 adição (+) 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 a 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)

==> /var/log/secure <== representa o cabeçalho de exibição.

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

Assim como qualquer outro comando de processamento de arquivo, também podemos usar múltiplos arquivos com o comando tail. Nestes casos, o cabeçalho de exibição é utilizado para separar o conteúdo dos arquivos.

$ 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 em um Arquivo

No exemplo anterior, vimos que o comando habilita o cabeçalho de exibição ao trabalhar com múltiplos 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 Monitorar 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 visualizar os logs recém-gerados também.

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

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 acrescente algum texto ao arquivo numbers-2.txt:

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

Agora, vamos voltar para o primeiro terminal para visualizar 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/