🖇️
Apuntes LPIC-1
  • General
  • Ejercicios de utilidades
  • 1️Examen 101
    • Tema 101: Arquitectura del Sistema
    • Tema 102: Instalación de Linux y gestión de paquetes
    • Tema 103: Comandos GNU y Unix
      • 103.1 - Trabajar desde la línea de comandos
      • 103.2 - Procesar secuencias de texto usando filtros
        • Listado de texto plano
        • Ejercicios 103.2
      • 103.3 - Administración básica de archivos
      • 103.4 - Uso de secuencias de texto, tuberías y redireccionamientos
      • 103.5 - Crear, supervisar y matar procesos
        • 🚧Ejercicios 103.5
      • 103.6 Modificar la prioridad de ejecución de los procesos
      • 103.7 - Realizar búsquedas en archivos de texto usando expresiones regulares
      • 103.8 - Edición básica de archivos
    • Tema 104: Dispositivos, sistemas de archivos Linux y el estándar de jerarquía de archivos
    • Test prueba
  • 2️Examen 102
    • Tema 105: Shells y scripts
    • Tema 106: Interfaces de usuario y escritorios
    • Tema 107: Tareas administrativas
    • Tema 108: Servicios esenciales del sistema
    • Tema 109: Fundamentos de redes
    • Tema 110: Seguridad
Powered by GitBook
On this page
  • Objetivos del tema 107
  • 107.1 Administrar cuentas de usuario y de grupo y los archivos de sistema relacionados con ellas
  • Contenidos
  • Cuentas de usuario
  • Grupos
  • El directorio skel
  • El archivo /etc/login.defs
  • El comando passwd
  • El comando chage
  • Obtener información del sistema: getent
  • 107.2 Automatizar tareas administrativas del sistema mediante la programación de trabajos
  • Contenidos
  • Crear crones de sistema
  • Gestión de crontab
  • 107.3 Localización e internacionalización
  • Contenidos
  1. Examen 102

Tema 107: Tareas administrativas

PreviousTema 106: Interfaces de usuario y escritoriosNextTema 108: Servicios esenciales del sistema

Last updated 1 month ago

Objetivos del tema 107

  • 1

107.1 Administrar cuentas de usuario y de grupo y los archivos de sistema relacionados con ellas

Importancia

5

Descripción

El candidato debe ser capaz de añadir, eliminar, suspender y modificar cuentas de usuario.

Áreas de conocimiento clave:

  • Añadir, modificar y eliminar grupos y usuarios.

  • Administrar información de usuarios/grupos en bases de datos de contraseñas/grupos.

  • Crear y administrar cuentas limitadas y de propósito especial.

Contenidos

La administración de usuarios y grupos es una parte muy importante del trabajo de cualquier administrador de sistemas. Las modernas distribuciones de Linux implementan interfaces gráficas que permiten gestionar todas las actividades relacionadas con este aspecto de forma rápida y sencilla, estas son diferentes entre sí en términos de diseños gráficos, no obstante las características siguen siendo las mismas. Con estas herramientas se pueden ver, editar, añadir y eliminar usuarios y grupos locales. Sin embargo, para una gestión más avanzada es necesario trabajar a través de la línea de comandos:

Cuentas de usuario

Antes de entrar con los comandos, debes saber que archivos intervienen, algunos de ellos ya los hemos visto en anteriores lecciones pero vamos a repasar:

Los usuarios se guardan por defecto en el archivo /etc/passwd que tiene una estructura tal que así:

#nombre_usuario:contraseña:ID_usuario:ID_grupo:nombre_completo:directorio_home:shell
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:usr/sbin/nologin

Donde cada palabra separada por dos puntos significa:

  • nombre_usuario: El nombre de la cuenta de usuario.

  • contraseña: Esta parte normalmente contiene la contraseña en texto plano, pero debido a razones de seguridad, ahora generalmente contiene una "x" que indica que la contraseña está almacenada en el archivo /etc/shadow *.

  • ID_usuario: El identificador único del usuario (UID).

  • ID_grupo: El identificador del grupo principal del usuario (GID).

  • nombre_completo: Información adicional sobre el usuario, como su nombre real.

  • directorio_home: El directorio home del usuario, donde se almacenan sus archivos personales.

  • shell: El intérprete de comandos predeterminado para el usuario (como /bin/bash).

El fichero /etc/shadow antes mencionado es donde se guardan las contraseñas cifradas de los usuarios y la información referente a su validez, tiene permisos de –rw (escritura lectura) para usuario root y solo permisos de lectura para usuarios Shadow. Tiene una sintaxis parecida al "passwd" tal que así:

alumno:$6$CmR8XmO6$/CbjqGhD70lcRXCNUKkGElC7BhsgP0LM.MJcqQ7UtwyhT.ns1 :17802:0:99999:7:::

Donde:

  1. Nombre de Usuario

  2. Contraseña cifrada con formato $id$salt$hashed. El $id indica el algoritmo de cifrado: $1$ MD5, $2a$ o $2y$ Blowfish, $5$ SHA-256 y $6$ SHA-512

  3. Guarda cuándo fue cambiada por última vez en numero de dias desde 1-01-1970, si quieres saber que fecha es puedes usar date -d '1970-01-01 +19480 days'

  4. El mínimo de días que deben transcurrir hasta que pueda volver a cambiarse.

  5. El máximo de días de validez de la contraseña.

  6. Número de días durante los que avisará de que la clave va a caducar

  7. Días que pasarán desde que la clave caduca hasta que se deshabilita la cuenta

Agregando usuarios

En Linux, puedes añadir una nueva cuenta de usuario con el comando useradd. Por ejemplo, con privilegios de root, puedes crear una nueva cuenta de usuario llamada Juan con una configuración por defecto, usando lo siguiente:

useradd juan

Cuando se ejecuta el comando useradd, la información de usuario y grupo almacenada en las bases de datos de contraseñas y grupos se actualiza para la cuenta de usuario recién creada, y si se especifica, también se crea el directorio principal del nuevo usuario. Adicionalmente se crea un grupo con el mismo nombre de la nueva cuenta de usuario. Los usuarios se guardan en el archivo /

Una vez que haya creado el nuevo usuario, puede establecer su contraseña usando el comando passwd. Puede revisar su ID de usuario (UID), ID de grupo (GID) y los grupos a los que pertenece a través de los comandos id y groups.

passwd juan
#Changing password for user juan.
#New UNIX password:
#Retype new UNIX password:
#passwd: all authentication tokens updated successfully.

id juan
#uid=1000(juan) gid=100(juan) groups=100(juan)

groups juan
#juan : juan

Ten en cuenta que sólo los usuarios con privilegios de root pueden cambiar la contraseña de cualquier usuario.

Las opciones más importantes que se aplican al comando useradd son:

Opción
Descripción
Ejemplo

-c

Crear una nueva cuenta de usuario con comentarios personalizados (por ejemplo, el nombre completo del usuario).

useradd -c "Juan Pérez" juan

-d

Crear una nueva cuenta de usuario con un directorio de inicio específico.

useradd -d /home/juan_custom juan

-e

Crear una nueva cuenta de usuario estableciendo una fecha específica en la que expirará.

useradd -e 2025-12-31 juan

-f

Establece el número de días después de que expire una contraseña, durante los cuales el usuario debe actualizarla (de lo contrario, la cuenta expirará). El valor por defecto es -1 .

sudo useradd -m -f 7 juan

-g

Crear una nueva cuenta de usuario con un GID específico.

useradd -g profesores juan

-G

Crear una nueva cuenta de usuario añadiéndola a múltiples grupos secundarios.

useradd -G sudo,desarrolladores juan

-k

Crear una nueva cuenta de usuario copiando los archivos del "skeleton" (skel) de un directorio personalizado específico (esta opción sólo es válida si se especifica la opción "m" o new home).

sudo useradd -m -k /usr/share/skeletons/devuser devjuan

-m

Crear una nueva cuenta de usuario con su directorio principal (si no existe).

useradd -m juan

-M

Crear una nueva cuenta de usuario sin su directorio principal.

useradd -M juan

-s

Crear una nueva cuenta de usuario con un de acceso específico.

useradd -s /bin/bash juan

-u

Crear una nueva cuenta de usuario con un UID específico

useradd -u 1050 juan

Los parámetros combinados podrian ser algo así:

sudo useradd -m -s /bin/bash -g staff -G sudo,developers -c "Juan Pérez" juan
  • Se crea el usuario juan

  • Su carpeta personal será /home/juan

  • Tendrá acceso a una terminal (bash)

  • Pertenece al grupo principal staff y también a los grupos sudo y developers

  • Puede usar sudo para ejecutar comandos como root

  • Su "nombre completo" o comentario será "Juan Pérez"

Modificación de las cuentas de usuario

En ocasiones es necesario cambiar un atributo de una cuenta de usuario existente, como también el nombre de usuario, el shell, la fecha de caducidad de la contraseña, etc. En tales casos, necesitas usar el comando usermod:

usermod -s /bin/sh juan
usermod -c "Juan Fernández" juan

Al igual que con el comando useradd, el comando usermod requiere privilegios de root.

En los ejemplos anteriores, primero se cambia el shell de inicio de sesión de juan y luego se añade una breve descripción a esta cuenta de usuario. Recuerda que puedes modificar varios atributos a la vez, especificándolos en un solo comando. Las opciones más importantes que se aplican al comando `usermod' son las mismas que en useradd solo que estas modifican los parámetros concretos.

Recuerda que cuando cambies el nombre de inicio de sesión de una cuenta de usuario, probablemente debas cambiar el nombre del directorio principal de ese usuario junto con otros elementos relacionados con el usuario, por ejemplo, los archivos de la cola de correo.

Recuerda también que cuando cambies el UID de una cuenta de usuario, probablemente deberías corregir la propiedad de los archivos y directorios fuera del directorio principal del usuario (el ID de usuario se cambia automáticamente para el buzón de correo del usuario y para todos los archivos que son propiedad del usuario y que se encuentran en el directorio principal del usuario).

Eliminando cuentas de usuario

Si quieres borrar una cuenta de usuario, puedes usar el comando userdel. En particular, este comando actualiza la información almacenada en las bases de datos de las cuentas, borrando todas las entradas referentes al usuario especificado. La opción -r también elimina el directorio principal del usuario y todos sus contenidos, junto con el spool de correo del usuario. Otros archivos, localizados en otros lugares, deben ser buscados y eliminados manualmente:

userdel -r michael

Al contrario que useradd y usermod, necesitas el privilegio de root para borrar cuentas de usuario.

Grupos

Los grupos en Linux ofrecen una buena herramienta para gestionar permisos de forma colectiva, son fáciles de usar, al igual que con la gestión de usuarios, puede añadir, modificar y eliminar grupos usando los comandos groupadd, groupmod y groupdel con privilegios de root. Si quieres crear un nuevo grupo llamado developer, puede ejecutar el siguiente comando:

groupadd -g 1090 developer

La opción -g de este comando crea un grupo con un GID específico, si lo haces así, debes saber que deberás cambiar el GID de todos los archivos y directorios que deben seguir perteneciendo al grupo.

Debes tener en cuenta que cuando añades una nueva cuenta de usuario, el grupo primario y los grupos secundarios a los que pertenece deben existir antes de lanzar el useradd. Si luego deseas renombrar el grupo de developer a web-developer y cambiar su GID, puedes ejecutar lo siguiente:

groupmod -n web-developer -g 1050 developer

Finalmente, si quieres borrar el grupo de web-developer, puedes ejecutar lo siguiente:

groupdel web-developer

No se puede eliminar un grupo si es el grupo principal de una cuenta de usuario. Por lo tanto, debes eliminar el usuario antes de eliminar el grupo. En cuanto a los usuarios, si elimina un grupo, los archivos pertenecientes a ese grupo permanecen en su sistema de archivos y no se eliminan ni se asignan a otro grupo.

Los grupos se guardan en el archivo /etc/groups y quienes pertenecen a ellos de forma secundaria, tiene una sintaxis de la siguiente manera:

Clase:x:1003:juan,maria

Donde:

  1. Nombre del grupo

  2. Contraseña en /etc/gshadow

  3. GID (Group ID)

  4. Lista de nombre de usuarios separados por comas que pertenecen al grupo de forma secundaria

El directorio skel

Cuando añades una nueva cuenta de usuario, incluso creando su directorio principal, el directorio principal recién creado se carga de archivos y carpetas que se copian del directorio skeleton (por defecto /etc/skel) pero se puede modificar con la opción -k tal y como hemos visto.

La idea detrás de esto es simple: un administrador del sistema quiere agregar nuevos usuarios que tengan los mismos archivos y directorios en su carpeta principal. Por lo tanto, si desea personalizar los archivos y carpetas que se crean automáticamente en el directorio principal, debe añadir estos nuevos archivos y carpetas al directorio skel, piensa en ello como una plantilla para estructuras de carpeta.

Para listar todos los archivos y directorios en el directorio skel, debes usar el comando ls -al.

PRACTICA: Personalización de entornos de usuario con skel

Partimos de que tenemos un servidor Linux que recibe usuarios nuevos por LDAP o localmente. Según su rol (developer, admin), deben tener:

  • Un mensaje de bienvenida personalizado.

  • Alias útiles en .bashrc.

  • Variables de entorno específicas.


📂 Paso 1: Crear directorios de plantilla personalizados

Primero crearemos dos directorios especificos de skel

sudo mkdir -p /etc/skel-dev
sudo mkdir -p /etc/skel-admin

✏️ Paso 2: Personalizar las plantillas

Personalizaremos los archivos .bashrc de cada uno:

/etc/skel-dev/.bashrc
echo '
# .bashrc para desarrolladores
alias ll="ls -lah --color=auto"
export PATH=$PATH:/opt/devtools
echo "¡Bienvenido desarrollador!"
' | sudo tee /etc/skel-dev/.bashrc

Y:

/etc/skel-admin/.bashrc
echo '
# .bashrc para administradores
alias l="ls -l"
alias update="sudo apt update && sudo apt upgrade"
export HISTTIMEFORMAT="%F %T "
echo "Acceso administrativo: tenga cuidado"
' | sudo tee /etc/skel-admin/.bashrc

👥 Paso 3: Crear usuarios con directorios personalizados

Tal y como hemos visto, ahora crearemos los usuarios correspondientes:

- Usuario desarrollador:

sudo useradd -m -k /etc/skel-dev -s /bin/bash devjuan
sudo passwd devjuan

- Usuario administrador:

sudo useradd -m -k /etc/skel-admin -s /bin/bash adminlucia
sudo usermod -aG sudo adminlucia
sudo passwd adminlucia

🔍 Paso 4: Verificar

Inicia sesión con los usuarios:

sudo su - devjuan
sudo su - adminlucia

Verás ya que cada uno recibe un entorno distinto, con los mensajes y alias personalizados.

El archivo /etc/login.defs

En Linux, el archivo /etc/login.defs especifica los parámetros de configuración que controlan la creación de usuarios y grupos. Además, los comandos mostrados en las secciones anteriores toman por defecto valores de este archivo, cuando administres usuarios y grupos, comprueba siempre este archivo para ver y eventualmente cambiar el comportamiento por defecto del sistema (si fuese necesario), esto es útil para designar directivas por defecto en el sistema. Las directivas más importantes son:

  • UID_MIN y UID_MAX: El rango de ID de usuario que puede ser asignado a los nuevos usuarios ordinarios.

  • GID_MIN y GID_MAX: El rango de ID de grupo que puede ser asignado a nuevos grupos ordinarios.

  • CREATE_HOME: Especifica si un directorio principal debe ser creado por defecto para los nuevos usuarios.

  • USERGROUPS_ENAB: Especifica si el sistema debe crear por defecto un nuevo grupo para cada nueva cuenta de usuario con su mismo nombre, y a su vez al eliminar la cuenta también se debe eliminar el grupo principal del usuario si ya no contiene miembros.

  • MAIL_DIR: El directorio de la cola de correo.

  • PASS_MAX_DAYS: El número máximo de días que una contraseña puede ser usada.

  • PASS_MIN_DAYS: El número mínimo de días permitido entre los cambios de contraseña.

  • PASS_MIN_LEN: La longitud mínima aceptable de la contraseña.

  • PASS_WARN_AGE: El número de días de advertencia antes de que una contraseña expire

Recuerda que puedes abrirlo con:

sudo nano /etc/login.defs

El comando passwd

Este comando se utiliza principalmente para cambiar la contraseña de un usuario. Como se describió anteriormente, cualquier usuario puede cambiar su propia contraseña, pero sólo root puede cambiar la contraseña de cualquier usuario. Esto sucede porque el comando passwd se ejecuta con los privilegios del propietario del archivo (por lo tanto, root).

ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root 42096 mag 17  2015 /usr/bin/passwd

Algunas opciones interesantes son:

  • passwd –l usuario: Bloqueamos a los usuarios la entrada al sistema.

  • passwd –u usuario: Desbloqueamos al usuario

Los grupos también pueden tener una contraseña, que puede ser establecida usando el comando gpasswd. Los usuarios que no son miembros de un grupo pero conocen su contraseña, pueden unirse a este temporalmente usando el comando relacionados con ellas newgrp. Recuerde que gpasswd también se utiliza para añadir y eliminar usuarios de un grupo y para establecer la lista de administradores y miembros ordinarios del grupo.

El comando chage

Este comando determinado como “change age”, se usa para cambiar el período de la contraseña de un usuario. El comando chage está restringido a root, excepto la opción usada por usuarios ordinarios para listar el tiempo de su contraseña. Si no se especifica parámetro, muestra un asistente.

Algunas de las opciones:

  • -d: establece el día del último cambio de la contraseña

  • -E: establece la fecha de caducidad de la cuenta

  • -I: deshabilita la cuenta después de X días de la fecha de caducidad de la contraseña

  • -l: muestra información de la cuenta

  • -m: número mínimo de días antes de cambiar la contraseña

  • -M: número máximo de días antes de cambiar la contraseña

  • -W: días de aviso de expiración

Por ejemplo:

sudo chage -d 2023-01-01 -E 2023-12-31 -I 30 -m 7 -M 90 -W 7 juan

Este comando cambiaría varias configuraciones de la cuenta de juan:

  • El último cambio de contraseña fue el 1 de enero de 2023.

  • La cuenta expirará el 31 de diciembre de 2023.

  • La cuenta se deshabilitará 30 días después de la expiración de la contraseña.

  • juan debe esperar al menos 7 días para cambiar su contraseña.

  • La contraseña caducará después de 90 días.

  • juan recibirá una advertencia 7 días antes de la caducidad de su contraseña.

Obtener información del sistema: getent

El comando getent es utilizado para obtener información de diversas bases de datos de sistema, como usuarios, grupos, servicios, y más. Este comando obtiene la información de las bases de datos configuradas en el sistema como algunas que hemos visto como /etc/passwd, /etc/group, o servicios que están definidos en archivos de configuración como /etc/nsswitch.conf.

La sintaxis básica del comando getent es:

getent [opciones] <base de datos> [clave de búsqueda]
  • <base de datos>: Especifica la base de datos de la cual deseas obtener la información algunas de las más comunes son:

    • passwd: Información de cuentas de usuario.

    • group: Información sobre grupos.

    • hosts: Información sobre los nombres de host.

    • services: Información sobre los servicios de red.

    • networks: Información sobre redes.

    • protocols: Información sobre protocolos de red.

    • ethers: Información sobre direcciones MAC.

    • passwd y shadow: Información sobre contraseñas de usuarios.

  • [clave de búsqueda]: (opcional) Especifica una clave para buscar un valor dentro de la base de datos.

Vamos a ver algunos ejemplos útiles:

Ejemplos prácticos

1. Ver todos los usuarios (passwd)

getent passwd

2. Buscar un usuario específico por nombre (passwd)

getent passwd juan

3. Ver todos los grupos (group)

getent group

4. Buscar un grupo específico por nombre (group)

getent group sudo

Esto busca el grupo llamado "sudo" y muestra su información.

5. Consultar un host o dirección IP (hosts)

getent hosts

Este comando muestra los registros de los hosts del sistema, tanto locales como remotos, como si estuvieras viendo el archivo /etc/hosts.

Ejemplo de salida:

127.0.0.1   localhost
192.168.1.100   server.local

6. Buscar una dirección IP o nombre de host específico (hosts)

getent hosts server.local

Este comando devuelve la dirección IP asociada al nombre de host server.local.

Ejemplo de salida:

192.168.1.100   server.local

7. Consultar servicios (services)

getent services

Este comando muestra la lista de todos los servicios de red definidos en el sistema, como si estuvieras viendo /etc/services. Los servicios son identificados por nombre y el puerto asociado.

Ejemplo de salida:

ftp     21/tcp
ssh     22/tcp

8. Buscar un servicio específico (services)

getent services ssh

Este comando muestra el servicio relacionado con el nombre "ssh".

Ejemplo de salida:

ssh     22/tcp

9. Consultar redes (networks)

getent networks

Este comando muestra la lista de redes configuradas en el sistema, como si estuvieras viendo /etc/networks.

Ejemplo de salida:

loopback    127.0.0.0
localnet    192.168.1.0

10. Consultar protocolos de red (protocols)

getent protocols

Este comando muestra los protocolos de red que están configurados en el sistema, como si estuvieras viendo /etc/protocols.

Ejemplo de salida:

ip        0   Internet Protocol
icmp      1   Internet Control Message Protocol

11. Consultar direcciones MAC (ethers)

getent ethers

Este comando muestra las direcciones MAC de las interfaces de red configuradas en el sistema, similar a lo que se encuentra en /etc/ethers.

Ejemplo de salida:

00:14:22:01:23:45   eth0
00:14:22:67:89:ab   eth1

Una de las características más potentes de este comando es la automatización, puedes usar getent en scripts para validar la existencia de usuarios, grupos o servicios, lo cual es útil cuando estás gestionando múltiples servidores.


107.2 Automatizar tareas administrativas del sistema mediante la programación de trabajos

Importancia

4

Descripción

El candidato debe saber usar cron y los temporizadores de systemd para ejecutar trabajos a intervalos regulares y at para ejecutar trabajos en momentos específicos..

Áreas de conocimiento clave:

  • Gestionar trabajos con cron y con at.

  • Configurar el acceso del usuario a los servicios de cron y at.

  • Entender las unidades de temporización de systemd.

Contenidos

Programar trabajos con Cron

En sistemas Linux, cron es un demonio que se ejecuta continuamente y se activa cada minuto para comprobar un conjunto de tablas en busca de tareas a ejecutar. Estas tablas se conocen como crontabs y contienen las llamadas cron jobs.

Cron es adecuado para servidores y sistemas que están encendidos constantemente, porque cada trabajo de cron se ejecuta sólo si el sistema se está ejecutando a la hora programada. Puede ser utilizado por usuarios ordinarios, cada uno de los cuales tiene su propio crontab, así como el usuario root que gestiona los crontabs del sistema.

En Linux también existe la utilidad anacron, que es adecuada para sistemas que pueden ser apagados (como PCs o portátiles). Este sólo puede ser usado por root. Si la máquina está apagada cuando los trabajos de anacron deben ser ejecutados, se ejecutarán la próxima vez que se encienda la máquina. Anacron está fuera del alcance de la certificación LPIC-1.

Crontabs de usuario

Los crontabs de usuario son archivos de texto que gestionan la programación de los trabajos cron definidos por el usuario. Siempre tienen el nombre de la cuenta de usuario que los creó, pero la ubicación de estos archivos depende de la distribución utilizada (generalmente un subdirectorio de /var/spool/cron). Cada línea en un crontab de usuario contiene seis campos separados por un espacio:

  • El minuto de la hora (0-59).

  • La hora del día (0-23).

  • El día del mes (1-31).

  • El mes del año (1-12).

  • El día de la semana (0-7 con domingo=0 o domingo=7).

  • La orden a ejecutar.

Para el mes del año y el día de la semana puedes usar las tres primeras letras del nombre en lugar del número correspondiente. Los primeros cinco campos indican cuándo ejecutar el comando que se especifica en el sexto campo, y pueden contener uno o más valores. En particular, se pueden especificar múltiples valores utilizando:

  • (asterisco) Se refiere a cualquier valor.

  • , (coma) Especifica una lista de posibles valores.

  • - (guión) Especifica un rango de valores posibles.

  • / (slash) Especifica valores escalonados.

Muchas distribuciones incluyen el archivo /etc/crontab que puede ser usado como referencia para la disposición de un archivo cron. A continuación se muestra un ejemplo de archivo /etc/crontab de una instalación de Debian:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 # Example of job definition:
 # .---------------- minute (0 - 59)
 # |  .------------- hour (0 - 23)
 # |  |  .---------- day of month (1 - 31)
 # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
 # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
 # |  |  |  |  |
 # *  *  *  *  * user-name command to be executed

Cada línea de crontab sigue esta estructura:

MINUTO HORA DÍA-MES MES DÍA-SEMANA COMANDO
Campo
Valores Permitidos
Ejemplo

MINUTO

0 - 59

30 (minuto 30)

HORA

0 - 23

14 (2:00 PM)

DÍA-MES

1 - 31

15 (día 15 del mes)

MES

1 - 12 o jan-dec

3 (marzo) o mar

DÍA-SEMANA

0 - 7 (0 y 7 son domingo)

1 (lunes) o mon

COMANDO

Cualquier comando o script

/home/user/script.sh

Ejemplos Básicos

Expresión
Explicación

0 12 * * *

Ejecuta a las 12:00 PM todos los días

30 8 * * 1-5

Ejecuta a las 8:30 AM de lunes a viernes

*/10 * * * *

Ejecuta cada 10 minutos

0 0 1 * *

Ejecuta a las 12:00 AM el primer día de cada mes

0 4 * * 0

Ejecuta a las 4:00 AM cada domingo


Crontabs de sistema

Los crontabs de sistema son archivos de texto que gestionan la programación de los trabajos del cron del sistema y sólo pueden ser editados por el usuario root. El archivo los que se encuentran del directorio /etc/crontab y todos /etc/cron.d son crontabs del sistema. La sintaxis de los crontabs del sistema es similar a la de los crontabs de los usuarios, sin embargo, también requiere un campo obligatorio adicional que especifica qué usuario ejecutará el trabajo de cron.

La mayoría de las distribuciones también incluyen los directorios /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly y /etc/cron.monthly que contienen scripts para ser ejecutados con la frecuencia apropiada. Por ejemplo, si quiere ejecutar un script diariamente puede colocarlo en /etc/cron.daily.

Algunas distribuciones usan /etc/cron.d/hourly, /etc/cron.d/weekly y /etc/cron.d/daily, /etc/cron.d/monthly. Recuerde siempre comprobar los directorios correctos donde colocar los scripts que quiere que cron ejecute.

Al editar los archivos crontab, también puede usar atajos especiales en las primeras cinco columnas en lugar de las especificaciones de tiempo:

Atajo
Tarea

@reboot

Ejecutar la tarea especificada una vez después de reiniciar.

@hourly

Ejecutar la tarea especificada una vez por hora al iniciar.

@daily (o @midnight)

Ejecutar la tarea especificada una vez al día a medianoche. (equivalente a 0 0 * * *)

@weekly

Ejecutar la tarea especificada una vez a la semana a medianoche del domingo. (equivalente a 0 0 * * 0)

@monthly

Ejecutar la tarea especificada una vez al mes a la medianoche del primer día del mes. (equivalente a 0 0 1 * *)

@yearly (o @annually )

Ejecutar la tarea especificada una vez al año a medianoche del 1 de enero. (equivalente a 0 0 1 1 *)

En ocasiones, dentro de un archivo crontab, hay variables definidas antes de que se declaren las tareas programadas. Las variables de entorno establecidas (comúnmente) son:

Variable
Descripción

HOME

El directorio donde cron invoca los comandos (por defecto el directorio principal del usuario).

MAILTO

El nombre del usuario o la dirección a la que se envía la salida estándar y el error (por defecto, el propietario del crontab). También se permiten múltiples valores separados por comas y un valor vacío indica que no se debe enviar ningún correo.

PATH

La ubicación de los comandos en los sistemas de archivos.

SHELL

El shell a usar (por defecto /bin/sh)

Ejecutar tareas con rangos, listas y comodines:

Símbolo
Uso
Ejemplo
Explicación

*

Cualquier valor

* * * * *

Ejecuta cada minuto

,

Lista de valores

0,15,30,45 * * * *

Cada 15 minutos

-

Rango de valores

0 9-17 * * *

Cada hora de 9 AM a 5 PM

/

Intervalo

*/5 * * * *

Cada 5 minutos

Crear trabajos en un cron de usuario

El comando crontab se usa para mantener los archivos crontab para usuarios individuales. En particular, puede ejecutar el comando crontab -e para editar tu propio archivo crontab o para crear uno si aún no existe.

$ crontab -e
 no crontab for frank - using an empty one
 Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        < ‑‑‑‑ easiest
  3. /usr/bin/emacs24
  4. /usr/bin/vim.tiny
 Choose 1-4 [2]:

Por defecto, el comando crontab abre el editor especificado por las variables de entorno VISUAL o EDITOR para que pueda empezar a editar su archivo crontab con su preferido. Algunas distribuciones, permiten elegir el editor de una lista cuando crontab se ejecuta por primera vez. Si quieres ejecutar el script foo.sh con crontab:

#Todos los dias a las 10:00 am
0 10 * * * /home/frank/foo.sh

#Todos los martes a las 08:00 am, a las 08:15 am, a las 08:30 am y a las 08:45 am
0,15,30,45 08 * * 2 /home/frank/bar.sh

#Se ejecuta a las 08:30 pm de lunes a viernes durante los primeros quince días de enero y junio
30 20 1-15 1,6 1-5 /home/frank/foobar.sh

Además de la opción -e mencionada anteriormente, el comando crontab tiene otras opciones útiles:

  • -l Muestra el crontab actual en la salida estándar.

  • -r Quita el crontab actual.

  • -u Especifica el nombre del usuario cuyo crontab necesita ser modificado. Esta opción requiere privilegios de root y permite que el usuario root edite los archivos crontab de otro usuario.

Crear crones de sistema

A diferencia de los crontabs de usuario, los crontabs de sistema se actualizan usando un editor: por lo tanto, no es necesario ejecutar el comando archivos en crontab para editar /etc/crontab y los /etc/cron.d.

Por defecto, cron no muestra la salida de los comandos. Para guardar registros:

0 2 * * * /home/user/script.sh >> /var/log/mi_script.log 2>&1
  • >> /var/log/mi_script.log → Guarda la salida en un archivo de log.

  • 2>&1 → Redirige errores (stderr) al mismo archivo que la salida estándar (stdout).

También puedes enviar un correo con la salida de la tarea usando:

MAILTO="admin@example.com"

(Esto debe ir al inicio del crontab).

Recuerda que cuando edites los crontabs del sistema, debes especificar la cuenta que se usará para ejecutar el trabajo cron (normalmente el usuario root). Por ejemplo, si quiere ejecutar el script barfoo.sh ubicado en el directorio /root todos los días a la 01:30 am, puede abrir /etc/crontab con su editor preferido y agregar la siguiente línea:

30 01 * * * root /root/barfoo.sh >>/root/output.log 2>>/root/error.log 

En el ejemplo anterior, la salida del job se añade a /root/output.log, mientras que los errores se añaden a /root/error.log.

Gestión de crontab

Para ver los cron jobs del usuario actual:

crontab -l

Para agregar o modificar tareas:

crontab -e

Esto abre el archivo de configuración en el editor de texto predeterminado (puedes cambiarlo con export EDITOR=nano antes de ejecutarlo).

¡Cuidado! Esto borra todas las tareas sin confirmación.

crontab -r

Ejemplo de uso

Primero, crea un script que haga algo divertido. Por ejemplo, que muestre un mensaje en la terminal o envíe un sonido de alerta.

nano ~/script_gracioso.sh

Añade lo siguiente dentro del archivo:

#!/bin/bash
echo "Hora de reírse :') - $(date)" >> ~/gracioso.log

Ejecuta:

chmod +x ~/script_gracioso.sh

Abre el editor de cron:

crontab -e

Si es la primera vez, elige el editor (nano es fácil de usar).

Añade esta línea al final del archivo:

*/2 * * * * ~/script_gracioso.sh

📌 Explicación del cron:

  • */2 * * * * → Cada 2 minutos.

  • ~/script_gracioso.sh → Ejecuta el script desde el home del usuario.

Para comprobarlo, lista las tareas del cron:

crontab -l

Para ver si se ejecuta, revisa el log:

tail -f ~/gracioso.log
Ejemplos útiles de uso

1. Copia de seguridad automática

0 3 * * * tar -czf /backup/home-$(date +\%F).tar.gz /home/

💾 Hace un backup de /home/ todos los días a las 3:00 AM.

2. Limpiar archivos temporales cada semana

0 0 * * 0 find /tmp -type f -mtime +7 -delete

🧹 Elimina archivos en /tmp/ con más de 7 días.

3. Reiniciar un servicio si deja de funcionar

*/10 * * * * systemctl is-active --quiet apache2 || systemctl restart apache2

4. Sincronización de Hora con NTP

Corrige la hora del sistema cada 6 horas.

0 */6 * * * ntpdate -u pool.ntp.org

5. Enviar un Correo con el Uso del Disco

Si el uso del disco supera el 90%, envía una alerta por correo.

0 8 * * * df -h | awk '$5 > 90 {print "ALERTA: Uso del disco alto en " $6 ": " $5}' | mail -s "Alerta de espacio en disco" admin@example.com

6. Reinicio Automático del Servidor

Si quieres reiniciar el servidor cada domingo a las 4:00 AM para limpieza de memoria:

0 4 * * 0 /sbin/shutdown -r now

7. Descargar y Aplicar Actualizaciones Automáticas

Si quieres mantener el sistema actualizado:

0 2 * * 1 apt update && apt upgrade -y

(Esto ejecuta la actualización todos los lunes a las 2:00 AM).

Resumen gráfico de cron jobs

107.3 Localización e internacionalización

Importancia

3

Descripción

El candidato debe ser capaz de localizar un sistema en un idioma diferente al inglés. Así mismo, es importante que el candidato sepa por qué LANG=C es útil a la hora de escribir scripts.

Áreas de conocimiento clave:

  • Configuración regional y variables de entorno.

  • Configuración de la zona horaria y de las variables de entorno.

Contenidos

Automatizar las tareas regulares del sistema mediante la programación de trabajos (o Jobs) es una de las cosas más importantes que un buen administrador debe hacer (recuerda que lo vimos en el ). Por ejemplo, un administrador puede crear y automatizar trabajos para copias de seguridad, actualizaciones del sistema y para realizar muchas otras actividades repetitivas. Para ello puede utilizar la función cron, que es útil para automatizar la programación periódica de trabajos.

Para que funcione, debe estar instalado mailutils o postfix en el servidor, puedes ver más ejemplos con correo en mi otra pagina de apuntes:

2️
🚧
107.1 Administrar cuentas de usuario y de grupo y los archivos de sistema relacionados con ellas
107.2 Automatizar tareas administrativas del sistema mediante la programación de trabajos
07.3 Localización e internacionalización
103.5
https://apuntes-alex.gitbook.io/apuntes-smx-alex-viladot/sistemas-y-servidores/monitorizacion-de-servicios-y-redes/servicios-y-cronjobs
archivos de uso de usuarios
Resumen cron job