El comando od en Linux se usa para generar el contenido de un archivo en diferentes formatos, siendo el formato octal el predeterminado.
Este comando es especialmente útil cuando se depuran scripts de Linux para cambios o caracteres no deseados.
Este artículo explica cómo usar el comando od con algunos ejemplos.
La sintaxis básica de este comando es:
od [OPTION]... [FILE]...
1. Muestra el contenido del archivo en formato octal usando la opción -b
El siguiente es el archivo de entrada utilizado para este ejemplo:
$ cat input 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Ahora ejecute el comando od en este archivo de entrada.
$ od -b input 0000000 061 012 062 012 063 012 064 012 065 012 066 012 067 012 070 012 0000020 071 012 061 060 012 061 061 012 061 062 012 061 063 012 061 064 0000040 012 061 065 012 061 066 012 061 067 012 061 070 012 061 071 012 0000060 062 060 012 0000063
Entonces vemos que la salida se produjo en formato octal. La primera columna en la salida de od representa el desplazamiento de bytes en el archivo.
2. Muestra el contenido del archivo en formato de caracteres usando la opción -c
Usando el mismo archivo de entrada (como en el ejemplo 1 anterior).
$ od -c input 0000000 1 \n 2 \n 3 \n 4 \n 5 \n 6 \n 7 \n 8 \n 0000020 9 \n 1 0 \n 1 1 \n 1 2 \n 1 3 \n 1 4 0000040 \n 1 5 \n 1 6 \n 1 7 \n 1 8 \n 1 9 \n 0000060 2 0 \n 0000063
Entonces vemos que la salida se produjo en el formato de caracteres.
3. Muestre los desplazamientos de bytes en diferentes formatos usando la opción -A
El desplazamiento de bytes se puede mostrar en cualquiera de los siguientes formatos:
- Hexadecimal (usando -x junto con -A)
- Octal (usando -o junto con -A)
- Decimal (usando -d junto con -A)
Los siguientes son ejemplos de compensaciones en diferentes formatos:
$ od -Ax -c input 000000 1 \n 2 \n 3 \n 4 \n 5 \n 6 \n 7 \n 8 \n 000010 9 \n 1 0 \n 1 1 \n 1 2 \n 1 3 \n 1 4 000020 \n 1 5 \n 1 6 \n 1 7 \n 1 8 \n 1 9 \n 000030 2 0 \n 000033
$ od -Ad -c input 0000000 1 \n 2 \n 3 \n 4 \n 5 \n 6 \n 7 \n 8 \n 0000016 9 \n 1 0 \n 1 1 \n 1 2 \n 1 3 \n 1 4 0000032 \n 1 5 \n 1 6 \n 1 7 \n 1 8 \n 1 9 \n 0000048 2 0 \n 0000051
$ od -Ao -c input 0000000 1 \n 2 \n 3 \n 4 \n 5 \n 6 \n 7 \n 8 \n 0000020 9 \n 1 0 \n 1 1 \n 1 2 \n 1 3 \n 1 4 0000040 \n 1 5 \n 1 6 \n 1 7 \n 1 8 \n 1 9 \n 0000060 2 0 \n 0000063
Entonces vemos que según la entrada suministrada a la opción -A, la primera columna (que contiene el desplazamiento de bytes) se muestra en diferentes formatos.
4. No mostrar información de compensación usando la opción '-An'
Considere el siguiente ejemplo:
$ od -An -c input 1 \n 2 \n 3 \n 4 \n 5 \n 6 \n 7 \n 8 \n 9 \n 1 0 \n 1 1 \n 1 2 \n 1 3 \n 1 4 \n 1 5 \n 1 6 \n 1 7 \n 1 8 \n 1 9 \n 2 0 \n
Entonces vemos que la información relacionada con el desplazamiento de bytes no se mostró.
5. Muestra la salida después de saltar algunos bytes
Esto se logra usando la opción -j. Aquí hay un ejemplo:
$ od -j9 -c input 0000011 \n 6 \n 7 \n 8 \n 9 \n 1 0 \n 1 1 \n 1 0000031 2 \n 1 3 \n 1 4 \n 1 5 \n 1 6 \n 1 7 0000051 \n 1 8 \n 1 9 \n 2 0 \n 0000063
Si comparamos la salida anterior con la salida del ejemplo 2, podemos ver que se omitieron los 9 bytes iniciales de la salida.
6. Mostrar bytes limitados en la salida usando la opción -N
Esto es lo opuesto a la opción -j discutida en el ejemplo 5 anterior. Aquí hay un ejemplo:
$ od -N9 -c input 0000000 1 \n 2 \n 3 \n 4 \n 5 0000011
Entonces vemos que solo se mostraron 9 bytes en la salida.
7. Muestra la salida como enteros decimales usando la opción -i
Considere el siguiente ejemplo:
$ od -i input 0000000 171051569 171182643 171313717 171444791 0000020 808520249 170995978 822751793 875629107 0000040 171258122 822752817 942737975 171520266 0000060 667698 0000063
Si combinamos -i con -b, entonces da más información sobre cómo se muestran los enteros decimales. Aquí hay un ejemplo:
$ od -ib input 0000000 171051569 171182643 171313717 171444791 061 012 062 012 063 012 064 012 065 012 066 012 067 012 070 012 0000020 808520249 170995978 822751793 875629107 071 012 061 060 012 061 061 012 061 062 012 061 063 012 061 064 0000040 171258122 822752817 942737975 171520266 012 061 065 012 061 066 012 061 067 012 061 070 012 061 071 012 0000060 667698 062 060 012 0000063
Entonces, la salida anterior muestra cómo la salida octal se muestra como salida entera.
8. Muestra la salida como unidades hexadecimales de 2 bytes usando la opción -x
Considere el siguiente ejemplo:
$ od -x input 0000000 0a31 0a32 0a33 0a34 0a35 0a36 0a37 0a38 0000020 0a39 3031 310a 0a31 3231 310a 0a33 3431 0000040 310a 0a35 3631 310a 0a37 3831 310a 0a39 0000060 3032 000a 0000063
Entonces vemos que la salida se mostró en términos de unidades hexadecimales de 2 bytes.
9. Muestra el contenido como unidades octales de dos bytes usando la opción -o
Considere el siguiente ejemplo:
$ od -o input 0000000 005061 005062 005063 005064 005065 005066 005067 005070 0000020 005071 030061 030412 005061 031061 030412 005063 032061 0000040 030412 005065 033061 030412 005067 034061 030412 005071 0000060 030062 000012 0000063
Tenga en cuenta que el comando od muestra el mismo resultado cuando se ejecuta sin ninguna opción. Aquí hay un ejemplo:
$ od input 0000000 005061 005062 005063 005064 005065 005066 005067 005070 0000020 005071 030061 030412 005061 031061 030412 005063 032061 0000040 030412 005065 033061 030412 005067 034061 030412 005071 0000060 030062 000012 0000063
10. Personaliza el ancho de salida usando la opción -w
Considere el siguiente ejemplo:
$ od -w1 -c -Ad input 0000000 1 0000001 \n 0000002 2 0000003 \n 0000004 3 0000005 \n 0000006 4 0000007 \n 0000008 5 0000009 \n 0000010 6 0000011 \n 0000012 7 0000013 \n 0000014 8 0000015 \n 0000016 9 0000017 \n 0000018 1 0000019 0 0000020 \n 0000021 1 * 0000023 \n 0000024 1 0000025 2 0000026 \n 0000027 1 0000028 3 0000029 \n 0000030 1 0000031 4 0000032 \n 0000033 1 0000034 5 0000035 \n 0000036 1 0000037 6 0000038 \n 0000039 1 0000040 7 0000041 \n 0000042 1 0000043 8 0000044 \n 0000045 1 0000046 9 0000047 \n 0000048 2 0000049 0 0000050 \n 0000051
Entonces vemos que el ancho de salida se redujo a 1 en la salida anterior.
11. Salida de duplicados usando la opción -v
Como se puede observar en el resultado del ejemplo 10 anterior, se imprimió un *. Esto se hace para suprimir la salida de líneas que son iguales o duplicadas. Pero a través de la opción -v estas líneas también se pueden imprimir. Aquí hay un ejemplo:
$ od -w1 -v -c -Ad input 0000000 1 0000001 \n 0000002 2 0000003 \n 0000004 3 0000005 \n 0000006 4 0000007 \n 0000008 5 0000009 \n 0000010 6 0000011 \n 0000012 7 0000013 \n 0000014 8 0000015 \n 0000016 9 0000017 \n 0000018 1 0000019 0 0000020 \n 0000021 1 0000022 1 0000023 \n 0000024 1 0000025 2 0000026 \n 0000027 1 0000028 3 0000029 \n 0000030 1 0000031 4 0000032 \n 0000033 1 0000034 5 0000035 \n 0000036 1 0000037 6 0000038 \n 0000039 1 0000040 7 0000041 \n 0000042 1 0000043 8 0000044 \n 0000045 1 0000046 9 0000047 \n 0000048 2 0000049 0 0000050 \n 0000051
12. Acepte la entrada desde la línea de comando usando –
Considere el siguiente ejemplo:
$ od -c - The Geek Stuff0000000 T h e G e e k S t u f f 0000016
Entonces vemos que primero la entrada se proporcionó a través de stdin y luego, después de presionar ctrl+d un par de veces, se mostró la salida del comando od.
13. Mostrar caracteres ocultos usando el comando od
Considere la siguiente entrada:
The Geek ^MStuff
Si se imprime un archivo que contiene la cadena anterior con el comando cat, se ve el siguiente resultado:
$ cat input Stuffeek
Pero como puede ver, esto no es exactamente lo que contiene el archivo.
Ahora usemos el comando od con la opción -c sobre esto:
$ od -c input 0000000 T h e G e e k \r S t u f f \n 0000020
Entonces, el comando od muestra claramente que se insertó un retorno de carro sin salto de línea entre las cadenas debido a que el comando cat mostraba una salida desordenada.