sábado, 10 de enero de 2009

Quién eres y mi lugar de trabajo

En la última entrega de esta serie logramos que HAL nos resolviera nuestra primera duda cartesiana.

Quedan por resolver las otras dos cuestiones existenciales que nos planteamos: "¿Quién eres tú?" y "¿Dónde estoy?"

Aunque sabemos que el nombre de HAL es el que es, vamos, por si acaso, a preguntárselo. No vaya a ser que su conciencia esté tan perturbada que ni siquiera se reconozca a sí mismo. No sería divertido dialogar con una máquina que no sabe cómo se llama. Además, interesa que podamos hacer la misma pregunta a otras máquinas cuyo nombre desconozcamos de entrada.

A las computadoras conectadas a una red se las suele llamar también huéspedes (host, en inglés). Como prácticamente toda computadora es potencialmente miembro de una red, se suele aplicar el término host a todas ellas. Dicho término procede de los inicios de Internet y lo hemos heredado, como otros muchos, de aquella época gloriosa.

O sea, que preguntar a HAL, o a cualquier otra máquina, cómo se llama, es preguntarle por su nombre de huésped, su hostname.

Es improbable que una frase tan larga como "¿cuál es tu nombre de huésped?" sea aceptable para HAL. HAL odia, al contrario que nosotros ;-), perder el tiempo en chácharas innecesarias. Irá mucho mejor algo como "tu nombre de huésped" o, directamente, "nombre de huésped" ---el "tu" es innecesario, dado que sólo tenemos un "tú" delante, nuestra máquina.

Probemos, pues:

hostname

Y HAL confirma nuestra lógica y demuestra, de paso, su buen estado de salud mental:

hal

Un lector puntilloso estará presto a soltar: "¡Eh!, y ¿por qué no haber escrito un simple "Quién", en lugar del "Quién soy yo" (whoami) que tecleamos en el artículo anterior de la serie? ¿Acaso no somos cada uno de nosotros el único "yo" al habla con su máquina? ¿No bastaría, pues, en aquel caso, con un simple who?

El reparo no es baladí, pero la deducción es equivocada. Yerra porque, aunque no lo sepamos, HAL puede estar dialogando simultáneamente con varias personas conectadas desde distintos terminales. Lo que técnicamente se expresa diciendo que HAL es un sistema multiusuario. Podemos hacer una verificación de este hecho sin necesidad de que nuestros amigos o familiares se conecten desde otro terminal a nuestra máquina. Basta con que nosotros mismos volvamos a entrar en el sistema desde distintas consolas virtuales. ( Normalmente, valdría también abrir varias ventanas o pestañas de emulador de terminal ).

Aunque esta operación es algo más compleja de lo que hemos visto hasta ahora, merece la pena comprobarlo:

  1. Tecleamos Ctrl+Alt+F2 (todas las teclas a la vez). Nos saldrá entonces, normalmente, un mensaje con la palabra [nombre_de_mi_maquina] login:.

  2. Nos identificamos en el sistema con nuestro nombre de usuario y nuestra contraseña (la que se elegió al instalar el sistema o la que venga documentada en el sitio web desde el que se descargó el LiveCD, en caso de haber seguido esta opción).

  3. Realizamos la misma operación con Ctrl+Alt+F3.

  4. Volvemos al escritorio con Ctrl+Alt+F7 (o con Alt+[flecha derecha], después de pulsar varias veces dicha flecha con el Alt pulsado).



Y, ahora, le volvemos a plantear a HAL la pregunta sobre nuestra identidad, pero en la forma simplificada, es decir: "¿Quién?", en lugar del "¿Quién soy yo?" de antes. O, expresado en su idioma:

who

HAL nos mostrará algo parecido a esto:

luis tty2 2009-01-10 15:32
luis tty3 2009-01-10 15:33
luis :0 2009-01-10 11:25


Cada columna de esta tabla tiene un significado: la primera indica el nombre del usuario que está conectado ---en este caso yo mismo por triplicado :-)---; la segunda es la forma que tiene HAL de designar el terminal desde el que el usuario se conecta; la tercera presenta la fecha ---el formato de fecha puede variar según la configuración de nuestra distribución--- y la hora en la que se inició la conexión.

Luego, para HAL, soy como el agente Smith de Matrix Reloaded: me puedo multiplicar virtualmente para charlar con él. ¡Estupendo! Lo importante, sin embargo, es darse cuenta de que lo mismo da que sea un yo multiplicado o varios sujetos, en cualquiera de los casos HAL puede hablar con todos nosotros a la vez.

Con esta aclaración es posible comprender por qué en la traducción del mensaje de bienvenida de HAL que propuse en la entrada pasada, constase aquello de:

... Aquí, en el lugar de trabajo que te tengo reservado ...

Claro, del mismo modo que HAL puede hablar con varios usuarios, es lógico pensar que tenga reservado para cada uno de ellos un lugar propio, independiente del de los demás.

¿Estamos ahora en ese lugar privado o nos encontramos en otra parte?

Vamos a preguntárselo a HAL, que para eso está, para resolver nuestras dudas y cumplir nuestras órdenes.

Ahora bien, para poder formular la pregunta adecuadamente, necesitamos dar un pequeño rodeo. Es necesario comprender qué significa exactamente para HAL eso de "un lugar".

Para empezar, es relativamente fácil de adivinar que nuestro lugar privado debe formar parte, en cierto modo, del propio HAL o, como mínimo, debe pertenecerle en alguna medida. Difícilmente podrá reservarnos tal lugar si no tiene control completo sobre el "sitio" que contiene todos los lugares, el nuestro y el del resto de los usuarios.

Todo el mundo sabe que ese sitio que contiene todos los lugares privados de los usuarios no puede ser sino una zona de almacenamiento controlada por HAL: el disco duro o un dispositivo semejante.

Si HAL es capaz de identificar zonas diferentes dentro de ese sitio común de almacenamiento ---lo cual es necesario para poder reservar a cada usuario una distinta---, es que dispone de alguna manera de organizar las cosas dentro de él.

Sin entrar en detalles técnicos, basta saber que dicha forma de organización consiste en una jerarquía, que metafóricamente podría describirse con la imagen de un árbol. De una raíz común, denominado directorio raíz, partirían distintas ramas, denominadas también directorios, que pueden o bien contener a su vez otras ramas (esto es, otros directorios), o bien simples hojas, denominadas ficheros, que serían los objetos últimos de la jerarquía. Se trata de una estructura lógicamente muy simple. Sólo hay dos tipos de entidades: directorios y ficheros. Y el directorio base, a pesar de recibir un nombre especial ---por eso de ser el primero--- no se diferencia en nada ---por lo que ahora respecta---
del resto de directorios.

Pues bien, "un lugar" para HAL no es otra cosa que un directorio.

Con estos conocimientos recién adquiridos podemos retornar sin miedo a nuestro propósito principal.

Íbamos a preguntarle a HAL por el lugar donde nos encontramos. Ahora sabemos que esto es lo mismo que preguntarle por el directorio en el que nos hallamos ahora. Lo que significa, entre otras cosas, que todo usuario, está, por el hecho de iniciar un diálogo con HAL, en un lugar, en un directorio.

Por otro lado, intuimos que para HAL ese lugar o directorio no es un lugar cualquiera, tiene que ser, a la fuerza, un lugar o directorio de trabajo. Es fácil llegar a esta conclusión. Se trata del clásico fenómeno psicológico de proyección. Si el servicial de HAL interpreta nuestras tímidas preguntas como auténticas órdenes, no es raro que nos tome por gente tan seria o más que él y que una cordial y afable charla tenga, desde su punto de vista, el carácter de un arduo trabajo.

Dicho lo cual, la pregunta que queremos hacerle debería sonar de un modo semejante a esto: "¿Cuál es nuestro directorio de trabajo actual?". O en versión más breve y vertida al inglés: present working directory. Hagamos la consulta:

presentworkingdirectory

No hace falta regodearse escribiendo la terrible respuesta. ¡Vaya calamidad, otra vez, el apestoso command not found!

Conviene mantener la calma ante la adversidad y pararse a pensar un poquito más. Una cosa que salta a primera vista en la frase fallida es su desmesurada longitud. Resulta difícil leerla hasta para un humano y la posibilidad de meter un gazapo tipográfico al escribirla es bastante alta. En este tipo de situaciones, HAL hace uso de un recurso que también nosotros empleamos, la abreviatura.

Una forma de abreviar el "present working directory" es construir una palabra de tres letras con la inicial de cada palabra. O sea:

pwd

Y, ¡sí!, HAL lo entiende perfectamente:

/home/luis

¿Cómo interpretar esta respuesta? Podemos inferirlo a partir de la noción del árbol de directorios.

El signo / indica una bifurcación en el árbol, salvo que se trate del primero de ellos, que simplemente está por el directorio raíz, pues es desde él desde donde comienzan las demás bifurcaciones. O sea, que podríamos dibujar el siguiente corte de árbol invertido (con la raíz en la parte superior) como otra forma de presentar la respuesta de HAL:

/ [=directorio raíz]
___|
|
home
___|
|
luis


Es incluso más intuitivo pensar la respuesta como la indicación de una "ruta" (path, en inglés) dentro del árbol de directorios. O sea, que la respuesta de HAL es algo similar a decir, en forma sucinta, lo siguiente:


Si se empieza por el directorio raíz, se toma la bifurcación 'home' y de ahí se coge la bifurcación 'luis', se encuentra uno en el directorio de trabajo en el que ahora tú estás.


¡Vaya!, y resulta que este directorio va a tener que ser mi directorio privado: dentro del "hogar", un espacio para mí solo. Mejor no se puede estar.

Por cierto, conviene saber que hay una forma abreviada de llamar al directorio privado del usuario: el carácter de la tilde (~).

¿No nos suena haberlo visto antes? Claro, era ese signo incomprensible en el mensaje de invitación al diálogo, después de los dos puntos:

luis@hal:~$

Un mensaje que cada vez nos resulta más expresivo. Todo es ponerse.

Repasemos, para terminar, lo aprendido en esta entrada:

  • HAL es un sistema multiusuario: puede entablar diálogos con varios usuarios simultáneamente.

  • HAL organiza el espacio de almacenamiento mediante una estructura recursiva de directorios, el árbol de directorios.

  • Un lugar en el árbol de directorios se determina mediante su ruta, teniendo en cuenta, de momento, que el comienzo de la ruta es el directorio raíz.

  • El directorio privado de cada usuario tiene la ruta /home/[nombre_usuario], que también se indica mediante el signo ~.

  • HAL gusta de órdenes no sólo breves, sino también de puras abreviaturas.

  • Entre las órdenes que pertenecen al vocabulario de HAL, se encuentran las tres siguientes:

    • hostname, que permite conocer el nombre de la máquina con la que estamos dialogando.

    • who, que permite saber la identidad de los usuarios conectados a todos los terminales.

    • pwd, (= present working directory), que nos dice en qué lugar dentro del árbol de directorios nos encontramos actualmente.

2 comentarios:

  1. Ahora que las cosas empiezan a complicarse hay que volver atrás alguna vez en la lectura. Pero no está mal el invento, los resúmenes de las entradas son muy útiles y estoy descubriendo que la informática puede llegar a ser algo apasionante, aunque de momento me encuentre en un nivel sumamente rudimentario.

    ResponderEliminar
  2. increible tus entradas che ...

    ResponderEliminar