Setencias MySQL directamente desde la terminal

27 09 2009

Hoy he descubierto un modo interesante, y sobretodo ágil para ejecutar sentencias de MySQL directamente en la terminal de comandos del SSOO, sin tener que estar dentro del propio sistemas de gestión de BBDD.

La sentencia en concreto sería:

[root@coloso01:~]# mysql -umiusuario -pmipassword -e 'select * from mi_tabla where fecha > "2009-09-17 17:00:00";' mi_base_de_datos

donde:

  • -u: indica el usuario de acceso a la BBDD.
  • -p: indica la password de acceso a la BBDD.

El único problema que le veo a esto, es que en el histórico se quedan almacenados tanto el usuario como la password de la BBDD, lo cuál puede ser un agujero de seguridad…





Logear mensajes personales en el /var/log/messages

24 09 2009

Para logear mensajes personales en el fichero /var/log/messages puedes usar la herramienta logger de unix.

Un ejemplo sencillo sería:

logger Esto es una prueba cutrecilla

y podrías observar el resultado así:

tail -20 /var/log/messages

Puedes incluso poner más información (Esto tiene que ser incluído en el código de un bash script):

logger -t `basename $0` i am still testing

Fuente





Aprendiendo a usar rsync

11 04 2009

rsync es una aplicación del mundo Unix que permite sincronizar ficheros entre máquinas.

Un ejemplo de su uso sería el siguiente:

rsync -avrP --times --perms --links --exclude "*~" /ruta/a/documentos usuario@servidor:documentos

donde:

  • rsync: el programa que va a hacerse cargo del respaldo.
  • -avrP: son las opciones: a significa “modo de archivo”, v por “verbose” (o sea, que verás en la terminal toda la información relevante sobre el proceso), r es por “recursivo” (respaldará el directorio ~/documentos y todo lo que esté dentro de él, incluyendo directorios) y P es para permitir la transfrerencia parcial de archivos (muy útil si se transfieren archivos muy grandes; si se llegara a cortar la conexión, retomará donde quedó, no desde el principio).
  • –times: Indica a rsync que envíe la fecha de modificación del fichero, de modo que se detecten actual¡zaciones de éstos y se sincronicen correctamente.
  • –perms: Para que se sincronicen también los permisos.
  • –links: Para que se sincronicen los links.
  • –exclude “*~”: con esto conseguimos que no sincronice los ficheros de backup.
  • /ruta/a/documentos es el directorio local que quieres sincronizar.
  • usuario@servidor:documentos es la información del servidor remoto donde se sincronizarán los ficheros.

Para poder utilizar esto de forma automática, sería necesario tener las llaves de SSH preparados para un login automático.





Recarga configuración de .bashrc

25 03 2009

Para recargar los cambios realizados en el fichero. bashrc, se utiliza el siguiente comando:

$ source /home/tu_cuenta/.bashrc





/bin/tar: Argument list too long

22 03 2009

Cuando necesitas empaquetar una cantidad muy grande de ficheros, es posible que tar no te lo permite. Para solucionar esto, puedes probar lo siguiente:

find . -name '*.txt' -print >/tmp/filesToPack
tar -cvzf textfiles.tar.gz --files-from /tmp/filesToPack
find . -name '*.txt' | xargs rm -v





Comando find de Unix (GNU/Linux)

11 07 2008

Existe un comando en sistemas Unix muy útil para poder encontrar ficheros con determinadas
características, es el comando find.

  • Para buscar los ficheros más grandes del sistema:
    find / -size +100000k -exec ls -lh '{}' \;
  • Para buscar los ficheros modificados recientemente (Último día):
    find / -mtime 0 -exec ls -lh '{}' \;
  • Para buscar los ficheros modificados recientemente (Último minuto):
    find / -mmin 0 -exec ls -lh '{}' \;

Para buscar ficheros de una fecha especifica, se puede intentar con lo siguiente:

$ ls -l | grep “`date ‘+%b %d’` 09:[1-5][0-9]“

que buscaría los ficheros modificados hoy entre las 9.00 y las 9.59… aunque seguro que hay alguna forma mejor de hacer esto. ¿A alguien se le ocurre?





Calcular tiempo de ejecución de un comando en Bash Shell

31 01 2008

El otro día estaba interesado en calcular el tiempo que tardaba en ejecutarse un comando, y esta es la forma que encontré de hacerlo:

#!/bin/bash
inicio_ns=`date +%s%N`
inicio=`date +%s`
sleep 5 # el comando
fin_ns=`date +%s%N`
fin=`date +%s`
let total_ns=$fin_ns-$inicio_ns
let total=$fin-$inicio
echo "ha tardado: -$total_ns- nanosegudos, -$total- segundos"

Como se puede comprobar, incluso se llega a tener una precisión de nanosegundos.

Fuente





Ejecución de aplicaciones remotas a través de SSH

31 01 2008

Puede interesarnos ejecutar aplicaciones remotas en otras máquinas a través de SSH, y si ya lo planteamos como una tarea automática, más.

Aquí dejo un ejemplo de cómo se podría hace con SSH.

$ ssh -i /home/kardinal/.ssh/id_rsa_mon -l kardinal plan01.wnet "/aplicaciones/launcher/script.sh"

donde…

/home/kardinal/.ssh/id_rsa_mon es un fichero que contiene la clave pública del usuario.
kardinal es el usuario.
plan01.wnet es el host.
/aplicaciones/launcher/script.sh es la ruta de la aplicación en el host remoto.





Formas de hacer un bucle FOR en Bash

31 01 2008

Hay varias formas de hacer bucles FOR en Bash… aquí os muestro algunos ejemplos:

#!/bin/bash
for i in $( ls ); do
echo item: $i
done

#!/bin/bash
for ((i=100;i<=115;i+=1)); do
echo $i
sleep 1
echo $i > /dev/ttyS1
done

#!/bin/bash
for i in `seq 1 10`;
do
echo $i
done

aquí he encontrado más bucles interesantes.





Listar SÓLO directorios en Bash

30 01 2008

Hoy haciendo un Shell Script me ha surgido la necesidad de hacer un listado de los directorios (y no ficheros) que hay en una determinada ruta.

Al parecer el comando ls no dispone de esta utilidad… cosa que me parece un poco extraña, pero he encontrado un modo de hacerlo con find.

$ find . -maxdepth 1 -type d

Incluso, para más comodidad te puedes hacer un alias:

$ alias lsdirs='find . -maxdepth 1 -type d'