Thursday, June 24, 2010

rm -rf * : Too many arguments

El otro dia que estaba queriendo borrar unos archivos que ya no necesitaba, pero el problema es que eran demasiados para el limite de argumentos que soporta el kernel de linux, y este error ocurre cada vez que el usuario pasa mas argumentos de los que el sistema soporta, y esto aplica a todos los comandos como: ls, cp, rm, etc.

Asi que habia que buscar una alternativa (workaround) para el comando rm -rf *, entonces es cuando otros comandos de Bourne Shell pueden ser utiles para completar esta tarea, asi que aqui les muestro dos alternativas:

for i in *; do rm -rf $i; done

De esta forma el comando for toma un archivo a la vez y lo coloca en la variable $i; dentro del loop se ejecuta el comando rm para finalmente borrar el archivo; resultado, los archivos son eliminados, que es lo que se deseaba desde el principio.

Otra alternativa para realizar esta tarea es mediante el comando find:

find . -type f -name '*' -exec rm -rf {}\;

El comando find pasa cada archivo que coincide con la busqueda y ejecuta el comando rm -rf en cada uno de ellos, completando al final la tarea deseada.

Hay otras alternativas, pero las dejo para la investigacion, de hecho una de ellas es el modificar, en el kernel de Linux, la variable que permiten incrementar el limite de parametros que se pueden pasar en una linea de comandos, pero ojo, esto require del conocimiento de los cambios que se haran y de como compilar un nuevo kernel de Linux; una pista, busquen en /include/linux/binfmts.h.

Saludos y hasta la proxima.

___ ___ _ ___ _
| __|_ ___| \(_)__ _ __| _ ) |___ __ _
| _/ _/ _ \ |) | / _` |_ / _ \ / _ \/ _` |
|_|\__\___/___/|_\__,_/__|___/_\___/\__, |
|___/

Tuesday, June 8, 2010

What is Gopher?

gopher n. 1. Any of various short tailed, burrowing mammals of the family Geomyidae, of North America. 2. (Amer. colloq.) Native or inhabitant of Minnesota: the Gopher State. 3. (Amer. colloq.) One who runs errands, does odd-jobs, fetches or delivers documents for office staff. 4. (computer tech.) Software following a simple protocol for tunneling through a TCP/IP internet.

If we use that last definition and with one click of your browser (I hope you are using Firefox) you've just taken several years back in Internet time. Close your eyes and grip your terminal. Imagine there's no Websites (it's easy if you try). Imagine that there's a Commodore 64 on your desk, or maybe a 386.

Now open them again.

You're in the year 1991, when University of Minnesota computer scientists, fed up with the limitations of FTP for downloading files and the overhead of having to log into computers for everything, decided to come up with a friendlier method of accessing data over the then largely vacant and much smaller Internet. The result was Gopher, a simple and easy to understand menu system that allowed once hideously complicated systems and services to be strung together for straightforward usage. And Gopher Was Good.

In fact, Gopher was so good that for several years, Gopher sites sprang up all over. You could get weather reports on Gopher, news, mailing lists, even software.

Then Mosaic came out barely a year or so later and plunged the world into darkness and all seemed lost under the choking strands of the World Wide Web. And Gopherspace lay all but forgotten.

But Gopher's still out there. And what's more, you'll find it surprisingly useful, even years after the Web became a household word. Why?

  • It's easy to set up.
  • It's easy to write content for and facilitates organization.
  • It doesn't need much system power to run -- either from the server or from your computer. It can run on systems with little CPU power or memory.
  • It supports many things that the Web does, even if it looks less attractive. You can still view images, search and download programs, and ...
  • ... since Gopher has less data to transfer, it's frequently faster.

Save the Gopher! Explore Gopherspace with Veronica-2 and find out about the hidden world the Gophers once dug. And think how different the world would be if that darn Mosaic had never been written ... :-)

So how do you get to gopher, well click in any of the following urls, and no it's not http:// it's gopher://
Do you search the gopher?
 ___       ___  _         ___ _    
| __|_ ___| \(_)__ _ __| _ ) |___ __ _
| _/ _/ _ \ |) | / _` |_ / _ \ / _ \/ _` |
|_|\__\___/___/|_\__,_/__|___/_\___/\__, |
|___/

Friday, June 4, 2010

La aspiradora del sistema solar.

Si Jupiter se le conoce tambien como la aspiradora del sistema solar, por que? Dado su gran tamanio y campo magnetico que se extiende a millones de kilometros de distancia, es capaz de atrapar objetos muy distantes en su orbita, tal fue el caso del cometa Shoemaker-Levi 9 que en el 94 se desintegro al ingresar a la atmosfera de Jupiter.

El anio pasado tambien en julio, Jupiter aparecio de repente con una mancha gigantesca, producto del encuentro del planeta con algun cometa o meteorito (foto inferior).
Pero nuevamente ayer, como se muestra en la foto de arriba, se puede observar un destello producto del ingreso de otro objeto en la atmosfera de Jupiter.

Muchos astronomos piensan que esa cualidad de Jupiter de ser capaz de atraer mucho del material errante en el sistema solar ha permitido la existencia de vida aqui en la tierra, pues de lo contrario, es posible que nuestro planeta fuese bombardeado por un cometa o meteorito cada 50 anios aproximadamente.

Wednesday, May 19, 2010

Bash en la vida cotidiana.

Para los que todos los dias tenemos que trabajar con bash en nuestros sistemas, ya sea como administradores de sistemas, desarrolladores, etc. sabemos lo importante que es para nosotros la linea de comandos, y que mejor si podemos aprender algunos trucos para agilizar ese trabajo, asi aqui les presento un par de ellos:

ctrl+r:
Bash registra cada uno de los comandos que ejecutamos en una bitacora, y esta nos permite regresar a ellos cuando los necesitamos u olvidamos los parametros de un determinado comando que tanto trabajo nos costo construir; una de las formas de hacer esto es mediante las teclas de flecha hacia arriba y abajo, lo cual nos lleva a los comandos ingresados con anterioridad y navegar a travez de ellos. Pero si necesitamos encontrar el comando con mayor rapidez, podemos hacer uso de la busqueda rapida, esta busca entre los comandos ingresados aquellos que inician con las letras que ingresamos luego de la combinacion de teclas ctrl+r, Bash comenzara una busqueda y nos mostrara aquellos comandos que coinciden con las letras que estamos ingresando; si el comando mostrado no es el que estamos buscado, podemos seguir presionando ctrl+r para ir al siguiente resultado de la busqueda y asi sucesivamente; una vez encontrado el comando deseado, damos enter para ejecutarlo inmediatamente o las teclas de flechas izquierda o derecha para editarlo, en caso que deseamos editar la linea antes de ejecutarla.

!! y !#
Este es otro par de combinacion de simbolos que permiten agilizar nuestras actividades en Bash, el primero !! nos permite ejecutar exactamente el comando ingresado anteriormente. En cuanto al segundo, este nos permite ejecutar el comando #, donde el numero especificado es el numero asignado por la secuencia del comando history.

Por ejemplo, si al ejecutar el comando history, vemos el siguiente resultado: (salida ha sido truncada)
44 history
45 cd Backup/
46 history
47 yum
48 #?

Al ejecutar !45 equivale a ejecutar nuevamente el comando: cd Backup/

Pregunta: que almacena Bash en la variable denominada $?

Si conoces otros trucos de la linea de comandos, compartelos.

Wednesday, May 12, 2010

Ayer Pascal, C, Python, ahora Ruby, manana Go?

Lejos ha quedado la epoca en que daba clases de Teoria de Lenguajes de Programacion alla por el 96-99 para la carrera de computacion en la UCA, donde hablabamos de los automatas finitos, analizadores lexicos/sintacticos, expresiones regulares, etc, atras ha quedado la epoca en que usabamos el compilador Turbo C/Pascal de Borland, o Modula-2 para quienes programaron en ese lenguaje, ahora los lenguajes son orientados a objetos, paradigma que comenzaba a despegar por aquellos anios en El Salvador, pocos eran los que intentaban descifrar de que se trataba, pero que ahora es un elemento indispensable en los nuevos y modernos lenguajes de programacion, asi como una herramienta indispensable para los programadores actualmente. Lisp se podria decir que era de los lenguajes mas avanzados a su epoca, utilizado primordialmente en sistemas de Inteligencia Artificial (al igual que Prolog), tenia problemas de eficiencia (no se si culpar a la recursividad por tal razon) asi como no era facil tratar de resolver cualquier problema de la vida real mediante formulas matematicas y recursividad; Pascal y Basic digamos que eran los lenguajes que nos motivaron a estudiar computacion, ensamblador fue el que nos hizo lograr entender como los circuitos digitales dentro de la computadora colaboran entre ellos en una sincronia de reloj, para calcular la serie de Fibonacci, buscar numeros primos o simplemente resolver una ecuacion de segundo grado. Finalmente C, era como la llave a todas nuestras respuestas, el problema era como usar la llave, siendo un lenguaje de alto-medio nivel, dispone de gran habilidad para desarrollar programas en casi cualquier rama, por eso se le denomina lenguaje de proposito general, como tambien estar lo suficientemente cerca del hardware para ser eficiente y descubrir los secretos del BIOS y cambiar el vector de interrupciones de la computadora (para los que haciamos programas residentes en memoria o TSR(Terminate and Stay Resident ).

Se acuerdan de los lenguajes de cuarta generacion, pues si no se acuerdan de ellos es por que nunca los conocieron o trabajaron en ellos, originalmente desarrollados con el fin de resolver un grupo en particular de problemas, (principalmente en el ambito de los negocios y reemplazar al omnipresente COBOL), tenemos a PowerBuilder, Natural, entre otros, que durante algun tiempo se creia eran la respuesta a los sistemas empresariales, cuando aparecio el Internet; HTML (aun que no un lenguaje de programacion), pero que gano popularidad con el advenimiento del Internet y las paginas web y el Dot Com; Java, JavaScript, PHP, Perl son otros de los grandes protagonistas de las nuevas generaciones de aplicaciones que poblarian la red en los anios venideros uniendo fuerzas con bases de datos como MySQL/PostgreSQL.

Actualmente, la lista de lenguajes de programacion es enorme y llena de todo tipo de lenguajes destinados a una gran gama de posibles probemas de la vida cotidiana o no tan cotidiana, en los ultimos 3 anios Python se ha ajustado muy bien en cubrir las necesidades que require mi trabajo de control de calidad de software, automatizando pruebas de software, pero actualmente la empresa donde trabajo, el lenguaje que mas utilizan es Ruby, de hecho una de las librerias que utlizamos para hacer pruebas esta en ese lenguaje, asi que aqui me tienen leyendo/aprendiendo un poco de Ruby en un rato que tengo libre en el trabajo, eso significa otro lenguaje a la bolsa, no esta nada mal, pero luego de Ruby que? Erlang? Go? Nimrod? Ioke?

Y ustedes en que lenguaje programan/crean scripts?

Saludos.

El archivo /etc/passwd

Los que trabajamos en sistemas Unix/Linux sabemos (espero) que este archivo contiene informacion sobre cada usuario que puede ingresar al sistema, el archivo tambien contiene, entre otros datos, la informacion necesaria para verificar la autenticidad del usuario, mediante la contrasenia, pero en algunos otros sistemas, esta informacion es transferida hacia otro archivo llamado /etc/shadow.

Este archivo puede ser leido por todos los usuarios, pero solamente el administrador o aquellos usuarios con permiso pueden editarlo.

El otro dia un amigo en el canal #linux.org.sv en IRC, preguntaba como podia hacer que un usuario al ingresar al sistema mediante ssh, solo pudiese tener acceso a una aplicacion en particular y si deseaba salirse de ella, al hacerlo, el sistema lo desconectaria inmediatamente; bueno la solucion estaba en el archivo /etc/passwd, si observamos bien en el archivo, el ultimo campo de cada linea corresponde al shell que atiende al usuario una vez este ingresa al sistema, pero que tal si en lugar de colocar el shell que atendera al usuario, colocamos el nombre y ubicacion de otro programa?, bueno este atendera al usuario mientras utilize el programa, pero una vez este termine de usarlo, el sistema lo desconecta automaticamente.

Veamos un ejemplo: Ojo, no intenten esto con su usuario, mi recomendacion es que creen un usuario de pruebas para hacerlo, pueden usar el siguiente comando en Linux, en el siguiente ejemplo usaremos el programa top, asi este usuario solo podra ver el resultado del comando top una vez ingrese al sistema:

$ sudo adduser -s /usr/bin/top testuser

Ahora asignemosle un password al usuario mediante:

$ sudo passwd testuser

Una vez el password ha sido asignado, observen la nueva linea en el archivo /etc/passwd y observen como la ultima columna en lugar de apuntar a un shell, apunta a /usr/bin/top; intentemos ingresar al sistema mediante este usuario, podemos usar el comando su:

$ su testuser

Una vez damos la contrasenia, en lugar de recibir un prompt ($) de un nuevo shell, vemos como el programa top inicia automaticamente, y cuando lo cancelamos mediante
la tecla "q", el usuario es automaticamente desconectado; para confirmarlo usamos el comando "whoami", debemos estar de regreso en nuestro usuario original y no el usuario de pruebas. Pueden confirmar esto tambien haciendo un 'tail -f' sobre el archivo /var/log/auth.log donde veran que el usuario sale al instante de cerrar top.

Que pasa si en lugar de /usr/bin/top cambian por /sbin/nologin?

Saludos.

Friday, April 16, 2010

Que es Scratch?

Scratch es un lenguaje de programacion que permite de forma facil crear historias interactivas, animaciones, juegos, musica, arte, etc. y posteriormente compartir estas por medio del Internet. A medida que se crean los proyectos, se aprenden conceptos importantes sobre matematica y computacion, al mismo tiempo que se desarrolla el pensamiento creativo, razonamiento sistematico y el trabajo en equipo.



Sitio oficial: http://scratch.mit.edu/

Instrucciones para instalarlo en Linux: http://info.scratch.mit.edu/Linux_Installer