Comando linux: test

08 08 2008 GNU/Linux
Este comando linux tiene ciertas peculiariedades que lo alejan de su utilización en consola y lo hacen realmente útil para el programación de scripts. Seguramente el hecho más relevante que reafirma lo que acabamos de decir en la manera en la que test devuelve la información; simplemente a través de su código de retorno. O sea que después de ejecutarlo por consola no veremos absolutamente nada sólo el prompt de nuestro terminal pidiendonos que introduzcamos la siguiente orden.

Tes es un comando para evaluar expresiones devolviendo 0 (cómo código de retornos) en el caso de que la expresión evaluada sea verdadera o un valor distinto de 0 en el caso de ser falso. Esto es la manera habitual para la shell, completamente diferente a la programación en C donde 0 es evaluado como falso y diferente de 0 como verdadero (aunque C no tiene tipos booleanos). Bueno que me estoy liando.

El caso es que test es capaz de analizar cadenas de texto, enteros y ficheros evaluando sus propiedades para analizar lo que más nos interese de estos elementos. Así por ejemplo para cadenas es capaz de determinar si estamos ante una cadana vacia o no (-n), si su longitud es cero (-z) si es igual a otro cadena (=). Para enteros puede determinar si son iguales, mayores o menores que otro dado y para ficheros que en mi modesta opinion es donde radica uno de sus puntos puede determinar un montón de cosas como:

FILE1 -ef FILE2
FILE1 y FILE2 son el mismo fichero en realidad (mismo inodo y dispositivo)

FILE1 -nt FILE2
FILE1 es más reciente que el FILE2 (por la fecha de modificación)

FILE1 -ot FILE2
FILE1 es más antiguo que FILE2

-b FILE
FILE existe y es un fichero de bloque especial (no un fichero regular, ver mknod)

-c FILE
FILE existe y es un dispositivo de tipo caracter (ver mknod)

-d FILE
FILE existe y es un directorio

-e FILE
FILE exite (sin entrar en otras consideraciones como en el caso de los otros parámetros)

-f FILE
FILE existe y es un fichero regular

-g FILE
FILE existe y tiene marcado el bit de GUID (id de grupo)

-G FILE
FILE existe y es poseido por el EGUID (id de grupo efectivo)

-h FILE
FILE existe y es un enlace simbólico (igual que el modificador -L)

-k FILE
FILE existe y tiene marcado el bit sticky

-L FILE
FILE existe y es un enlace simbólico (igual que el modificador -h)

-O FILE
FILE existe y es poseido por el EUID (id de usuario efectivo)

-p FILE
FILE existe y es una tuberia con nombre (ver FIFOs)

-r FILE
FILE existe y el usuario actual tiene permiso de lectura sobre él

-s FILE
FILE existe y tiene un tamaño mayor que cero

-S FILE
FILE existe y es un fichero tipo socket

-t FD
el descriptor de fichero FD esta abierto en una terminal

-u FILE
FILE exite y su SUID está marcado

-w FILE
FILE existe y el usuario actual tiene permiso de escritura sobre él

-x FILE
FILE existe y el usuario actual tiene permiso de ejecución (o busqueda) sobre él

Además test es capaz de concatenar varias expresiones empleando AND o OR lógicos con los siguientes modificadores:

EXPRESSION1 -a EXPRESSION2 (AND lógico)


EXPRESSION1 -o EXPRESSION2 (OR lógico)



Como ya he comentado antes test se emplea sobre todo en programación bash en instrucciones condicionales por acabar el articulo con un par de ejemplos que ilustraran claramente su utilización:

file="/tmp"
if [ -k $file ]
then
echo "El directorio /tmp tiene el bit sticky marcado";
fi


Otro ejemplo

cadena="hola"
if [ $cadena = "hola" ]
then
echo "Hola mundo!";
fi


Observad que en los ejemplos no hemos puesto ningún test pero es que en programación en bash y en este tipo de construcciones el corchete abierto [ es sinónimo de test (y por razones de eficiencia en un builtin (bash lo tiene incluido internamente y no llama al comando test al que emula)



Bookmark Comando linux: test  at del.icio.us Digg Comando linux: test Mixx Comando linux: test Bloglines Comando linux: test Technorati Comando linux: test Fark this: Comando linux: test Bookmark Comando linux: test  at YahooMyWeb Bookmark Comando linux: test  at Furl.net Bookmark Comando linux: test  at reddit.com Bookmark Comando linux: test  at blinklist.com Bookmark Comando linux: test  at Spurl.net Bookmark Comando linux: test  at NewsVine Bookmark Comando linux: test  at Simpy.com Bookmark Comando linux: test  at blogmarks Bookmark Comando linux: test  with wists Bookmark Comando linux: test  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Memcache

27 04 2008 GNU/Linux
Memcache es un sistema para almacenamiento de objetos en memoria que pueden ser solicitados por varios procesos, incluso en distintas máquinas y que actúa como caché para acelerar estas peticiones. Memcache ha sido diseñado de manera genérica aunque su mayor utilidad y para la que fue desarrollado inicialmente es para reducir la carga en sitios web debido a las solicitudes a base de datos que en muchos casos son innecesarias.

    Memcache ha sido desarrollado por Danga Interactive para livejournal en primera instancia pero luego liberado bajo licencia BSD. Hoy en día es empleado por muchos otros sitios webs debido a su gran utilidad, entre ellos: Livejournal, Slashdot, Wikipedia, SourceForge, FotoLog y un largo etc.

    El funcionamiento de memcache es de concepción muy sencilla. En lugar de acceder a la base de datos para solicitar determinada información primero se accede a memcached (el servidor de memcache) a través de tcp/ip (así se puede acceder a servidores memcache en máquinas remotas o en local). Si este tiene la información la devuelve y si no debemos hacer la petición a la base de datos e introducir los datos en memcached para que puedan ser accedidos directamente la próxima vez que los necesitemos. Además cada dato introducido en memcached tiene un tiempo de expiración, tras pasar este tiempo almacenado en el servidor este se considera descartable y se borra del servidor, dejando espacio para otros objetos.

    De una manera muy sencilla también es posible emplear varios servidores memcache, creando una cache distribuida todavía más eficiente o incluso utilizar varios niveles de caché entre máquinas locales y/o remotas.

    Memcaché está basado en libevent una librería de notificación de eventos asíncrona que permite ejecutar callbacks cuando un determinado evento es disparado (además de eventos puede reaccionar a señales o a intervalos de tiempo específicos, más adelante quizás le dedique un post a esta librería).

    Para instalar memcached en nuestro servidor debemos bajarnos las fuentes del sitio de Danga Interactive. La compilación e instalación no debería ser complicada. También es posible descargar fuentes y binario con apt-get o con el gestor de paquetes que tengamos instalado (absténganse windowzers)

apt-get install memcached

 El servidor memcached tiene unas pocas opciones en la línea de argumentos, estos son:

-d (implicito)
-v (verbose)
-vv (más verbose)
-m (memoría en megas disponible para el demonio)
-p (puerto a la escucha, por defecto 11211
-u (usuario bajo el que se ejecuta el servidor)
-l (IP de la que se espera conexiónes, es la única medida de seguridad del servidor, el valor por defecto es escuchar comunicaciones desde cualquier ip lo cual es completamente inseguro si no se está detrás de un firewall)
-c (número máximo de conexiones simultaneas)
-k (activa bloqueos)
-M (devuelve error cuando la memoria se agota)
-r (limita los core dump)

 El demonio toma toda la memoria especificada por el parámetro -m al principio y cuando no puede alamacenar más datos desecha aquellos accedidos menos recientemente (si no se le pasa el parámetro -M)

Ejemplo:
# memcached -d -m 2048 -l 10.0.0.40 -p 11211

El comando anterior iniciará el servidor usando 2GB de memoria y escuchando conexiones desde la ip 10.0.0.40 al puerto 11211. Recordemos que es posible iniciar más servidores memcache en la misma máquina.

Existen disponibles diversas APIs para conectarse al servidor escritas en diferentes lenguajes: PHP, Python, PERL, Ruby, Java, C, C#

Ejemplo en php de conexión con el servidor memcached:


$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");

$version = $memcache->getVersion();
echo "Server's version: ".$version."
\n";

$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;

$memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)
\n";

$get_result = $memcache->get('key');
echo "Data from the cache:
\n";

var_dump($get_result);

?>

Bookmark Memcache  at del.icio.us Digg Memcache Mixx Memcache Bloglines Memcache Technorati Memcache Fark this: Memcache Bookmark Memcache  at YahooMyWeb Bookmark Memcache  at Furl.net Bookmark Memcache  at reddit.com Bookmark Memcache  at blinklist.com Bookmark Memcache  at Spurl.net Bookmark Memcache  at NewsVine Bookmark Memcache  at Simpy.com Bookmark Memcache  at blogmarks Bookmark Memcache  with wists Bookmark Memcache  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

traceroute y lft

02 04 2008 GNU/Linux
Hoy comentaremos dos utilidades muy importantes para llevar a cabo un análisis del enrutamiento de paquetes en una red. Por todos es conocido la utilidad traceroute, pero lft es mucho menos conocida pero realmente más poderosa y útil.

lft emplea paquetes TCP SYN y FIN utilizando el campo del protocolo IP 'time to live' (tiempo de vide). lft también escucha mensajes TCP y ICMP para detectar mas información acerca de la red que está atravesando.

lft sólo tiene un parámetro obligatorio; un nombre de servidor o una dirección IP. tft soporta muchas opciones:

lft [-d dport] [-s sport] [-m min] [-M max] [-a ahead] [-c scatter ms] [-t timeout ms] [-l min ttl] [-q ISN]
[-D device] [-H ttl] [-i] [-n] [-E] [-N] [-A] [-T] [-S] [-V] [-v] [ <...>] host:dport

A través de esta herramienta puedes detectar problemas de red, pasarelas fallando o tomando demasiado tiempo en la respuesta por ejemplo.

lft significa Layer Four Tracerouter.

Prueba este comando para observar sus resultados

# lft -E -N -V news.google.es

Está es la página del projecto lft

Bookmark traceroute y lft  at del.icio.us Digg traceroute y lft Mixx traceroute y lft Bloglines traceroute y lft Technorati traceroute y lft Fark this: traceroute y lft Bookmark traceroute y lft  at YahooMyWeb Bookmark traceroute y lft  at Furl.net Bookmark traceroute y lft  at reddit.com Bookmark traceroute y lft  at blinklist.com Bookmark traceroute y lft  at Spurl.net Bookmark traceroute y lft  at NewsVine Bookmark traceroute y lft  at Simpy.com Bookmark traceroute y lft  at blogmarks Bookmark traceroute y lft  with wists Bookmark traceroute y lft  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Sintaxis 'Here documents'

10 03 2008 GNU/Linux
    Una herramienta a utilizar de nuestra shell bash es la heredoc (here document) se trata en realidad de una redirección de la entrada estándar que finaliza con una línea que contiene una palabra específica. Esta palabra ha de indicarse al comienzo utilizando el operador '<<'. Vamos a poner un ejemplo que es como mejor se aprenden las cosas:


cat > holaMundo.sh << "EOF"
#!/bin/bash

echo "Hola mundo"
EOF
bash holaMundo.sh


La sintaxis es la siguiente

<<[-] word
    here-document
word

    Si el operador de redicción es <<- entonces en todas las lineas a continuación se eliminarán los tabuladores iniciales. Permitiendo la identación del texto.

    word no tendrá expansión de parámetros, sustitución de comandos, expansión aritmética o expansión de nombre de fichero. Si word contine comillas estas serán eliminadas y el here-document no tendrá expansión de parámetros, pero si no contiene comillas la expansión de parámetros ocurrirá en el here-document. Por poner un ejemplo de este comportamiento


cat > test.txt << EOF
`date`
EOF



cat > test.txt << "EOF"
`date`
EOF


    Se puede ver que el contenido del fichero test.txt es diferente en un ejemplo y en el otro.


Bookmark Sintaxis 'Here documents'  at del.icio.us Digg Sintaxis 'Here documents' Mixx Sintaxis 'Here documents' Bloglines Sintaxis 'Here documents' Technorati Sintaxis 'Here documents' Fark this: Sintaxis 'Here documents' Bookmark Sintaxis 'Here documents'  at YahooMyWeb Bookmark Sintaxis 'Here documents'  at Furl.net Bookmark Sintaxis 'Here documents'  at reddit.com Bookmark Sintaxis 'Here documents'  at blinklist.com Bookmark Sintaxis 'Here documents'  at Spurl.net Bookmark Sintaxis 'Here documents'  at NewsVine Bookmark Sintaxis 'Here documents'  at Simpy.com Bookmark Sintaxis 'Here documents'  at blogmarks Bookmark Sintaxis 'Here documents'  with wists Bookmark Sintaxis 'Here documents'  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Star Wars open source y otros ASCII

09 03 2008 GNU/Linux
    Prueba el siguiente comando:

$ telnet towel.blinkenlights.nl

    Verás una de las películas de Star Wars en ASCII y ¡Hecha a mano!. Aquí tienes una escena de Matrix también hecha en ASCII pero con una librería de codificación de video, vamos que no tiene tanto merito aunque su resultado sea realmente espectacular

Escena matrix

    Aquí tenemos un ejemplo con la librería aalib para autenticos frikis jugando al Quake... ¡por consola!



    Por último otro truco de la vaca mugiente:

$ apt-get install cowsay
$ cowsay "¡Hola mundo!"



Bookmark Star Wars open source y otros ASCII  at del.icio.us Digg Star Wars open source y otros ASCII Mixx Star Wars open source y otros ASCII Bloglines Star Wars open source y otros ASCII Technorati Star Wars open source y otros ASCII Fark this: Star Wars open source y otros ASCII Bookmark Star Wars open source y otros ASCII  at YahooMyWeb Bookmark Star Wars open source y otros ASCII  at Furl.net Bookmark Star Wars open source y otros ASCII  at reddit.com Bookmark Star Wars open source y otros ASCII  at blinklist.com Bookmark Star Wars open source y otros ASCII  at Spurl.net Bookmark Star Wars open source y otros ASCII  at NewsVine Bookmark Star Wars open source y otros ASCII  at Simpy.com Bookmark Star Wars open source y otros ASCII  at blogmarks Bookmark Star Wars open source y otros ASCII  with wists Bookmark Star Wars open source y otros ASCII  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

egrep y grep

04 03 2008 GNU/Linux
    La utilidad GNU grep desde su versión 2.5 ha añadido nuevas e importantes funcionalidades como son la capacidad de emplear expresiones regulares y volcar sólo las coincidencias obtenidas, salida con color y nuevas opciones para ficheros y directorios.

    Ante todo comentar que egrep en realidad ejecuta un grep -E sobre los argumentos que se le pasen, sin embargo no es un alias como algunos piensan, sino un script bash. Puedes hecharle un vistazo ejecutando:

$ vi `which egrep`

    Lo que hace exactamente la opción -E (--extended-regexp) es evaluar la expresión a buscar con grep como si fuera una expresión regular. Esto permite búsquedas con muchas más posibilidades, buscando emails,telefonos, ips,urls etc en un directorio o fichero.

    Existen más opciones en el comando grep que permiten evaluar expresiones regulares como -e, -G, -P

    Estos son algunos ejemplos de su utilización:

    Buscar las tablas creadas en un fichero volcado por mysqldump y la línea del fichero donde esto ocurre:

$ grep -E -n "CREATE TABLE \`([^\`]+)\`" -o mysql.sql


    Ver los usuarios del sistema que tienen definido el campo de información de usuario (usualmente empleado para introducir información adicional como el nombre completo o alguna descripción de la utilización del usuario)

$ egrep "[a-z]:x:[0-9]+:[0-9]+:[^:]+" /etc/passwd

    Las posibilidades de este comando (unidas a las de las expresiones regulares gracias a estas opciones) son inmensas.

Bookmark egrep y grep  at del.icio.us Digg egrep y grep Mixx egrep y grep Bloglines egrep y grep Technorati egrep y grep Fark this: egrep y grep Bookmark egrep y grep  at YahooMyWeb Bookmark egrep y grep  at Furl.net Bookmark egrep y grep  at reddit.com Bookmark egrep y grep  at blinklist.com Bookmark egrep y grep  at Spurl.net Bookmark egrep y grep  at NewsVine Bookmark egrep y grep  at Simpy.com Bookmark egrep y grep  at blogmarks Bookmark egrep y grep  with wists Bookmark egrep y grep  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Easter Egg en el aptitude

02 03 2008 GNU/Linux
Siguiendo con nuestra mini-serie de Easter eggs (huevos de pascua) hoy le toca al turno al aptitude

Prueba los siguientes comandos:

$ aptitude moo

$ aptitude -v moo

$ aptitude -vv moo

$ aptitude -vvv moo

$ aptitude -vvvv moo

$ aptitude -vvvvv moo

$ aptitude -vvvvvv moo

Estos chicos se estas pasando...

Bookmark Easter Egg en el aptitude  at del.icio.us Digg Easter Egg en el aptitude Mixx Easter Egg en el aptitude Bloglines Easter Egg en el aptitude Technorati Easter Egg en el aptitude Fark this: Easter Egg en el aptitude Bookmark Easter Egg en el aptitude  at YahooMyWeb Bookmark Easter Egg en el aptitude  at Furl.net Bookmark Easter Egg en el aptitude  at reddit.com Bookmark Easter Egg en el aptitude  at blinklist.com Bookmark Easter Egg en el aptitude  at Spurl.net Bookmark Easter Egg en el aptitude  at NewsVine Bookmark Easter Egg en el aptitude  at Simpy.com Bookmark Easter Egg en el aptitude  at blogmarks Bookmark Easter Egg en el aptitude  with wists Bookmark Easter Egg en el aptitude  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Easter Egg en el APT

01 03 2008 GNU/Linux

    APT es el sistema de actualización/instalación de paquetes para sistemas tipo Debian. APT son las siglas de Advanced Package Tool.

Para ver este 'Easter Egg' (huevo de pascua) sigue los siguientes pasos:

Inicia sesión como root (bueno en realidad no se precisa ser root para ver este truco, lo puedes hacer con un usuario normal con shell)

Ejecuta:
# apt-get moo

Verás esta obra de arte ASCII


(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~
...."Have you mooed today?"...

XD es buenisimo

Prueba ahora a ejecutar

#apt-get

Sin ningún parametro aparece un listado de ayuda con todas las opciones disponibles para el comando apt-get, pero en su última linea a modo de firma se puede leer

This APT has Super Cow Powers

(Este APT tiene Super Poderes Vacunos)

XDDDDDD


Bookmark Easter Egg en el APT  at del.icio.us Digg Easter Egg en el APT Mixx Easter Egg en el APT Bloglines Easter Egg en el APT Technorati Easter Egg en el APT Fark this: Easter Egg en el APT Bookmark Easter Egg en el APT  at YahooMyWeb Bookmark Easter Egg en el APT  at Furl.net Bookmark Easter Egg en el APT  at reddit.com Bookmark Easter Egg en el APT  at blinklist.com Bookmark Easter Egg en el APT  at Spurl.net Bookmark Easter Egg en el APT  at NewsVine Bookmark Easter Egg en el APT  at Simpy.com Bookmark Easter Egg en el APT  at blogmarks Bookmark Easter Egg en el APT  with wists Bookmark Easter Egg en el APT  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!