Introducción
FRAME Studio está comprobando la estación Linux que utiliza para exportar fotografías de un evento. Antes de observar una sesión larga, necesita lecturas fiables: tiempo no inactivo de CPU, memoria que no está disponible de inmediato y uso del sistema de archivos que contiene el directorio de exportación. Una lectura elevada es una señal que debe interpretarse, no demuestra que el trabajo haya fallado.
Implementarás tres funciones breves de Bash y usarás un adaptador preparado que ejecuta comandos reales de Linux. Debes conocer rutas de terminal, variables, funciones, condiciones y bucles de Bash, como se enseña en Shell for Beginners. Los programas preparados conectan los comandos; leerás esa conexión e implementarás la lógica de porcentajes. Esta instancia Linux independiente contiene dos pequeños sistemas de archivos ext4 reales para la práctica. Prepararlos y montarlos no es trabajo del estudiante. La duración es una estimación del autor que incluye lectura y errores habituales.
Mide el tiempo no inactivo de CPU
En este paso observarás una instantánea de recursos funcional e implementarás la conversión de CPU.
Comienza en Terminal. Todos los comandos de este laboratorio se ejecutan aquí. Entra en el espacio preparado; pwd muestra la ubicación y ls enumera sus archivos. Si después no encuentras un archivo relativo, vuelve a usar este comando cd completo en vez de reiniciar la instancia.
Cómo introducir comandos
Haz clic dentro de Terminal antes de escribir. Copia solo el contenido del bloque de comandos; no escribas el prompt, los acentos graves exteriores ni un ejemplo de salida esperada. Pulsa Enter tras cada comando y espera a que vuelva el prompt antes de continuar. Un comando puede terminar correctamente sin imprimir nada. Mantén el mismo Terminal abierto durante todo el laboratorio.
cd /home/labex/project/resource-watch
pwd
La ruta debe terminar en /resource-watch. Ejecuta la demostración preparada con Bash:
bash demo.sh
La primera línea nombra cuatro campos. La siguiente contiene una marca UTC y tres porcentajes reales. Los valores varían. demo.sh es un ejemplo funcional suministrado; no completa tus funciones ni guarda tu respuesta.
UTC timestamp | CPU non-idle % | memory pressure % | target filesystem used %
2026-...Z ... ... ...
Los porcentajes de CPU describen el tiempo de las CPU virtuales de la instancia. vmstat informa de la actividad del sistema. En vmstat 1 2, 1 es el intervalo en segundos y 2 el número de informes. El primer informe de CPU es un promedio desde el arranque; el segundo cubre el nuevo intervalo. Ejecútalo antes de extraer campos:
LC_ALL=C vmstat 1 2
LC_ALL=C aplica a este comando un formato numérico estable en inglés. Busca id en las columnas de CPU: es el tiempo inactivo. El curso define no inactivo = 100 - inactivo. Incluye espera de E/S y tiempo robado; no es únicamente ejecución de tu programa ni un diagnóstico de fallo.
El adaptador usa una tubería: | envía la salida de un comando al siguiente. tail -n 1 selecciona la última línea. awk '{print $15}' imprime su campo quince separado por espacios, la columna id de esta versión preparada de procps. Las comillas simples reservan $15 para awk, evitando su expansión por el shell. Confirma que el valor extraído es entero:
LC_ALL=C vmstat 1 2 | tail -n 1 | awk '{print $15}'
Edita ahora las funciones suministradas. nano es un editor de terminal. Abre el archivo y sustituye solo el : dentro de cpu_nonidle, dejando intactas las otras funciones. Los dos puntos son un marcador que no hace nada.
nano metrics.sh
Mueve el cursor con las flechas. En la primera función, borra solo la línea con los dos puntos e introduce las dos líneas sangradas que se muestran abajo. Conserva el nombre de la función, las llaves de apertura y cierre y las otras funciones. El ejemplo completo muestra el resultado deseado; no pegues una segunda copia debajo del original. La sangría facilita la lectura; las llaves y la escritura deben ser correctas.
La primera función debe quedar así:
cpu_nonidle() {
local idle=$1
echo $((100 - idle))
}
$1 es el primer argumento de la función. local mantiene la variable dentro de ella. $((...)) realiza aritmética entera y echo imprime el resultado. Pulsa Ctrl+O, Enter y Ctrl+X para guardar y salir. Si una edición posterior causa un error de sintaxis, reabre el archivo y corrige la función afectada; el muestreador preparado permanece intacto.

En este ejemplo solo está completa la primera función; los otros dos marcadores de dos puntos son intencionales. Abajo en nano, el signo circunflejo representa Ctrl. Por ejemplo, ^O significa mantener Ctrl y pulsar O, no escribir esos dos caracteres.

Tras Ctrl+O, nano pide el nombre del archivo en la parte inferior. Deja el nombre existente y pulsa Enter para confirmarlo; después Ctrl+X vuelve al prompt del shell. Si abriste un archivo equivocado, pulsa Ctrl+X y responde N cuando pregunte si deseas guardar; luego abre el correcto. No escribas comandos del shell mientras siga abierto el editor.
source carga definiciones en el shell actual. Terminal inicia Zsh, pero este ejercicio utiliza Bash: usa bash -c para ejecutar la prueba entre comillas en Bash. Las comillas simples externas conservan el comando interior.
bash -c 'source ./metrics.sh; cpu_nonidle 97'
3
Este valor de inactividad suministrado prueba la aritmética; no afirma que el porcentaje actual sea exactamente 3%. Comprueba también ambos extremos:
bash -c 'source ./metrics.sh; cpu_nonidle 0; cpu_nonidle 100'
100
0
Tu función sirve para cualquier valor entero de inactividad entre 0 y 100. El muestreador real proporcionará el valor recién medido.
Distingue memoria disponible y memoria libre
En este paso calcularás la presión de memoria utilizando la memoria que Linux estima disponible para aplicaciones nuevas.
Permanece en Terminal, en /home/labex/project/resource-watch. free -k muestra memoria en KiB, unidades de 1024 bytes. Ejecuta el comando antes de analizarlo:
LC_ALL=C free -k
Lee la fila Mem:. free es memoria completamente sin usar; available estima la que pueden usar nuevas aplicaciones sin intercambio, incluida parte de la caché recuperable. No consideres toda la caché permanentemente indisponible. El curso utiliza floor((total - available) * 100 / total) como porcentaje de presión. No predice si una asignación futura concreta tendrá éxito.
El adaptador selecciona total y disponible de la misma fila. En awk, /^Mem:/ coincide con una línea que empieza por Mem:; $2 y $7 seleccionan los campos segundo y séptimo.
LC_ALL=C free -k | awk '/^Mem:/ {print $2, $7}'
La salida contiene el total y después la memoria disponible. Ambos usan las mismas unidades, por lo que la proporción tiene sentido. Por ejemplo, total 1000 y disponible 750 representan 25%, no 75%.
Abre el archivo y sustituye solo el marcador de memory_pressure:
nano metrics.sh
memory_pressure() {
local total=$1 available=$2
echo $(((total - available) * 100 / total))
}
La división entera de Bash descarta la fracción. Como las entradas son no negativas y el total positivo, truncar equivale a redondear hacia abajo. Multiplica antes de dividir para no perder la fracción demasiado pronto. Guarda con Ctrl+O, Enter, Ctrl+X.
bash -c 'source ./metrics.sh; memory_pressure 1000 750; memory_pressure 3 2'
25
33
El resultado 33 es intencional cuando una de tres unidades no está disponible. El contrato utiliza unidades enteras del mismo tamaño y un valor disponible entre cero y el total. El análisis de entradas inválidas se gestiona fuera de este pequeño ejercicio.
En la primera prueba, 1000 - 750 = 250 unidades no disponibles, así que 250 × 100 ÷ 1000 = 25. En la segunda, una de tres unidades no está disponible: 33.333… se convierte en 33 porque la función devuelve un entero. El segundo argumento es la cantidad disponible, no un porcentaje ya calculado. Conserva la función de CPU completada en el paso anterior.
Muestrea el sistema de archivos correcto
En este paso completarás la función del sistema de archivos y guardarás una observación completa.
Permanece en Terminal, en /home/labex/project/resource-watch. Los directorios exports y reference pertenecen a distintos sistemas ext4 preparados. Conserva el material y las notas originales de ambos. Solo observarás espacio: no borres material, cambies montajes ni intentes llenar sistemas de archivos.
df informa del sistema de archivos que contiene la ruta indicada. La opción -P ofrece una disposición predecible con una línea por sistema. Compara las rutas:
df -P exports reference
Lee Capacity, no la cantidad de archivos de un directorio. El uso de exports debe ser menor que el de reference. Ejecutar df / describiría otro sistema y no sustituye al objetivo seleccionado.
En nano, sustituye solo filesystem_used:
nano metrics.sh
filesystem_used() {
df -P "$1" | awk 'NR == 2 {gsub(/%/, "", $5); print $5}'
}
Las comillas dobles conservan la ruta como un único argumento. NR == 2 selecciona la fila posterior a la cabecera. gsub elimina % del quinto campo antes de imprimirlo. Guarda con Ctrl+O, Enter, Ctrl+X. También se permite otra implementación que devuelva el mismo entero para el sistema solicitado.
bash -c 'source ./metrics.sh; filesystem_used exports; filesystem_used reference'
Los dos números deben coincidir con sus respectivas filas de df. Termina ejecutando el programa preparado:
bash snapshot.sh
Ahora imprime marca UTC, CPU no inactiva, presión de memoria y uso del sistema objetivo, separados por tabuladores. CPU y memoria pueden cambiar entre comandos. Lee el adaptador para conectar las observaciones individuales:
cat capture.sh
El adaptador ejecuta vmstat y free, llama a tus funciones y lee el destino mediante df. $(...) captura la salida; read -r asigna los campos separados por espacios y <<< suministra la cadena capturada a esa lectura. Esta conexión ya está preparada; tus funciones determinan los porcentajes.
Guarda una instantánea real. > redirige la salida y reemplaza este único archivo, sin cambiar el historial original del operador.
La extensión .tsv significa valores separados por tabuladores: una observación por línea, con un tabulador entre campos. La instantánea guarda cuatro campos en este orden: marca UTC, porcentaje de CPU no inactiva, porcentaje de presión de memoria y porcentaje de uso del sistema objetivo. UTC es un estándar de tiempo común; la Z final de una marca indica UTC. Estos porcentajes describen recursos distintos: no los sumes ni esperes que totalicen 100.
bash snapshot.sh > snapshot.tsv
cat snapshot.tsv
Si escribes mal un archivo o función, usa ls, reabre metrics.sh, corrige el error y repite el comando de instantánea. No sustituyas una observación fallida por números inventados. Ya tienes un muestreador Bash con cálculos y objetivo explícitos.
Resumen
Has medido CPU no inactiva en un intervalo nuevo, calculado presión a partir de memoria disponible y seleccionado el sistema de archivos del objetivo real. Tus tres funciones Bash producen una instantánea real. El siguiente laboratorio independiente proporciona estas funciones y añade reglas de aviso e historial conservado.



