A medida que trabajamos con ficheros en una terminal, el nombre del fichero, su ubicación o su extensión puede no ser información suficiente para saber si se trata del fichero que buscamos, e interesarnos mostrar el contenido de un fichero rápidamente, para saber si es el que buscamos o simplemente porque queremos ver su contenido.
Para ello, se suele utilizar el comando cat
(conCATenate files), que técnicamente se considera un comando que concatena (une) la salida de uno o varios ficheros. Esto, dicho de otra forma, es que cat
no se limita a mostrar el contenido de un solo fichero (como suele usarse habitualmente), sino que puede hacer cosas aún más potentes.
Por ejemplo, el caso más básico sería el siguiente:
$ cat /etc/timezone
Atlantic/Canary
En este ejemplo, mostraríamos el contenido del fichero timezone
ubicado en la ruta /etc
. Se trata de un fichero que guarda la zona horaria del sistema. De esta forma, podríamos consultarla rápidamente, sin tener que abrirla con un editor. Sin embargo, también podríamos hacer lo siguiente para mostrar el contenido de varios ficheros:
$ ls /etc/deb*
/etc/debconf.conf /etc/debian_version
$ cat /etc/deb*
Con el comando cat /etc/deb*
indicamos que queremos que nos muestre el contenido de todos los fichero que comiencen por deb
y estén situados en /etc
(en este caso 2 ficheros) y no tendríamos que hacerlo individualmente, uno por uno.
El comando cat
tiene algunos parámetros interesantes:
Parám. | Descripción |
---|---|
-s |
Suprime espacios consecutivos repetidos y los convierte en uno solo. |
-n |
Numera las líneas, a la izquierda. |
-b |
Numera solo las líneas no vacías. |
Existe una alternativa muy interesante al comando cat
, llamada bat y desarrollada en Rust. Dicho comando mejora sustancialmente al comando cat
, utilizando características como resaltado de sintaxis en color para lenguajes de programación, soporte para cambios de git, paginación (ver más adelante) automática, etc...
Para instalarla, necesitaremos tener en nuestro sistema Rust instalado, y utilizar su gestor de paquetes cargo. Con él, podremos escribir cargo install bat
y lo tendremos disponible. Las últimas versiones de Debian, ya lo incorporan para instalar con un simple sudo apt install bat
.
La salida del comando bat
de un fichero Javascript sería similar a la siguiente:
El comando bat
dispone de varios parámetros interesantes:
Parámetros | Descripción |
---|---|
--list-languages |
Muestra los lenguajes soportado en el resaltado de sintaxis. |
-l <lang> |
Especifica el lenguaje a resaltar (C++, javascript, css, rust, ...) |
--list-themes |
Muestra los temas de resaltado de sintaxis disponibles en bat . |
--theme <theme> |
Especifica el tema de resaltado a utilizar. |
-p |
Muestra un formato plano, por si queremos desactivar temporalmente el resaltado. |
-n |
Numera las líneas, pero no utiliza otras decoraciones como los bordes. |
-A |
Muestra los carácteres ocultos (espacios, tabuladores, nueva línea, etc...) |
-r <ini>:<fin> |
Muestra las líneas ini a fin del fichero. Por ejemplo: bat -r 4:10 file.js |
Nota: Ejecutando
bat --list-themes
veremos la lista de temas disponibles para el resaltado de sintaxis. Puedes usar uno de ellos escribiendobat --theme base16
(por ejemplo). También puedes aprovechar para incluirlo en un alias de la shell y que se ejecute al hacer uncat
.
Si el comando cat
nos muestra el contenido de un fichero de arriba a abajo, es decir, desde su primera línea a su última línea, el comando tac
(cat al revés) hace justo lo contrario, mostrar el contenido de un fichero de abajo a arriba, desde su última línea a la primera.
$ tac textfile.txt
Esta es la última línea.
Esta es la segunda línea.
Esta es la primera línea.
Otra opción posible, aunque menos común, es que si buscamos mostrar el contenido de un archivo al revés, pero en lugar de abajo a arriba, de derecha a izquierda, podemos utilizar el comando rev
, que invierte el orden horizontal:
$ cat textfile.txt | rev
.aeníl aremirp al se atsE
.aeníl adnuges al se atsE
.aeníl amitlú al se atsE
Pero en algunos casos, nos encontraremos que el contenido de un archivo es demasiado extenso y no nos da tiempo de leer su contenido antes de que siga avanzando en el contenido. La mejor forma de solucionar ese problema es utilizar un paginador.
Se trata de un comando que, una vez detecta que la pantalla está llena, hace una pausa, y no continua hasta que el usuario pulse una tecla. De esta forma, puede ir leyendo poco a poco los contenidos mostrados en pantalla. El paginador más conocido se llama more
y se utiliza de la siguiente forma:
$ cat largetextfile.txt | more
En este caso estamos utilizando un pipe |
que obtiene la salida por pantalla del primer comando y se lo envía al segundo, que es el paginador.
De esta forma, el paginador hace una pausa cuando se llena la pantalla, mostrando una línea more al final de la pantalla y esperando a que el usuario pulse una tecla. Dependiendo de la tecla que se pulse, el paginador more
hará una acción concreta:
Tecla | Descripción |
---|---|
ENTER | Avanza una sola línea. |
SPACE | Avanza una página. |
= | Muestra la línea donde se encuentra el paginador. |
/word | Busca la palabra word en el texto y va hasta ella. |
n | Vuelve a buscar la última palabra buscada. |
Q | Sale del paginador y vuelve a la terminal. |
Sin embargo, el more
es bastante limitado en cuanto a ciertas acciones.
Muchas veces el paginador more
se nos queda corto por varias razones. Por ejemplo, una vez pulsado enter para avanzar, no podemos volver hacia atrás. Existen otros paginadores como less
que son un poco más versátiles en este sentido, permitiendo utilizar los cursores ↑ y ↓ o las teclas RePág o AvPág para subir o bajar en el texto más facilmente.
El comando most
es otro paginador que además muestra una barra inferior y resaltado de colores para hacer la lectura un poco más sencilla. Estos paginadores se pueden instalar en el sistema utilizando sudo apt install less most
.
Nota: Tanto
more
, comoless
comomost
pueden utilizarse directamente como alternativa decat
. Es decir, ejecutarless largetextfile.txt
para mostrar el contenido paginado.
En Linux, es muy habitual trabajar con ficheros de texto plano, aunque en el caso de registros o logs, cuando son muy extensos suelen terminar ocupando mucho espacio. Para evitarlo, se suelen comprimir utilizando formatos muy comunes en Linux como .gz
, .bz2
o .xz
, de modo que podríamos tener los ficheros de texto originales access.log
o los ficheros comprimidos, por ejemplo access.log.gz
.
Los comandos cat
y less
tienen unas versiones alternativas que permiten realizar su finalidad (mostrar contenido o paginar) sobre archivos de texto comprimidos. De esta forma, nos ahorramos tener que descomprimir el fichero, visualizar su contenido y volverlo a comprimir, ya que estos comandos lo hacen todo sobre el archivo comprimido, sin alterarlo.
Los comandos son los siguientes:
Comando | Compresor | Finalidad |
---|---|---|
zcat |
gzip | Muestra el contenido de un fichero de texto comprimido .gz . |
zless |
gzip | Pagina el contenido de un fichero de texto comprimido .gz . |
bzcat |
bzip2 | Muestra el contenido de un fichero de texto comprimido .bz2 . |
bzless |
bzip2 | Pagina el contenido de un fichero de texto comprimido .bz2 . |
xzcat |
xz | Muestra el contenido de un fichero de texto comprimido .xz . |
xzless |
xz | Pagina el contenido de un fichero de texto comprimido .xz . |
Si quieres más información sobre formatos de compresión, echa un vistazo al artículo de compresores de Linux.
Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.
Puedes encontrar más sobre mi en Manz.dev