El comando tail de #GNU

Veamos las funciones y opciones del comando tail, una de las herramientas del sistema GNU

El comando tail es otra de las herramientas coreutils del sistema GNU. Las herramientas básicas para la gestión de archivos, manejo del sistema y utilidades de manipulación de texto, disponibles en sistemas GNU/Linux.

El comando tail es un comando «complementario» y muy similar al comando head (que ya vimos en un artículo anterior) y que nos mostrará el contenido de la última parte de un archivo.

El comando tail muestra de manera predeterminada las 10 últimas líneas (aunque esto se puede modificar) de un archivo de texto o de varios. Útil para consultar (por ejemplo) un archivo de registros del sistema al que se van añadiendo nuevas entradas modificando el archivo.

tail archivo.txt

El comando anterior mostrará las 10 últimas líneas del archivo sin necesidad de abrir un editor para consultarlo. También podremos pasar esa salida a otro comando para gestionarla con un script, etc…

Si queremos modificar que muestre más o menos de las 10 últimas líneas de un archivo que hace de manera predeterminada, podremos especificar el número de líneas que queremos que muestre con la opción -n <num>. Esto mostrará las 15 últimas líneas del archivo especificado.

tail -n 15 archivo.txt

Si anteponemos un símbolo + antes del número cambia totalmente su comportamiento. Al hacer eso el comando tail mostrará todo el archivo menos las líneas especificadas en el comando. Este ejemplo mostrará todo el archivo, menos las primeras 20 líneas del archivo especificado.

tail -n +20 archivo.txt

Al igual que con head, podremos especificar el contenido a mostrar, no por líneas, si no por caracteres con la opción -c. Esto mostrará los últimos 10 caracteres del archivo.

tail -c 10 archivo.txt

También podremos mostrar todo el archivo, menos los primero 10 caracteres del archivo, anteponiendo un + antes del número:

tail -c +10 archivo.txt

También podemos especificar un tamaño de información (bytes, kilos, megas, etc) si lo especificamos añadiendo al número un sufijo (b, K, M, etc)

Un comportamiento interesante del comando tail que head no tiene, es que tail puede mostrar un archivo «en directo» es decir, puede mostrar el archivo y el nuevo contenido si este archivo ha sido modificado, con la opción -f

tail -f archivo.txt

Con esto, el comando no se cierra al mostrar el archivo, si no que si el archivo es modificado, esas modificaciones se verán reflejadas en el comando.

De manera predeterminada, el comando tail seguirá y mostrará el contenido del archivo especificado, pero ¿qué pasa si el archivo es renombrado? que el seguimiento de ese archivo se perderá.

Para eso el comando tail tiene la opción de seguir, no el nombre, si no el descriptor (un número único para cada archivo abierto en el sistema), así si el archivo es renombrado, tail seguirá mostrando el contenido del archivo especificado si este sigue siendo modificado.

tail --follow=descriptor archivo.txt

También podemos especificar junto con la opción -f al comando tail que termine cuando el identificador de un proceso de nuestro sistema (PID) termine. Útil para seguir las modificaciones que realice cierta tarea del sistema y que se cierre.

tail --pid=9390 -f archivo.txt

En el caso anterior el PID 9390 corresponde a un editor de texto que tiene abierto ese archivo. Al guardar las modificaciones del archivo estas se reflejarán en la salida del comando tail. Y al cerrar el editor, terminará el comando tail de mostrar el contenido del archivo.

También podemos hacer que tail no muestre inmediatamente los resultados si lo hemos ejecutado con la opción -f si no que espere un número de segundos, antes de mostrar los nuevos cambios.

Esa opción se realiza con la opción -s (sleep) pero no me parecía funcionar, debido a que con inotify se hace un seguimiento de los archivos por parte del sistema.

Si queremos que funcione, deberíamos especificar una opción no documentada en la ayuda que es —disable-inotify (sí tiene tres — al comienzo del comando). Es este ejemplo mostrará los cambios del archivo cada 10 segundos:

tail -f -s 10 ---disable-inotify archivo.txt

tail también puede mostrar el contenido de no solo un archivo, si no de varios y antes de cada archivo añadirá una cabecera con el nombre del archivo, para poder diferenciarlos.

tail archivo1.txt archivo2.txt

Podemos hacer que tail no muestre el nombre de cada archivo añadiendo la opción -q (quiet). O forzar a tail a que lo muestre incluso con un archivo con la opción -v (verbose).


Y esto es básicamente lo más importante de este comando, simple, pero que quizás nos puede resultar muy útil a la hora de gestionar nuestros sistemas GNU/Linux u otros derivados de Unix.

¿Te ha resultado interesante? ¿Ya lo conocías y lo usabas? ¿Has descubierto algo nuevo con este comando? Utiliza los comentarios del blog para compartir tu opinión y así saber si te resultan interesantes estos artículos.

4 comentarios sobre “El comando tail de #GNU

  1. ¿Si he descubierto algo nuevo? Pues el montón de usos que tiene un simple comando (otra cosa, y lo más probable, es que se me olviden). 8-P

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.