Repositorio dedicado a la materia Sistemas Operativos (UTN), enfocado en la creación y estudio de scripts en BASH (Bourne-Again SHell) para la administración, automatización y monitoreo de sistemas GNU/Linux.
Los scripts permiten automatizar tareas administrativas, manipular archivos, gestionar usuarios, procesos y redes, así como entender conceptos avanzados del intérprete de comandos y del entorno operativo.
El repositorio está organizado en carpetas temáticas, cada una abordando aspectos prácticos del scripting en BASH:
- Manejo de Archivos: Scripts para crear, leer, copiar, mover, eliminar y manipular archivos y directorios.
- Validaciones: Scripts que muestran cómo verificar condiciones, tipos de archivos, existencia de comandos o argumentos, y manejo de errores.
- Tareas Programadas: Ejemplos de uso de
crontaby automatización de tareas periódicas. - Manejo de Texto: Scripts que trabajan con
cat,head,tail,sort,cut,grep, ywcpara procesar datos y archivos de texto. - Find: Ejemplos avanzados de búsqueda de archivos según criterios de nombre, extensión, permisos, tamaño o fecha de modificación.
- Administración del Sistema: Scripts que automatizan el monitoreo de memoria, CPU, swap, procesos, usuarios y servicios del sistema.
- Procesos: Ejemplos de gestión de procesos, señales, prioridades, pausas (
sleep) y obtención de IDs de proceso (pgrep,$$,$!). - Ejemplo de Interfaces: Scripts que crean menús interactivos, formularios simples y selección de opciones mediante
selectyread.
Este repositorio se conceptualiza como un conjunto de utilidades para la administración de sistemas operativos, con énfasis en GNU/Linux.
- Plataforma Base: Optimizado para GNU/Linux, preferentemente la última versión de Ubuntu Mate.
- Mantenimiento: El sistema operativo debe estar actualizado mediante la línea de comandos.
- Compatibilidad Windows: Puede ejecutarse sobre WSL (Windows Subsystem for Linux).
- Intérprete de Comandos: BASH, instalado por defecto en la mayoría de sistemas GNU/Linux.
- Shebang (
#!/bin/bash): Indica al sistema que use BASH como intérprete. - Comentarios (
#): Documentan el código; ignorados por el intérprete.
- Directo:
bash <fichero_script> - Como ejecutable: Asignando permisos de ejecución
chmod +x script.shy ejecutando/ruta/script.sh.
- Declaración:
NOMBRE=valor - Referencia:
$NOMBRE - Variables posicionales:
$0, $1 ... $9, ${10} - Parámetros especiales:
$#: Número de argumentos$?: Código de salida de la última instrucción$$: PID del shell$!: PID del último proceso en segundo plano
- Listas de parámetros:
$*: Expande todos los argumentos en una palabra$@: Expande todos los argumentos como palabras separadas
- Expansión de parámetros:
${var#patrón},${var##patrón},${var%patrón},${var%%patrón},${#var},${var:offset:length} - Sustitución de instrucciones:
$(comando)o`comando` - Expansión aritmética:
$(( expresión )) - Brace Expansion:
a{d,c,b}e→ ade ace abe - Tilde Expansion:
~→ directorio home - Globbing:
*,?,[...]para coincidencia de nombres de archivo
if ... then ... elif ... else ... ficase ... esacselect ... do ... donepara menús
| Tipo | Operador | Descripción |
|---|---|---|
| Cadenas | -z, -n, ==, != |
Longitud, igualdad o desigualdad |
| Enteros | -eq, -ne, -gt, -lt, -ge, -le |
Comparaciones numéricas |
| Ficheros | -e, -f, -d, -s, -r, -w, -x, -L |
Existencia, tipo y permisos |
| Lógicos | -a, -o, &&, ` |
()→ subintérprete (variables locales no persisten){ lista; }→ contexto actual (requerido;o nueva línea)
free→ Uso y disponibilidad de memoriaswapon / swapoff→ Activar/desactivar swap- Liberación de caché →
/proc/sys/vm/drop_caches uptime,ps,pgrep,kill,sleep→ Procesos y CPUdmidecode,uname→ Información de hardware y sistema
ifconfig→ IP y máscara de redping→ Prueba de conectividad y RTTnetstat→ Estado de conexiones y puertos
fdisk -l→ Gestión de particionesdf -h→ Espacio usado/disponibleln -s→ Enlaces simbólicosstat→ Información detallada de archivosfind→ Buscar archivos según nombre, permisos, tamaño, fecha
cat,head,tail,tail -f→ Visualización de archivoswc -l/-w/-c→ Conteo de líneas, palabras, caracteressort,cut,grep→ Ordenar, extraer y filtrar
who,last→ Información de usuarios y sesionescrontab -e/-l/-r→ Gestión de tareas programadas
- Funciones: Agrupan instrucciones; argumentos → parámetros posicionales
- Builtins: Comandos internos (ej.
cd,break) - Búsqueda de comandos:
$PATH,hash,type
history→ Lista de comandos previosfc→ Editar y reejecutar comandos- Expansión de historial:
!!,!n,!-n,!cadena,^cadena1^cadena2^ - Readline: Edición de línea, mover cursor, cortar y pegar
- Completado programable:
complete
|y|&→ Encadenar comandos, redirigir errorestime→ Medir tiempo de ejecución de comandos/tuberíaspipefail→ Código de salida de tuberías
rbash→ Shell restringido, limita acciones críticas- Modo POSIX → Comportamiento estándar para variables, funciones y errores
- Protección de cadenas: Comillas dobles
" "para variables con espacios - Entrecomillado literal: Comillas simples
' 'para preservar valores - Sustitución segura:
var=$(comando) - Manejo de errores:
set -ey uso de$? - Variables locales vs globales:
localdentro de funciones - Documentación:
help <builtin>para instrucciones integradas
- Guardar el script con extensión
.sh - Dar permisos de ejecución:
chmod +x script.sh- Ejecutar:
./script.sh- Instalación y Entorno:
- Instalación de GNU/Linux (Ubuntu Mate) o WSL en Windows.
- Actualización del sistema operativo desde línea de comandos.
- Conceptos Teóricos:
- Finalidad de actualizar un sistema operativo.
- Descripción del gestor de arranque.
- Definición de intérprete de comandos y detección del instalado por defecto.
- Sistema de Archivos y Directorios:
- Descripción del directorio raíz
/y subdirectorios. - Listado del contenido de directorios con tres métodos distintos.
- Descripción del directorio raíz
- Documentación y Redes:
- Acceso a ayuda/documentación de comandos.
- Investigación y uso de SSH.
- Organización de Directorios: Creación de
prácticas/tp1/perfil.txt. - Administración de Usuarios y Grupos:
- Creación del usuario
admicon privilegios. - Copias de
/etc/passwdy/etc/groupcomousuariosygrupos. - Registro de UID, GID y shell en
perfil.txt.
- Creación del usuario
- Manipulación de Texto y Metadatos:
- Uso de
head,tail,wc,grepy redirección de salidas. - Cambio de fecha de acceso de archivos.
- Uso de
- Redirección y History:
- Redirección de
/etc/fstabafilesystem.txt. - Guardado y renombrado del historial de comandos.
- Redirección de
- Compresión y Estructura:
- Comprimir directorios (
tp1) y operaciones de copia/borrado.
- Comprimir directorios (
- Guardado de variables de entorno:
HOSTNAME, HOME, LOGNAME, PATH. - Condicionales para comparar archivos y directorios.
- Scripts de comparación de cadenas y palabra clave.
- Operaciones aritméticas con entrada de usuario.
- Bucles básicos (1 al 20).
- Contabilización de archivos y directorios.
- Lectura de archivos línea por línea (
while). - Simulación de alta de usuario y manipulación de líneas con retardo.
- Filtrado, permisos y borrado de líneas o cadenas.
- Conversión de mayúsculas/minúsculas y formateo de archivos.
- Cambios de palabras dentro de archivos y creación de archivos modificados.
- Entorno C: Instalación de GCC, rutinas simples.
- Gestión de Procesos BASH: Uso de
ps,cut,pgrep, bucles, ejecución en segundo plano ykill. - Programación Avanzada en C: Rutinas con
fork(), procesos padre-hijo-abuelo, ejecución de comandos consystem()yexecl().
- Sincronización en C: Hilos (
pthreads) y semáforos para exclusión mutua. - Monitoreo de Memoria: Scripts con
free,ps, alertas por límite de memoria. - Gestión de Swap: Activación/desactivación y nivel de
swappiness. - Liberación de Caché: Niveles de limpieza de memoria (
drop_caches). - Información de Hardware: Uso de
dmidecodepara detectar capacidad máxima de memoria.
- Instalación y monitoreo de Apache2 (
netstat). - Scripts de red:
ifconfig,ping. - Tareas programadas:
crontabpara backups y archivos con fecha/hora. - Información del sistema y sesiones:
uptime,who,last,uname,dmesg.
- Particiones y RAID: Análisis de discos, particiones, tipos de RAID y capacidades.
- Búsqueda y Metadatos: Uso de
findystatpara archivos según criterios de nombre, extensión, permisos, tamaño y fecha. - Manipulación de Archivos: Tamaño de archivos, borrado por extensión, mover archivos con permisos específicos, identificar archivos más grandes.
- Enlaces y Estructura: Creación de enlaces simbólicos (
ln -s).
Para trabajar de forma remota en el entorno controlado del laboratorio de la facultad, se puede conectar mediante SSH usando el puerto 2222:
ssh usuario@IP_DEL_SERVIDOR -p 2222