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-hwRespiremos 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:
dfEn 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-readableCon la opción corta, de una letra, la letra h de human, la orden sería ( con guión simple inicial ):
df -hEn 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 /homeY 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
dfnos permite conocer el espacio libre e índice de ocupación de las particiones asociadas a tales o cuales ramas del árbol de directorios.