Algoritmos y Estructuras de Datos Compiladores e Intérpretes Herramientas Lenguaje de programación
!Prog C/C++
Linux Matemáticas
Mates Discretas
Programación Orientada a Objetos Redes y Computación Distribuida Sistemas Operativos

Admininistración de Sistemas

[date: 05-01-2025] [last modification: 14-01-2025]
[words: 3913] [reading time: 19min] [size: 45625 bytes]

Algunas tareas que un buen administrador de sistemas debería hacer.

Automatización de tareas

En esta sección veremos comandos que permiten automatizar tareas repetitivas.

at
  1. Ejecutar at [opciones] TIME
  2. Introducir los comandos a ejecutar en el momento TIME
  3. Salir y guardar con Ctrl-D
  4. El trabajo se ejecutará mientras el sistema esté encendido a la hora indicada.
  5. La salida estándar se le enviará como mail al usuario.

Otros comandos:

  • atq: lista los trabajos pendientes (todos si eres root)
  • atrm: borra trabajos indicándolos por su número
batch

Ejecuta comandos cuando el uso de CPU sea baja.

  • La tarea se iniciará cuando la carga sea menor a 1.5
  • La carga se obtiene del archivo /proc/loadavg
cron

El demonio cron ejecutará los trabajos configurados con el comando crontab de forma periódica.

crontab file  Añadir un trabajo
crontab -e    Edita un trabajo
crontab -l    Lista los trabajos
crontab -r    Borra los trabajos
crontab -u    Para operar como otro usuario (solo root)

Los trabajos se especifican en un archivo. Este puede tener 3 tipos de líneas:

  • Comentarios. Empiezan por #

  • Definición de variables: clave=valor
    Ejemplos de variables: SHELL, MAILTO (quien recibe la salida del comando).

  • Especificación del trabajo y hora:

    minuto hora día mes día_semana comando
    
    • Día de la semana del 0 al 7 (0 y 7 son domingo)
    • * indica cualquier valor
    • Se pueden indicar rangos:
      • 1-5: lunes a viernes
      • 0,15,30,45: cada 15 minutos
      • 0-12/2: en el rango de las 0 a las 12, ejecutar cada 2 horas

Estos trabajos también se pueden colocar en los directorios:

  • /etc/cron.hourly/
  • /etc/cron.daily/
  • /etc/cron.weekly/
  • /etc/cron.monthly/

Copias de seguridad

Realizar copias de seguridad es una de las tareas más importantes de un administrador de sistemas. Es casi inevitable la pérdida de información debido a:

Y es imprescindible poder recuperar la información perdida.

Componentes de las copias de seguridad

Un sistema robusto contra las pérdidas de información tiene 3 componentes:

Tipos de backups

En general, una secuencia de nivel j contiene solo modificaciones con respecto al previo más cercano i que sea menor.

Planificación de los backups

Hay muchas estrategias a seguir a la hora de planificar las copias de seguridad. A modo de ejemplo, supongamos que:

Por tanto, habrá que hacer copias de seguridad en 3 niveles:

Comandos básicos

dump

Hace copias de un sistema de archivos con las siguientes características:

  • Todo tipo de archivos (inclusive dispositivos)
  • Se preservan permisos, propietarios y fechas de modificación.
  • Se pueden realizar copias incrementales y multivolumen (varias cintas)
dump [-nivel] [opciones] [archivos]

El campo nivel es un entero entre 0 y 9. Si es mayor que 0, implica copiar solo los archivos cambiados desde la última copia de valor menor.

La información sobre los backups realizados se guarda en /var/lib/dumpdates.

restore
Comando para restaurar ficheros salvados por dump.
dd

Comando de copia y conversión basado en imagen.

dd if=/path/input of=/path/output [opciones]
  • bs=<num> indica el tamaño del bloque
  • count=<num> indica el número de bloques

También se puede usar el comando tar (Tape Archiver).

Gestión de procesos

Nota
Para más información sobre qué es un proceso, consulta el artículo sobre procesos.

Veremos:

Listar procesos

ps
Process Status

El comando ps permite ver los procesos en ejecución. Tiene una gran variadad de opciones, pero las más habituales son:

  • -e: muestra todos los procesos
  • -u user: muestra todos los procesos de un usuario
  • -o formato: especifica las columnas de información a mostrar

En la columna de estado (state) se muestra una letra que describe el estado del proceso:

  • R: Running, ejecutándose o en la cola de ejecución.
  • S: interruptible Sleep, dormido esperando un evento como datos de teclado.
  • D: uninterruptible sleep, detenido esperando normalmente IO.
  • T: stopped, detenido por una señal de control.
  • Z: zombie, terminado pero a la espera de que su padre lo libere.
pstree
Muestra el árbol de procesos
pgrep
Permite buscar procesos por nombre. Equivalente a ps | grep <nombre>.
top y htop
Muestran una lista de procesos en una TUI (Terminal User Interface) que se actualiza periódicamente. Dentro del programa se pueden cambiar las opciones de visualización, filtrado, etc.

Ejecución en segundo plano

Nota
Ver Bash

Lógicamente, solo sepuede ejecutar un único comando en primer plano, pero cualquier número en segundo plano.

comando &  Lanza un comando en segundo plano
CTRL-C     Detiene un comando en primer plano
CTRL-Z     Pausa un proceso en primer plano
bg         Continua ejecutándolo en segundo plano
fg         Lo retoma en el primer plano
jobs       Lista procesos en segundo plano

Señales

Nota
kill -l           Lista las señales posibles
kill -N PID       Envía una señal con su código numérico al proceso
kill -nombre PID  Envía una señal al proceso
-----------------------------------------------------------------------
pkill -N PID      Envía señales al proceso por el nombre del ejecutable
pkill -nombre PID Envía señales al proceso por el nombre del ejecutable
Recordatorios de señales
SIGTERMMata el proceso, permitiéndole terminar correctamente.
SIGKILLMata el proceso inmediatamente (no se puede ignorar).
SIGINTInterrupción de teclado (Ctrl-C).
SIGSTOPPausa temporlamente el proceso (no se puede ignorar).
SIGTSTPStop de teclado (Ctrl-Z).
SIGCONTContinua un proceso detenido.
SIGHUPSe recibe cuando el proceso controlador (o terminal) termina.

Prioridad

La prioridad de un proceso puede ir de -20 (más alta) a 19 (más baja). Por defecto, la prioridad es 0 y los usuarios normales solo se la pueden bajar (solo root la puede subir).

Nota
NI o NICE es el valor de prioridad asignada al iniciar el proceso, mientras que PRI es la prioridad actual que va ajustando el planificador del kernel.
nice -n NUM proceso  Resta NUM a la priodidad del proceso antes de lanzarlo
renice NUM -p PID    Resta NUM a la priodidad de un proceso en ejecución

Control de recursos de un proceso

El comando ulimit permite limitar los recursos que puede utilizar un proceso.

Análisis básico de rendimiento

uptime  Tiempo encendido, número de usuarios y carga media
w       Igual que uptime, pero más información sobre usuarios y sus procesos
free    Muestra la cantidad de memoria libre y usada, tanto RAM como swap

Otros

strace
Muestra las llamadas al sistema que realiza un proceso en ejecución.
nohup

Cuando la shell termina (logout), envía la señal SIGHUP a todos los trabajos que todavía se ejecutaban, para que ellos también terminen.

Al ejecutar nohup firefox, cuando se cierre la shell, firefox no recibirá dicha señal y seguirá abierto.

exec
Ejecuta un comando reemplazando el shell desde el que se lanza.

Gestión de archivos

Tipos de archivos y sus operaciones

En Linux y Unix, se consideran ficheros todo tipo de objetos que pueden ser operados de forma similar a un fichero: dispositivos de lectura de datos, se transforma en la lectura de un archivo; mientras que el envío de instrucciones puede considerarse escrituras.

Teniendo en cuenta esto, en Linux se diferencian 7 tipos de archivos diferentes:

Tipos de archivos
Archivos normalesLos normales que se almacenan en disco, se crean con distintos programas (por ejemplo touch) y se eliminan con rm.
DirectoriosSe utilizan para agrupar archivos y crear estructuras lógicas: contiene referencias otros archivos y directorios. Se crean con mkdir y se borran con rmdir o rm -r.
Archivos de dispositivos de bloqueEstos permiten la comunicación con el hardware y periféricos que utilicen bloques de datos para realizar operaciones de entrada/salida, por ejemplo discos duros. Se crean con mknod y se borran con rm.
Archivos de dispositivos de carácterSimilares a los dispositivos de bloque, estos realizan operaciones de entrada/salida byte a byte. También se crean con mknod y se borran con rm.
Tuberías con nombre
Named pipes
También llamados archivos FIFO, permiten la comunicación entre procesos. Se crean con mknod y se borran con rm.
Sockets

Comunican procesos en la red. Se crean con socket() y se borran con rm o unlink().

Más información en el post del API de sockets.

Enlaces simbólicosTambién llamados enlaces blandos. Son básicamente punteros a otros archivos. Se crean con ln -s y se borran con rm.

El comando file nos permite determinar qué tipo de archivo es cada uno.

Atributos de un archivo

Se pueden ver los atributos de un fichero con ls -l.

Permisos

Comando chmod
chmod [-R] [+-=]permisos fileAñade (+), quita (-) o establece (=) permisos en formato simbólico.
chmod [-R] u[+-=]permisos fileIgual que el anterior, pero solo para el usuario propietario.
chmod [-R] g[+-=]permisos fileIgual que el anterior, pero solo para el grupo propietario.
chmod [-R] o[+-=]permisos fileIgual que el anterior, pero solo para otros usuarios.

La opción -R es recursivo, para aplicar el permiso a los archivos de dentro del directorio especificado

También es posible especificar el valor de los 3 (o 4) octetos de los permisos.

chmod 770 file # ==> -rwxrwx---

Los permisos por defecto los define la máscara. Se pueden cambiar con el comando umask.

Propietarios

Con los comandos chown y chgrp se pueden cambiar el usuario y grupo dueño del archivo.

chown usuario archivos
chgrp grupo archivos
chown usuario:grupo archivos

La opción -R hace que recorra recursivamente los directorios.

Los archivos de link son una manera de crear un atajo a otro archivo, de tal forma que estamos creando un pseudo-archivo que refiere al original.

Imaginemos que tenemos una carpeta cualquiera en un USB (/media/usb/music) y creamos un archivo de link a este USB en nuestro usuario (~/music). Si abres el link, estarás en ~/music, no te redirigirá a /media/usb/music. Pero si haces algunos cambios ahí, estos se reflejarán automáticamente en el original.

Se pueden usar en los siguientes ámbitos:

Nota
Se puede ver el número de archivos que apuntan al mismo inodo usando ls -l, el número después de los permisos. Nótese que en los directorios ese número será igual al número de subdirectorios que contenga (contando . – él mismo–, y .. – directorio padre).
    flowchart BT
    i(inode)
    f(myfile.txt)
    h(Hard Link)
    s(Soft Link)

    h --> i
    f --> i
    s --> f

Para crear un hard link se usa simplemente el siguiente comando:

ln ORIGINAL LINK

Un enlace simbólico también se crea con el comando ln, pero con una flag adicional:

ln -s ORIGINAL LINK

Para no liar los enlaces simbólicos, lo mejor es usar direcciones absolutas.

¿Cómo diferenciar los dos tipos?

En realidad, solamente podrás diferenciar los soft links, porque aparecerá (tras un comando ls -l) una l indicando que es un enlace. Además de eso, después del nombre del archivo, se mostrará a que otro archivo hace referencia:

lrwxrwxrwx 1 magno magno   26 Jan 27 17:50 soft -> originals/example-soft.txt

Por otro lado, un hard link, no podrá diferenciarse de ningún archivo normal, ya que se mostrará - indicando que es un archivo, y no aparecerá ningún indicador de donde esta el otro archivo al que hace referencia.

Puede que si que exista una forma de comprobarlo, pero yo todavía no lo he descubierto.

Más?: Usa $ man ln

Localización de archivos

El comando básico para localizar archivos es find.

find directorio expresión

Donde la expresión puede ser (entre muchas otras opciones):

Las expresiones se pueden combinar entre sí.

find puede ejecutar una acción por cada archivo encontrado:

Más opciones:

Otros comandos de localización de archivos
whichencuentra un ejecutable en PATH
whereisencuentra un ejecutable en los directorios estándar junto con su documentación.
locate

localiza todo tipo de archivos rápidamente.

  • Usa una BD para acceder más rápido. Esta se almacena en /var/cache/locate/locatedb
  • updatedb actualiza dicha BD

Gestión de discos

Logical Volume Management

En lugar de realizar particiones físicas mediante la modificación de las tablas en MBR o GPT, los sistemas Linux modernos proporcionan el sistema LVM, que proporciona una visión de alto nivel sobre los discos:

Volúmen Físico (PV)
Discos duros, particiones de los mismos (definidas en la tabla de particiones) u dispositivos similares, por ejemplo RAID: discos lógicos en general. Deben ser continuas en el disco.
Grupo de volúmenes (VG)
A partir de los volúmenes físicos, se construyen agrupaciones lógicas llamadas Grupo de Volúmenes (LV) que forman una unidad administrativa.
Volumen Lógico (LV)

Los Grupos de Volúmenes (VG) se dividen de forma lógica en Volúmenes Lógicos (LV), cada uno con una etiqueta.

Estos se podrán cifrar y contener sistemas de archivos, para luego ser montadas con mount o en /etc/fstab.

Por tanto, se genera este esquema:

Sistemas de archivos/home/data
Volumen Lógico (LV)/dev/primary_vg/home_lv/dev/primary_vg/data_lv
Grupo de Volúmenes (VG)primary_vg
Volúmenes Físicos (PV)/dev/sda1/dev/sda2/dev/sdb1/dev/sdb2
↑ ↑ ↑ ↑
Particiones Físicas/dev/sda1/dev/sda2/dev/sdb1/dev/sdb2
Discos Físicos/dev/sda/dev/sdb

El tamaño de los volúmenes físicos y lógicos puede medirse en bytes o en unidades lógicas o bloques:

Comandos de uso:

------------------------------------------
pvdisplay/pvs pv   Show Physical Volumes
vgdisplay/vgs vg   Show Volume Groups
lvdisplay/lvs lv   Show Logical Volumes
------------------------------------------
pvcreate part      Crea un volumen físico
------------------------------------------
vgcreate vg pv...  Create Volume Group
vgremove vg pv     Remove Volume Group
vgextend vg pv     Añade volumen físico al grupo
vgreduce vg pv     Elimina volumen físico del grupo
------------------------------------------
lvcreate -n lv vg  Crea un LV
lvremove lv        Crea un LV
lvextend lv -L+x   Crea un LV
lvreduce lv -L-x   Crea un LV
------------------------------------------
fsadm resize lv    Formatear el espacio aumentado del file-system

Nótese que tras ampliar el tamaño de un volumen lógico o partición, mientras que no se expanda el sistema de archivos, el usuario (y programas) seguirá viendo en mismo tamaño hasta que se realice el fsadm resize.

    flowchart TB
    d[Disco /dev/sda]
    p[Partición /dev/sda1]
    f[Volumen físico /dev/sda1]
    g[Grupo de volúmenes grupo_vg]
    l[Volumen lógico /dev/grupo_vg/root_lv]
    s[Sistema de ficheros]

    d -- "fdisk /dev/sda" --> p
    p -- "pvcreate /dev/sda1" --> f
    f -- "vgcreate grupo_vg /dev/sda1 /dev/sda2" --> g
    g -- "lvcreate -L80GB -n root_lv grupo_vg" --> l
    l -- "mkfs.ext4 /dev/grupo_vg/root_lv" --> s

Alternativamente, en lugar de usar /dev/grupo_volumen/volumen_logico directamente, se puede usar /dev/mapper/grupo_volumen-volumen_logico a través del mapeador de dispositivos (device mapper).

Device Mapper

El mapeador de dispositivos es un entorno proporcionado por el kernel de Linux para el mapeo de dispositivos de bloque físicos a dispositivos virtuales de nivel superior.

Esta forma de acceso es más cómoda cuando se trabaja con volúmenes cifrados.

Gestión de usuarios

Módulo de autentificación

PAM (Pluggable Authentication Module) es una librería de autenticación genérica que las aplicaciones puede usar para validar usuarios, usando múltiples esquemas de autenticación (ficheros locales, claves de un solo uso, DNI electrónivo, LDAP…).

Cuotas de usuario

Editando el archivo /etc/fstab, el administrador puede establecer límites de uso del disco a los diferentes usuarios y grupos para evitar que acaparen todo el espacio.

Se pueden establecer dos límites:

Se requiere de la instalación del paquete quota.

Comandos de cuotas de usuario
cuotacheckConstruye el índice y testea la integridad.
quotaon
quotaoff
Activa y desactiva las cuotas.
edquotaAjusta las cuotas de usuarios y grupos.
repquotaGenera informes de uso.
quotaInforma al un usuario de sus cuotas.
Anterior: Usuarios Volver a Linux