Fundamentos de Sistemas Operativos y Automatización con Bash
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 8,2 KB
Introducción a los Sistemas Operativos
Conceptos Básicos
Un sistema operativo (SO) es el intermediario entre el hardware de la computadora y los programas del usuario.
El SO da vida a la máquina, coordina los recursos y permite que múltiples programas funcionen sin interferir entre ellos.
Funciones Principales del Sistema Operativo
- Gestión del procesador: El SO utiliza el "Scheduling" (planificación) para gestionar qué procesos se ejecutan, cuánto tiempo duran y qué prioridad tienen. Sin este planificador, un solo programa acapararía el procesador y congelaría al resto.
- Administración de memoria: El SO controla la cantidad de memoria RAM que utiliza un programa. Si la memoria RAM se agota, el sistema puede utilizar espacio de almacenamiento como si fuera memoria adicional, lo cual se conoce como "swap".
- Control de E/S (Entrada/Salida): Utiliza controladores (pequeños programas) para gestionar la comunicación con dispositivos como teclados, ratones, impresoras, discos duros y tarjetas de red.
- Organizador de archivos: Cuenta con sistemas de archivos (como ext4, NTFS, FAT32) para organizar los datos en los discos, crear carpetas, nombrar archivos y gestionar permisos.
- Seguridad: Garantiza que cada proceso opere de forma aislada, gestiona usuarios, contraseñas y permisos (lectura, escritura y ejecución o rwx) para evitar que procesos maliciosos comprometan el sistema.
El Kernel
El Kernel es el cerebro y la parte central del sistema operativo.
Reside en la memoria RAM desde que se enciende la computadora hasta que se apaga.
Interfaces: GUI vs CLI
- GUI (Interfaz Gráfica de Usuario): Utiliza ventanas, botones e iconos; es fácil de aprender, pero consume más recursos del sistema.
- CLI (Interfaz de Línea de Comandos): Funciona mediante texto e instrucciones escritas; es muy ligera, funciona en cualquier hardware y permite realizar tareas complejas con una sola línea.
Terminales, Shell y Conexiones Remotas
La Terminal es solo un contenedor visual o ventana gráfica (como GNOME Terminal o iTerm2) que dibuja caracteres en la pantalla.
El Shell (como Bash, Zsh, Fish o PowerShell) es el intérprete que atiende y ejecuta los comandos.
Indicadores del Prompt
Al abrir una terminal se ve el nombre del usuario, el nombre de la máquina y el directorio actual (como ~ para el directorio personal). El símbolo $ indica un usuario normal, mientras que el # indica un superusuario o root con privilegios especiales.
- Telnet: Es un protocolo de red antiguo para conectarse remotamente mediante una sesión cliente-servidor; utiliza el puerto 23 por defecto.
- SSH (Secure Shell): Es un protocolo de red que permite conexiones remotas seguras (cifradas) a otros equipos a través de internet o redes locales.
Administración de Procesos y Señales
Estados de los Procesos
El estado de un proceso es una etiqueta asignada por el kernel para indicar en qué fase se encuentra un programa y su interacción con el hardware.
- R (Running / Runnable): El proceso está corriendo o se encuentra en la cola del procesador listo para correr.
- S (Sleeping / Interruptible): El proceso está esperando que ocurra algo, como presionar una tecla o que termine una lectura de disco.
- D (Uninterruptible Sleep / puede ser i): Es un sueño profundo donde el proceso espera operaciones de Entrada/Salida (como discos lentos o NFS).
- Z (Zombie / Defunct): El proceso ya terminó su ejecución, pero su proceso padre no ha recogido su código de salida (no hizo
wait()). Ocupa un lugar en la tabla de procesos pero ya no consume CPU ni memoria RAM. - T (Stopped): El proceso fue pausado por una señal, generalmente mediante Ctrl+Z o SIGSTOP.
Combinaciones y Modificadores de Estado (Comando ps)
- Ss: Es un líder de sesión (Session leader).
- S+: Pertenece al grupo de procesos en primer plano (Foreground).
- R<: Proceso con alta prioridad.
- RN: Proceso con baja prioridad.
- Rl: Proceso multihilo (Multi-threaded).
Señales (Signals)
Una señal es un mensaje simple o un "toque de atención" que el sistema operativo o un proceso envía a otro proceso.
- SIGINT (2): Interrupción enviada desde el teclado, comúnmente con Ctrl+C.
- SIGTERM (15): Solicita que el proceso termine de una forma ordenada y limpia.
- SIGKILL (9): Mata el proceso de manera inmediata, sin previo aviso.
- SIGSTOP (19): Detiene o pausa temporalmente el proceso.
- SIGCONT (18): Reanuda un proceso que había sido detenido.
- SIGTSTP (20): Suspende el proceso desde el teclado, utilizando Ctrl+Z.
Automatización de Monitoreo con Bash
Fundamentos de Scripts
- Shebang: Es la primera línea de un script (texto con instrucciones) y le indica al sistema qué intérprete ejecutará el código. Su sintaxis es
#! ruta/interpretey el más popular en Linux es bash. - Agujero negro:
/dev/nulles un archivo especial donde todo lo que se envía se descarta inmediatamente. - Logs: Son bitácoras o registros de eventos generados por programas y el sistema. El comando
teesirve para duplicar la salida, permitiendo ver la respuesta en pantalla y guardarla simultáneamente en un archivo de bitácora. - Redirección (
>>): En los scripts se utiliza>>para guardar la salida de un comando añadiéndola al final de un archivo de texto, como por ejemplo un archivo.txto.log.
Variables
- Asignación: Se usa el símbolo
=sin dejar espacios a los lados (ej.nombre="miguel"), ya que bash los interpreta como separadores y da error. - Acceso: Para usar el valor de la variable, se coloca el símbolo
$al inicio (ej.echo $nombre). - Concatenación: Se puede unir texto y variables usando llaves
${nombre}o comillas dobles"$nombre".
Variables especiales obligatorias:
$0: Contiene el nombre del script.$1, $2, ...: Son los argumentos o parámetros que se pasan al script al ejecutarlo.$#: Representa el número total de argumentos enviados.$@o$*: Representan todos los argumentos.$?: Es el código de retorno del último comando ejecutado (0 significa éxito, otro valor significa fallo).$$: Es el PID (Identificador de Proceso) del propio script en ejecución.$!: Es el PID del último proceso ejecutado en segundo plano.