Páginas

martes, 8 de enero de 2013

Conociendo el Terminal #1: Introducción



Pues aquí tenemos una de las sorpresas que prometí el sábado pasado: una serie dedicada a nuestro humilde compañero en Linux, el terminal.
Debo advertir a los lectores que esta serie está orientada a neófitos en esto de Linux, labor que ya sabéis ocupa la mayor parte de los contenidos que están bajo mi responsabilidad en este blog. Encontraremos en ella, por lo tanto, un guía de iniciación al uso de este intérprete de comandos que es al mismo tiempo uno de los programas más potentes y útiles de todo el sistema, y una de las principales causas de repulsa entre los desconocedores de su funcionamiento.
Conforme avanza el mundo de la tecnología y de la informática, y se desarrollan entornos de escritorio cada vez más potentes y coloristas, la sensación de que el terminal es un vestigio del pasado se hace cada vez más patente. En ese sentido, quizá los más veteranos nos sintamos "sentimentalmente unidos" a esta sencilla línea de comandos; quien más, quien menos, los aficionados a la informática que superen la treintena se habrán encontrado en alguna ocasión con esta pantalla negra y su cursor parpadeante, reclamando atención, orgullosamente dispuesto a desafiar nuestro conocimiento de las palabras mágicas que lo pueden poner a trabajar. Y en el caso opuesto, los más jóvenes, que sólo conocerán de oídas términos como "MS-DOS" o "cmd", fruncirán el ceño ante las antediluvianas líneas bidimensionales y en 16 colores de la consola.

El terminal, ese incomprendido

Por eso creo que es muy recomendable que aquellos de vosotros que conocéis a fondo el funcionamiento y la filosofía que se esconde detrás de los sistemas Linux enfoquemos el asunto del Bash de la manera más natural y sencilla posible. Lejos de ocultar su presencia mediante interfaces gráficas pesadas y redundantes, desde un principio conviene familiarizar a los más nuevos con este programa, y conseguir convencerles de que, con un par de comandos, se pueden hacer las mismas cosas y de manera más cómoda. Naturalmente, esto no es así en el cien por cien de las ocasiones, así que también es importante distinguir aquellos usos para los que el uso del terminal es más eficiente que el de sus homólogas aplicaciones gráficas, y al revés.
Este primer capítulo supone la introducción al conocimiento de las funciones del terminal, y como con el resto de vídeo-manuales, lo dedico enteramente a su interfaz, amén de algunos datos históricos para los más curiosos. Evidentemente, explicar la interfaz del terminal no resulta demasiado complicado, pero todo tiene su intríngulis. Como se puede apreciar en el vídeo, en el terminal todo tiene su porqué y su explicación, no hay ningún símbolo o carácter que no tenga significado.
Este capítulo además sugiere (sin profundizar en ello, que es un lío) el verdadero follón que hay en torno al nombre que le damos a este programa. ¿Consola, terminal, bash, línea de comandos? En realidad todos ellos se utilizan en la actualidad casi como si fueran sinónimos, pero la cosa puede complicarse un poco si somos exigentes con la nomenclatura de las cosas. De los términos citados anteriormente, los que más me gustan son los dos primeros. Tanto "terminal" como "consola" aluden a la más primitiva forma de interacción con una computadora. Como su propio nombre indica, el terminal en origen era el punto en el que el usuario de una red de computadoras (importante lo de la red) podía gestionar la comunicación con otros puntos de esa red. Básicamente se trataba de una pantalla conectada a un ordenador, y un teclado mediante el que introducir datos. Estos elementos hardware, por su carácter de punto de comunicación entre la máquina y el usuario, se denominaron terminales o consolas. Nos encontramos en los primerísimos inicios de la informática actual, estamos hablando de aquellas computadoras del tamaño de una habitación y sus inmediatos sucesores. La cosa se complica históricamente con la aparición de los ordenadores de escritorio; durante los primeros tiempos los usuarios de estas máquinas tenían que convivir con dos máquinas simultáneamente: además del ordenador de escritorio propiamente dicho, un terminal con el que establecer contacto con la red de ordenadores.

Un terminal de texto de principios de los 80. Fuente: Wikipedia

La evidente falta de eficiencia de estos sistemas hizo necesaria la aparición de los emuladores de terminal, que permitían realizar las mismas funciones de comunicación que un terminal físico, pero desde un programa que se podía ejecutar en el ordenador de escritorio; más aún: además de poder funcionar como el antiguo terminal, tratándose de un emulador, se podía hacer funcionar como consola "virtual" para cualquier ordenador de la red que estuviese conectado, mediante normas de autenticación y de obtención de privilegios de administrador de sistema. Así que si hablamos propiamente, lo que tenemos ahora mismo en Linux son emuladores de terminal y no terminales verdaderos. Aunque esta explicación pueda ser innecesaria, creo que sirve para comprender la extraña línea de comandos que nos saluda cada vez que abrimos el terminal: como explico en el vídeo, lo que tenemos es una "frase" en la que básicamente se describe la posición del emulador con respecto a una red: el usuario propietario de ese terminal, la red a la que está conectada la máquina, y la ubicación del cursor en el árbol de directorios. Una frase que, si sabemos interpretarla, funciona como un "mapa" con el que entender a qué partes de nuestro sistema (o de la red en el que esté el sistema) van a afectar las acciones que emprendamos con nuestros comandos.
Con el paso del tiempo, los viejos terminales que eran capaces de mostrar sólo texto dejaron su sitio a los actuales ordenadores personales, que no son más que un terminal más moderno, y capaz de mostrar imágenes y texto. En los sistemas Unix y Linux, bajo el protocolo gráfico X Window System, también conocido como X11. la pervivencia de los emuladores de terminal basados en texto en los sistemas Linux (y en los demás) se debe principalmente a su eficiencia, comodidad de uso (si conocemos los comandos) y fiabilidad. Donde falla un sistema de ventanas siempre funcionará una línea de comandos, y mediante las palabras mágicas adecuadas podemos ahorrarnos incómodos paseos por menús, listados de aplicaciones, clics y más clics de ratón...
Las ventajas del uso del terminal aumentan conforme se compliquen las actividades que queramos realizar, sobre todo aquellas en las que entren en juego diferentes tipos de permisos para interactuar con el sistema. Aquí es donde, en los sistemas Linux, entran en juego los términos "root" y "sudo", con los que finaliza el capítulo.
No tengo demasiado definido el "índice" de contenidos de esta serie (como casi siempre, vaya), pero probablemente contenga los siguientes elementos principales:
  • Atajos de teclado del terminal
  • El terminal como gestor de archivos
  • El terminal como interfaz de ejecución de programas
  • El terminal como administrador del sistema
  • El terminal como herramienta de programación
  • Pijadas sobre el terminal: tuneo, colorines y fuegos de artificio variados 
Insisto en que todavía no tengo claro ni los contenidos ni mucho menos el orden en que aparecerán, pero creo que estos elementos que he citado son de obligado repaso; conforme avance la serie seguramente haré adaptaciones, cambios, adiciones y ampliaciones a estos asuntos. Por lo pronto, el siguiente capítulo seguro que tratará sobre los atajos de teclado (más que nada, porque ya lo he grabado). Eso sí, dudo mucho que me meta en asuntos de nivel demasiado complejo, más que nada porque creo que no son de uso inmediato para el usuario promedio, y además la mayoría de ellos escapan a mis conocimientos. Con lo cual creo que quedan bien definidos, si bien no el contenido, al menos el continente y los límites que lo definen. Como de costumbre, espero que esta serie sea de utilidad, y ahora más que nunca reclamo la ayuda de los que sabéis más que yo para avisarme de meteduras de pata, falta de datos cruciales y esas cosas. ¡A ver si entre todos nos sale algo chulo!