Tutorial de comandos xxd de Linux para principiantes (con ejemplos)

¿Necesitas un volcado hexadecimal de un archivo de texto? ¿Buscas una utilidad de línea de comandos que pueda hacerlo? Pues estás de suerte, ya que existe un comando llamado xxd que puede hacerlo por ti. En este tutorial, hablaremos de xxd con algunos ejemplos fáciles de entender. Pero antes de hacerlo, vale la pena mencionar que todos los ejemplos aquí se han probado en una máquina Ubuntu 22.04 LTS.

¿Para qué sirve el comando xxd de Linux?

El comando xxd en Linux te permite crear un volcado hexadecimal o incluso hacer lo contrario. A continuación se muestra su sintaxis:

xxd [OPTIONS] [file]

Y así es como lo explica la página man de la herramienta:

xxd  creates  a hex dump of a given file or standard input.  It can also convert a hex dump back to its original binary form.  Like
uuencode(1) and uudecode(1) it allows the transmission of binary data in a `mail-safe' ASCII representation, but has the  advantage
of decoding to standard output.  Moreover, it can be used to perform binary file patching.

A continuación se presentan algunos ejemplos de estilo Q&A que deberían darte una mejor idea de cómo funciona xxd.

Q1. ¿Cómo se utiliza el comando xxd?

Es muy sencillo. Por ejemplo, supongamos que tienes un archivo de texto «test.txt» con el contenido que se muestra a continuación:

No.|Country|Yes/No
01|India|Y
02|US|Y
03|Australia|Y

04|China|N
05|Russia|Y
06|Japan|Y

07|Singapore|Y
08|South Korea|N
09|Finland|Y
10|Ireland|Y

Así es como puedes utilizar xxd para convertir el contenido del archivo en hexadecimal:

xxd test.txt

Y aquí tienes la salida:

00000000: 4e6f 2e7c 436f 756e 7472 797c 5965 732f  No.|Country|Yes/
00000010: 4e6f 0a30 317c 496e 6469 617c 590a 3032  No.01|India|Y.02
00000020: 7c55 537c 590a 3033 7c41 7573 7472 616c  |US|Y.03|Austral
00000030: 6961 7c59 0a0a 3034 7c43 6869 6e61 7c4e  ia|Y..04|China|N
00000040: 0a30 357c 5275 7373 6961 7c59 0a30 367c  .05|Russia|Y.06|
00000050: 4a61 7061 6e7c 590a 0a30 377c 5369 6e67  Japan|Y..07|Sing
00000060: 7061 6f72 657c 590a 3038 7c53 6f75 7468  paore|Y.08|South
00000070: 204b 6f72 6561 7c4e 0a30 397c 4669 6e61   Korea|N.09|Fina
00000080: 6c61 6e64 7c59 0a31 307c 4972 656c 616e  land|Y.10|Irelan
00000090: 647c 590a                                d|Y.

Comando XXD

Q2. ¿Cómo saltar algunas líneas con xxd?

Supón que no quieres un volcado hexadecimal del archivo completo. En su lugar, quieres que la herramienta empiece a convertir a partir de una línea concreta. Entonces esto se puede conseguir utilizando el comando -s.

Por ejemplo, si quieres que xxd produzca un volcado hexadecimal a partir de la línea 3, así es como debes decirle a xxd que lo haga:

xxd -s 0x30 test.txt

Esta es la salida producida:

00000030: 6961 7c59 0a0a 3034 7c43 6869 6e61 7c4e  ia|Y..04|China|N
00000040: 0a30 357c 5275 7373 6961 7c59 0a30 367c  .05|Russia|Y.06|
00000050: 4a61 7061 6e7c 590a 0a30 377c 5369 6e67  Japan|Y..07|Sing
00000060: 7061 6f72 657c 590a 3038 7c53 6f75 7468  paore|Y.08|South
00000070: 204b 6f72 6561 7c4e 0a30 397c 4669 6e61   Korea|N.09|Fina
00000080: 6c61 6e64 7c59 0a31 307c 4972 656c 616e  land|Y.10|Irelan
00000090: 647c 590a                                d|Y.

Así puedes ver que el volcado hexadecimal se produce a partir de la línea 3 en este caso.

Q3. ¿Cómo limitar la salida de xxd a una longitud determinada?

En la sección anterior, hemos hablado de cómo hacer que xxd empiece a convertir a partir de un punto concreto. Pero también hay una forma de limitar su conversión a un punto concreto. Esto puede hacerse utilizando la opción -l de la línea de comandos.

Por ejemplo, para asegurarte de que xxd crea un volcado sólo de las tres primeras líneas de test.txt, utilízalo de la siguiente manera:

xxd -l 0x30 test.txt

Esta es la salida que produce:

00000000: 4e6f 2e7c 436f 756e 7472 797c 5965 732f  No.|Country|Yes/
00000010: 4e6f 0a30 317c 496e 6469 617c 590a 3032  No.01|India|Y.02
00000020: 7c55 537c 590a 3033 7c41 7573 7472 616c  |US|Y.03|Austral

Q4. ¿Cómo establecer la longitud de las columnas?

Si quieres que xxd produzca menos o más columnas en la salida, utiliza la opción -c y especifica allí el número de columnas. Aquí tienes un ejemplo de comando que utiliza esta opción:

xxd -c 5 test.txt

Y aquí está la salida:

00000000: 4e6f 2e7c 43  No.|C
00000005: 6f75 6e74 72  ountr
0000000a: 797c 5965 73  y|Yes
0000000f: 2f4e 6f0a 30  /No.0
00000014: 317c 496e 64  1|Ind
00000019: 6961 7c59 0a  ia|Y.
0000001e: 3032 7c55 53  02|US
00000023: 7c59 0a30 33  |Y.03
00000028: 7c41 7573 74  |Aust
0000002d: 7261 6c69 61  ralia
00000032: 7c59 0a0a 30  |Y..0
00000037: 347c 4368 69  4|Chi
0000003c: 6e61 7c4e 0a  na|N.
00000041: 3035 7c52 75  05|Ru
00000046: 7373 6961 7c  ssia|
0000004b: 590a 3036 7c  Y.06|
00000050: 4a61 7061 6e  Japan
00000055: 7c59 0a0a 30  |Y..0
0000005a: 377c 5369 6e  7|Sin
0000005f: 6770 616f 72  gpaor
00000064: 657c 590a 30  e|Y.0
00000069: 387c 536f 75  8|Sou
0000006e: 7468 204b 6f  th Ko
00000073: 7265 617c 4e  rea|N
00000078: 0a30 397c 46  .09|F
0000007d: 696e 616c 61  inala
00000082: 6e64 7c59 0a  nd|Y.
00000087: 3130 7c49 72  10|Ir
0000008c: 656c 616e 64  eland
00000091: 7c59 0a       |Y.

Así que puedes ver que sólo se produjeron 5 columnas en la salida.

Q5. ¿Cómo hacer que xxd produzca un volcado binario?

Sí, esto también es posible. La opción de línea de comandos -b hace que xxd produzca el volcado en dígitos binarios. Esto es lo que dice la página del manual sobre esta herramienta

-b | -bits
Switch to bits (binary digits) dump, rather than hexdump.  This option writes octets as eight digits "1"s and  "0"s  instead
of  a  normal  hexadecimal  dump. Each line is preceded by a line number in hexadecimal and followed by an ascii (or ebcdic)
representation. The command line switches -r, -p, -i do not work with this mode.

Comando:

xxd -b test.txt

Aquí tienes un ejemplo:

xxd -b resultado

Conclusión

Como puedes ver, el comando xxd es útil si tratas con contenidos de archivos hexadecimales y binarios. Aquí, en este tutorial, sólo hemos hablado de algunas opciones básicas que ofrece xxd. Una vez que hayas terminado de practicarlas, dirígete a la página man de la herramienta para aprender más sobre ella.

También te podría gustar...