Situación

Queremos conocer el espacio en disco usado por un directorio (y sus subdirectorios inmediatos) con un comando de consola.

Comando

$ du -h -s /tu/directorio/*

Resultado

El comando te imprimirá algo como:
$ du -h --summarize /tu/directorio/*
2.5M /var/backups
286M /var/cache
139M /var/lib
4.1k /var/local
4.1k /var/lock
98M /var/log
4.4M /var/mail
4.1k /var/opt
103k /var/run
66k /var/spool
4.1k /var/tmp

Explicación

El comando du te da un estimado del espacio utilizado por un directorio, la opción -h te imprime los números en potencias de 1024, --sumarize muestra solo el total para cada elemento y /tu/directorio/* corresponde al directorio que deseas analizar. El * al final es la clave para indicarle al comando que queremos ver los subdirectorios.

Cada vez que voy a instalar una gema con el comando gem uso los parámetros --no-rdoc y --no-ri para que no me genere la documentación, principalmente porque nunca la uso y además demora demasiado el tiempo de instalación de las gemas. Pero escribir esos parámetros cada vez que ejecuto el comando es fastidioso.

Afortunadamente gem busca el archivo de configuración ~/.gemrc en el directorio personal del usuario y aplica las opciones que estén definidas, así que creando ese archivo en nuestro home con la siguiente línea no tendremos que tipear las opciones nunca más:

gem: --no-rdoc --no-ri

Tengo ya unos días tratando de recordar y averiguar cuando fue que empecé a usar Twitter y solo consigo paginas que no me inspiran mucha confianza, que se ofrecen para darte esta información.

Revisando la documentación de la API de esta red social, conseguí como hacerlo aunque no esta explícitamente documentado. Esta información del usuario se envía cada vez que uno hace una petición por su timeline usando grep, awk, tr y curl fácilmente se puede ver cuando se creó la cuenta.

cuando fue creada una cuenta en twitter

Este script muestra cuando fue creada la cuenta además de cuantas personas sigue, cuantos lo siguen y cuantos twits ha publicado:

#!/bin/bash
curl -s "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=$1&count=0" | tr ',' '\n' | grep  \"created_at\" | tail -n 1
curl -s "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=$1&count=0" | tr ',' '\n' | grep -m2 -E 'friends_count|statuses_count|followers_count'

Como ven el script acepta un parámetro que para que funcione correctamente debe de ser el handle que en mi caso es orvtech, para ver mi información pueden ejecutar:

./twitter-creado.sh orvtech "created_at":"Thu Apr 12 21:35:06 +0000 2007" "friends_count":236 "statuses_count":5065 "followers_count":251

Estoy seguro que se puede optimizar incluso remplazar esas dos peticiones web por una sola y remplazar el tr, grep y el tail con una sola instrucción de awk pero solo quería demostrar como hacerlo. Si quieren aprender mas del API de twitter pueden visitar https://dev.twitter.com/docs.

Hoy resolvi como enviar procesos al fondo dentro de un loop en BASH, tal vez exista una forma mas limpia de hacerlo pero esta me funciono. Este será un tip mas para esa serie de post cortos pero que vale la pena agregar a los bookmarks.

Enviar procesos al fondo desde un loop en bash

El tip como tal realmente simple, solo tienes que incluir lo que quieras enviar al fondo dentro de llaves {}. Lo que quieras enviar al fondo debe lucir muy parecido a esto:

{ ping orvtech.com & }

Veamos este otro ejemplo.

for i in `echo $correos`
  do echo "trabajando en usuario $i"
  { crawler.sh -H $i run "grep $1 crawler.tmp" | awk -F\" '{print $2}' | awk -F\, '{print $1}' > usuarios.txt & }
done
jobs

Con el commando jobs puedes monitorear los procesos que se han enviado al fondo.

Si usualmente utilizas la consola interactiva de Ruby On Rails para realizar pruebas, correr tareas de Rake, entre otras cosas y te resultaría sumamente útil ver el log de lo que esta haciendo el ActiveRecord, entonces este tip es para ti.

Simplemente ejecuta la consola desde la carpeta raíz de tu aplicación Rails:

Para rails 3.x:
$ rails c
Para rails 2.x:
$ script/console
Y luego indícale al logger que use la salida estándar:
ActiveRecord::Base.logger = Logger.new(STDOUT)
Con eso los mensajes de log del ActiveRecord se imprimirán en la consola.

El envenenamiento de tablas ARP es sumamente sencillo desde Linux y básicamente lo que hacemos es que le decimos a nuestro computador que responda arbitrariamente a determinadas ARP broadcast enviadas por el switch/router con su dirección MAC, creando así una entrada falsa en las tablas ARP.

Lo que hablaremos en este articulo es como duplicar lo que logra la aplicación wifikill para Android pero bajo Linux.

Envenenamiento de talbas ARP desde Fedora Linux

Negación de servicio usando envenenamiento de tablas ARP.

En ocasiones desearíamos poder desconectar a alguien en particular de la red, bien sea por que se están consumiendo todo el ancho de banda con sus descargas, por que tienen puesta una emisora de radio de internet con música que no nos gusta desde hace cuatro días o simplemente por divertirnos un rato.

Antes de comenzar con los ejemplos, necesitamos instalar arpspoof que en Fedora es parte de dsniff. Anteriormente he hablado de como instalar aplicaciones en Fedora usando la interfaz gráfica, incluso hice un video tutorial pero como estaremos usando la linea de comandos, vamos a hacerlo en esta misma, abran una consola y ejecuten como root:

yum install dsniff -y

Desconectar a un host especifico.

Desconectar a ese roommate fastidioso es sumamente fácil, solo debemos conocer su IP dentro de la red local y ejecutar:

arpspoof -i wlan1 -t 192.168.168.1.3 192.168.1.1

En este ejemplo asumimos que la interfaz de red es wlan1, el IP del host a desconectar es 192.168.168.1.3 y el gateway de la red es 192.168.1.1


Desconectarlos a todos.

Si desconectar a un host en especifico te pareció sencillo, desconectarlos a todos es aun mas fácil. Veamos este ejemplo:

arpspoof -i wlan1 192.168.1.1

Al igual que en el ejemplo anterior asumimos que la interfaz de red es wlan1 y que el gateway es 192.168.1.1 pero omitimos el host por lo que arpspoof asume que son todos los hosts los que queremos bloquear.


NOTA: Este articulo debe ser visto como un tutorial con fines didácticos, no soy responsable por como UDs. Usan estas herramientas. Tengan en cuenta que en algunos lugares el interrumpir comunicaciones en redes publicas puede ser considerado ilegal.

¿No les ha pasado que a veces encuentran en Youtube videos que son unas verdaderas joyas musicales y les gustaría tenerlos en su colección musical? Bueno con este truco es muy fácil hacerlo.

Primero instalamos el Youtube Downloader. Desde Debian sería:
# aptitude install youtube-dl
Instalamos el ffmpeg (en caso de no tenerlo):
# aptitude install ffmpeg
Luego descargamosel video desde Youtube y extraemos el audio:
$ youtube-dl --extract-audio
Eso nos generará un archivo .aac, ahora procedemos a convertirlo a mp3 (o al formato de nuestra preferencia):
$ ffmpeg -i .aac -ar 22050 -ab 32 .mp3
Y ya podremos disfrutar de la pieza de audio en nuestro reproductor favorito a partir del video de Youtube

la propiedad timeout en puppet

Este post que va corto me sirve mas como una nota para un futuro. Lo hago publico porque puede ayudar a algunos con problemas de tiempo de ejecución de comandos con puppet.

Primero aclaremos que es puppet y svn, Puppet es un sistema para automatizar tareas, escalable y libre, permite simplificar la mayoría de las tareas técnicas que los administradores de sistema hacemos diariamente. Lo mejor de todo es que las clases, templates y demás archivos de puppet pueden ser compartidos como cualquier otro código.

El segundo tema que quería aclarar era el de svn (Subversion) que es un sistema de control de versiones el cual automatiza las tareas de guardar, recuperar, registrar, identificar y manejar archivos. Muy útil para archivos que son modificados frecuentemente.

El problema que tenia era con una clase de puppet muy similar a esta:
exec {
  "templates-listo": path => "/bin:/usr/bin:/usr/sbin:/usr/local/bin",
  command => "svn co --non-interactive http://svn.orvtech.com/cms/templates /var/www/cms/templates/",
  onlyif => "/usr/bin/test -d /var/www/cms/",
  unless => "/usr/bin/test -f /tmp/templates.chkout",
}

Esta clase se ejecuta sin problemas pero no hace el checkout completo del repositorio, siempre quedan pendientes algunos directorios que no son copiados.

La solución a este problema en mi caso fue el de agregar timeout => 0, y así permitirle a subversion que termine de hacer la copia. La clase final queda muy parecida a:

exec {
  "templates-listo": path => "/bin:/usr/bin:/usr/sbin:/usr/local/bin",
  command => "svn co --non-interactive http://svn.orvtech.com/cms/templates /var/www/cms/templates/",
  timeout => 0,
  onlyif => "/usr/bin/test -d /var/www/cms/",
  unless => "/usr/bin/test -f /tmp/templates.chkout",
}

El archivo /tmp/templates.chkout es creado por otra clase que verifica si el checkout se realizo sin problemas.


La nueva interfaz gráfica de Fedora 15 (Gnome 3) puede ser confusa para algunos, en especial si están acostumbrados a otros sistemas operativos o distribuciones. Recientemente he visto como se ha incrementado la cantidad de preguntas en canal de IRC #fedora-latam referente a este tema, desde ¿Como se instalan programas en Fedora? hasta "Descargue este blender.exe, ¿Como lo instalo?".

La ventaja de usar aplicaciones que están en el repositorio de Fedora es que los programas allí colocados tienen una firma electrónica que valida y garantiza la autenticidad del programa que estás instalando además garantiza que el programa que instalas tiene una alta calidad y es compatible 100% con Fedora y a diferencia de Windows no tienes que estar buscando cracks ni tener que hacer cualquier cantidad de cosas antes de poderlos descargar.

Aquí les dejo un video:



Para los que tienen equipos que no soportan la nueva interfaz gráfica de Gnome 3 y están corriendo en 'fall-back mode' aquí les dejo unas capturas de pantalla:

  1. Hacemos click en Aplicaciones, se encuentra en la parte superior izquierda de nuestras pantallas, seguidamente click en Herramientas de sistema del y por ultimo en Añadir/Quitar Software

    Click en Aplicaciones luego en Herramientas de sistema y por ultimo Añadir/Quitar Software

  2. Buscamos la aplicación que queremos instalar, en este caso Blender y la seleccionamos en la ventana de los resultados que se encuentra a la derecha.

    Buscamos la aplicación, en este caso blender

  3. Revisamos las dependencias requeridas para instalar esta aplicación y aceptamos.

    Revisamos la lista de dependencias y aceptamos

  4. Por ultimo, autorizamos la instalación de la aplicación y su dependencias autentificandonos con las credenciales apropiadas.

    Autorizamos la instalación autentificandonos con las credenciales apropiadas

  5. Luego de esto Blender se instalara con todas las dependencias necesarias para su funcionamiento. Los programas instalados pueden ser localizados inmediatamente en el menú de aplicaciones.

El modo de single user (usuario individual) un modo en el cual un sistema operativo multi-usuarios es iniciado en modo de super usuario. Por lo general se usa para mantenimientos. En Linux es muy popular iniciar en este modo para cambiar el password del usuario.

Aquí les dejo los pasos para arrancar Fedora (y la mayoría de las distribuciones de linux) en modo single user.

  1. Al momento de arrancar presiona 'TAB' y seleccionamos el kernel desde el cual queremos arrancar en caso de que tengamos varios. deberías de ver una pantalla como esta: Seleccionamos la primera opción de arranque de Fedora Linux y presionamos la tecla e para editarla

  2. Presiona la tecla E para editar esta entrada en el menú de grub y selecciona la segunda linea, la que comienza con la palabra kernel.

    Es esta segunda linea que vamos a editar

  3. Presiona E para que puedas editar esa linea y agregar la palabra single al final de la linea.

    Asi se ve el inicio de la linea que vamos a editar en la configuración de grub

    Aquí vamos a editar los parámetros que se le pasa al kernel, podemos borrar quiet y rhgb

    Aquí vamos a editar los parámetros que se le pasa al kernel, podemos borrar quiet y rhgb

    Le pasamos el parámetro single al kernel en el grub

    Le pasamos el parámetro single al kernel en el grub

  4. Presiona ENTER para finalizar la edición de parámetros del kernel. Seguidamente presiona la tecla B para arrancar esa entrada del grub en modo single user. Como ven, ejecutando el comando who -r muestra en que nivel estamos, en este caso estamos en single.

    who -r nos muestra que estamos en single user mode

Una vez que iniciamos bajo modo single user, podemos iniciar el servicio de red ejecutando /etc/init.d/network start. Suficiente para usar fpaste y irssi y consultar cualquier duda que tengamos en el canal #fedora del servidor irc.freenode.net.

Supongamos que necesitamos soporte por que nuestra laptop no termina de iniciar. Algo que podemos hacer es iniciar en mode single user, arrancar el servicio de red y ejecutar cat /var/log/messages | fpaste luego ejecutamos irssi -c irc.freenode.net y nos unimos al canal de Fedora LATAM con el comando /j #fedora-latam, allí podemos compartir la URL que nos dio como resultado el comando fpaste.

Existe aun un nivel mas bajo que single user mode donde no se montan particiones en modo escritura. Es un nivel mucho mas básico. Para entrar en este nivel es necesario pasarle al kernel el parámetro init=/bin/bash en vez de pasarle single. Le pasamos el parámetro init con el valor /bin/bash al kernel en el grub

Un nivel mas bajo que single. Bajo init=/bin/bash el comando who no reporta en que nivel estamos. Un nivel mas bajo que single. Bajo /bin/bash el comando who no reporta en que nivel estamos