12/09/2008


Argentina : La Web 2.0 con calle de tierra y de techo el cielo...

Navegando por la web encontré este artículo y en él un gran comentario, creo que es un fiel reflejo de la Argentina y de Latinoamerica en si, espero que les interese. Saludos!

Argentina : La Web 2.0 con calle de tierra y de techo el cielo...

Así de simple , este titulo un tanto “odioso” seria el resultado final de muchas encuestas , que se pueden realizar hoy en el cono urbano del gran Buenos Aires y desde luego en muchas provincias de Argentina .
Cuando uno despega su cerebro del monitor de una PC , se da cuenta que conviven dos realidades muy distantes entre si .
La cibernética y sus adelantos nos llevan a creer que ese mundo virtual esta siempre al alcance de nosotros , ( claro nunca nos aclaran que solo unos pocos acceden ) llegamos a creer que nosotros “ somos todos”...
Hoy nos deslumbramos cuando nos llega tanta información en la red de los “mega” negocios millonarios , cómo llegar al éxito y como lo lograron
( en realidad los apellidos nos hablan a las claras de otro país...otra gente y otro poder adquisitivo ) aprendimos al instante que es una web 2.0 o un bloger , como interactuar muy rápido , buscar información y todo lo que usted ya sabe ... perdón...eso si tiene Internet .
Todo parece al alcance de nuestras manos “ rápido , veloz y muy fácil “
tu computadora pronto se transforma en “ la novia feliz”
La enciendes y listo...
Eso si , mientras pagues la cuenta de teléfono y los gastos de conexión serás del primer mundo , eso sin contar que debes cambiar tu PC por otro modelo , porque muy pronto y mas rápido de lo que tu bolsillo pueda soportar se convierte en un aparato viejo y demasiado lento .
Pero como dije al principio , ese mundo de seducción y erotismo , termina cuando apagas tu computadora y decides ver que hay a tu alrededor .
Ahí te das cuenta que entre lo virtual y lo real hay demasiada enemistad que jamás serán hermanas ...dos mundos antagónicos.
Como no soy partidario de extensos prólogos , voy al tema en cuestión .
Por motivos que no tiene mucho sentido en este caso detallar , camino mucho a diario sobre zonas muy cercanas a capital federal podría citar a muchos barrios periféricos
Y lo que puedo observar a simple vista es la cara oculta de “aquellas cosas que no es conveniente mostrar ” mientras tus zapatos se llenan de tierra y aprendes muy rápido como sortear una zanja , te das cuenta que esta hermosa historia de la Internet y los mega negocios solo es para un porcentaje muy pequeño de una extensa población totalmente marginada.
La gran mayoría , aun vive con calle de tierra y de techo el cielo , con una garrafa en envase de 30 o 40 pesos no hay demasiadas expectativas de obtener una banda ancha , tampoco les sobra tiempo para entender que es un blog o un sitio web 2.0 , subsistir y llegar a fin de mes es el tema del día .
Y si les digo que la mayoría cree que la PC es una maquina perversa llena de juegos y pornografía ?
Y no los culpo por opinar así , la tele con cuatro canales no informa demasiado no...? no hay para ellos TV educativa , solo algunos programas con culos y tetas de plástico y algún noticiero...esa es su vida y su entorno
Esa es toda la “ data” que les llega.

Solo para que tengan una idea de la “ otra historia”
Esa que jode tanto vio...
En cada barrio , podemos encontrar algunas familias que si compraron una PC , ahora lo gracioso es que no tienen Internet y porque...?
Tan simple como preguntar , como hace esa familia para pagar un costo promedio de 140 a 160 pesos por mes , para acceder a una banda ancha y desearía que no insistan con esas historias de marketing de cuarta , donde intentan convencerte que hay promociones por 40 pesos , todos sabemos que esas famosas “ promo” duran tres meses y solo te dan un moden , que los bautice ( tortuga sin patas por lo lento ) que en definitiva no sirve de nada y a la larga terminas pagando lo mismo o mas caro.
Los demás papas y mamas que no tienen la PC en casa con suerte mandan a sus hijos a los famosos tugurios llamados “ciber” y si hablamos con la verdad ( de esto se trata) estos adolescentes no van por la biblioteca virtual Vikypedia ni para leer las novedades de marqueting de los nuevos adelantos de los empresarios norteamericanos , tampoco saben que es una web 2.0 ni como ganar supuestos dineros con sitios web..
Van en definitiva a “ jugar ” en red o contactar con su novia en un chat y no mas que eso , porque ..?
Será porque , las monedas no dan para mas..
Y las escuelas...?
Podríamos recorrer muchas escuelas ...de echo lo hice ..
Aun siento mucha vergüenza y demasiada bronca por lo que pude ver , aunque cueste creerlo viejas Pentium uno y la inolvidable “486” vuelven a la vida en esos lugares , con maestras que hacen milagros para que funcionen , con el viejo Word 95 intentan que la palabra “ computación” tenga sentido .
Pude ver esas maquinas sin compactera , con rígidos de apenas 1 giga o menos y para prenderas deben esperar cinco minutos para que aparezca en inolvidable Windows 95...
Todo esto a solo 5 kilómetros de los flogers , los dark , cumbios y la madre que me parió.
Imaginan colocar una de esas maquinas en internet...?
Y nosotros aquí “del otro lado” mientras un monitor de plasma con 32 BIT de colores nos muestra como Mr .Jonson de Machachuset hizo 300 millones de dólares con su blog sobre cocina griega....
( lo bizarro es creer que somos parte de ese mundo tecnológico )
Como simplificar en pocas palabras esta realidad..?
Calles de tierra , pibes casi sin padres , un porro y por la tarde un ratito al ciber mas cercano , creo que esta es en definitiva la respuesta final .
Repito , recorrí tantos barrios como pude , hable con muchachos y niñas con padres y maestros , siempre la misma respuesta “ el dinero no alcanza y menos para tener la ultima pentium cuatro o soportar otra cuota a fin de mes por una banda ancha .
Perdón...y supongamos que tengas el dinero , quizás tampoco logres la conexión , no sea cosa que la compañía te diga :
- Lo sentimos usted esta en zona de riesgo.....
Triste no..?
Subsidios , ayudas , colaboraciones etc y mas etc...
Una mentira , tan solo eso.. una gran mentira ...
Solo por citar un ejemplo , a una escuelita le robaron su PC en el barrio de Madero , hoy año 2008 festeja el año de su ausencia...
Que tal...?
Tal vez quiera un ejemplo mas....
Algunos destacamentos de policía no tienen fax o los mandan a reparar a técnicos de barrio , porque si esperan de la cooperadora policial...
Seguirán escribiendo por mucho tiempo con la vieja “ maquina rémington” y esto lo vi personalmente, inclusive muchas de las impresoras que tienen son a “cinta” así como suena .
Mire , si tomamos la cantidad de habitantes que tiene este país , somos apenas cuatro gatos locos los que tenemos acceso a ese mundo colorido y cibernético que nos habla hasta el hartazgo de millones de dólares ....
Nosotros somos apenas simples “paseantes” de un mundo casi inalcanzable , es como entrar al mejor choping y no comprar nada , miramos como otros hacen sus negocios .
Perdón...por lo menos algunos entramos a ver...
Ya se que este informe duele y no conviene ventilar demasiado y hasta logro entender que no faltaran algunos defensores del comercio virtual gritando a cuatro vientos...
- Hay casos en Argentina donde fulana de tal , coloco un blog y hoy tiene su micro empresa o casos parecidos..
Puedo responder a esto sin mucho vericueto lingüístico ..
Y cuantas fulanas de tal , viven de la Internet hoy en Argentina..?
Cuantas..?
Una .? cinco. o 20..en el mejor de los casos...?
Como dicen lo pibes hoy en dia ..” no existís” esto no marca nada ni dice nada ...
Repito , como ejemplo de adelanto , sostengo que es un maldito fracaso..
Por lo menos en Argentina , de otros países , no se y no me interesa .
Por tal motivo no tengo reparos en afirmar que las encuestas marquetineras o los famosos index todo se muere a 10 kilómetros del obelisco y no mas que eso..
Que cosa no...? de lo que no se tiene , no hay encuestas .
Tendrían que recorrer un poquito los barrios y sus alrededores para darse cuenta que somos apenas cuatro trasnochados inflados por el ego de creer que somos tecnológicos y nos llenamos la boca hablando de google , yahoo o youtube , cuando la realidad , nos muestra un país dividido entre egoístas y mentirosos .
Que importa si la web 2.0 o el bloger tal hace furor en Colorado , Dember o New York ... si solo pueden acceder a esa fantasía el 5% de la población de un país..?
Perdón cuanto dije...?
Otro ejemplo y el ultimo...
Miren yahoo ( en español) en la sección respuestas
En ese foro interactúan miles de usuarios , bueno, que me contesten los marquetineros de saco y corbata , los discípulos de Bill gates cuantos lectores argentinos “hoy” y “ahora” están en ese sitio .
Cuantos...?
Esto contesta a mucho fanático que insiste en hacernos creer que Internet es popular en Argentina , cuando en realidad , el sexo porro y birra , tiene hoy mas adeptos que lo internautas argentinos que usan google.
Yo insisto con lo mismo y aunque se me tilde de pesimista agrio o resentido
Me da igual...
Será porque la realidad me jode mal , no puede ser que cuatro cara lánguida de saco y corbata nos vengan a vender que la Internet y sus supuestos beneficios es un hermoso regalo que adorna hoy las mesas de todos los hogares argentinos .
Tampoco , idiotizar al usuario a punto de hacerles creer que aquellos afortunados que acceden a Internet tienen el mundo de los negocios en sus manos , porque los tipos encargados de mencionar en miles de sitios esos ejemplos exitosos , no hablan de ningún Rodríguez ni Pérez o García...
Son todos Jhonatan , Jonson , Anderson etc y mas etc.
Y de esto ultimo lo digo con conocimiento , comencé cuando la Internet casi ni se conocía en este país y puedo hablar de los miles de trucos que existen en ella o como cazar incautos .
Para lograr un éxito económico en la red no tiene grandes secretos , sabes porque..?
Nada lograras sin una base sólida y gente que este dispuesta a invertir en tu proyecto y eso se resume a dos palabras “dinero y capital de riesgo” .
Lo demás es puro cuento . nadie se hace millonario en Internet de un día para el otro y vuelvo a repetir lo mismo , los ejemplos que me dan de un tal Jeferson o Diana Edith no se cuanto .... no sirven .
Mientras existan muchas mamas que mandan a sus hijos a la escuela , solo porque ahí le dan de comer o miles de familias a media hora de colectivo del centro , que aun “ hoy” no tienen agua potable ...
La web 2.0 es a penas un rey mago que vive en barrio norte...
Y te digo mas...ninguno de esos padres saben que significa “Mi PC”.
Queres apostar...
Para finalizar yo pregunto ...si hay tanto cerebro privilegiado trabajando para que la 2.0 , de mucho dinero , no sobra por ahí un poquito de materia gris para ver como podemos hacer viable una realidad mas concreta , que muchos argentinos puedan tener su PC conectada con el mundo..?
No se , digo..?

Chau
Por jaker2 ( escritor )
Bs. As Argentina

12/04/2008


Cerebro Trabajado

He creado un nuevo blog, se llama cerebro trabajando, y está destinado a aquellas personas que se cuestionan todo acerca del presente, la economía, el gobierno, la ecología, muchas teorías e hipótesis, pero como saben cada uno tiene la capacidad de discernir lo que es correcto o no, lo que es verdad o mentira, de creer o no creer, quizás algunos documentales afecten su moral ya sean fanáticos religiosos, patrióticos, políticos, etc. Open your Mind!.


11/04/2008


Programación en Bash

Exelente manual para la programación en bash, desde xtech.com.ar

Introducción

Linux, así como la mayoría de los UNIX, utilizan shell scripts para realizar una infinidad de tareas. Un shell script es un programa que se escribe con una sintaxis particular, en un archivo de texto plano, para que sea interpretado por un shell, en este caso /bin/bash.

Un shell script es básicamente un programa que llama a otros programas, con la posibilidad de hacer algun tipo de procesamiento propio (como control de flujo, operaciones matemáticas simples, etc).

Por lo tanto la forma de crear un shell script es hacer un archivo con nuestro ya querido vi:

vi holam

Luego lo llenamos con las instrucciones que deseamos. Por ejemplo:

#!/bin/bash
echo "Hola mundo!"
# Esto es por costumbre utilizado como ejemplo del primer programa.
# Se dice que trae suerte!

Luego le damos permisos de ejecución a ese archivo:

chmod +x holam

Y de esta manera ya tendremos listo un shell script que se ejecuta de la siguiente forma:

./holam

Debemos destacar la primera linea de nuestro script bash:

 #!/bin/bash

esta línea le indica al sistema que el script será interpretado por el programa que se encuentra a continuación de #!, en este caso, /bin/bash

Las últimas dos líneas son comentarios

 # Esto es por costumbre utilizado como ejemplo del primer programa.
# Se dice que trae suerte!

Los comentarios comienzan con # y se extienden hasta el final de la línea. Es muy útil ir comentando el código que uno escribe, para recordar qué realizan ciertas funciones o algoritmos, y otra persona pueda comprender el funcionamiento de nuestro script.


Variables

Las variables en un script BASH son simplemente identificadores, sin tipo. Para asignar un valor a una variable, se utiliza el operador =, por ejemplo:

[jose@xtech experto]$ MIVARIABLE=4

Por convención, los nombres de las variables se usan en mayúsculas, aunque no es obligatorio.

Para usar el contenido de la variable, dentro de un script, se usa el operador $. Por ejemplo:

[jose@xtech experto]$ echo $MIVARIABLE
4
[jose@xtech experto]$

Para utilizar el contenido de una variable, seguida de un texto, debemos usar las llaves {}

Consideremos este ejemplo:

 ARCHIVO="/tmp/ej"
mv $ARCHIVO $ARCHIVO-bak

En este caso, bash interpretaría a $ARCHIVO y $ARCHIVO-bak como dos variables distintas, para evitar esto debemos reescribirlo de esta manera:

 ARCHIVO="/tmp/ej"
mv $ARCHIVO ${ARCHIVO}-bak

Comillas

En el shell, el espacio, o el tab, son separadores. Es decir, que cuando al shell le indicamos

ls -l hola que tal

Lo interpreta como que le pedimos que nos de información sobre tres archivos, llamados: hola, que, y tal.

Si en realidad, lo que queríamos, era información sobre un archivo llamado "hola que tal", entonces hay varias maneras de indicarle al shell que los espacios entre esas palabras no deben ser separadores.

Escape ( \ )

Hay un caracter de escape, que indica al shell que el siguiente carácter no es especial. Y es la barra invertida. Por lo tanto, podríamos obtener la información del archivo "hola que tal" de la siguiente forma:

ls -l hola\ que\ tal

Los espacios no son especiales, no son separadores, y "hola que tal" es una sola palabra.

Algunos caracteres especiales más:

\ @ ! | < > [ ] { } ( ) ? * $ ' ^ ` " # & ;

Por lo tanto, si queremos incluir la \ en alguna parte, entonces debemos ponerla 2 veces (\\), la primera para decirle a BASH que no tome como carácter especial lo que sigue y la segunda como ese carácter que queremos incluír. Esto es muy común en casos como:

cd algún\ directorio\ con\ espacios

Comillas dobles ( " " )

Las comillas dobles hacen que los espacios entre las comillas no sean especiales. Por lo tanto, podríamos haber utilizado:

ls -l "hola que tal"

Todos los otros carácteres siguen siendo especiales.

Comillas simples ( ' ' )

Las comillas simples logran que ningún caracter (salvo la comilla simple misma) sea especial. Por ejemplo, si quisieramos crear un archivo que se llame *@$&, lo debemos hacer rodeándolo de comillas simples:

touch '*@$&'

Si queremos poner una comilla simple, debemos "escaparla". Para crear un archivo llamado que'tal, deberíamos hacerlo así:

touch 'que\'tal'

Ya que si no lo hacemos, la segunda comilla "cierra" la primera!

Comilla invertida ( ` ` )

Las comillas invertidas son más raras. Deben rodear un comando. Ese comando será ejecutado, y lo que ese comando imprima reemplazará al contenido de las comillas invertidas. Tal vez lo más sencillo sea un ejemplo:

[jose@xtech experto]$ ls
experto.aux experto.log experto.lyx experto.pdf experto.tex
experto.dvi #experto.lyx# experto.lyx~ experto.ps experto.toc

[jose@xtech experto]$ V=`ls`
[jose@xtech experto]$ echo $V
experto.aux experto.log experto.lyx experto.pdf experto.tex
experto.dvi #experto.lyx# experto.lyx~ experto.ps experto.toc
[jose@xtech experto]$

El uso más frecuente de las comillas invertidas es poder asignar el "resultado" de un comando a una variable.

Control de flujo

Esto refiere al cauce o flujo normal de los programas. No siempre hay un solo camino a seguir y estas proposiciones permiten que el programa realice distintas tareas, según las condiciones de las variables a interpretar.

"if"

El"if" es un proposición de control que verifica si es verdadera o falsa una condición.

Sintaxis:

if comando-condición
then
Comandos si la condición es verdadera
else
Comandos si la condición es falsa
fi

Es importante que la ubicación de las lineas se mantenga, ya que las proposiciones if/then/else/fi se controlan línea por línea. La parte else es opcional. En caso de querer hacer todo el control en una sola línea, las proposiciones deberán estar separadas por un punto y coma (;).

Los comandos que estén debajo del then se ejecutarán si la condición dio verdadera. Esto quiere decir que el valor de retorno de la condición fue 0 (cero). En caso contrario se ejecutarán los comandos que le siguen al else, si es que se utilizó esta proposición.

En la condición se puede poner un comando, donde la ejecución del mismo (su valor de retorno) definirá qué comandos (de qué proposición) se ejecutarán.

Si se verifica una condición, se deberán utilizar los corchetes para mayor comprensión.

Ejemplos:

(utilizando comandos) El hecho de entregar algo como salida se toma como condición lógica verdadera.

if ps ax | grep httpd | grep -v grep
then
echo "El web server está funcionando"
else
echo "El web server NO esta funcionando"
fi

(utilizando condiciones)

if [ -w /etc/passwd ]
then
echo "Tengo permisos de escritura en el archivo /etc/passwd"
else
echo "NO tengo permisos de escritura en el archivo /etc/passwd"
fi

Puede suceder que tengamos que testear mas de una condicion, para esto, podemos utilizar la siguiente estructura:

if condición1
then
Comando1
Comando2
elif condición2
then
Comando1
Comando2
else
Comando-por-defecto #Ninguna de las condiciones anteriores es verdadera
fi

Esta es una manera de abreviar varias estructuras if - then - else - if en una sola, pudiendo utilizarse más de dos condiciones.

La estructura de control if, es muy utilizada con test, que no es más que una operación de comparación, en las condiciones que se requieran.

"case"

El "case" es una proposición que puede analizar y validar varios casos (opciones) del valor de una variable.

Sintaxis

case variable in
patrón | patrón)
Comando;
Comando;
Comando;;

patrón | patrón)
Comando;
Comando;
Comando;;
*)
Comandos si ningún otro valor fue igualado;;
esac

El case es raramente usado, pero es muy eficiente en algunos casos.

Ejemplos:

case $mes in
ene*|Ene*)
echo "Mes de Enero";;
feb*|Feb*)
echo "Mes de Febrero";;
mar*|Mar*)
echo "Mes de Marzo";;
*)
echo "Algún otro mes!";;
esac

Ciclos

Los ciclos contienen secciones del programa que se repetirán una determinada cantidad de veces o hasta que alguna condición cambie.

for

El for debe ser el ciclo más utilizado, es muy práctico cuando se trabaja con shell scripts.

A diferencia de los lenguajes de programación más comunes, un ciclo for dentro de un shell script realiza una acción dada sobre cada uno de los elementos de una lista, y no sobre una variable que se va incrementando en cada ciclo.

La variable utilizada en el for (en este caso $i) es reemplazada por cada una de las palabras de la lista, en cada ciclo del for.

Sintaxis:

for i in lista de palabras
do
cuerpo del ciclo, $i tiene el valor de elementos sucesivos de la lista
done

Ejemplos:

for i in `ls -1 /tmp`
do
echo $i
rm -i $i
done

En este ciclo, el comando ls -1 /tmp, generará una lista de todos los archivos que existen en el directorio /tmp. Dentro del cuerpo del ciclo imprimimos el contenido de la variable y luego preguntamos si se desea borrar ese archivo (opción -i del comando rm).

while

Este ciclo utiliza la condición de terminación de un comando (valor de retorno) para controlar la ejecución de los comando dentro del ciclo. Termina la ejecución del ciclo, cuando el comando devuelve falso (algo diferente a 0).

Sintaxis:

while comando
do
cuerpo del ciclo ejecutado a condición de
que el comando devuelva verdadero
done

Ejemplos:

while sleep 60
do
who | grep daniel
done

En este ejemplo, cada 60 segundos (definidos por el comando sleep 60), verificará si el usuario daniel ha ingresado al equipo. En caso de que lo haya hecho, el listado del who saldrá por pantalla (cada 60 segundos).

until

Este ciclo se comporta de una manera muy similar al anterior, ya que define su control dependiendo del comando que ejecuta (si éste da verdadero, se sigue ejecutando el ciclo).

Sintaxis:

until comando
do
cuerpo del ciclo ejecutado a condición
de que el comando devuelva falso.
done

Ejemplo:

until who | grep daniel
do
sleep 60
done

En este ejemplo, a diferencia del ejemplo del ciclo while, el ciclo ejecuta primero el comando, de esta forma no es necesario esperar 60 segundos para saber si el usuario daniel esta logueado en el equipo (si el usuario esta logueado, el ciclo termina).

Argumentos

Los argumentos sirven para pasarle a un programa o una función valores desde la línea de comando.

Variable Descripción
$# Número de argumentos
$* Todos los argumentos del shell
$- Opciones suministradas al shell
$? Valor de retorno del último comando ejecutado
$$ Identificación del PID (número de proceso)
$0 Nombre del script
$1 Primer argumento
$n Argumento "n"

Ejemplo:

#!/bin/sh
#
# Programa que recibe argumentos y los imprime por pantalla
#
echo "\$*: $*"
echo "\$#: $#"
echo "\$0: $0"
echo "\$1: $1"
echo "\$2: $2"

Notas sobre el ejemplo:

En la líneas de impresión (echo), para imprimir el símbolo "$" (pesos) se tiene que anteponer el símbolo "\" (contra barra), sino el shell lo va a interpretar como una variable, y si esta existe imprimirá su contenido.

Funciones

Las funciones son un recurso esencial para la buena programación, permiten escribir una sola vez un pedazo de código que se repita varias veces en el script, y así, minimizar el margen de error y también la cantidad de líneas en el programa.

Para utilizarlas simplemente se hace un llamado a la función. Las funciones pueden estar dentro del mismo shell script, o en un archivo aparte. Cuando se escriben las funciones en un archivo aparte, es muy importante utilizar el comando "." (punto) para cargarlas en memoria. Si no se cargan en memoria de esta manera, las funciones no estarán disponibles.

Ejemplo:

#
# Cargando las funciones en memoria
#
. /home/jose/funciones/funciones-arch.sh

Uso

La sintaxis para utilizar funciones es muy sencilla y no agrega mayor dificultad. El modo de uso se remite a definir la función especificando el nombre y parentesis que abren y cierran. Todos los comandos que involucran la función se encierran con llaves.

Ejemplo:

(archivo: lib/arch.sh)

#
# Funciones para manipulación de archivos
#
borrar ()
{
arch=$1
if [ -z "$arch" ]
then
echo "No se recibió ningún archivo"
return 2
else
if [ -f "$arch" ]
then
if [ -w "$arch" ]
then
rm -i $arch
else
echo "No tengo permisos para borrar $arch"
fi
else
echo "$arch no es un archivo"
fi
fi
}

(archivo: principal.sh)

#!/bin/bash
#
# Programa ejemplo para el uso de funciones en shell script
#

#
# Cargo las funciones en memoria
#
. lib/arch.sh
dir=./
for i in $dir/*
do
borrar $i
done

Notas sobre el ejemplo:

(archivo: lib/arch.sh)

Esta función toma el archivo a borrar como argumento (arch=$1), verifica que se le haya pasado un argumento realmente (if [ -z "$arch" ]), que un archivo pasado como argumento sea regular (if [ -f "$arch" ]) y que tenga permisos de escritura. En todos los casos de falsedad responde con un mensaje avisando el problema.

(archivo: principal.sh)

El programa hace un ciclo con los archivos de un directorio específico (for i in $dir/*) y se los pasa como argumento a la función borrar.

Valores de retorno

Las funciones pueden devolver valores de error utilizando el comando "return ". En caso de que no se especifique un valor de retorno de esta forma, el valor retornado será el que retorne el último comando ejecutado dentro de la función. Desafortunadamente no es posible asignar el valor retornado en una sola línea, siempre es necesario utilizar la variable especial "$?".

Ejemplo:

#!/bin/sh

func () {
return $1
}

func 0
echo "ret: ($?)"
func 1
echo "ret: ($?)"
func 2
echo "ret: ($?)"
func 3
echo "ret: ($?)"

Variables locales a la función

Existe la posibilidad de utilizar variables locales a la función, esto significa que la variable solamente va a existir durante la ejecución de la función.

Para crear una variable local a la función se utilizar el operador "local ".

Ejemplo:

func () {
local x
x=$1
echo "Dentro de la función \$x vale ($x)"
}

echo "Antes de ejecutar la función \$x vale ($x)"
func HOLA!!
echo "Después de ejecutar la función \$x vale ($x)"

Operaciones Aritméticas

Existen varias formas de calcular valores dentro de un shell script. Tradicionalmente, estos cálculos se hicieron con programas externos, esto generaba un retardo inmenso en la ejecución del shell script.

Hoy los nuevos intérpretes traen la posibilidad de hacer cálculos internamente. Para esto se utiliza una sintaxis especial, y es muy importante que los valores de las variables que utilicen para hacer estos cálculos sean números únicamente.

Uso

La sintaxis para hacer operaciones aritméticas es la siguiente:

$[]

Las operaciones que se pueden realizar son:

  • suma $((1+1))
  • resta $((2-1))
  • multiplicación $((2*2))
  • división $((2/2])
  • otras como suma de bits, sacar el módulo, evaluación de igualdad, etc.

Ejemplo:

#!/bin/sh
#
# Operaciones aritméticas
#
x=2
tot=$[$x+1]
echo "tot: ($tot)"

bc

A veces hay conjuntos de herramientas que nos suenan y no las aprovechamos al máximo. Quizás una de esas sea bc. La calculadora que podemos usar desde la consola, que aparte de sumar y restar puede realizar cálculos con una precisión de varios decimales, cambiar de base numérica o programarla, etc. veremos como...

Si ejecutamos bc veremos:

$ bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.

Acá espera que trabajemos desde la entrada estándar, por ejemplo:

4+8
12
scale=3
27/68
.397
halt

Sabe sumar (y restar, dividir, multiplicar; sin problemas).

Variables

Si queremos que trabaje con decimales, asignaremos un valor a la variable scale.

scale=3
2/3
.666

También podemos hacer:

scale=9;2/3
.666666666

Al ser scale una variable más, podemos consultar su valor sencillamente escribiéndola:

scale
3
#o también usando print
print scale
3

Otro ejemplo de usos de variables podría ser:

scale=5
variable=3
100/variable
33.33333

Hay una variable especial llamada last, almacena el resultado de la última operación:

100/3
33.33333
last*2
66.66666

Cambios en la base numérica

Hay dos variables especiales que son ibase y obase que definen la base de entrada y de salida de los números, respectivamente.

Si queremos calcular el número 5 en base 10 (decimal) a base 2 (binario), haremos:

obase=2
5
101

Si queremos pasar de binario a hexadecimal:

obase=16
ibase=2
11111111
FF

Otras operaciones matemáticas

Podemos usar también sqrt, 2^3, etc.

Si queremos tener operaciones matemáticas más complejas tenemos que ejecutar el bc -l para cargar la librería matemática:

s (x)   Seno de x, en radianes
c (x) Coseno de x
a (x) Arcotangente de x
l (x) Logaritmo neperiano de x
e (x) Exponencial de x
j (n,x) Función de Bessel de un entero de orden n de x

Aplicación en un script

Si queremos pedir que el usuario teclee algo por teclado, la función es read. Por tanto.

variable=read()

Esperará que tecleemos algo y lo pondrá en variable.

También podemos hacer un programa en un archivo y ejecutarlo:

print "Hola\n"
print "Escribe tu año de nacimiento\n"
nacimiento=read()
edad=2003-nacimiento
print edad
print " años\n"
halt

Y lo ejecutamos con bc -q archivo.bc (el -q es para que no muestre el Copyright) estaremos preguntando el año nacimiento y mostrando la edad.

Ahora un ejemplo definiendo una función, pasándole un parámetro y retornándolo. Veremos que es totalmente intuitivo:

define mayor_edad(edad) {
if (edad <>= 18)
return 1
}

print "Dí tus edad\n"
edad=read()

if (mayor_edad(edad))
print "Eres mayor de edad\n"

if (!mayor_edad(edad))
print "Eres menor de edad\n"

halt

Un último ejemplo, con un for:

for (i=0;i<10;i++)> 

Observemos en la , para separar la variable y la cadena en el print.

Para salir

halt

Otra forma muy útil en los scripts es:

resultado=$(echo "scale=3;2/3" | bc)

Operaciones lógicas y de comparación


test

Para usar if podemos usar un nuevo elemento, los corchetes que evalúan las condiciones, esto esta basado directamente en test. Y éste nos sirve para comparar variables.

Por ejemplo:

-lt Menor que
-eq Igual que
-gt Mayor que
-le Menor o igual que
-ge Mayor o igual que
-ne No coinciden
-a Operador lógico and
-o Operador lógico or
!= Distinto

Sintáxis:

exp1 operador exp2

Uso de test:

test 8 -lt 9

Usando variables en test:

variable1=5
variable2=3
test $variable1 -gt $variable2

Otra forma muy útil de uso de test (si 3 es menor que 5):

[ 3 -lt 5 ]

O (si $HACER es distinto de 1):

[ $HACER != 1 ]

Ejemplo:

#!/bin/bash
variable1=5
variable2=3
[ $variable1 -lt $variable2 ]
echo $?

Aqui hemos evaluado dos variables para ver si la variable1 era menor que la variable2 y para ver el resultado hemos acudido a la “variable de retorno”, que nos mostrara 0 o 1.

Cuando necesitamos utilizar la negación, debemos usar el signo !

Ejemplo:

 if [ ! -x $FILE ]
then
chmod +x $FILE
else
echo "$FILE es ejecutable"
fi

Si el archivo no es ejecutable, le damos permiso de ejecución, sino, imprimimos el mensaje por pantalla

Interacción con el usuario

Muchos programas no serían factibles si no tuviéramos algún mecanismo para interactuar con el usuario, ya sea un simple "Presione Enter para continuar" o algo más sofisticado, como una lista de opciones de las cuales escoger.

Cuando el programa está escrito en shell, es muy sencillo lograr ambas cosas, utilizando dos herramientas: read y dialog.

read

El comando read es muy sencillo. Le indicamos que pida el valor de una variable al usuario, el usuario escribe una línea de texto (es decir, cualquier cosa hasta que presione enter), y la variable toma el valor que el usuario ingresó.

Ejemplo:

[jose@xtech experto]$ read V
Hola mundo!
[jose@xtech experto]$ echo $V
Hola mundo!
[jose@xtech experto]$

Si deseamos sólo un "Presione enter para continuar" es exactamente lo mismo, simplemente ignoramos el valor de la variable :-)

dialog

Dialog es un programa que crea una "interfaz" para que el usuario interactúe, y entrega por la salida estándar el resultado de la acción del usuario, variable $?.

Puede producir preguntas si/no, menú, lista, calendario, barra de progreso, diálogo de contraseña, cuadro de texto, cuadro de mensaje, etc. Recomendamos leer la documentación del manual (man dialog) o ejecutar

dialog --help

Aparte del programa "dialog", que produce una salida por consola, puede ser que tenga en su sistema un programa "gdialog", Xdialog o "dldialog" (dependiendo del Linux que utilice), que son lo mismo, solo que abren una ventana gráfica, por X11, para el diálogo.

Sintaxis:

dialog  { --opciones específicas }

Ejemplo 1 (Diálogo "yesno"):

[jose@xtech experto]$ dialog --yesno "Desea salir?" 6 30

Produce esto:

Los argumentos 6 y 30 corresponden a la altura y ancho, respectivamente, del cuadro. En su versión X11, sería:

[jose@xtech experto]$ gdialog --yesno "Desea salir?"

Y se vería así:

Ejemplo 2 (Diálogo "inputbox"):

[jose@xtech experto]$ dialog --inputbox "Ingrese su nombre" 9 30 Juan

Note que agregamos el argumento "Juan", que será el valor predeterminado para este inputbox:

O también:

[jose@xtech experto]$ gdialog --inputbox "Ingrese su nombre"

Produce esto:

El caso del "inputbox" suele tener aparejado la necesidad de asignar ese valor ingresado a una variable. Para hacer eso tendremos que usar la siguiente sintáxis:

VARIABLE=`gdialog --inputbox "Ingrese su nombre" 2>&1`

Note que pusimos todo el comando entre comillas invertidas para que reemplace el mismo por el valor que el comando representa después de ejecutarse.

El 2>&1 es un truco que permite redirigir la STDERR hacia la STDOUT, ya que el valor ingresado sale por la salida de error en vez de la estándar.

Ejemplo 3 (Diálogo "msgbox"):

[jose@xtech experto]$ dialog --msgbox "Esto es muy bueno para mensajes" 5 50

Produce esto:

O también:

[jose@xtech experto]$ gdialog --msgbox "Esto es muy bueno para mostrar mensajes
largos o de advertencia"

Produce esto:

Ejercicio 1

Descompresión Automática de Archivos


Se debe ingresar el nombre de un archivo por la línea de comandos, y el script debe reconocer con qué herramienta está comprimida y proceder a descomprimirlo. Si el archivo no está comprimido, el script deberá devolver un mensaje de error.

TIP: utilizar el programa "file"

Resolución
#!/bin/bash
#
# Decompresor inteligente

if [ -z $1 ]
then
#
# Si no hay argumento salimos del script con error "1!
#
echo "Debe ingresar el nombre del archivo"
exit 1
else
ARCHIVO=$1
fi

TIPO=`file $ARCHIVO`
#
# Verificamos el tipo de archivo
# Salida del comando file:
#
# Para GZIP
# file ejemplo.gz
# ejemplo.gz: gzip compressed data, was "ejemplo",from Unix
#
# Para BZIP2
# file ejemplo.bz2
# ejemplo.bz2: bzip2 compressed data, block size =900k


case $TIPO in
"${ARCHIVO}: bzip2"*)
bunzip2 $ARCHIVO
;;
"${ARCHIVO}: gzip"*)
gunzip $ARCHIVO
;;
*)
echo "No esta comprimido"
;;
esac


exit 0

Ejercicio 2

Listado del Directorio Home


Se debe realizar un listado recursivo del directorio personal, y guardar la información en un archivo. Luego debe comprimirse ese archivo y preguntar al usuario en qué directorio quiere guardar el archivo comprimido.

Resolución
#/bin/bash
# Listado del Home

# Iniciamos la variable.
rm -rf ./listado.txt
touch ./listado.txt
ARCHIVO="./listado.txt"

# Listamos los archivos y los guardamos en el archivo
ls -1 ~ >> $ARCHIVO
cat $ARCHIVO

# Comprimimos el archivo como tar.gz
tar -czvf listado.tar.gz $ARCHIVO
COMPRIMIDO=listado.tar.gz

# Preguntamos al usuario donde desea guardar ese archivo.
echo "Por favor, ingrese el PATH donde desea almacenar $COMPRIMIDO."
read PATH
echo $PATH
echo $COMPRIMIDO

# Guardamos el archivo donde se indico.
mv $COMPRIMIDO $PATH

# Se imprime donde se guardo el archivo.
echo "Se guardo $COMPRIMIDO en $PATH"

exit 0

Ejercicio 3

Ralización de un backup diario


Se debe archivar como "tarball" (archivo .tar.gz) todos los archivos del directorio personal. Esto se debe hacer grabando un CR regrabable.

Resolución 1
#!/bin/bash
#
# Se limpia la pantalla para tener una salida más prolija.

clear

# Se procede a desmontar el CD por si alguien olvidó hacerlo.

echo "*** Desmontando CDROM ***"
umount /mnt/cdrom

# Se limpia nuevamente la pantalla.

clear

# Se anuncia al usuario que se comienza a borrar el CD.

echo "*** Borrando CDROM ***"
echo "Por favor, sea paciente. Este proceso puede demorar hasta 20 minutos."
echo " "

# Se utiliza el programa cdrecord para borrar el CD.

cdrecord -v -dev=ATAPI:0,0,0 -blank=fast > /dev/null

# Se borra nuevamente la pantalla.

clear

# Se anuncia por pantalla el comienzo del backup del directorio.

echo "*** Comenzando el backup ***"

# Se crea un directorio temporal para almacenar el backup.

mkdir /tmp/backup02

# Se limpia la pantalla.

clear

# Se anuncia por pantalla que se comienza a salvar el directorio personal.

echo "*** Backup del directorio Personal ***"

# Se comprime el directorio personal.

tar -cvzf /tmp/backuo02/home.tar.gz ~/ > /dev/null

# Se limpia la pantalla.

clear

# Se anuncia por pantalla que se realiza el ISO a grabar.

echo "*** Creando archivo de Resguardo ***"

# Se crea la imágen ISO.

mkisofs -r -J -o backup02.iso backup02/ > /dev/null

# Se borra la pantalla.

clear

# Se anuncia el comiezo de la grabación del CD.

echo "*** Comenzando la grabacion del CDROM ***"
echo "Por favor, sea paciente. Este proceso puede tardar hasta 30 minutos."
echo " "

# Se comienza a grabar el CD con cdrecord.

cdrecord -v speed=4 dev=ATAPI:0,0,0 -data backup02.iso > /dev/null

# Se anuncia en pantalla el borrado de los archivos auxiliares.

echo "*** Limpiando archivos extras ***"
rm -Rf /tmp/backup02.iso > /dev/null
rm -Rf /tmp/backup02 > /dev/null

# Se desmonta el CD.

umount /mnt/cdrom

# Se limpia la pantalla.

clear

# Se anuncia que el proceso finalizó con éxito.

echo "*** Se realizo el backup con exito ***"

exit 0
Resolución 2 (backup por SAMBA)
#!/bin/bash
#
# Se limpia la pantalla para tener una salida más prolija.

clear

# Se procede a desmontar el CD por si alguien olvidó hacerlo.

echo "*** Desmontando CDROM ***"
umount /mnt/cdrom

# Se limpia nuevamente la pantalla.

clear

# Se monta por red el CD de un cliente windows.

smbmount //pc3/d /mnt/cdrom -o username=usuario,password=contraseña

# Se borra nuevamente la pantalla.

clear

# Se anuncia por pantalla el comienzo del backup del directorio.

echo "*** Backup del directorio Personal ***"

# Se comprime el directorio personal.

tar -cvzf /mnt/cdrom/home.tar.gz ~/ > /dev/null

# Se desmonta el CD.

umount /mnt/cdrom

# Se limpia la pantalla.

clear

# Se anuncia que el proceso finalizó con éxito.

echo "*** Se realizo el backup con exito ***"

exit 0


Richard Stallman en Buenos Aires

Tanto tiempo sin dedicarme al blog, he regresado =P y nada mejor que mostrando algunas fotos de Richard Stallman. Ayer lunes 3 de noviembre el padre del movimiento del software libre dió una conferencia en el Salón Auditorio del Anexo de la Honorable Cámara de Diputados de la Nación. Fué imperdible...no le hagan caso a la fecha de la foto, porque está mal. Saludos!




El video de San Ignacious que alguién subío a youtube =) :

9/10/2008


RAP del LHC - Gran Colisionador de Hadrones

8/23/2008


Como funciona la web

El libro que el lector tiene en sus manos es producto de la experiencia del equipo de científicos que trabaja en el Centro de Investigación de la Web. Hemos querido exponer al gran público no sólo lo que hacemos, sino sobre todo, cómo funciona ese producto tan propio de nuestros tiempos que es la Web. Este libro pretende, a nivel de divulgación, dar a conocer las diferentes facetas que están detrás del funcionamiento de la Web.

Dr. Gonzalo Navarro Badino
Director


Via: Ciw.cl

8/22/2008


Hitler y Phelps. Willie Oviedo confirma la física cuántica.

CARACAS (Reuters) - Parecería imposible relacionar al dictador alemán Adolf Hitler con el nadador estadounidense Michael Phelps en los Juegos Olímpicos de Múnich 1972, pero un locutor deportivo de una televisión estatal venezolana lo logró en una monumental confusión que ha hecho furor en la red.

El comentarista Willie Oviedo, de la Televisora Social Venezolana (TVes), hacía unos insólitos comentarios históricos para introducir la prueba de relevos 4x100 metros combinados de los Olímpicos de Pekín, con la que Phelps logró la inédita hazaña de ganar ocho preseas de oro en un mismo torneo.

"Jamás en unos Juegos Olímpicos, ningún mortal, ningún ser viviente ha podido colgarse la cifra de ocho medallas doradas. Unicamente lo logró Michael Phelps en los Olímpicos de Múnich en el año de 1972, allá en la Alemania de Hitler, donde ni siquiera él mismo quiso darle las medallas," dijo Oviedo.

El narrador confundió a Phelps, de 23 años, con su compatriota Mark Spitz, quien efectivamente ganó siete oros hace 36 años en las piscinas de Múnich.

Pero también mezcló estas pruebas con los Juegos de 1936 en Berlín, cuando Hitler prefirió no estar presente en las ceremonias de premiación donde el atleta afroamericano Jesse Owens recibió cuatro medallas de oro, en momentos en que los germanos exaltaban a la "raza aria" frente a la negra.

Una portavoz de TVes no quiso comentar a Reuters si la narración era real, pero criticó los montajes que se han realizado en internet para burlarse del traspié del periodista.

La narración de Oviedo acumula decenas de miles de visitas en YouTube (http://www.youtube.com/watch?v=jZEItFOKlHc) y ha corrido como la pólvora en blogs, foros de internet y correos electrónicos, e incluso se han realizado montajes de video con risas enlatadas.

El error también ha propiciado que los críticos del presidente Hugo Chávez arrecien sus ataques contra TVes, la cadena de televisión pública que ocupó la señal del canal opositor RCTV luego de que el mandatario no le renovara la licencia de transmisión en mayo del 2007.

(Por Enrique Andrés Pretel; Editado por Patricia Avila)

Visto en Yahoo!



8/18/2008


Problemas para iniciar httpd

Ayer instalé Apache 2 (apache-2.2.9-4) en Archlinux, pero por alguna razón en particular no iniciaba..

█▓▒░root@localhost█▓▒░ mar ago 19 10:12:34
/etc/rc.d/ /etc/rc.d/httpd start
:: Starting HTTP Daemon [FAIL]

Ni en los logs apareciá el problema, nada, la verdad en "pelotas estaba". Hasta que se me ocurrió hacer:

█▓▒░root@localhost█▓▒░ mar ago 19 10:12:53
/etc/rc.d/ apachectl -t
httpd: bad user name http


Podemos ver que nos dice "httpd: bad user name http", me di cuenta que no tengo ningún usuario llamado de esa manera. Creemos un usuario con ese nombre...:

█▓▒░root@localhost█▓▒░ mar ago 19 10:14:08
/etc/rc.d/ adduser http

Login name for new user: http

User ID ('UID') [ defaults to next available ]:

Initial group [ users ]:

Additional groups (comma separated) []:

Home directory [ /home/http ]

Shell [ /bin/bash ]

Expiry date (YYYY-MM-DD) []:

New account will be created as follows:

---------------------------------------
Login name.......: http
UID..............: [ Next available ]
Initial group....: users
Additional groups: [ None ]
Home directory...: /home/http
Shell............: /bin/bash
Expiry date......: [ Never ]

This is it... if you want to bail out, hit Control-C. Otherwise, press
ENTER to go ahead and make the account.


Creating new account...


Cambiando la información de usuario para http
Introduzca el nuevo valor, o presione ENTER para el predeterminado
Nombre completo []:
Número de habitación []:
Teléfono del trabajo []:
Teléfono de casa []:
Otro []:
Introduzca la nueva contraseña de UNIX:
Vuelva a escribir la nueva contraseña de UNIX:
passwd: contraseña actualizada correctamente


Account setup complete.

Iniciamos Apache...

█▓▒░root@localhost█▓▒░ mar ago 19 10:12:34
/etc/rc.d/ /etc/rc.d/httpd start
:: Starting HTTP Daemon [FAIL]

Pufff otra vez...

█▓▒░root@localhost█▓▒░ mar ago 19 10:16:05
/etc/rc.d/ apachectl -t
httpd: bad group name http


Ahora nos dice que el grupo no existe...lo creamos también..

█▓▒░root@localhost█▓▒░ mar ago 19 10:16:11
/etc/rc.d/ groupadd http

Agregamos el usuario http al grupo http:

█▓▒░root@localhost█▓▒░ mar ago 19 10:18:16
/etc/rc.d/ gpasswd -a http http
Añadiendo al usuario http al grupo http

Iniciamos Apache:

█▓▒░root@localhost█▓▒░ mar ago 19 10:18:23
/etc/rc.d/ /etc/rc.d/httpd start
:: Starting HTTP Daemon [DONE]
█▓▒░root@localhost█▓▒░ mar ago 19 10:19:09

Este inconveniente me quitó 3 horas de mi vida =P. Espero que les sirva. Saludos!

8/17/2008


Bashish y aléjate de la consola...oscura claro.

Bashish es un tema para terminales de texto. Puede cambiar los colores, tipo de letra,
la transparencia y la imagen de fondo para cada aplicación. Adicionalmente
Bashish puede funcionar en bash, zsh y tcsh.

Para instalarlo en arch:

yaourt -S bashish
Ejemplos:

A red sky with the siluette of a city in dawn..
urbandawn

a snake crawling up to the prompt
conda


3D steel like finish
bluesteel


A new poker hand each time the prompt is pressed.
poker


an ascii-art prompt similar to the lcars interface from startrek
lcars

A red square around the terminal
box


Commodore 64 screen with some error messages
c64 - ?SYNTAX ERROR


Fading prompt
fade


A cow stretched over the whole terminal.
moo


Simulation of a 3270 terminal connectiong to IBM MVS
mvs


pink terminal with saturated flowers
flowerpower

8/16/2008


El secreto

The Secret es una película de Boixnet y utiliza un formato de película documental para presentar la "Ley de Atracción" Esta ley es el "secreto" que, de acuerdo con el argumento, "ha viajado a través de los siglos para alcanzarnos". La película muestra breves fragmentos de película basados en experiencias y entrevistas a un equipo de especialistas en la transformación personal, maestros espirituales, maestros de cosmologia, expertos en generar riqueza, matemáticos, físicos cuánticos, etc.

Tal y como muestra la película, los principios de la "Ley de Atracción" plantean que los sentimientos y los pensamientos de las personas se plasman en sus vidas como hechos reales, desde interacciones con el cosmos hasta interacciones entre personas de tipo físico, emocional y profesional. La película también hace referencia a la tendencia de la gente con poder a esconder al público este principio básico. El trailer de la película muestra a algunas personas que "descubrieron el secreto...".

Via wikipedia.org




Ver mas grande

8/14/2008


Manual de la Metodología Abierta de Testeo de Seguridad de ISECOM


La organización ISECOM, es el Instituto para la Seguridad y las Metodologías Abiertas.
El "Manual de la Metodología Abierta de Testeo de Seguridad" es un documento que reúne, de forma estandarizada y ordenada, las diversas verificaciones y pruebas que debe realizar un profesional de la seguridad informática durante el desarrollo de las auditorías y verificaciones de la seguridad. Es un documento en constante evolución, fruto del trabajo conjunto de más de 150 colaboradores de todo el mundo.

La participación directa de estos profesionales, que desarrollan su actividad profesional en el sector de la seguridad, en la confección de la metodología le permite incorporar los más recientes cambios y nuevas tendencias en el mundo de la seguridad informática.

OSSTMM 3.0 lite - Open Source Security Testing Methodology Manual (English): Descargar
OSSTMM 2.1 - Manual de la Metodología Abierta de Testeo de Seguridad (Spanish): Descargar

Metodología para análisis de redes inalámbricas

En esta versión especial de la metodología se incluyen las diversas pruebas y verificaciones que están especialmente diseñadas para la comprobación del nivel de seguridad de las comunicaciones inalámbricas y los dispositivos que utilizan este tipo de comunicaciones(802.11, Bluetooh, infrarrojos y similares). Estas verificaciones incluyen tanto la identificación de estas comunicaciones como la comprobación del nivel de seguridad de las redes ya identificadas.

OSSTMM Wireless 2.9.1 - Wireless Security Testing Section Open-Source Security Testing Methodology Manual (English): Descargar

8/12/2008


Apagar monitor desde la consola

Para apagar el monitor desde la consola, ejecutamos el siguiente comando:

xset dpms force off
Saludos!

8/03/2008


Mark Shuttleworth, el padre de Ubuntu en Buenos Aires

Noticia desde isos-linux.com.ar:

El empresario sudafricano fundador de Canonical, la organización detrás de la distribución GNU/Linux Ubuntu, llega a Buenos Aires para ofrecer una charla pública y gratuita en el marco de las 8vas. Jornadas Regionales de Software Libre que se realizarán del 20 al 22 de Agosto en la Universidad de Belgrano, Zabala 1837, Capital Federal. Las Jornadas Regionales de Software Libre, coordinadas este año por el Grupo de Usuarios de Software Libre de Capital Federal (CaFeLUG), son un evento internacional e itinerante de difusión y promoción del uso, desarrollo y actualización de Software Libre desde aspectos técnicos, filosóficos y políticos.


Con la presencia de Mark Shuttleworth, el mentor de una de las distribuciones de Software Libre más populares del planeta, las Jornadas Regionales prometen ser un evento de alto nivel tanto en lo técnico como en lo filosófico. Shuttleworth se suma a un número importante de panelistas internacionales, entre los que podemos citar a John 'Maddog' Hall (Presidente de Linux International), Chris Hoffman (Director de ingeniería y proyectos especiales de la Fundación Mozilla), Raymond Hettinger (Python Software Foundation), Rik van Riel (Ingeniero senior de Red Hat Linux), Dag Wieers, el kernel hacker Christoph Hellwig y Mario Bonilla (Ingeniero responsable
de clusters en Google Irlanda).
Las Jornadas son gratuitas pero la acreditación es imprescindible, ya que se espera un promedio de 2 mil asistentes para los tres días de evento. El programa previsto de conferencias incluye unas siete sesiones en paralelo, con segmentación según perfiles y temáticas. Habrá charlas eminentemente técnicas y muy avanzadas, así como también ponencias para principiantes, talleres introductorios, y charlas de alto contenido filosófico y político sobre temas relacionados a Software Libre, derechos de autor, libertad de acceso al conocimiento y privacidad en Internet.
Como cada año, estas jornadas contarán también con mesas para los sponsors y los diferentes grupos de las comunidades de software y cultura libre que, según se espera, llegarán a Buenos Aires procedentes de diferentes partes del país y la región.

Sobre el software libre

Los programas de computadora libres son aquellos cuya licencia otorga a usuarios y desarrolladores cuatro libertades definidas a mediados de los años 80 por la Fundación del Software Libre, a saber:

0. la libertad de usar el programa con cualquier propósito
1. la libertad de estudiar cómo funcionan y adaptarlo a las propias necesidades
2. la libertad de hacer y distribuir copias (aún cobrando por ellas)
3. la libertad de realizar mejoras y distribuir las versiones mejoradas.

El movimiento de Software Libre se ha convertido en los últimos años en un movimiento que trasciende el campo técnico para ser un actor importante en la defensa de la libertad de expresión, del libre intercambio de cultura y de la defensa del derecho a la intimidad en internet. De su filosofía han surgido movimientos vinculados al campo de la cultura y el conocimiento libre. Los grupos sociales vinculados al Software Libre se articulan a través de grupos de usuarios, asociaciones, organizaciones, universidades, y empresas que tendrán, todas ellas, un espacio importante en las Jornadas Regionales de Software Libre.

Sobre las Jornadas Regionales de Software Libre

Este evento itinerante se viene realizando en la región desde el año 2000 y ya ha pasado por las ciudades de Montevideo, Rosario, Córdoba y Mendoza. Este año, el Grupo de Usuarios de Software Libre de Capital Federal tiene como meta la organización de este evento que con el correr de los años se ha convertido en una de las citas imprescindibles de los usuarios y comunidades de Software Libre del Cono Sur.
Más información, inscripción y cronograma de charlas están disponibles en:
http://www.jornadasregionales.org


Nota de braianet: Problamente (yo) asista al evento =). Si a alguien le gustaria contactarse conmigo (aunque no creo XD) para charlas sobre software libre, musica, politica, moda ja o lo que venga puede hacerlo con gusto =) y arreglamos un punto de encuentro. Saludos!

7/31/2008


Operadores de busqueda para Google

Google tiene algunas formas de buscar páginas utilizando sus "palabras clave".


allinanchor: Seguido de varias palabras, te da resultados de páginas en la que están todas las palabras en el enlace.
allintext: Seguido de varias palabras, te da resultados de páginas en la que están todas las palabras en la página.
allintitle: Seguido de varias palabras, te da resultados de páginas en la que están todas las palabras en el título.
allinurl: Seguido de varias palabras, te da resultados de la búsqueda de todas esas palabras en la URL.
author: (Sólo funciona en Google Groups) Busca en los grupos artículos escritos por el nombre o la dirección de correo que le pasemos.
bphonebook Si le pasas un lugar o dirección, te da el número de teléfono.
cache: Seguido de una URL, te mostrará la página en caché.
datarange:
define: Seguido de una palabra, te da la definición.
ext: ver filetype.
filetype: Seguido de una extenisó determinada, busca documentos en ese tipo de fichero.
group: (Sólo funciona en Google Groups) Te restringe la búsqueda con el grupo que le pases.
groups: ver group.
id: ver info.
inanchor: Sólo la primera palabra de las que le siguen, ha de estar en el enlace.
info: Seguido de una URL, mostrará una página con enlaces relacionados, páginas que contiene esa URL...
insubject: (Sólo funciona en Google Groups) Busca en el asunto del mensaje.
intext: Sólo la primera palabra de las que le siguen, te da resultados de páginas en la que esté la palabra en la página.
intitle: Sólo la primera palabra de las que le siguen, ha de estar en el título.
inurl: Sólo la primera de las palabras que le siguen, ha de estar en la URL.
link: Seguido de una URL, te encuentra todas aquellas páginas que enlazan con la URL dada.
location: (Sólo funciona en Google News) Si le pasas un país a la búsqueda, te restringe los resultados a ese país.
msgid: (Sólo funciona en Google Groups) Busca el mensaje con ese ID.
phonebook: Te dará resultados de teléfonos con las palabras que le siguen.
related: Seguido de una URL, tiene el mismo efecto qe cuando se pulsa sobre el enlace de "Enlaces Relacionados".
rphonebook: Te dará resultados de teléfonos residenciales con las palabras que le siguen.
site: Seguido de un dominio, te da los resultados de la búsqueda sólo en ese dominio.
source: (Sólo funciona en Google News) Te limita las búsquedas al medio de comunicación que le indiques.
spell:
stocks: Seguido de un código de Bolsa, te dará los datos concretos.
store: (Sólo funciona en Froogle) Te limita las búsquedas a un determinado comercio.

Fuente: http://www.googlemania.com/palabras.php


Como funciona el DNS

El DNS se utiliza principalmente para la resolución de nombres, esto es, decidir qué dirección IP pertenece a determinado nombre completo de host.

Usos del DNS

El DNS se utiliza para distintos propósitos. Los más comunes son:

  • Resolución de nombres: Dado el nombre completo de un host (por ejemplo blog.smaldone.com.ar), obtener su dirección IP (en este caso, 208.97.175.41).
  • Resolución inversa de direcciones: Es el mecanismo inverso al anterior. Consiste en, dada una dirección IP, obtener el nombre asociado a la misma.
  • Resolución de servidores de correo: Dado un nombre de dominio (por ejemplo gmail.com) obtener el servidor a través del cual debe realizarse la entrega del correo electrónico (en este caso, gmail-smtp-in.l.google.com).

Por tratarse de un sistema muy flexible, es utilizado también para muchas otras funciones, tales como la obtención de claves públicas de cifrado asimétrico y la validación de envío de e-mails (a través de mecanismos como SPF). Terminología básica

Antes de proseguir, es necesario introducir algunos términos básicos para evitar confusiones y ambigüedades. Otros términos más complejos serán tratados más adelante.

Host Name
El nombre de un host es una sola "palabra" (formada por letras, números y guiones). Ejemplos de nombres de host son "www", "blog" y "obelix".
Fully Qualified Host Name (FQHN)
Es el "nombre completo" de un host. Está formado por el hostname, seguido de un punto y su correspondiente nombre de dominio. Por ejemplo, "blog.smaldone.com.ar"
Domain Name
El nombre de dominio es una sucesión de nombres concatenados por puntos. Algunos ejemplos son "smaldone.com.ar", "com.ar" y "ar".
Top Level Domains (TLD)
Los dominios de nivel superior son aquellos que no pertenecen a otro dominio. Ejemplos de este tipo son "com", "org", "ar" y "es".

Arquitectura del DNS

El sistema DNS funciona principalmente en base al protocolo UDP. Los requerimientos se realizan a través del puerto 53.

El sistema está estructurado en forma de "árbol". Cada nodo del árbol está compuesto por un grupo de servidores que se encargan de resolver un conjunto de dominios (zona de autoridad). Un servidor puede delegar en otro (u otros) la autoridad sobre alguna de sus sub-zonas (esto es, algún subdominio de la zona sobre la que él tiene autoridad). Un subdominio puede verse como una especialización de un dominio de nivel anterior. Por ejemplo, "smaldone.com.ar" es un subdominio de "com.ar", que a su vez lo es del TLD "ar".

El siguiente diagrama ilustra esto a través de un ejemplo:

Zonas y delegación
Zonas y delegación

Los servidores con autoridad sobre los TLD son los llamados "root servers" (o "servidores raíz") del sistema. Estos son fijos, ya que rara vez cambian, siendo actualmente 13.

Tomemos como ejemplo el dominio "com.ar". Este dominio pertenece al TLD "ar".

Los servidores con autoridad sobre el dominio "ar" son:

ns-ar.ripe.net
merapi.switch.ch
uucp-gw-1.pa.dec.com
uucp-gw-2.pa.dec.com
ns.uu.net
ns1.retina.ar
athea.ar
ctina.ar

En tanto que los servidores con autoridad sobre "com.ar" son:

merapi.switch.ch
relay1.mecon.gov.ar
ns.uu.net
ns1.retina.ar
athea.ar
ctina.ar

Podemos ver que ns.uu.net, ns1.retina.ar, athea.ar y ctina.ar tienen autoridad tanto sobre "com.ar" como sobre "ar".


El proceso de resolución de nombres

Cuando una aplicación (cliente) necesita resolver un FQHN envía un requerimiento al servidor de nombres configurado en el sistema (normalmente, el provisto por el ISP). A partir de entonces se desencadena el proceso de resolución del nombre:

  1. El servidor de nombres inicial consulta a uno de los servidores raíz (cuya dirección IP debe conocer previamente).
  2. Este devuelve el nombre del servidor a quien se le ha delegado la sub-zona.
  3. El servidor inicial interroga al nuevo servidor.
  4. El proceso se repite nuevamente a partir del punto 2 si es que se trata de una sub-zona delegada.
  5. Al obtener el nombre del servidor con autoridad sobre la zona en cuestión, el servidor inicial lo interroga.
  6. El servidor resuelve el nombre correspondiente, si este existe.
  7. El servidor inicial informa al cliente el nombre resuelto.

Ilustremos esto con un ejemplo concreto. Supongamos que el navegador necesita resolver el nombre "blog.smaldone.com.ar".

  1. El sistema tiene configurado el servidor de nombres 200.49.156.3 (perteneciente al proveedor argentino Fibertel). Por lo tanto envía a éste el requerimiento de resolver "blog.smaldone.com.ar".
  2. El servidor de 200.49.156.3 envía la consulta root server 198.41.0.4.
  3. 198.41.0.4 le informa que el servidor con autoridad sobre "ar" es athea.ar, cuya dirección IP es 200.16.98.2. (En realidad, informa la lista de todos los servidores con tal autoridad, pero para simplificar el ejemplo tomaremos solamente uno.)
  4. 200.49.156.3 envía nuevamente el requerimiento a athea.ar (el cual, recordemos, también tiene autoridad sobre "com.ar").
  5. athea.ar responde que la autoridad sobre smaldone.com.ar la tiene ns1.mydomain.com cuya dirección IP es 64.94.117.213.
  6. 200.49.156.3 envía ahora la consulta a ns1.mydomain.com.
  7. ns1.mydomain.com informa que la dirección IP de "blog.smaldone.com.ar" es 208.97.175.41.
  8. Finalmente, 200.49.156.3 devuelve este resultado a la aplicación que originó la consulta.

Mecanismos de caché

Cada vez que un servidor de nombres envía una respuesta, lo hace adjuntando el tiempo de validez de la misma (TTL o "tiempo de vida"). Esto posibilita que el receptor, antes la necesidad de volver a resolver la misma consulta, pueda utilizar la información previamente obtenida en vez de realizar un nuevo requerimiento.

Esta es la razón por la cual los cambios realizados en el DNS no se propagan instantáneamente a través del sistema. Dependiendo de la naturaleza de los mismos (y de la configuración de cada servidor), la propagación puede tardar desde algunos minutos hasta varios días. Correo electrónico y resolución de nombres

Normalmente los usuarios de correo electrónico redactan su mensajes usando un cliente de correo y enviándolo a través de un servidor SMTP provisto por su ISP o a través de un sistema de correo vía web (webmail). En cualquier caso, una vez que el mensaje es recibido por el servidor, debe ser entregado al destinatario. Aquí interviene el sistema DNS:

  1. El servidor del emisor solicita al DNS (de acuerdo al mecanismo analizado anteriormente), la entrada MX del dominio del receptor del mensaje. MX significa "mail exchanger", esto es, el nombre del servidor (o los servidores) encargado de recibir los mensajes destinados a determinado dominio.
  2. El DNS devuelve el FQHN y la dirección IP del mail exchanger.
  3. El servidor del emisor se conecta al puerto 25, mediante TCP, del servidor del destinatario y entrega el mensaje según el protocolo SMTP.
  4. El proceso podrá continuar si el servidor receptor del mensaje no es el último de la cadena. Existen servidores que actúan como "puertas de enlace" o "gateways" de correo electrónico, y que se encargan de recibir los mensajes de determinados dominios para luego enviarlos a otros servidores.

Tipos de registro en un servidor de nombres

Un servidor de nombres puede almacenar distinta información. Para ello, en cada zona de autoridad dispondrá de entradas de distinto tipo. Entre los más importantes se encuentran:

A (Address)
Este registro se utiliza para traducir nombres de hosts del dominio en cuestión a direcciones IP.
CNAME (Canonical Name)
El nombre canónico es un alias para un host determinado. (No define una dirección IP, sino un nuevo nombre.)
NS (Name Server)
Especifica el servidor (o servidores) de nombres para un dominio.
MX (Mail Exchange)
Define el servidor encargado de recibir el correo electrónico para el dominio.
PTR (Pointer)
Especifica un "registro inverso", a la inversa del registro A, permitiendo la traducción de direcciones IP a nombres.
TXT (Text)
Permite asociar información adicional a un dominio. Esto se utiliza para otros fines, como el almacenamiento de claves de cifrado, "DomainKeys" o "Sender Policy Framework".

Bind, "el" servidor de nombres

Prácticamente el único software utilizado en los servidores de nombres de Internet es bind ("Berkeley Internet Name Domain"), creado originalmente en la Universidad de California, y actualmente propiedad del Internet Systems Consortium.

Este programa, distribuido bajo una licencia libre, es utilizado en prácticamente todos los sistemas Unix del mundo. Esto ha sido considerado un problema de seguridad, al punto que se ha propuesto la migración de algunos root servers a otro sistema, ya que la aparición de algún problema de seguridad en bind podría implicar la caída de todo el DNS de Internet. Uso del DNS en una red local

Ya en redes de tamaño medio (quizás más de 5 equipos) es conveniente la utilización de DNS. Esto nada tiene que ver con el DNS de Internet (aunque el servidor local puede estar vinculado a este sistema).

Básicamente, es conveniente montar un servidor local de DNS por los siguientes motivos:

Agilizar el acceso a Internet
Al tener un servidor de nombres en nuestra propia red local (que acceda al DNS de nuestro proveedor o directamente a los root servers) se agiliza el mecanismo de resolución de nombres, manteniendo en caché los nombres recientemente usados en la red y disminuyendo el tráfico hacia/desde Internet.
Simplificar la administración de la red local
Al contar con un DNS propio (ya sea uno o varios servidores de nombres) es posible definir zonas locales (no válidas ni accesibles desde Internet) para asignar nombres a cada uno de los hosts de la LAN. De esta forma es posible, por ejemplo, referirnos a la impresora de red como "hplaser.mired.local" en vez de "192.168.0.2" y a nuestro servidor de correo interno como "smtp.mired.local" en vez de "192.168.0.3". (Pensemos, por ejemplo, que ocurriría con las configuraciones de las aplicaciones si un día decidimos cambiar el esquema de direcciones IP de nuestra red.)

Problemas del DNS

El principal problema que presenta el DNS es que, al estar basado en UDP (protocolo de transporte que no garantiza la recepción de la información enviada), tanto las consultas como las respuestas pueden "perderse" (por ejemplo, a causa de congestionamiento en algún enlace de la red). Es común apreciar cómo, en el caso de servidores y redes no muy bien configuradas, la resolución de nombres se resiente sensiblemente ante cualquier anomalía (saturación de tráfico o del servidor de nombres local).

Otro inconveniente, que ya hemos hecho notar, es la lentitud de la propagación de las modificaciones en el sistema, producto de la propia arquitectura del mismo.

Pero quizás el mayor problema no sea inherente al sistema mismo, sino a la pésima configuración de los servidores de muchos ISP. Fibertel, el proveedor que utilizo, es un notable ejemplo de esta falencia. Una buena solución a esta situación es ejecutar un servidor de nombres en alguna PC de la red local, de forma tal que se comunique directamente con los root servers (evitando de esta forma pasar a través de los servidores de nombres de nuestro proveedor). Herramientas para aprender más

En sistemas Unix el comando dig (ver "man dig") permite realizar requerimientos "a mano" para poder investigar un poco más sobre el funcionamiento del DNS y, cómo no, también para detectar y solucionar problemas en la red.

Los usuarios de sistemas Windows disponen del comando nslookup (aunque no tan potente como dig), para el mismo propósito. Lectura adicional

   * La página de Wikipedia sobre DNS contiene bastante información y buenos enlaces sobre este tema.
* El "DNS Cómo" explica la configuración de bind en GNU/Linux.
* El RFC 1591 explica detalladamente la estructura del DNS.
* Los RFC 1034 y 1035 (ambos en inglés), describen completamente el DNS.

Fuente

Este articulo ha sido tomado de la siguiente fuente. El mismo tiene la siguiente licencia Creative Commons. Algunas correcciones menores se han realizado para ajustarla a los fines de este sitio.

Muchas Gracias a Javier Smaldone por escribirlo de una manera tan simple y amena.

Fuente: wiki.xtech.com.ar

7/20/2008


GNU Mensajes - Envía SMS a todo el mundo!

GNU Mensajes es un software de código libre, con el cual se pueden enviar mensajes de texto(SMS) a diferentes compañías telefónicas.
Funciona perfectamente en cualquier versión de Windows (98 / ME / NT / 2000 / XP / 2003 / Vista).
También funciona en Linux y Solaris mediante WINE (actualmente 90% funcional)
Existe una versión Portable para pendrive(Solo funcional en Windows).

Algunas de las funciones de GNU Mensajes:
- Envío de Mensajes de Texto.
- Detección de Proveedor Telefónico (solo para Argentina)
- Historial de Mensajes enviados.
- Agenda de Contactos.
- Importar/Exportar agenda de contactos.
- Lenguaje Mate.
- Abreviaturas pre-configuradas.
- Importar/Exportar abreviaturas pre-configuradas.
- Saludos pre-configurados.
- Firmas pre-configuradas.
- Caras, caritas, dibujos ASCII.

Compañías telefónicas soportadas:

Argentina - Claro
Argentina - Conectel
Argentina - Movistar
Argentina - Nextel
Argentina - Personal
Argentina - Skytel
Canada - Fido
Canada - Rogers
Chile - Bellsouth
Chile - Entel PCs
Chile - Smartcom
Colombia - Bellsouth
Ecuador - Bellsouth
España - Vodafone
Estados Unidos - AT&T
Estados Unidos - Bellsouth
Estados Unidos - Cingular
Estados Unidos - Sprint
Estados Unidos - T-Mobile
Estados Unidos - U Text
Estados Unidos - Verizon Wireless
Honduras - Celtel
Italia - Vodafone
Inglaterra - Orange
Mexico - Iusacell
Mexico - Nextel
Paraguay - Tigo
Paraguay - Vox
Portugal - Telcel
Venezuela - Telcel Bellsouth
Venezuela - Movilnet
Venezuela – Movistar

IMÁGENES


GNU Mensajes en Windows XP



GNU Mensajes en Ubuntu 8.04 (utilizando Wine)




GNU Geo integrado!!! (Detecta a que empresa corresponde un número telefónico)







Links:
Página Oficial de GNU Mensajes
Foro Oficial del Proyecto GNU Mensajes
Tutorial para Instalar GNU Mensajes en Linux (mediante Wine)

Fuente: Linuxzarpele

7/17/2008


Uso de Gawk o awk

Copyright 2005-2008 Sergio González Durán
Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation.

autor: sergio.gonzalez.duran@gmail.com



awk o la versión GNU gawk es más que un simple comando de procesamiento de patrones, es todo un lenguaje de análisis semántico. Su dominio es como aprender todo un lenguaje de programación, pero en esta ocasión veremos unos ejemplos de su potencia en unos casos sencillos de análisis de patrones de cadenas, espero te sirvan de base para que puedas aprender aun más sobre esta interesante herramienta.


Ejemplo 1: Una lista personalizada de usuarios para HTML

Una línea típica de /etc/passwd es como la siguiente:

luis:x:504:504:Luis Hernandez:/home/luis:/bin/bash

Bien, supongamos que deseamos un listado de todos los usuarios normales (personas) del sistema, pero solo necesitamos su nombre de usuario, su nombre o real y su shell por defecto, es decir, si vemos la línea anterior, la separación entre campos es ":" asi que para nuestro reporte queremos el campo 1,5 y 7. Pero además, este reporte será parte de una tabla HTML, asi que sería bueno si puderian incluirse de una vez las etquietas " y " necesarias de una vez. Es decir, el resultado deseado es el siguiente:

luisLuis Hernandez/bin/bash

El primer paso es determinar los usuarios normales del sistema, podríamos usar un grep "home" /etc/passw | gawk ..., pero podría haber usuarios que tengan su HOME en otra ubicación, además se trata de usar solo awk, asi que lo primero que entenderemos es que los campos obtenidos del resultado de un comando awk, se numeran por $1, $2, etc. y el delimitador de campos se indica mediante la variable "FS".

#> gawk '{print $3}' FS=":" /etc/passwd
0
1
2
...
81
86
500
501
502
503
504

Aunque no muy útil todavía, podemos ver como seleccionamos el caracter separador FS=":", que viene de 'Field Separator', y tenemos indicada una acción '{print $3}', que significa imprime el campo 3. Aunque realmente no lo queremos imprimir, lo queremos evaluar, y si deseamos imprimir el $1, $5 y $7 que se mencionarion previamente, asi que agregamos una expresión de evaluación antes de la acción:

#> awk '$3 >= 500 {print $1 $5 $7 }' FS=":" /etc/passwd
sergonSergio Gonzalez/bin/bash
valeriaValeria Perez/bin/bash
fernandaFernanda Lozano/bin/sh
alejandraAlejandra Lopez/bin/nologin
luisLuis Hernandez/bin/bash

Mucho mejor, agregamos '$3 >= 500' previo a la acción (que es imprimir lo que deseamos), ya que como se sabe en la mayoría de distros modernas, los usuarios normales del sistema se numeran del 500 en adelante (más sobre administración de usuarios). Nótese que los campos en el resultado salen pegados, es necesario agregar entre comillas " ", ya sea un espacio o lo que se desee, en este caso etiquetas de tablas de HTML y además ordenaremos "sort" los registros obtenidos:

#> awk  '$3 >= 500 {print ""$1""$5""$7"" | "sort" }' FS=":" /etc/passwd
alejandraAlejandra Lopez/bin/nologin
fernandaFernanda Lozano/bin/sh
luisLuis Hernandez/bin/bash
sergonSergio Gonzalez/bin/bash
valeriaValeria Perez/bin/bash

Ejemplo 2: Una lista personalizado de usuarios para reporte

Ahora veamos como crear una lista similar a la anterior pero especificando un par de líneas de títulos al inicio:

#> awk 'BEGIN { print "Usuario UID Shell\n------- --- -----" } $3 >= 500 { print $1, $3, $7 | "sort -r"}' FS=":" /etc/passwd
Usuario UID Shell
------- --- -----
valeria 501 /bin/bash
sergon 500 /bin/bash
luis 504 /bin/bash
fernanda 502 /bin/sh
alejandra 503 /bin/nologin

Iniciamos con la sentencia BEGIN (que tiene varios usos, checa el manual) que en este caso nos permite indicar lo que se imprimirá una sola vez, en este caso los títulos, un retorno '\n' y guiones para separar los títulos, después viene de nuevo la evaluación ya conocida y ahora al indicar la impresión de los campos 'print $1, $3, $7', los separé por comas, que automáticamente añade un espacio, y solo para aumentar el ejemplo, el ordenamiento es ahora al revés 'sort -r'.

Pero podemos ver en la salida, que los registros no se acomodan bien con respecto a los títulos, con dos o tres campos tal vez resulte fácil añadir espacios o tabuladores '\t' para hacer el acomodo, pero en varios campos será realmente frustrante lograrlo. Mejor usamos 'printf':

#> awk 'BEGIN { print "Usuario      UID Shell\n------------ ---- ----------" } $3 >= 500 \
{ printf "%12s %4d %10s\n", $1, $3, $7 | "sort -r"}' FS=":" /etc/passwd
Usuario UID Shell
------------ ---- ----------
valeria 501 /bin/bash
sergon 500 /bin/bash
luis 504 /bin/bash
fernanda 502 /bin/sh
alejandra 503 /bin/nologin

Sigo usando 'print' para los títulos, pero ahora uso 'printf' que me permite formatear la salida, la sintaxis es 'printf "formato", $1, $2'. Cada formato comienza con '%' después el número de posiciones seguido del tipo de campo 's' para string, 'd' para enteros, etc. '%12s' 12 posiciones de tipo cadena. (checar el manual para el resto de formatos de printf), termino el formato con un salto de línea '\n'. Pero como se puede apreciar por defecto las cadenas se justifican a la derecha y en este caso las deseamos a la izquierda, esto se arregla agregando un '-' guión en el indicador de formato de la siguiente manera '%-12s', el resultado correcto sería el siguiente:

# awk 'BEGIN { print "Usuario      UID Shell\n------------ ---- ----------" } $3 >= 500 \
{ printf "%-12s %4d %-10s\n", $1, $3, $7 | "sort -r"}' FS=":" /etc/passwd
Usuario UID Shell
------------ ---- ----------
valeria 501 /bin/bash
sergon 500 /bin/bash
luis 504 /bin/bash
fernanda 502 /bin/sh
alejandra 503 /bin/nologin

Ejemplo 3: Extrayendo campos sin posición fija

Hay ocasiones en que no se tiene exactamente la posición de los campos a extraer, asi que usaremos otra técnica basada en el número total de campos encontrados. En este caso, necesitamos la variable "NF" (Number of Fields) que representa el total de campos encontrados. Y usaremos como caracter separador FS el espacio, es decir FS=" ", pero dado que el espacio es el separador por defecto no es necesario indicarlo.

Como ejemplo, veamos la salida del comando uptime:

$> uptime
19:32:15 up 2:28, 1 user, load average: 1.75, 1.54, 1.54

Y deseamos crear un pequeño script que de como resultado el siguiente:

$> ./carga
carga actual del sistema: 1min=1.75, 5min=1.54, 15min=1.54

Como se puede observar, se necesitan los tres últimos campos, aparentemente los campos $8, $9 y $10. Pero el problema esta en que conforme pasa el tiempo, el comando uptime mostrará de hecho más campos, ya que el que en este momento es el $3 '2:28' después de unos días puede quedar asi '3 days 3:50', asi que al usar NF nos dará el total de campos, veamos:

$> uptime | gawk '{print NF}'
gt; uptime | gawk '{print NF}'
10

(Podemos usar NF no como varibale del total de campos sino como variable de contenido con $NF)

$> uptime | gawk '{print $NF}'
1.33

Entendiendo lo anterior, es fácil de deducir entonces que los campos requeridos son entonces NF-2, NF-1, NF es decir, los tres últimos, y no importará cuantos campos haya en el resultado.

$> uptime | gawk '{print $(NF - 2), $(NF - 1), $NF}'
0.72, 0.54, 0.47

El script quedaría entonces así:

#!/bin/bash
echo "Carga actual del sistema: "
uptime | gawk '{print "1min:"$(NF - 2), "5min:"$(NF - 1), "15min:"$NF}'


Fuente: Linuxtotal.com.mx