Generando datos aleatorios

Para las clases de bases de datos o de scripts en Linux, a veces, es necesario tener un fichero con miles de datos aleatorios, pero en un determinado formato. Introducir datos a mano es una de las tareas más ingratas de la informática. Y más si se tratan de datos de usar y tirar. En este post, simplemente voy a comentar las herramientas que más uso. Hay multitud de ellas y para otros propósitos.

Para generar datos en formato tabla relacional se puede usar generatedata.com. Este permite exportar el resultado en SQL, CSV, XML o Excel y es interesante porque permite generar datos de muchos tipos predefinidos, a partir de un diccionario propio de nombre o ciudades o de formatos para teléfonos, auto-incrementales y otros datos típicos. Además, cuenta con un lenguaje para expresiones regulares por si no nos sirve nada de lo que está predefinido. En mi caso me lo instalé en una máquina virtual para poder modificar su base de datos y poner nombres y ciudades españoles.

Pero si queremos usar sólo la terminal hay que hacer uso o bien de la variable de entorno $RANDOM que contiene un número aleatorio o de los ficheros /dev/urandom y /dev/random. El primero resulta menos seguro para la generación de claves, por ejemplo, porque puede ser menos aleatorio. La razón es que /dev/random devuelve datos aleatorios generados de sus almacenes de entropía, pero pueden ser limitados. urandom, por su parte, devuelve todos los que se le pidan generándolos a partir de almacenes de entropía y de operaciones matemáticas.

Este comando, por ejemplo:

$ cat /dev/urandom | tr -d -c "123456789ABCDEF" | head -c 12 | sed  -r -e 's/(..)/\1:/g' -e 's/:$/\n/g'

Genera direcciones MAC aleatorias.

Con el resultado de cat /etc/urandom podemos hacer prácticamente todo tipo de datos aleatorios si son con formato fijo, estadísticos o palabras sin sentido. Para usar palabras que existan se puede hacer uso en un script del diccionario del sistema. En Ubuntu 12.04 está en /usr/share/dict/spanish.

Si sólo queremos generar una contraseña segura podemos usar el comando pwgen:

$ pwgen -s -y 10

Genera contraseñas seguras de 10 caracteres. Tal vez sean difíciles de leer. Por eso se puede usar sin el -s y las hace más fáciles de memorizar.

Otra manera de conseguir datos es gracias al movimiento Opendata. Se pueden encontrar muchos datos reales muy variados y curiosos en páginas web gubernamentales de todo el mundo.

 

Leer pdf en terminal

Para ver el contenido de pdfs de texto en una terminal se puede usar el comando pdftohtml y luego abrir el fichero con lynx.

Una forma más rudimentaria y que no necesita tener instalado un navegador web por terminal es transformarlo a texto. Con el comando pdftotext podemos extraer el texto de pdfs que no sean escaneados.

$ pdftotext <fichero>

Pero hay algunos pdf que muestran datos tabulados.

Datos tal como se ven en el pdf

Depende de cómo se transformara el documento en origen, esos datos no se guardan en el pdf en el órden de lectura, sino en columnas. De esta manera, el texto resultante de la transformación es ilegible y no se puede, por ejemplo, hacer grep en él.

Así se ven en un editor de texto.

Pero pdftotext tiene la opción -layout que intenta trasformar tal cual se ve, no en el orden en que están en el pdf.

$ pdftotext -layout <fichero>

Resultado correcto visto en un editor de texto.

Haciendo Linux interesante

Casi desde el primer momento que probé el comando grep me convencí de que me gustaba trabajar con Linux. Ya no sólo por los argumentos de que si es más seguro, si es libre y esas cosas. Si no porque era interesante y en cierta manera divertido y satisfactorio.

Para demostrar esto, estoy haciendo un recopilatorio de cosas curiosas que se pueden hacer con los comandos. Me ha pasado el introducir un nuevo concepto, decir que es interesante, pero no recordar un ejemplo que lo demuestre. Para evitar esto, intento darle la vuelta y jugar con los comandos. Por ejemplo, demostrar que todo es un fichero haciendo que salga por pantalla los movimientos del ratón o redireccionando un disco duro a la tarjeta de sonido. Sin embargo, como sucede con los ejemplos anteriores, hay pocas cosas que no están inventadas o que no estén demasiado vistas.

Por el momento, tengo varias cosas en el Wiki. El cual se amplía cada día, mucho más que este blog. De entre esas cosas, una especie de glosario de comandos con aplicaciones curiosas y un artículo dedicado a ncat que ampliaré cuando los alumnos hagan una práctica que estoy elaborando.

Manual de sed

Aunque en la portada de la web no ha habido mucho movimiento últimamente, en el Wiki he estado haciendo un manual de sed para poder usarlo en mis clases. Aún no está terminado pero ya se puede aprovechar el manual de sed.

Es una traducción y, creo, una mejora del de esta web: http://www.grymoire.com/Unix/Sed.html con aportaciones mías y otras cosas que he ido encontrando.

Diapositivas de introducción al SSH

Estas diapositivas me han servido para empezar con SSH. En ellas hay una breve introducción al funcionamiento del mismo. Luego se explica cómo evitar tener que poner la contraseña en el cliente cada conexión y algún concepto de tunneling o creación de proxys con SSH.

Descargar aquí: Diapositivas SSH (Valenciano)