martes, 13 de enero de 2009

Cómo estás, HAL

Resueltas las urgentes preguntas existenciales ( secciones [3] y [4] de esta serie ), es momento de ser más educados y empezar por donde siempre empezamos cuando nos encontramos con alguien al que ya conocemos o acabamos de conocer, con el consabido ¿Cómo estás?

Pero como HAL no es de los que responden con la evasiva "bien, gracias" ---para HAL estas expresiones son demasiado vagas y poco comprometidas---, conviene que limitemos la extensión de nuestras preguntas, si es que no queremos vernos desbordados por una cantidad de información que todavía no estamos preparados para asimilar.

Si a pesar de esta evidencia, alguien se atreve a solicitar una respuesta vasta y dispone, además, de una distribución Debian o que, basada en Debian, contenga el paquete installation-report, se podría pedir a HAL que nos dé un informe ---a su modo de ver, conciso--- de su propia anatomía, es decir, de su hardware. La pregunta que habría que hacerle en tal caso es ---y que nadie me venga luego con que no avisé:

report-hw

Respiremos con tranquilidad y hagamos consultas mucho menos comprometedoras, las primeras que se le podrían ocurrir a cualquier usuario, una, sobre su estado digestivo y otra sobre su salud psíquica: ¿cómo vas de disco duro? y ¿qué tal estás de memoria?

Estas preguntas elementales nos permitirán, de paso, aprender nuevas estructuras sintácticas y empezar a ver la sofisticación de la lengua de HAL.

Vayamos, pues, a ello.

"¿Cómo vas de disco duro?" se puede expresar también de una forma más directa, con la frase "¿Cuánto disco libre te queda?", o, más concisamente, "disco libre" (disk free), y, en abreviatura:

df

En mi HAL particular, donde las particiones fueron configuradas manualmente, la respuesta es la siguiente:


Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 3099260 511224 2430604 18% /
tmpfs 1031820 0 1031820 0% /lib/init/rw
udev 10240 112 10128 2% /dev
tmpfs 1031820 0 1031820 0% /dev/shm
/dev/sda5 103210940 66861592 31106540 69% /home
/dev/sda8 10317828 131308 9662404 2% /tmp
/dev/sda6 10317828 5906404 3887308 61% /usr
/dev/sda7 20644348 2706108 16889664 14% /var


[ En un sistema donde se hubiese elegido el particionamiento automático más simple posible, el resultado sería más breve: normalmente, no aparecería más que una fila que empezase por /dev/sda ].

Si hacemos, por el momento caso omiso, de la segunda, tercera y cuarta filas de la tabla anterior ---que pueden ser diferentes según la configuración de nuestra distribución---, nos quedarán una o varias filas con el susodicho /dev/sda.

Esto nos suena, parece una ruta en el árbol de directorios. Pero ¿qué clase de directorio es /dev?, ¿qué ficheros contiene?

dev es una abreviatura de device (dispositivo, en inglés). Una de las peculiaridades más renombradas de HAL (de los sistemas tipo Unix) es que prácticamente todo se considera un fichero, también los dispositivos de hardware se comportan para lo que interesa como ficheros, y el directorio dev es aquel en el que residen estos curiosos ficheros (los dispositivos), de ahí su nombre.

El disco duro de mi HAL particular se llama sda, que es una abreviatura de "Disco SCSI a", el primero de una serie de discos SCSI posibles. Es decir, que si hubiera tenido un segundo disco duro del mismo tipo, se habría llamado el disco SCSI b; si un tercero, el c, etc.; y, si mi disco duro hubiese sido IDE, su nombre habría sido hda, en lugar de sda.

Está claro. Pero ¿qué hace ahí un número después de cada sda? ¿O es que, a pesar de todo, dispongo de más discos duros del que compré en la tienda? ¿Acaso HAL se ha vuelto loco?

No, no está loco. Lo que sucede es justamente que HAL pone en juego una "triquiñuela lógica" para que en lugar de un único sitio de almacenamiento, de un disco duro, dispongamos de varios, lo que, sin duda, es un magnífico truco de benéfica magia.

Cada uno de estos "distintos" discos duros se denomina técnicamente una partición. Y el sistema de ficheros que contenga esa partición se puede, por así decir, adjuntar a una rama diferente del árbol de directorios, algo ciertamente interesante, porque con ello logramos una independencia entre distintos conjuntos de ficheros.

Cualquier persona medianamente inteligente habrá deducido ya que a cada una de estas particiones se le asigna un número y que el número de la partición se añade al nombre genérico del tipo de dispositivo físico de la que procede. O sea, que una partición de mi disco SCSI se llamará sda1; otra, sda2, etc.

Tampoco hay que ser un Einstein para deducir que la última columna de cada fila de la tabla anterior alude a la sección de mis ficheros accesible en la partición que consta en la correspondiente primera columna. Así, por ejemplo, el contenido del directorio /home está a mi disposición en la partición sda5. ( Con mayor precisión técnica se dice que el sistema de ficheros que hay en la partición sda5 está montado en /home, en esa rama del árbol de directorios ).

¿Por qué no aparecen en la tabla nombres tales como sda2, sda3, etc.? Bien, esta es una cuestión interesante, pero que nos llevaría a un nuevo excursus, dentro de éste ya demasiado largo.

Volvamos a la tabla. Comprendido en lo fundamental el significado de sus columnas primera y última, lo único que queda son los números.

Esos números nos dicen qué cantidad de espacio hay disponible en las particiones del disco donde residen las correspondientes secciones de nuestros ficheros. Se trata de cuatro cantidades que miden el espacio existente, el espacio ya ocupado, el espacio aún libre y el porcentaje actual de espacio usado.

Pero a ningún humano le gustan números tan grandes e ininteligibles como, por ejemplo, 103210940 bloques de 1K, que es lo que significa concretamente la segunda columna de la quinta fila.

Necesitamos pedir a HAL que nos dé una respuesta a nuestra pregunta "¿cómo vas de disco duro?", pero una respuesta hecha a la medida del hombre.

Es decir, queremos que HAL nos responda a nuestro inicial "disco libre" (disk free = df), pero añadiendo ahora un matiz, una opción, la opción: "que sea fácil de leer para un humano" (human readable).

Nótese que la pregunta básica es la misma. Lo que queremos es matizar esa pregunta de la forma indicada. Y bien es posible que hubiese otras formas de matizarla. No tiene sentido, pues, crear una nueva orden para lo que es una matización, una opción entre otras posibles, de una orden ya existente.

Cuando se quiere añadir un matiz, una opción a nuestras órdenes, se utiliza un constructo sintáctico especial, el guión, después de un espacio. Nótese que el espacio sirve precisamente para indicar a HAL el final de la orden en cuanto tal y el comienzo de otra cosa (especificaciones o matices que se le van a añadir) y que la opción se destaca justo por el guión que la precede.

Este guión, que señala el inicio de la opción, puede ser simple o doble. Es simple cuando la opción se presenta en forma totalmente abreviada, como una sola letra; es doble en caso contrario, cuando en lugar de una letra el matiz se representa con una palabra o una expresión completa. En este último caso, el de una expresión completa, hay que tener cuidado de no introducir espacios entre sus palabras (convencionalmente se suelen usar guiones internos para facilitar la lectura). Veamos el caso concreto y todo resultará meridianamente claro.

Con la opción larga, human readable, nuestra orden debería ser la siguiente ( con guión doble inicial y sin espacio entre las dos palabras que la componen ):

df --human-readable

Con la opción corta, de una letra, la letra h de human, la orden sería ( con guión simple inicial ):

df -h

En ambos casos, la respuesta de HAL es la misma. O sea, que de haber ambas posibilidades de expresión ---con opción corta o larga---, la elección de una u otra queda al gusto del usuario.

Tras introducir la pregunta matizada, tenemos finalmente una respuesta numéricamente inteligible [ la K esta por kilobyte (= 1024 bytes), la M por megabyte y la G por gigabyte ]:


Filesystem Size Used Avail Use% Mounted on
/dev/sda1 3,0G 500M 2,4G 18% /
tmpfs 1008M 0 1008M 0% /lib/init/rw
udev 10M 112K 9,9M 2% /dev
tmpfs 1008M 0 1008M 0% /dev/shm
/dev/sda5 99G 64G 30G 69% /home
/dev/sda8 9,9G 129M 9,3G 2% /tmp
/dev/sda6 9,9G 5,7G 3,8G 61% /usr
/dev/sda7 20G 2,6G 17G 14% /var


Podría ser, no obstante, que nuestro interés se dirigiera exclusivamente al espacio libre que hay para /home y que no nos apetezca saber ninguna otra cosa. En ese caso, nos molestaría tener que buscar la fila relativa a /home en la tabla anterior. ¿Podemos hacer que HAL nos presente la parte de la tabla que nos interesa?

¿Cómo no? HAL siempre hará lo que nosotros le digamos, por enrevesado que nos parezca. En este caso concreto es muy fácil conseguirlo.

Acabamos de ver que una orden se puede matizar con opciones. Igualmente podemos con frecuencia, dependiendo del tipo de orden, especificar su ámbito de aplicación. Incluso, en ocasiones ---como quizá veamos otro día--- será necesario especificarlo para que HAL entienda la orden.

df permite especificar el ámbito de su aplicación. Algo totalmente lógico, pues es perfectamente concebible que la consulta sobre el espacio libre en disco se refiera a la totalidad de los discos o a uno o ciertos discos en particular. Como las particiones, a todos los efectos que interesan, son "discos" independientes, podemos referir nuestra consulta general a una o alguna de ellas. ( Si no lo hacemos, HAL entenderá que nos interesa saber de todas ellas, de ahí los resultados anteriores ).

Para ello necesitamos aprender un nuevo recurso sintáctico de la lengua de HAL, pero éste es incluso más simple que el relativo a las opciones.

Las expresiones que especifican el ámbito de aplicación de una orden se denominan argumentos y se colocan después de las opciones y separados por un espacio de tales opciones. En caso de haber varios argumentos, cada uno va separado por un espacio de su antecesor.

Por tanto, la estructura sintáctica general sería ésta:

ORDEN OPCIONES ARGUMENTO1 ARGUMENTO2 ...

Ahora podemos realizar nuestra pregunta sin problemas. Conviene formularla tal como alguien la pensaría sin recurrir a ninguno de los conceptos introducidos en estos artículos:

¿Cómo vas de espacio en el disco que hay dedicado para guardar la información privada de todos los usuarios ---y, por favor, respóndeme para que yo, un humano, lo entienda?

Primero, separamos los ingredientes para recordar mejor lo visto hoy y los días pasados:

La orden

"¿Cómo vas de espacio en disco?" = df

El argumento

"la información privada de todos los usuarios" = /home

La opción

"respóndeme para que yo, un humano, lo entienda" = -h


Finalmente, el enunciado completo, de acuerdo con el orden de cada parte de la frase que prescribe la lengua de HAL:

df -h /home

Y la respuesta es todo lo concisa y clara que deseábamos:


Filesystem Size Used Avail Use% Mounted on
/dev/sda5 99G 64G 30G 69% /home


Nada impide que nuestra consulta se refiera a varios casos, pero no a todos. Por ejemplo, a dos de los más importantes, /home y /.

Entonces la pregunta sería:

df -h /home /

y la respuesta:


Filesystem Size Used Avail Use% Mounted on
/dev/sda5 99G 64G 30G 69% /home
/dev/sda1 3,0G 500M 2,4G 18% /


Como todos los días y para finalizar he aquí un resumen de lo tratado.

  • HAL puede dividir lógicamente un único dispositivo de almacenamiento en varios. Cada división o partición funciona como un dispositivo de almacenamiento independiente.

  • Los sistemas de ficheros de las distintas particiones se pueden montar sobre ramas particulares del árbol de directorios, de forma que el contenido de cada rama sea independiente de las restantes.

  • Se pueden matizar las órdenes que damos a HAL mediante opciones.

  • Se puede especificar el ámbito de aplicación de una orden mediante argumentos.

  • La órden df nos permite conocer el espacio libre e índice de ocupación de las particiones asociadas a tales o cuales ramas del árbol de directorios.

8 comentarios:

  1. Era todo demasiado bonito. Aquí me he perdido porque al teclear df no me aparece lo mismo (apenas hay parecido) que a Vd., por lo que tratar de entenderlo me parece absurdo.

    He leído antes que el tiempo que le dedica a su cuaderno de bitácora es más bien escaso. De momento, freno aquí mi lectura de las entradas sobre GNU/Linux hasta que pueda seguir leyendo sin perderme completamente. Me gustaba la idea de estar aprendiendo sobre cada cosa que hacía.

    Si se encuentra con ganas y tiene tiempo, puedo copiarle por aquí lo que me aparece. Igual no diverge tanto de sus resultados y puedo seguir con el aprendizaje.

    Un saludo.

    ResponderEliminar
  2. Lo primero, S. Dedalus, me puedes tutear.

    En cuanto a tu problema con df. Envíame lo que te sale y lo vemos.

    ResponderEliminar
  3. Pues... no acostumbro mucho a tutear a la gente por Internet, pero haré una nueva excepción, gracias por la accesibilidad.

    A ver qué sale de aquí:

    S.ficheros Bloques de 1K Usado Dispon Uso% Montado en
    /host/ubuntu/disks/root.disk
    8719628 4221032 4059144 51% /
    varrun 257812 100 257712 1% /var/run
    varlock 257812 0 257812 0% /var/lock
    udev 257812 40 257772 1% /dev
    devshm 257812 12 257800 1% /dev/shm
    lrm 257812 39792 218020 16% /lib/modules/2.6.24-23-generic/volatile
    gvfs-fuse-daemon 8719628 4221032 4059144 51% /home/trigueros/.gvfs

    ResponderEliminar
  4. La visibilidad es excelente, eh. Qué pena que en los comentarios no se puedan utilizar (creo) los códigos.

    ResponderEliminar
  5. Por la salida que te da, me parece que estás usando una instalación de Ubuntu compartida con Windows (Wubi?), de ahí que no aparezca /dev. Pero confírmamelo y mañana te contesto, que el sueño arrecia ;-)

    ResponderEliminar
  6. Te lo confirmo, te lo confirmo. Es horrible, pero tuve problemas con la instalación por un Live CD y decidí dejarlo así hasta que volviese a animarme para desterrar definitivamente Windows.

    Sí que es verdad que no son horas, je.

    ResponderEliminar
  7. Lo que creo que pasa es que tu Ubuntu está instalado dentro de un fichero de Windows, en lugar de en su propia partición. Esto lo han hecho los arquitectos de tu distribución para facilitarte la instalación, ya que de esta forma no tienes necesidad de tocar (de particionar) el disco duro de tu ordenador.

    Por eso la primera línea que devuelve HAL es la que empieza con:

    /host/ubuntu/disks/root.disk

    en lugar de, por ejemplo:

    /dev/sda1

    Pero para el caso es lo mismo. Piénsalo como si tu disco (tal como lo ve HAL) se llamase root.disk y fuese uno de los posibles discos que podrías tener en tu host (= en tu ordenador). O sea, piénsalo como si mis /dev/sda equivaliesen a tus /host/ubuntu/disks/. Tú tienes un único disco (a ojos de HAL), root.disk, mientras que yo tengo varios, varios sda. Por tanto, estás en el caso más simple al que se refiere el texto, el de tener un único disco, una única "partición".

    Todas las demás líneas son del tipo de las que yo dejé por explicar en el artículo. Puedes hacer como si no existiesen.

    Puesto que sólo tienes un único disco "lógico", las consideraciones que vienen después sobre la forma de pedir a HAL que nos diga el espacio libre de uno de los discos o particiones no te afectan. Te recomiendo que las leas, para conocer de qué va el tema, y qué son los argumentos de una orden, pero sin teclear nada en el terminal.

    Creo que esta explicación te será suficiente. Ten en cuenta que cada usuario tiene un HAL distinto y puede que encuentres divergencias entre mis resultados y los tuyos en futuros artículos. La única forma de evitar esto sería que todos hubiésemos partido de una instalación idéntica. Quizá sea algo que me pueda plantear en una futura reedición de estas "conversaciones".

    Ten en cuenta también que las órdenes concretas que van saliendo son meros pretextos para que el lector pueda "impregnarse" del mundo de HAL, de su forma de hablar y comportarse. Si alguna orden no se entiende del todo, tampoco importa demasiado, lo importante es pillar los conceptos y el tipo de procesos mentales que se ponen en juego en una conversación con HAL. Es algo parecido a aprender un instrumento ---creo que tú estás o has estado en ese caso---: las obras concretas que se estudian son un pretexto para trabajar ciertos problemas técnicos e interpretativos; esos mismos problemas se pueden tratar con otras obras.

    Te animo a seguir y a que me cuentes todo lo que no entiendas. Es una buena manera para mí de saber si un principiante se entera o no de lo que digo. Al fin y el cabo, la serie está pensada para principiantes. Y si los principiantes no se enteran, mal vamos.

    Eso sí, te aconsejo que lo tomes con calma. La curva de aprendizaje se eleva poco a poco. Especialmente a partir de "HAL y las lenguas" hay que ir despacio, releer, tomar notas, repasar, etc. En fin, lo que se hace cuando se aprende una materia nueva.

    Si a pesar de todo tienes dificultades, no dudes en comentarlo. Tus comentarios pueden ser útiles para mí y para otros lectores.

    ResponderEliminar
  8. Me da hasta apuro no haberme dado cuenta antes. Sí que es verdad que la cosa se va complicando, pero, cuanto más lo hace, más apasionante se vuelve. Gracias por haber hecho tan apasionante un tema como la informática: así parece hasta más accesible, porque despierta interés (un interés que es el que me ha faltado hasta ahora para ponerme a fondo con estos menesteres).

    Seguiremos leyendo. Hasta aquí ha quedado todo claro. Un saludo.

    ResponderEliminar