El comando Linux Head, al igual que el comando Linux Tail, forma parte de las he­rra­mie­n­tas ese­n­cia­les de la línea de comandos. Este comando sirve pri­n­ci­pa­l­me­n­te para mostrar al principio de un archivo (de texto) o para reducir a lo es­pe­ci­fi­ca­do los datos mostrados por un comando de Linux.

El comando de Linux Head forma parte de las “GNU Core Utilities” (Coreutils), una re­co­pi­la­ción de los comandos pri­n­ci­pa­les de la línea de comandos. Según la filosofía de Unix, los comandos utilizan el texto como formato universal de entrada y salida. Las Coreutils están pu­bli­ca­das bajo una licencia de código abierto y están di­s­po­ni­bles para una multitud de sistemas ope­ra­ti­vos distintos.

Finalidad del comando de Linux Head

El comando Head de Linux se utiliza para reducir la vi­sua­li­za­ción de texto de la línea de comandos. Pero ¿por qué es esto útil o necesario? Para responder a esa pregunta, podemos echar un vistazo a las funciones de la línea de comandos de Linux. La mayoría de los comandos de Linux toman texto como entrada o dan texto como salida. El origen o destino de un comando pueden ser:

  • Archivos: sobre todo archivos de texto en formato ASCII. En este caso, son menos in­te­re­sa­n­tes los archivos binarios, como las imágenes en JPG o los do­cu­me­n­tos Word.
  • Entrada y salida estándar: texto que le aparece al usuario en el terminal o que este introduce en el terminal.
  • Las llamadas pipes (en español, tuberías): se trata de cadenas de diversos comandos de Linux. La salida de texto de un comando pasa a la entrada de texto del siguiente comando.

Asimismo, debemos tener en cuenta que los archivos pueden tener grandes ca­n­ti­da­des de texto. Por ejemplo, un archivo de varios GB contiene miles de millones de ca­ra­c­te­res. Por eso, suele ser de gran utilidad limitar la cantidad del texto saliente o ceñirse solo a ciertas líneas o ca­n­ti­da­des de texto. Este es un resumen de los comandos de Linux más comunes para mostrar archivos de texto:

  • Linux CAT: muestra el archivo completo. Mostrar grandes archivos inunda la línea de comandos.
  • Linux LESS: muestra el archivo completo por páginas. No es factible en archivos grandes.
  • Linux HEAD: muestra el fragmento inicial del archivo o un fragmento concreto.
  • Linux TAIL: muestra el fragmento final de un archivo o limita la vi­sua­li­za­ción a un fragmento concreto.

Nuestras ex­pli­ca­cio­nes han sido hasta ahora un poco ab­s­tra­c­tas, así que echa un vistazo a los ejemplos prácticos que mostramos a co­n­ti­nua­ción. Con ellos, podrás hacerte una idea más concreta de lo que re­pre­se­n­tan.

In­tro­du­cir el comando Linux Head en la línea de comandos

El comando Linux Head se activa en la línea de comandos. Ahí has de in­tro­du­cir el nombre del comando, seguido de otros pa­rá­me­tros op­cio­na­les. Para terminar, escribe el nombre o la ruta de uno o varios archivos. Veamos primero cómo se redacta en general:

head [opciones] <archivos>

Sin opciones, la manera más sencilla de activar el comando Linux Head es esta:

head <archivo>

Al activarlo, el comando Head de Linux muestra las primeras líneas del archivo deseado. De esta manera podemos echar rá­pi­da­me­n­te un vistazo al principio de un archivo y así no­r­ma­l­me­n­te nos haremos una idea de qué va el archivo.

En el día a día, el comando Head de Linux puede activarse también con la opción '-n'. El número que in­tro­du­z­ca­mos después indicará el número de líneas que se mostrarán. Veamos dos ejemplos. El siguiente código nos muestra úni­ca­me­n­te la primera línea del archivo.

head -n 1 <archivo>

Con el mismo esquema, también podemos pedir que se muestren las 100 primeras líneas de un archivo:

head -n 100 <archivo>

Opciones del comando de Linux Head

Según la co­n­ve­n­ción, el comando de Linux Head se maneja mediante pa­rá­me­tros op­cio­na­les. Como parte de las GNU Coreutils, hay una forma larga para cada opción. Para las opciones más uti­li­za­das también hay una forma corta, muchas veces de­te­r­mi­na­da hi­s­tó­ri­ca­me­n­te. A co­n­ti­nua­ción, se presenta una lista de las opciones más útiles:

Opción (Forma corta / forma larga) Ex­pli­ca­ción
-n / --lines Limitar la vi­sua­li­za­ción a las primeras n líneas / evitar la vi­sua­li­za­ción de las últimas n líneas
-c / --bytes Limitar la vi­sua­li­za­ción a los primeros n bytes / evitar la vi­sua­li­za­ción de los últimos n bytes
-q / --quiet, --silent Al uti­li­zar­lo con múltiples archivos, se evita la vi­sua­li­za­ción de los nombres de archivos
-v / --verbose Al uti­li­zar­lo con múltiples archivos, se fuerza la vi­sua­li­za­ción de los nombres de archivos
--help Muestra in­fo­r­ma­ción de ayuda del comando
Nota

En los si­guie­n­tes ejemplos, uti­li­za­mos las opciones en la forma corta ('-n', en vez de '--lines', etc.). Si lees otros do­cu­me­n­tos o ejemplos de código, verás con mucha más fre­cue­n­cia este uso.

Inciso: ¿cómo se entienden las líneas y los ca­ra­c­te­res?

Antes de pasar a los ejemplos prácticos, descubre algunos términos. ¿A qué nos referimos cuando hablamos de “líneas” y de “ca­ra­c­te­res”? Se­gu­ra­me­n­te podemos responder a estas preguntas in­tui­ti­va­me­n­te, pero en el entorno digital es­tri­c­ta­me­n­te re­gla­me­n­ta­do, debemos saberlo a ciencia cierta.

A nivel interno, un archivo de texto es una cadena de ca­ra­c­te­res única y continua. El final de cada línea está marcado si­m­ple­me­n­te con un carácter llamado “nueva línea”. En función del sistema operativo, el carácter utilizado con este fin puede ser distinto, lo que puede conllevar algún problema. En Linux, es el carácter LF (Line feed) el que marca la nueva línea.

Al utilizar la opción '-c' / '--bytes', se supone que un byte co­rre­s­po­n­de exac­ta­me­n­te a un carácter. Esto funciona para el conjunto de ca­ra­c­te­res ASCII, pero en otras si­tua­cio­nes puede dar problemas. El conjunto de ca­ra­c­te­res Unicode, am­plia­me­n­te extendido hoy en día, es una co­di­fi­ca­ción de ca­ra­c­te­res “multibyte”. Es decir, para re­pre­se­n­tar un único carácter, hay que utilizar varios bytes. Si aplicamos el comando de Linux Head en archivos de texto Unicode, esto puede tener co­n­se­cue­n­cias. Así, utilizar la opción '-c' puede hacer que una diéresis (por ejemplo, “ü” se convierta en la vocal co­rre­s­po­n­die­n­te (“u”).

Ejemplos prácticos para utilizar el comando de Linux Head

Para entender bien los si­guie­n­tes ejemplos, hemos utilizado el texto de la De­cla­ra­ción Universal de Derechos Humanos (Universal De­cla­ra­tion of Human Rights, UDHR, en inglés). Al haberse traducido a más de 460 idiomas, se trata de uno de los textos más tra­du­ci­dos de la historia de la humanidad. Nos hemos de­s­ca­r­ga­do el texto con el comando de Linux Curl y hemos guardado el archivo en el es­cri­to­rio como 'udhr.txt'.

curl https://www.unicode.org/udhr/d/udhr_eng.txt> ~/Desktop/udhr.txt

Extraer úni­ca­me­n­te la primera línea con el comando Head de Linux

Ya has visto el esquema que se utiliza para ver úni­ca­me­n­te la primera línea del archivo de texto. Lo uti­li­za­mos con un ejemplo concreto:

head -n 1 ~/Desktop/udhr.txt
Consejo

Extraer la primera línea es pa­r­ti­cu­la­r­me­n­te in­te­re­sa­n­te para ver el llamado “hash bang” de un archivo de script, que contiene in­fo­r­ma­ción sobre la ejecución del in­té­r­pre­te utilizado por el script y su ruta.

Extraer todo el texto menos la última línea con el comando Linux Head

De forma similar a lo que sucede con la primera línea, el comando Linux Head también se puede utilizar para extraer el texto hasta la última línea. Para eso, re­cu­rri­mos a la opción '-n' y an­te­po­ne­mos el signo de menos al argumento:

head -n -1 ~/Desktop/udhr.txt

Combinar los comandos de Linux Head y Tail para extraer de­te­r­mi­na­dos extractos del texto

¿Qué pasa si solo queremos extraer el preámbulo de la De­cla­ra­ción Universal de Derechos Humanos en las líneas 9-18? Para co­n­se­gui­r­lo, re­cu­rri­re­mos al pariente del comando Linux Head. El comando Tail extrae, de manera parecida al comando Head de Linux, el fragmento final de un archivo de texto. Si co­m­bi­na­mos ambos comandos con el símbolo del pipe '|’, podemos recortar un fragmento definido del texto.

head -n 18 ~/Desktop/udhr.txt | tail -n 10

También es posible mostrar una única línea en concreto. Para ello, uti­li­za­re­mos el comando Tail con la opción '-n 1'. Para vi­sua­li­zar úni­ca­me­n­te la línea 28 “Everyone has the right to life, liberty and the security of person”, usamos el siguiente comando.

head -n 28 ~/Desktop/udhr.txt | tail -n 1

Como verás, se mostrará la línea completa. Para ver solo hasta “security”, añadimos otro pipe al comando Head. Además, uti­li­za­mos la opción '-c' e iremos probando distintos valores como argumento hasta recortar el fragmento adecuado. En este caso, ne­ce­si­ta­mos solo los primeros 62 ca­ra­c­te­res.

head -n 28 ~/Desktop/udhr.txt | tail -n 1 | head -c 62

Podemos tener la intuición de contar el número de ca­ra­c­te­res que queremos extraer desde detrás. Esto también es posible al anteponer un símbolo de menos al argumento de la opción '-c'. El comando sigue siendo el mismo:

head -n 28 ~/Desktop/udhr.txt | tail -n 1 | head -c -12

Por último, queremos eliminar los espacios en blanco. Quizá ya lo sabes: para co­n­se­gui­r­lo, volvemos a recurrir al comando Tail. Añadimos un signo de más al argumento de la opción x. De la misma manera que con el signo de menos del comando Head de Linux, in­ve­r­ti­mos el si­g­ni­fi­ca­do de la opción. En vez de limitar la vi­sua­li­za­ción a los últimos cinco ca­ra­c­te­res como de costumbre, re­du­ci­re­mos la vi­sua­li­za­ción al resto a partir del quinto carácter principal. Podemos hacer estas ope­ra­cio­nes con el comando Sed, aunque en archivos grandes, el comando Head de Linux es más rápido que el Sed.

Filtrar la ac­ti­va­ción del comando Head de Linux con el comando Grep

Ya has visto cómo puedes combinar los comandos de Linux Head y Tail. Otra co­m­bi­na­ción útil es filtrar el texto extraído con el comando grep. Así podrías extraer úni­ca­me­n­te las líneas que contienen el término de búsqueda. A co­n­ti­nua­ción, queremos ver las líneas que, de las primeras 30 líneas del texto de la UDHR, contengan la palabra “Person”:

head -n 30 ~/Desktop/udhr.txt | grep person

Procesar múltiples archivos con el comando de Linux Head

Hasta ahora hemos aplicado el comando de Linux Head a un único archivo. No obstante, también se puede utilizar con múltiples archivos. Para ello, o bien enu­me­ra­mos los nombres de los archivos o su ruta ex­plí­ci­ta­me­n­te, o indicamos como origen del comando un di­re­c­to­rio completo o un patrón de búsqueda. Mostramos esto último a modo de ejemplo con la ayuda de un archivo de co­n­fi­gu­ra­ción en el di­re­c­to­rio del sistema '/etc/'. Los archivos llevan la extensión '.conf', que es­pe­ci­fi­ca­mos como patrón de búsqueda '*.conf':

head -n 1 /etc/*.conf

Para mostrar úni­ca­me­n­te los nombres de los archivos al procesar muchos archivos, uti­li­za­mos la opción '-q':

head -q -n 1 /etc/*.conf

De manera parecida, podemos utilizar la opción '-v' para extraer solo los nombres de los archivos. Esto es útil cuando solo un archivo contiene el patrón de búsqueda:

head -v /etc/host*.conf

Enumerar los últimos cinco archivos mo­di­fi­ca­dos con el comando Linux Head

En Linux, el comando ls sirve para enumerar archivos y di­re­c­to­rios. Con la opción '-t', podemos cla­si­fi­car la lista en orden de­s­ce­n­de­n­te desde la fecha de la última mo­di­fi­ca­ción. Además, para reducir la lista a cinco entradas, activamos el comando Head de Linux como pipe:

ls -t | head -n 5

Extraer un hash aleatorio de una longitud de­te­r­mi­na­da con el comando Head de Linux

El comando de Linux 'sha512sum' crea un hash de una longitud de 128 ca­ra­c­te­res. Para comparar dos hashes a simple vista muchas veces no hace falta examinar el hash completo. A veces basta con mirar, por ejemplo, solo los primeros ocho ca­ra­c­te­res. Puede que conozcas este patrón por los commits de Git. Para eso, activamos el comando de Linux Head con la opción '-c'. Como fuente de datos, aquí uti­li­za­mos la función bash '$RANDOM', que devuelve un número aleatorio:

echo $RANDOM | sha512sum | head -c 8
Ir al menú principal