Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Pasar de Access a MySQL

Tengo unos compañeros que se empeñan en utilizar Ms-Access, que es de los pocos programas que no funcionan de manera alguna en GNU/Linux (solo queda el recurso de usar una máquina virtual, como VirtualBox).
Por ello cuando necesito trabajar con ella (o ellos necesitan hacer consultas rápidas y como no saben me lo piden a mi) utilizo un pequeño script para pasar las tablas de Ms-Access a MySQL.
Y dice así:

#!/bin/bash
#
# vuelca_mdb 0.1 - GPL
# (c) Guimi
# http://guimi.net
#
# Ult. mod: Guimi 2009-07
#

# DATOS DEL FICHERO MDB
mdb=xxx.mdb
TABLA1=XXX
TABLA2=YYY

# DATOS DE MYSQL
bbdd=xxx
usuario=xxx
clave=xxx

# FICHERO TEMPORAL
tmp="tmp.$$"

echo "Exportando desde mdb..."
mdb-schema $mdb -S > sql-creacion_mdb$$.sql
mdb-export $mdb $TABLA1 -S -I > sql-datos_mdb$$.sql
mdb-export $mdb $TABLA2 -S -I >> sql-datos_mdb$$.sql

echo "Modificando ficheros exportados..."
# Hay que añadir "IF EXISTS" al "DROP TABLE"
sed 's/DROP TABLE/DROP TABLE IF EXISTS/g' sql-creacion_mdb$$.sql > $tmp
# Hay que cambiar "Long Integer" por "Integer"
sed 's/Long Integer/Integer/g' $tmp > sql-creacion_mdb$$.sql

# Hay que añadir un punto y coma ";" al final de cada linea -que acaba en ")"-
sed -e s/.$/\)\;/g sql-datos_mdb$$.sql > $tmp
mv $tmp sql-datos_mdb$$.sql

echo "Cargando datos en MySQL..."
mysql -D $bbdd -u $usuario --password=$clave < sql-creacion_mdb$$.sql
mysql -D $bbdd -u $usuario --password=$clave < sql-datos_mdb$$.sql

echo "Borrando ficheros temporales..."
rm sql-creacion_mdb$$.sql
rm sql-datos_mdb$$.sql


A continuación otros comandos que pueden ser utiles (proceden del paquete mdbtools).

Mostrar la versión del fichero mdb:
$ mdb-ver xxx.mdb

Mostrar las tablas de un fichero mdb (-1 para mostrar una tabla por fila):
$ mdb-tables -1 xxx.mdb

Generar un fichero C con un Array con los datos de una tabla:
$ mdb-array xxx.mdb TABLA

Access, mdb, mysql, script, prompt, Ms-Access, mdbtools

Edición de ficheros odf desde prompt (línea de comandos)

Me encuentro con que tengo un conjunto de documentos en formato odf, concretamente odt y ods, en los que me gustaría hacer una simple modificación: pongamos que quiero cambiar en todos ellos “NOMBRE_CLIENTE” por “El Cliente”.
Para ello basta con utilizar un simple script que dice así:

#!/bin/bash
#
# modifica_odf 0.1 - GPL
# (c) Guimi
# http://guimi.net
#
# Ult. mod: Guimi 2009-06
#

####################################
tmpdir="tmp.$$"

# Hacemos un bucle para tratar todos los odf del directorio
for x in `ls *.od?`
do
  # Mostramos info
  echo "Modificando $x..."

  # Descomprimimos el odf en un directorio temporal
  unzip -q $x -d $tmpdir
  cd $tmpdir

  # Realizamos las modificaciones necesarias en styles.xml
  sed 's/NOMBRE_CLIENTE/El Cliente/g' styles.xml > tmp.xml
  mv tmp.xml styles.xml

  # Realizamos las modificaciones necesarias en content.xml
  sed 's/NOMBRE_CLIENTE/El Cliente/g' content.xml > tmp.xml
  mv tmp.xml content.xml

  # Borramos el fichero temporal tmp.xml
  rm tmp.xml

  # Regeneramos el odf
  zip -rq9 ../$x *

  # Salimos y borramos el directorio temporal
  cd ..
  rm -r $tmpdir
done

edición de ficheros odf desde prompt, edición masiva de ficheros odf, modificar ficheros odt ods odp odf

Uso básico de screen en Linux

Tiene dos funcionalidades principales:

  • Permitir múltiples sesiones de terminal en una sola terminal (o conexión).

  • Desacoplar los programas en ejecución de la terminal real para que sigan en funcionamiento en background aunque se cierre la terminal, que podrá reconectarse más tarde.

Ejemplo de uso:
$ screen

  • Dentro de la sesión ejecutamos un programa, por ejemplo top, y lo desacoplamos con Ctrl-a Ctrl-d.

  • Desde otra sesión de terminal (o la misma) reacoplamos el proceso con screen -r o screen -R -D.

Comandos (dentro de screen). Todos empiezan por Ctrl-a:

Ctrl-a ? Ayuda y sumario de funciones
Ctrl-a c Crear una nueva terminal
Ctrl-a Ctrl-n or Ctrl-a Ctrl-p Cambiar a la Siguiente o Anterior terminal
Ctrl-a Ctrl-N Cambiar a la Siguiente o Anterior terminal N [0-9]
Ctrl-a ” Lista navegable de terminales en funcionamiento
Ctrl-a a Limpiar un Ctrl-a pulsado por error
Ctrl-a Ctrl-d Desconectar y dejar la sesión en funcionamiento
Ctrl-a x Bloquear todas las terminales con una clave

Uso básico de screen en Linux, comando screen

Conocer que equipos hay en una red

Hay varias herramientas que nos permiten conocer que equipos son alcanzables en nuestra red.
 

nmap

Herramienta de exploración de redes y analizador de puertos.
 
$ nmap -sP 192.168.0.0/24

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2007-06-27 10:13 CEST
Host equipo1 (192.168.0.1) appears to be up.
Host equipo2 (192.168.0.2) appears to be up.
Host equipo3 (192.168.0.4) appears to be up.
...
Nmap finished: 256 IP addresses (12 hosts up) scanned in 2.219 seconds

 

fping

Una herramienta de ping que se puede utilizar fácilmente para múltiples equipos y en scripts.
 
$ fping -g 192.168.0.0/24

192.168.0.0 error while sending ping: Permission denied
192.168.0.1 is alive
192.168.0.2 is alive
192.168.0.3 is alive
ICMP Host Unreachable from 192.168.0.2  for ICMP Echo sent to 192.168.0.4
...

 
O mejor:
$ fping -g 192.168.0.0/24 2> /dev/null | grep alive

192.168.0.1 is alive
192.168.0.2 is alive
192.168.0.3 is alive
...

 

ip

Herramienta de configuración del protocolo ip. Permite ver y modificar rutas, dispositivos, tuneles…
 
$ ip neig

192.168.0.4 dev eth1 lladdr xx:xx:xx:xx:xx:xx STALE
192.168.0.60 dev eth1 lladdr xx:xx:xx:xx:xx:xx STALE
192.168.0.61 dev eth1 lladdr xx:xx:xx:xx:xx:xx STALE
192.168.0.52 dev eth1 lladdr xx:xx:xx:xx:xx:xx STALE
...

 

nbtscan

Escanea redes en busca de nombres NETBIOS.
 
# nbtscan -r 192.168.0.0/24

Doing NBT name scan for addresses from 192.168.0.0/24

IP address       NetBIOS Name     Server    User             MAC address
------------------------------------------------------------------------------
192.168.0.0    Sendto failed: Permission denied
192.168.0.2     <unknown>                  <unknown>
192.168.0.60    xxxx-LAB10       <server>  xxxx-LAB10       xx:xx:xx:xx:xx:xx
192.168.0.52    xxxxxxxxxxxx-01  <server>  xxxxxxxxxxxx-01  xx:xx:xx:xx:xx:xx
192.168.0.61    xxxx-LAB11       <server>  xxxx-LAB11       xx:xx:xx:xx:xx:xx
...

 

Conocer que equipos hay en una red, Buscar equipos en una red, Averiguar que equipos hay en una red

Uso de mencoder

mencoder es una herramienta muy potente que viene en el paquete mplayer y permite trabajar con archivos de audio y video.
mencoder genera ficheros en formato AVI a no ser que se le indique lo contrario.

Se utiliza:
mencoder {videos de entrada} [opciones] [-o archivo de salida]

Consultar codecs disponibles:
mencoder -ovc help

Obtener información de un archivo de vídeo:
mencoder -identify archivo

Puede utilizarse para encadenar varios archivos de video:
mencoder video1.avi video2.avi -o video_unido.avi

Algunas de las opciones más utiles son:

  • oac (output audio codec) {copy,pcm,mp3lame,lavc}
    libavc utiliza un codec de la libreria libavcodec

  • ovc (output video codec) {copy,divx4,raw,libavc}
  • vf (video filter)
    • flip (Voltear arriba-abajo)

    • mirror (Voltear derecha-izquierda)
    • rotate[=...] (Girar)
    • scale[=...] (Escalar)
    • crop[=...] (Recortar)
    • denoise3d[=...] (intenta eliminar el ruido)
    • hqdn3d[=...] (intenta eliminar el ruido con mayor calidad)
    • eq[=brillo:contraste] (Modifica los colores)
    • eq2[=...] (Modifica los colores)

    Opciones que más utilizo:

    Salida como mpeg -of mpeg
    Copiar el video -ovc copy -oac copy
    Recodificar el video -ovc lavc -lavcopts vcodec=xvid:mbd=2:trell:autoaspect
    -ovc lavc -lavcopts vcodec=mpeg4
    Indicar frames per second (fps) -fps 25
    Indicar inicio y fin de la codifiación -ss 0:10 -endpos 01:15:23
    Incluir subtitulos -sub subtitulos.srt
    Rotar video -vf rotate=1 (90º en sentido horario)
    -vf rotate=2 (90º en sentido anti-horario)
    Escalar video -vf scale=320:240
    Usar sonido externo -audiofile audio.mp3
    Des/Codificar archivos de imagen -mf type=png:fps=25 (con mf -multifiles)
    Negativo -vf eq2=1.0:-0.8
    Añadir información -info name=titulo,artist=guimi

    Ejemplos:

    • Reproducción rápida de DVD

      • mplayer dvd://1
    • Codificar videos como mpeg
      • mencoder video1.avi video2.avi -of mpeg -o videoFinal.mpg
    • Rotar un video, quitarle el ruido y darle más luz
      • mencoder -vf rotate=1,hqdn3d,eq=75:100 -oac pcm -ovc lavc videoIn.avi -o videoOut.avi
    • Convertir parte de un video a AVI con codec Xvid
      • mencoder videoIn.ogg -ss 10 -endpos 01:42:55.5 -oac pcm -ovc lavc -lavcopts vcodec=xvid:mbd=2:trell:autoaspect -o videoOut.avi
    • Codificar los capítulos 10-15 del título 2 de un DVD, redimensionando
      • mencoder dvd://2 -chapter 10-15 -vf scale=640:480 -o titulo2.avi -oac copy -ovc lavc -lavcopts vcodec=mpeg4
    • Igual pero con libavcodec
      • mencoder dvd://2 -o titulo2.avi -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=1800 -oac copy
    • Codificación de archivos jpg
      • mencoder “mf://*.jpg” -mf fps=25 -o salida.avi -ovc lavc -lavcopts vcodec=mpeg4
    • Codificar video con un fichero de audio externo
      • mencoder videoIn.avi -o videoOut.avi -ovc copy -oac mp3lame -audiofile audio.wav
    • Incluir subtítulos en un vídeo
      • mencoder -ovc lavc -oac mp3lame pelicula.avi -o pelicula_con_subtitulos.avi -sub subtitulos.xxx
    • Reescalar un vídeo
      • mencoder -i grabacion.mov -s 720×480 -b 4000k -ab 160k grabacion.avi

    Referencias y ejemplos del manual de mencoder, de Hache Muda y propios.

    Uso de mencoder, comando mencoder en Linux

 

Comprobaciones de HW en GNU/Linux

DISPOSITIVOS

# lspci | cat /proc/cpuinfo

# lsusb | cat /proc/scsi/scsi

 

MEMORIA

# free

# memtest86

 

DISCOS

# dd if=/dev/… of=/dev/null

# smartmontools

 

RED

# nictools_nopci

# nictools_pci

 

CPU

# cpuburn

# crashme

# fuzz

# stress

 

OTROS

# mbmon

# sensord

# lmbench

# lm_sensors

# lshw | hwinfo | x86info

# ltp

# spew

 

Comprobaciones de HW en GNU/Linux, Veruificar hardware en Linux, chequeo de hardware

Trabajar con PDFs desde el prompt

Utilizamos principalmente el estupendo PDFTK (The PDF ToolKit), aunque para algunas cosas nos apoyamos en ImageMagick (para el comando convert), qpdf, gocr, gs:
# aptitude install pdftk imagemagick qpdf gocr

Trabajando solo en formato PDF

Extraer paginas de un pdf (como pdf)
$ pdftk file.pdf burst

Regenerar pdf completo (a veces si el archivo está corrupto lo arregla)
$ pdftk file.pdf output nuevo.pdf

Solo algunas páginas
$ pdftk file.pdf cat 3-5,8 output nuevo.pdf

Solo páginas (im)pares
$ pdftk file.pdf cat 1-5odd output nuevo.pdf

Invertir el orden de las páginas
$ pdftk file.pdf cat end-1 output nuevo.pdf

Unir diferentes archivos
$ pdftk file1.pdf file2.pdf cat output nuevo.pdf

Diferentes páginas de diferentes archivos
# Insertamos la página 2 del fichero B entre la página 2 y la página 3 del fichero A
$ pdftk A=file1.pdf B=file2.pdf cat A1-2 B2 A3-end output nuevo.pdf

Combinar páginas de dos archivos, uno de ellos de atrás adelante:
$ pdftk A=paginas_pares.pdf B=paginas_impares_al_reves.pdf shuffle A Bend-1 output escaneado_completo.pdf

Rotar PDFs
# S(outh) – 180% ; E(ast) 90%; W(est) 270%; N(orth) 0%
$ pdftk A=file1.pdf cat A1-endS output nuevo.pdf
En un pdf que contiene páginas giradas, será necesario rotar al Norte para que recuperen la orientación original.

Añadir marca de agua
$ pdftk fileIn.pdf background marca_agua.pdf output fileOut.pdf
Se recomienda que marca_agua.pdf sea del tamaño de las páginas del PDF (A4, letter…).
Si el pdf son imágenes, éstas taparán la marca de agua y no se verá. Por tanto solo es útil en pdfs con textos. La alternativa es el “sello”.

Añadir sello (stamp)
$ pdftk fileIn.pdf stamp sello.pdf output fileOut.pdf
Se recomienda que sello.pdf sea del tamaño de las páginas del PDF (A4, letter…).
El pdf se “estampará” como sello encima de las páginas del pdf. La alternativa es la marca de agua.

Modificar los datos de propiedades de un pdf (autor, fecha de modificación…)
$ pdftk fichero.pdf dump_data output propiedades.dat
$ vi propiedades.dat
$ pdftk fichero.pdf update_info propiedades.dat output fichero_mod.pdf

Desproteger PDF
$ qpdf –decrypt protected.pdf unprotected.pdf

Reducir tamaño de pdf
$ gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -sPDFSETTINGS=[setting] -sOutputFile=output.pdf input.pdf

Donde [setting] puede ser, de menor a mayor calidad: “/screen” “/ebook” “/printer” o “/prepress”

Trabajando con imágenes

Extraer paginas de un pdf (como imágenes)
$ convert -density 150 archivo.pdf img_%04d.tiff

Convertir imagenes en un pdf
$ convert *.tiff archivo.pdf

Extraer imágenes de un pdf
$ pdfimages -j file.pdf img

Trabajando con texto

Extraer texto de un pdf
$ pdftotext file.pdf

Convertir pdf en txt
$ pdftotext -layout fich.pdf fich.txt

Bonus: OCR desde imágenes
$ for x in $(ls img_*tiff); do gocr $x >> kk.txt; done

Trabajar con PDFs desde el prompt, edición de PDFs desde la línea de comandos

Trabajar con imágenes desde el prompt

Veremos varios ejemplos, pero primero instalamos ImageMagick:
# aptitude install imagemagick

Convertimos de pdf a imagenes y viceversa:
$ convert -density 150 archivo1.pdf img_%04d.tiff
$ convert *.png archivo2.pdf

Rotamos las imagenes 180 grados:
$ mogrify -rotate 180 *tiff

Cambiamos el formato de las imagenes:
$ mogrify -format png *tiff
$ convert imagen.jpg imagen.png

Cambiamos la profundidad de color:
$ mogrify -colors 16 *png

Cambiamos el tamaño de las imagenes:
$ mogrify -resize 50% *png
$ mogrify -resize 1024×768 *.png
$ mogrify -quality 75-type optimize -resize 1024×768 *.png

Obtenemos informacion sobre una imagen:
$ identify imagen.jpg

Cambiar imagenes a bn:
$ convert imagen_color.jpg -monochrome imagen_bn.jpg

Añadir un texto a una imagen:
$ convert -font courier -fill yellow -pointsize 25 -draw ‘text 100,250 guimi’ imagen.jpg imagen_con_txt.jpg

Incluimos una imagen “firma” -con fondo transparente- en la esquina inferior derecha de otra imagen:
$ combine -gravity SouthEast -compose Over imagen_original.jpg firma.png imagen_firmada.jpg
$ convert -draw ‘image Over 100,100 225,225 firma.png’ imagen_original.jpg
Podemos ver más ejemplos de cómo firmar imágenes en otro post de este blog llamado firmar imágenes.

Crear un índice gráfico con miniaturas:
$ convert “vid:*jpg” indice.png
Crear un índice gráfico con miniaturas (utiliza GUI para mostrar el resultado):
$ display “vid:*.jpg”

Crear un gif animado con varios jpg:
$ convert -delay 20 *.jpg imagen_animada.gif
$ convert -delay 200 -quality 20 -size 200 -loop 0 *.jpg imagen_animada.gif
Extraer los fotogramas de una imagen animada:
$ convert imagen_animada.gif -adjoin imagen.jpg

También podemos renombrar fotos en base a la fecha de la cabecera Exif o utilizar un script para procesar fotos o para firmar imágenes.

Trabajar con imágenes desde el prompt, editar y modificar imágenes desde la línea de comandos

Iptables

Mini introducción

Hay muchos manuales sobre iptables, aunque ninguno explica todo lo que hay que hacer para tener iptables funcionando de principio a fin.
Unos dicen como gestionar las reglas de iptables, crear chains, accept, drop… todo eso.
Otros -pocos- indican como hacer que iptables cargue las reglas en el arranque, “parar” iptables, volver a ponerlo en marcha…
Este texto es aún peor, no enseña nada… pero sirve de guía para poner a funcionar iptables de principio a fin.
 
Si se desea algo más ambicioso que un simple cortafuegos local, tambien tengo una guía completa para montar un Cortafuegos (Router-Firewall) con Proxys transparentes (web proxy y pop3 proxy) con Debian GNU/Linux + iptables + squid + p3scan + clamav + spamassassin.
 
Vamos a ello. Primero hay que generar un script que cree tus reglas iptables. Puedes seguir por ejemplo las guías de pello [1][2].
Tambien puedes ver mi script.
 
Después hay que conseguir un script de inicio/parada:
Debian ya no instala un script de inicio pero puedes usar el viejo si quieres
gunzip /usr/share/doc/iptables/examples/oldinitdscript.gz -c > /etc/init.d/iptables
 
Tambien puedes copiar el script que viene en Knoppix.
 

Otro modo -rápido- de montarlo

Como root

  1. # mkdir /etc/iptables

  2. # cd /etc/iptables
  3. (descargar y descomprimir mis ficheros iptables en este directorio)
  4. # chmod u+x *
  5. # mv iptables /etc/init.d
  6. # ./ipflush.sh
  7. # iptables-save > iptables.flush
  8. # vi iprules.sh (ajustar al gusto)
  9. # ./iprules.sh
  10. # iptables-save > iptables.rc

Para “parar” iptables:# /etc/init.d/iptables stop
Para activar iptables:# /etc/init.d/iptables start
Para modificar las reglas: repetir pasos 8 a 10.
 

Alternativa por interfaces

Cada vez que se levanta una if, se ejecutan por orden alfabetico todos los scripts de /etc/network/if-up.d/
Si queremos ejecutar scripts solo cuando un if se levanta / baja hay que usar /etc/network/interfaces. Por ejemplo:

iface eth0 inet dhcp
    pre-up /sbin/iptables-restore < /etc/iptables/eth0_rules
    post-down /sbin/iptables-restore < /etc/iptables/eth0_flush

(man interfaces)
 

Iptables en GNU/Linux, Guía rápida de Iptables en Linux

Comandos útiles en GNU/Linux

Este artículo está dedicado a pequeños comandos, a veces desconocidos o medio olvidados, que no necesitan una receta a parte.

 
# lsb_release -a

Muestra información sobre la distribución.

No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 4.0r1 (etch)
Release:        4.0r1
Codename:       etch

 

  • dmesg : Imprime los mensajes desplegados por el “kernel” al inicio.
  • dmidecode: Este comando proporciona información sobre el hardware, incluyendo número y tipo de módulos de memoria, marca y modelo de la placa base, capacidades de la BIOS… (p.e. dmidecode –type memory, –type baseboard, –type BIOS…)
  • depmod -a : Genera un archivo que contiene las dependencias de los módulos que son cargados para el “Kernel”,esto es, es capaz de reconocer cuales módulos deben de ser cargados para que un tercero sea utilizado en el sistema.
  • free : Estadísticas de uso de Memoria.
  • init q : Comando que vuelve a leer los parámetros que se encuentran en inittab.
  • insmod : Habilita (“loads”) el modulo que se especifica en la linea, para que el “kernel” sea capaz de utilizarlo.(ejemplo: insmod ip_alias.o )
  • ldconfig : Actualiza las librerías utilizadas por el sistema, recomendable ejecutarlo cada vez que se instale un programa.
  • lsmod : Despliega la información referente a los módulos que están habilitados por el “kernel”.
  • mount Permite que particiones del sistemas,CD-ROMs, floppys puedan ser leídas en el sistema. Su formato: mount -t <file system(ext2,vfat)> <partición (/dev/hda1,/dev/cdrom)> <punto de lecutra"mount point" (/mnt/home/ /mnt/cdrom)>.
  • smbmount :Similar al comando mount , excepto que este comando es utilizado para montar particiones en Samba.
  • smbumount : Utilizado para desactivar las particiones activadas con smbmount
  • slocate : Actualiza la base de información que es utilizada
    para encontrar archivos con el comando locate .
  • source : Recarga el archivo de configuración indicado al ambiente de Shell .
  • stat : Despliega información detallada sobre el archivo especificado como: fechas de modificación y cambio, dueño del archivo..etc.
  • sudo : Ejecuta un comando como usario raiz (“root”), significa “super user do”(Super usuario hacer).
  • umount : Desactiva la partición que se indicada, los parámetros que toma este comando son similares a los de mount .
  • uname -a : Información completa sobre el “Host”.
  • uptime : Hora actual, tiempo que lleva el sistema corriendo desde el
    ultimo “reboot”, usuarios conectados al servidor, carga del sistema en los últimos 1,5 y 15 minutos.
  • hostname : El nombre del “Host”.
  • chkconfig : Este comando despliega la información sobre los niveles de ejecución de los “scripts” ubicados en el directorio /etc/rc.d/init.d.