ECAL: Dividiendo (split), uniendo (cat) y verificando (md5sum) archivos

Enviado por clbustos el Mié, 05/04/2006 - 03:16.


Fuente: torcs.free.fr

Era típico en la era de los diskettes el partir un "tremendo" archivo de 30Mb en varios pedacitos, para que cupieran dentro de los discos. ¿Recuerdan lo horrible que era que el último disco creado por Winzip estuviera malo?
En linux tenemos tres herramientas muy simples que nos permiten dividir, volver a unir y verificar cualquier archivo. Para dividir, tenemos split, para unir nuestro viejo cat y para verificar, md5sum

split: Divide y vencerás

split es una pequeña aplicación muy sencilla de usar. Si quieren más detalles, hagan un info coreutils split.
Para dar un ejemplo clásico, imaginemos que queremos partir una imagen iso de dvd llamada mi_dvd.iso en varios CD. Para crear los archivos necesarios, de 695Mb (por si las moscas no lo hago de 700), ordenados por número y no por letras, como se hace por defecto, la instrucción sería
$ split -b 695m -d mi_dvd.iso mi_dvd.iso.s
Al terminar, tendremos varios archivos llamados mi_dvd.iso.s00, mi_dvd.iso.s01 y así sucesivamente

cat: los archivos, unidos, jamás serán vencidos

Ok, tenemos nuestros 7 cd listos y ahora queremos reunir el dvd en la casa de un amigo, que naturalmente ocupa GNU/Linux. ¿Como hay que hacer?
Tras copiar como los machos (con cp, claro está), tenemos que teclear en nuestra línea de comandos
$ cat mi_dvd.iso.s* > mi_dvd.iso
Y, voila, nuestro lindo archivo está de vuelta.

md5sum: juan segura vivió muchos años

One moment please. ¿Cómo estoy seguro que mi .iso es correcto? Easy. Antes de partirlo, puedes usar la siguiente instrucción
$ md5sum -b mi_dvd.iso > mi_dvd.md5
¿Qué hace este programa? Muy sencillo: calcula el resumen md5 para el archivo, es decir, un texto de 128 bits que representa la estructura única del contenido, y lo pone en un archivo llamado mi_dvd.md5; ocupo -b para indicar un cálculo en binario, ya que el archivo no es de texto. Si bien se ha logrado romper los digest md5, deberías ser un hacker trabajando en la MIT para lograr repetir el código en dos archivos distintos.
Para que se hagan una idea de lo que tendría el archivo mi_dvd.md5, saldría algo como:

1b53b43dbafbdc85b496c38bdce57a71  mi_dvd.md5

Una vez unido el archivo iso en el disco duro del receptor, podemos copiar el archivo mi_dvd.md5 en el mismo directorio y realizar
$ md5sum -c mi_dvd.md5
lo que iniciará el proceso de verificación del iso. La opción -c es la que le indica al programa que verifique (check) los valores contenidos en mi_dvd.md5 para cada uno de los nombres de archivos que están en el archivo mi_dvd.md5.

Imagen de Perijilillo Desconocido

Por cierto, split no comprueba que tengas espacio suficiente en el disco, así que si no lo tienes te deja en pelotas (se crean los primeros trozos, y luego no hay manera de generar sólo los últimos N trozos).

Y no es que se haya roto el md5.
MD5 asegura que 2 md5 distintos corresponden a archivos distintos, pero no asegura que 2 md5 iguales correspondan a archivos iguales.
Simplemente por inercia la gente empezó a asumir que se aseguraban las 2 cosas y se empezó a usar masivamente sin pensar en lo que realiza el algoritmo.

Lo mejor sería usar 2 algoritmos distintos a la vez, pero como la inercia es tan difícil de vencer...

Enviado por Perijilillo Desconocido (no verificado) el Mar, 02/05/2006 - 14:23.
Imagen de clbustos

Gracias por el comentario. En general, pareciera que la mayoría de las herramientas de Unix no toman en cuenta el espacio restante antes de hacer una operación.
Y sobre md5, tienes razón. Desde ese punto de vista, resulta un tanto inseguro confiar sólo en el md5 para verificar que un archivo descargado de la red es seguro. Pero su ubicuidad en entornos *nix y su uso sencillo lo hacen recomendable para tareas como la citada en el artículo.

Enviado por clbustos el Mar, 02/05/2006 - 21:59.
Imagen de bet0x

Simple y util el articulo. Creo que se podria hacer un script en bash para calcular el espacio que falta antes de pasar el archivo por split, y lo del MD5 es un tema.

Enviado por bet0x (no verificado) el Sáb, 21/10/2006 - 19:32.

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
If you have a Gravatar account, used to display your avatar.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato