Optimizando… el trabajo con la consola

Y no es la consola de jugar. Me refiero a la consola de Linux. Hace tiempo que migré a Ubuntu. Es de las distribuciones mas sencillas de usar e instalar y permite ir aprendiendo más a fondo cómo trabajar con estos sistemas. Y aunque hasta ahora no habia hecho ninguna cosa especialmente interesante, mas alla de conseguir que el ordenador funcionase bastante mejor que con Windows y tener todos los programas que necesitase a mano, esto se debia a que realmente nunca necesité nada del estilo. Cuando es un ordenador de sobremesa con el que practicamente ni se programa ni se trabaja (más alla de programitas en Arduino) y solo se navega por internet o se usa para multimedia, hay poca necesidad real de trastear. Y eso hace que pierda un poco el atractivo.

Pero ahora sí, ahora estoy programando en C++ sobre entornos Linux y, aunque estoy usando Eclipse generalmente, comienzo a trastear con la consola, con el Vim y, en general, con trabajar usando la linea de comandos. Es ahora cuando descubro en realidad lo que siempre te cuentan: que trabajando con linea de comandos uno tiene una curva de aprendizaje muy alta, pero superado eso, se compensa con la velocidad que se gana.

Por el momento, los coqueteos con Vim (editor de la vieja escuela, aunque eso no signifique que sea viejo) son a última hora, cuando queda poco para “cerrar” el chiringo, pero esas pruebas casi fuera de horario y ciertos aspectos del trabajo hacen que haya visto clara la necesidad de crear algunos atajos y algun script para optimizar el tiempo.

Comencemos por lo mas sencillo: alias.

La consola es, para los despistados, una ventanita que parece como si volviesemos al MS-DOS de hace tantos años. Fondo negro y letras blancas (al menos hasta que uno empieza a toquetear) y nada mas que un puntero que parpadea esperando ordenes. Es duro, árido y poco amigable. Pero merece la pena.

En el trabajo, cada vez que realizo una modificacion en el codigo, compilo el proyecto para comprobar si todo sigue funcionando y si no he cometido errores graves que impidan que se pueda generar un programa ejecutable. Como son compilaciones incrementales, esto no lleva mucho tiempo, ya que estoy actualmente trabajando sobre librerias de un solo archivo (el .h) que proporcionan funcionalidades extra al código. Sin embargo, para estar seguro de que lo que he escrito hace lo que creo que hace, tengo que ejecutar el programa compilado.

Esto lo hago a través de consola. Abro una ventana, voy entrando a directorios cada vez mas profundo hasta que encuentro el directorio de la compilacion que quiero y puedo ejecutar el programa para ver si funciona como debe. Lo malo es que esto implica escribir mucho para llegar a ese directorio. Y si luego tengo que comprobar algun otro archivo, también con la consola, y cambiar una y otra vez de archivos, es un horror. Asi que he usado algo muy tonto pero muy útil para poder ir fácilmente a los directorios que me interesan. Los alias.

Básicamente consiste en ponerle un nombre a una orden de la consola, de forma que tecleando una sola palabra, podemos ejecutar una orden complicada (siempre la misma).

Los alias que he definido son simplemente para moverme de forma fácil entre los directorios que me interesan, pero se pueden hacer muchas combinaciones, dependiendo de lo que uno desee. Son los siguientes

opice='cd ~/Programacion/workspace/opice'
coding='cd ~/Programacion/workspace/opice/src'
build_opice='cd ~/Programacion/workspace/opice/build'
build_parallel='cd ~/Programacion/workspace/opice/build-parallel'

Todos son variaciones de lo mismo: partiendo de mi propio directorio (la ~ es lo que representa en la consola, el directorio de usuario) entrar a diferentes subdirectorios del proyecto. De esta forma, si tengo que chequear la salida por archivo de un logger que estuviese desarrollando (que es lo que estaba haciendo hasta hace poco), escribo build_parallel o build_opice dependiendo si quiero comprobar la versión simple o la versión construida para procesado en paralelo. A mí, algo tan simple como eso, me ha ahorrado un montón de tecleo. Para hacerlo es sencillo, solo hay que escribir:

victor@ubuntu:~$ alias coding='cd ~/Programacion/workspace/opice/src'

y ya tendremos creado el alias coding que nos llevará al directorio src sólo con teclearlo. Con esto ya nos ahorramos bastante tiempo, ya que si tenemos necesidad de cambiar frecuentemente de directorios, puede llegar a ser un engorro.

Pero esto no es mucho, porque en ocasiones tengo que ir al directorio al que nos lleva coding y abrir un archivo del mismo para editarlo, luego otro de otro directorio dentro de src distinto al anterior. Esto significaría bastante trabajo repetitivo. Así que lo interesante es poder crear algo más complejo que nos permita ejecutar órdenes más complejas y enlazarlas unas con otras. Eso significa que hay que hacer scripts.

Scripts: la madre del cordero

Resulta que la consola de Linux es, con diferencia, mucho más potente que la de Windows (sí, tiene una y se llama cmd). Esto puede ser debido a que históricamente este sistema ha sido un sistema usado principalmente por geeks y programadores, amantes de los ordenadores y la tecnología. Esto propició que se mantuviese un sistema basado en línea de comandos, al contrario que Windows o Mac, que tendían a entornos visuales donde todo se hace con el ratón y de forma gráfica (aunque hay que decir que los MacOS siguen teniendo una consola bien potente, más que nada porque la heredaron de Linux ya que está basado en este sistema).

Por tanto, mientras Windows perdía la potencia de la línea de comandos (heredada del MS-DOS, del que no soy experto pero recuerdo tunear mi sistema con apenas 13 añitos), Linux la mantenía y actualizaba. Así que es, probablemente, la mejor forma de gestionar el sistema. Es cierto que ahora hay distribuciones como Ubuntu o Linux Mint que permiten hacer prácticamente todo lo básico con el entorno gráfico. Pero la verdad es que la consola es tremendamente rápida y eficaz. Además, porqué no decirlo, mola bastante andar trasteando con ella aunque sea para borrar un triste archivo. Es lo más cerca que algunos estaremos de ser hackers, ¡qué le vamos a hacer!

Resumiendo, la consola tiene muchísimos comandos, opciones y posibilidades de manera que, combinando todas esas funcionalidades de forma diferente uno puede hacer prácticamente lo que se le ocurra y necesite. Lo malo es que resulta duro aprender a usarla. Lo bueno es que merece la pena. Y aunque el script que traigo aquí es muy simplón, algo tan tonto como esto me ahorra una cantidad enorme de tiempo a lo largo de una semana.

#Script sencillisimo para entrar directamente al directorio de trabajo
#y poder comprobar el resultado de la ultima compilacion

case $1 in
#Working as a Man: para codificar con vim sobre el codigo fuente. Necesita un segundo parametro que es el nombre de archivo a editar
wm)
    cd Programacion/workspace/opice/src
    vim $2
;;
#Comprobar Compilacion: entrar a build-parallel y ejecutar opice
cc)
    cd Programacion/workspace/opice/build-parallel
    mpiexec -np 4 ./opice
;;
#por defecto, al directorio para checkear la compilacion reciente
*)
    echo "Entrando al directorio de trabajo sin ejecutar"
    cd ~/Programacion/workspace/opice/build-parallel
    ls -l
;;
esac

Como se puede comprobar, no tiene mucho de especial: comandos sencillitos, uso de parámetros muy simples (los $1 y $2) y poco más. Pero resulta que algo tan tonto como esto me ahorra una cantidad de tiempo sorprendente. Por supuesto, esto es sólo el primer paso.

Enlaces:

Dejo un tutorial que usé para comenzar con esto y que creo explica muy bien todo lo que se debe saber. Son tres partes y, sorprendentemente, está alojado en una página (probablemente abandonada) del Ministerio de Educación. A ver si no los borran. I, II y III

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s