sábado, 8 de junio de 2013

Modificar un comando del cron desde la línea de comandos (bash)

Acá un truco para cambiar una línea del cron desde la terminal. De esta forma podemos tener scripts que de forma automática cambien ejecuciones del cron cuando sea necesario y así tener aplicaciones más dinámicas.

La línea es simple:

(crontab -l |grep -v 'MiScript'; echo "1 * * * * /usr/bin/MiScript") | crontab

y funciona así:

Supongamos que actualmente nuestro cron contiene esta línea:
1 * * * * /usr/bin/MiScript

y lo queremos cambiar por:
1 * * * * /usr/bin/MiNuevoScript

Entonces tenemos:

Lo que está dentro del paréntesis, es una salida (output) concatenada:
(crontab -l |grep -v 'MiScript'; echo "1 * * * * /usr/bin/MiNuevoScript")

El comando anterior primero imprime el contenido actual del cron suprimiendo el script que queremos cambiar:
crontab -l |grep -v 'MiScript'

y luego concatena esa salida con la nueva línea que queremos incluir:
echo "1 * * * * /usr/bin/MiNuevoScript"

Luego, esta salida es redirigida al comando crontab:
| crontab

para que sustituya el contenido actual del cron con la salida que obtuvimos en los pasos anteriores.

Listo.

miércoles, 5 de junio de 2013

eBook gratuito: Linux 101 hacks

Ramesh Natarajan creador del sitio The Geek Stuff publicó un eBook gratuito que contiene muchos trucos y ejemplos de comandos usados en linux.

El libro es ideal para administradores de sistemas y es de gran apoyo a usuarios de linux no importa si eres novato o experto.

Hay trucos para aligerar tareas diarias y tiene toda una sección para monitoreo del sistema.



Aunque el libro está en inglés vale la pena descargarlo y leerlo:

http://www.thegeekstuff.com/linux-101-hacks-free-ebook/

Ramesh también tiene otros libros en venta: Bash 101 Hacks y Sed & Awk 101 Hacks, entre otros.


Múltiples perfiles de red en ubuntu 13.04


Hoy al llevar mi laptop a la oficina tuve que cambiar mi configuración de red para asignarle un IP fijo, otro netmask otro gateway y otros DNS servers.

Me surgió un problema porque no vi una opción para crear otro perfil de red para no alterar el que uso regularmente en casa.

Así que buscando un poco en los foros conseguí la solución al problema en este artículo:

http://askubuntu.com/a/79975/164663

La solución es bien simple: Abrir un terminal (CTRL ALT T) y ejecutar la aplicación nm-connection-editor (Network Manager Connection Editor). Esta aplicación es un adminisrador de conexión así que simplemente creé un nuevo perfil para ethernet:




Al ejecutar nm-connection-manager se puede visualizar la aplicación Netwrok Connections. Ahí hice click en "Add" (Agregar en español) y en la siguiente ventana elegí Ethernet y luego hice click en "Create..." (Crear en español). En la siguiente pantalla (no mostrada en este ejemplo) coloqué los datos del nuevo perfil de red.


Imprimir separador de miles en bash

Tiempo atrás estuve buscando una forma de imprimir en bash números decimales con el separador de miles y gasté algo de tiempo buscando en foros y probando hasta que di con una forma sencilla de hacerlo. Es muy práctico para scripts que muestran valores numéricos en pantalla o vía e-mail.

Acá la explicación con ejemplos sencillos:

Primero agregamos un valor a la variable myvar para poder probar.
roko@MinasTirith:~$ myvar=1234567890

Ejemplo 1: Usamos la función printf (más info: man printf) para imprimir el contenido de myvar con el símbolo $ delante y con dos posiciones decimales:
roko@MinasTirith:~$ printf "$%'.2f\n" $myvar
$1,234,567,890.00

Ejemplo 2: Imprimir el contenido de la variable sin el símbolo de pesos y sin decimales:
roko@MinasTirith:~$ printf "%'.0f\n" $myvar
1,234,567,890

Ejemplo 3: Cambiamos el valor de myvar para tener un número más "real" con decimales:
roko@MinasTirith:~$ myvar=1234567890.89

e imprimimos anteponiendo el símbolo $ y los dos decimales
roko@MinasTirith:~$ printf "$%'.2f\n" $myvar
$1,234,567,890.89 


Notas:

  • El valor 2f usado en printf define la cantidad de decimales a imprimir.
  • \n agrega un fin de línea a la impresión.


¡ Espero les sea útil !