You are on page 1of 596

Libro de trabajo del estudiante (ROLE)

Red Hat Enterprise Linux 9.0 RH124


Red Hat System Administration I
Edición 5

RH124-RHEL9.0-es-5-20230516 Copyright ©2023 Red Hat, Inc.


RH124-RHEL9.0-es-5-20230516 Copyright ©2023 Red Hat, Inc.
Red Hat System
Administration I
Red Hat Enterprise Linux 9.0 RH124
Red Hat System Administration I
Edición 5 20230516
fecha de publicación 20230516

Autores: Ashish Lingayat, Alejandra Ramírez Palacios, Antonio Marí Romero,


Bernardo Gargallo, Dallas Spohn, Ed Parenti, Jacob Pelchat,
Mike Kelly, Morgan Weetman, Patrick Gomez
Editor: Julian Cable
© 2023 Red Hat, Inc.

The contents of this course and all its modules and related materials, including handouts to audience members, are ©
2023 Red Hat, Inc.

No part of this publication may be stored in a retrieval system, transmitted or reproduced in any way, including, but
not limited to, photocopy, photograph, magnetic, electronic or other record, without the prior written permission of
Red Hat, Inc.

This instructional program, including all material provided herein, is supplied without any guarantees from Red Hat,
Inc. Red Hat, Inc. assumes no liability for damages or legal action arising from the use or misuse of contents or details
contained herein.

If you believe Red Hat training materials are being used, copied, or otherwise improperly distributed, please send
email to training@redhat.com or phone toll-free (USA) +1 (866) 626-2994 or +1 (919) 754-3700.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, JBoss, OpenShift, Fedora, Hibernate, Ansible, RHCA, RHCE,
RHCSA, Ceph, and Gluster are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United
States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle American, Inc. and/or its affiliates.

XFS® is a registered trademark of Hewlett Packard Enterprise Development LP or its subsidiaries in the United
States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is a trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open
source or commercial project.

The OpenStack word mark and the Square O Design, together or apart, are trademarks or registered trademarks
of OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's
permission. Red Hat, Inc. is not affiliated with, endorsed by, or sponsored by the OpenStack Foundation or the
OpenStack community.

All other trademarks are the property of their respective owners.

Colaboradores: Adarsh Krishnan, David Sacco, Hemant Chauhan, Roberto Velazquez, Sajith
Eyamkuzhy, Samik Sanyal, Yuvaraj Balaraju
Convenciones del documento xi
.............................................................................................................................. xi

Introducción xiii
Red Hat System Administration I ............................................................................... xiii
Orientación sobre el entorno del aula ........................................................................ xiv
Realización de ejercicios de laboratorio .................................................................... xviii

1. Introducción a Red Hat Enterprise Linux 1


¿Qué es Linux? ......................................................................................................... 2
Cuestionario: Introducción a Red Hat Enterprise Linux .................................................. 12
Resumen ................................................................................................................ 14

2. Acceso a la línea de comandos 15


Acceso a la línea de comandos .................................................................................. 16
Cuestionario: Acceso a la línea de comandos ............................................................... 21
Acceso a la línea de comandos con el escritorio .......................................................... 25
Ejercicio Guiado: Acceso a la línea de comandos con el escritorio ................................... 31
Ejecutar comandos con shell de bash ........................................................................ 33
Cuestionario: Ejecutar comandos con shell de bash ..................................................... 39
Trabajo de laboratorio: Acceso a la línea de comandos ................................................. 43
Resumen ............................................................................................................... 49

3. Gestionar archivos desde la línea de comandos 51


Descripción de conceptos de la jerarquía del sistema de archivos Linux ........................... 52
Cuestionario: Descripción de conceptos de la jerarquía del sistema de archivos Linux ........ 55
Especificar archivos por nombre ............................................................................... 59
Cuestionario: Especificar archivos por nombre ............................................................ 64
Gestión de archivos con las herramientas de línea de comandos .................................... 68
Ejercicio Guiado: Gestión de archivos con las herramientas de línea de comandos ............ 73
Creación de enlaces entre archivos ........................................................................... 78
Ejercicio Guiado: Creación de enlaces entre archivos ................................................... 82
Coincidencia de nombres de archivo con expansiones de shell ...................................... 84
Cuestionario: Coincidencia de nombres de archivo con expansiones de shell ................... 89
Trabajo de laboratorio: Gestionar archivos desde la línea de comandos .......................... 93
Resumen .............................................................................................................. 103

4. Obtener ayuda en Red Hat Enterprise Linux 105


Leer las páginas del manual .................................................................................... 106
Ejercicio Guiado: Leer las páginas del manual ............................................................. 110
Trabajo de laboratorio: Obtener ayuda en Red Hat Enterprise Linux ............................... 114
Resumen ............................................................................................................... 121

5. Crear, ver y editar archivos de texto 123


Redireccionamiento de la salida a un archivo o programa ............................................. 124
Cuestionario: Redireccionamiento de la salida a un archivo o programa .......................... 130
Edición de archivos de texto desde el prompt de shell ................................................ 134
Ejercicio Guiado: Edición de archivos de texto desde el prompt de shell ......................... 138
Modificación del entorno de Shell ............................................................................ 140
Ejercicio Guiado: Modificación del entorno de Shell .................................................... 147
Trabajo de laboratorio: Crear, ver y editar archivos de texto ......................................... 150
Resumen .............................................................................................................. 158

6. Gestión de usuarios y grupos locales 159


Describir conceptos de usuario y grupo .................................................................... 160
Cuestionario: Describir conceptos de usuario y grupo ................................................. 164
Obtención de acceso de superusuario ...................................................................... 168
Ejercicio Guiado: Obtención de acceso de superusuario .............................................. 174

RH124-RHEL9.0-es-5-20230516 vii
Gestión de cuentas de usuarios locales ..................................................................... 179
Ejercicio Guiado: Gestión de cuentas de usuarios locales ............................................. 182
Gestión de cuentas de grupos locales ...................................................................... 185
Ejercicio Guiado: Gestión de cuentas de grupos locales .............................................. 188
Gestión de contraseñas de usuarios .......................................................................... 191
Ejercicio Guiado: Gestión de contraseñas de usuarios ................................................. 196
Trabajo de laboratorio: Gestión de usuarios y grupos locales ........................................ 201
Resumen ............................................................................................................. 207

7. Control de acceso a los archivos 209


Interpretación de los permisos del sistema de archivos de Linux ................................... 210
Cuestionario: Interpretación de los permisos del sistema de archivos de Linux ................. 215
Gestión de permisos del sistema de archivos desde la línea de comandos ...................... 219
Ejercicio Guiado: Gestión de permisos del sistema de archivos desde la línea de
comandos ............................................................................................................ 224
Gestión de permisos predeterminados y acceso a archivos ......................................... 227
Ejercicio Guiado: Gestión de permisos predeterminados y acceso a archivos ................. 233
Trabajo de laboratorio: Control de acceso a los archivos ............................................. 238
Resumen .............................................................................................................. 245

8. Monitoreo y gestión de procesos Linux 247


Estados del proceso y ciclo de vida ......................................................................... 248
Cuestionario: Estados del proceso y ciclo de vida ...................................................... 253
Control de trabajos ................................................................................................ 255
Ejercicio Guiado: Control de trabajos ....................................................................... 258
Finalización de procesos ........................................................................................ 263
Ejercicio Guiado: Finalización de procesos ................................................................ 269
Monitoreo de la actividad de procesos ..................................................................... 273
Ejercicio Guiado: Monitoreo de la actividad de procesos ............................................. 277
Trabajo de laboratorio: Monitoreo y gestión de procesos Linux .................................... 282
Resumen ............................................................................................................. 293

9. Control de servicios y daemons 295


Identificación de procesos del sistema iniciados en forma automática ........................... 296
Ejercicio Guiado: Identificación de procesos del sistema iniciados en forma automática ... 302
Control de servicios del sistema ............................................................................. 306
Ejercicio Guiado: Control de servicios del sistema ....................................................... 311
Trabajo de laboratorio: Control de servicios y daemons ............................................... 315
Resumen .............................................................................................................. 319

10. Configuración y seguridad de SSH 321


Acceso a la línea de comandos remota con SSH ........................................................ 322
Ejercicio Guiado: Acceso a la línea de comandos remota ............................................. 327
Configurar autenticación basada en claves de SSH ..................................................... 331
Ejercicio Guiado: Configurar autenticación basada en claves de SSH ............................ 337
Personalización de la configuración del servicio OpenSSH .......................................... 344
Ejercicio Guiado: Personalización de la configuración del servicio OpenSSH .................. 346
Trabajo de laboratorio: Configuración y seguridad de SSH .......................................... 352
Resumen ............................................................................................................. 359

11. Gestión de redes 361


Describir conceptos de redes ................................................................................. 362
Cuestionario: Describir conceptos de redes .............................................................. 376
Validación de la configuración de red ...................................................................... 380
Ejercicio Guiado: Validación de la configuración de red ............................................... 386
Configuración de redes desde la línea de comandos .................................................. 389
Ejercicio Guiado: Configuración de redes desde la línea de comandos .......................... 396

viii RH124-RHEL9.0-es-5-20230516
Edición de archivos de configuración de red .............................................................. 401
Ejercicio Guiado: Edición de archivos de configuración de red ..................................... 405
Configuración de nombres de host y resolución de nombre ........................................ 409
Ejercicio Guiado: Configuración de nombres de host y resolución de nombre ................. 413
Trabajo de laboratorio: Gestión de redes ................................................................... 417
Resumen .............................................................................................................. 422
12. Instalación y actualización de paquetes de software 423
Registro de sistemas para Soporte de Red Hat ......................................................... 424
Cuestionario: Registro de sistemas para Soporte de Red Hat ...................................... 428
Explicación y revisión de paquetes de software RPM ................................................. 430
Ejercicio Guiado: Explicación y revisión de paquetes de software RPM ......................... 436
Instalación y actualización de paquetes de software con DNF ..................................... 440
Ejercicio Guiado: Instalación y actualización de paquetes de software con DNF .............. 449
Habilitar repositorios de software con DNF ............................................................... 454
Ejercicio Guiado: Habilitar repositorios de software con DNF ....................................... 457
Trabajo de laboratorio: Instalación y actualización de paquetes de software .................... 461
Resumen ............................................................................................................. 467
13. Acceso a los sistemas de archivos de Linux 469
Identificación de dispositivos y sistemas de archivos .................................................. 470
Cuestionario: Identificación de dispositivos y sistemas de archivos ............................... 474
Montaje y desmontaje de sistemas de archivos ......................................................... 476
Ejercicio Guiado: Montaje y desmontaje de sistemas de archivos ................................. 480
Localización de archivos en el sistema ..................................................................... 483
Ejercicio Guiado: Localización de archivos en el sistema .............................................. 491
Trabajo de laboratorio: Acceso a los sistemas de archivos de Linux .............................. 494
Resumen ............................................................................................................. 499
14. Análisis de servidores y soporte 501
Análisis y gestión de servidores remotos .................................................................. 502
Ejercicio Guiado: Análisis y gestión de servidores remotos ........................................... 515
Creación de un informe de diagnóstico ..................................................................... 519
Ejercicio Guiado: Creación de un informe de diagnóstico ............................................ 527
Detección y resolución de problemas con Red Hat Insights ......................................... 529
Cuestionario: Detección y resolución de problemas con Red Hat Insights ...................... 536
Resumen ............................................................................................................. 538
15. Revisión exhaustiva 539
Revisión exhaustiva ............................................................................................... 540
Trabajo de laboratorio: Gestionar archivos desde la línea de comandos ......................... 544
Trabajo de laboratorio: Gestión de usuarios y grupos, permisos y procesos .................... 552
Trabajo de laboratorio: Configuración y gestión de un servidor .................................... 559
Trabajo de laboratorio: Gestión de redes .................................................................. 565
Trabajo de laboratorio: Montaje de sistemas de archivos y búsqueda de archivos ............. 571

RH124-RHEL9.0-es-5-20230516 ix
x RH124-RHEL9.0-es-5-20230516
Convenciones del documento

En esta sección, se describen diversas convenciones y prácticas usadas en


todos los cursos de capacitación de Red Hat.

Admoniciones
En los cursos de capacitación de Red Hat, se usan las siguientes
admoniciones:

Referencias
En las referencias, se describe el lugar donde se puede encontrar
documentación externa relevante para un tema.

nota
Las "Notas" son consejos, atajos o enfoques alternativos para una
tarea determinada. Ignorar una nota no debería tener consecuencias
negativas, pero podría pasarse por alto algún truco que puede
simplificar una tarea.

Importante
Se detallan cosas que se olvidan con facilidad: cambios de
configuración que solo se aplican a la sesión actual o servicios que
se deben reiniciar para poder aplicar una actualización. Ignorar estas
admoniciones no provocará pérdida de datos, pero podría causar
irritación y frustración.

Advertencia
No se deben ignorar las advertencias. Es muy probable que ignorar
estas admoniciones provoque pérdida de datos.

Lenguaje inclusivo
La capacitación de Red Hat actualmente está revisando su uso del lenguaje
en diversas áreas para ayudar a eliminar cualquier término que pueda ser
ofensivo. Se trata de un proceso continuo y requiere la alineación con los
productos y servicios que se abordan en los cursos de capacitación de
Red Hat. Red Hat agradece su paciencia durante este proceso.

RH124-RHEL9.0-es-5-20230516 xi
xii RH124-RHEL9.0-es-5-20230516
Introducción

Red Hat System Administration I


Red Hat System Administration I (RH124) se diseñó para profesionales de TI
sin experiencia previa en la administración de sistemas Linux. El objetivo del
curso es proporcionales a los estudiantes "habilidades de supervivencia" en la
administración de Linux ya que cubre las tareas de administración centrales.
En Red Hat System Administration I también se presentan los conceptos
claves de línea de comandos y las herramientas de nivel empresarial a fin
de ofrecerles una base a los estudiantes que planifiquen convertirse en
administradores de sistemas Linux de tiempo completo. Estos conceptos se
ampliarán en el siguiente curso: Red Hat System Administration II (RH134).

Objetivos del • Obtener la habilidad suficiente para realizar las


curso tareas centrales de administración de sistemas
en Red Hat Enterprise Linux.
• Desarrollar las habilidades básicas necesarias
para un administrador de sistemas Red Hat
Enterprise Linux con certificación RHCSA.

Destinatarios Profesionales de TI que se dedican a diversas


disciplinas y que necesitan realizar tareas de
administración de Linux esenciales, entre ellas,
instalación, establecimiento de conectividad de
red, administración de almacenamiento físico y
administración de seguridad básica.

Requisitos Este curso no tiene requisitos previos formales;


sin embargo, es beneficioso contar con
previos experiencia previa en administración de otros
sistemas operativos.

RH124-RHEL9.0-es-5-20230516 xiii
Introducción

Orientación sobre el entorno del aula

Figura 0.1: Entorno del aula

En este curso, el sistema de cómputo principal usado para las actividades prácticas de aprendizaje
es workstation. Los estudiantes también usan otras dos máquinas para estas actividades:
servera y serverb. Estos tres sistemas se encuentran en el dominio DNS lab.example.com.

Todos los sistemas de cómputo de los estudiantes tienen una cuenta de usuario estándar
(student) con la contraseña student. La contraseña root de todos los sistemas de los
estudiantes es redhat.

Máquinas del aula

Nombre de la máquina dirección IP Rol

bastion.lab.example.com 172.25.250.254 Sistema de puerta de enlace


para conectar la red privada
de los estudiantes al servidor
del aula (debe estar siempre
en ejecución)

classroom.example.com 172.25.254.254 Servidor que aloja los


materiales requeridos para el
aula

workstation.lab.example.com 172.25.250.9 Estación de trabajo gráfica


para uso del estudiante

servera.lab.example.com 172.25.250.10 Servidor gestionado "A"

serverb.lab.example.com 172.25.250.11 Servidor gestionado "B"

xiv RH124-RHEL9.0-es-5-20230516
Introducción

La función principal de bastion es actuar como enrutador entre la red que conecta las máquinas
de los estudiantes y la red del aula. Si bastion está apagada, las máquinas de los estudiantes
solo podrán acceder a sistemas en la red de estudiantes individuales.

Varios sistemas en el aula brindan servicios de soporte. Dos servidores, content.example.com


y materials.example.com, son fuentes de software y materiales del trabajo de laboratorio
usados en actividades prácticas. Se provee información sobre cómo usar estos servidores en
las instrucciones para estas actividades. Estas actividades las proporciona la máquina virtual
workstation. Tanto classroom como bastion se deben estar ejecutando siempre para el uso
adecuado del entorno de laboratorio.

nota
Al iniciar sesión en serverao serverb es posible que vea un mensaje sobre la
activación de cockpit. Puede ignorar los mensajes.

[student@workstation ~]$ ssh student@serverb


Warning: Permanently added 'serverb,172.25.250.11' (ECDSA) to the list of
known hosts.
Activate the web console with: systemctl enable --now cockpit.socket

[student@serverb ~]$

Control de sus sistemas


Se le asignan computadoras remotas en un aula de aprendizaje en línea de Red Hat (Red Hat On-
line Learning Environment, ROLE). Se accede a los cursos de autoaprendizaje a través de una
aplicación web alojada en rol.redhat.com [http://rol.redhat.com]. Inicie sesión en este sitio con sus
credenciales de usuario del Portal de clientes de Red Hat.

Control de las máquinas virtuales


Las máquinas virtuales del entorno de su aula se controlan a través de controles de interfaz
en la página web. El estado de cada máquina virtual en el aula se muestra en la pestaña Lab
Environment (Entorno de laboratorio).

RH124-RHEL9.0-es-5-20230516 xv
Introducción

Figura 0.2: Ejemplo de la página de gestión del Entorno de laboratorio de un curso

Estados de la máquina

Estado de la Descripción
máquina virtual

building La máquina virtual se está creando.

active La máquina virtual se está ejecutando y está disponible. Si acaba de


arrancar, podría estar iniciando servicios todavía.

stopped La máquina virtual se ha apagado completamente. Al iniciarse, la


máquina virtual arranca en el mismo estado en que se hallaba antes de
apagarse. El estado del disco se conserva.

Acciones del aula

Botón o acción Descripción

CREATE Crea el aula de ROLE. Crea e inicia todas las máquinas virtuales
necesarias para esta aula. La creación puede tardar varios minutos en
completarse.

CREATING Se están creando las máquinas virtuales del aula de ROLE. Crea e
inicia todas las máquinas virtuales que son necesarias para esta aula.
La creación puede tardar varios minutos en completarse.

DELETE Elimina el aula de ROLE. Destruye todas las máquinas virtuales del
aula. Se perderá todo el trabajo guardado en los discos del
sistema.

START Inicia todas las máquinas virtuales en el aula.

STARTING Todas las máquinas virtuales en el aula se están iniciando.

STOP Detiene todas las máquinas virtuales en el aula.

xvi RH124-RHEL9.0-es-5-20230516
Introducción

Acciones de la máquina

Botón o acción Descripción

OPEN CONSOLE Se conecta con la consola del sistema de la máquina virtual en una
nueva pestaña del explorador. Puede iniciar sesión directamente en
la máquina virtual y ejecutar los comandos cuando sea necesario.
Habitualmente, debe iniciar sesión solo en la máquina virtual
workstation y usar desde allí ssh para conectarse con las otras
máquinas virtuales.

ACTION > Start Inicia (enciende) la máquina virtual.

ACTION > Shutdown Apaga la máquina virtual correctamente y preserva el contenido del
disco.

ACTION > Power Off Fuerza el apagado de la máquina virtual al tiempo que preserva el
contenido del disco. Esto equivale a desenchufar una máquina física.

ACTION > Reset Fuerza el apagado de la máquina virtual y restablece el


almacenamiento asociado para que vuelva a su estado original. Se
perderá todo el trabajo guardado en los discos del sistema.

Al inicio de un ejercicio, si se le indica que restablezca el nodo de una máquina virtual, haga clic en
ACTION > Reset (ACCIÓN > Reiniciar) solo para esa máquina virtual específica.

Al inicio de un ejercicio, si se le indica que restablezca todas las máquinas virtuales, haga clic en
ACTION > Reset en cada máquina virtual de la lista.

Si desea que el entorno del aula vuelva a su estado original al inicio del curso, haga clic en DELETE
(ELIMINAR) para suprimir el entorno del aula completo. Después de eliminar el trabajo de
laboratorio, haga clic en CREATE para aprovisionar un nuevo conjunto de sistemas del aula.

Advertencia
La operación DELETE (ELIMINAR) no puede deshacerse. Se perderá todo el
trabajo que haya completado en el entorno del aula.

Temporizadores de detención automática y


eliminación automática
La inscripción al aprendizaje en línea de Red Hat le otorga derecho a un cierto tiempo de uso del
equipo. Para ayudarlo a conservar el tiempo asignado, el aula de ROLE usa temporizadores, que
apagan o eliminan el entorno del aula cuando el temporizador correspondiente caduca.

Para ajustar los temporizadores, ubique los dos botones + en la parte inferior de la página de
gestión del curso. Haga clic en el botón + de detención automática para agregar otra hora al
temporizador de detención automática. Haga clic en el botón + de eliminación automática para
agregar otro día al temporizador de eliminación automática. La detención automática tiene un
tiempo máximo de 11 horas, y la eliminación automática un tiempo máximo de 14 días. Preste
atención y mantenga los temporizadores configurados mientras trabaja, de forma tal que el
entorno no se apague de manera imprevista. Tenga cuidado de no establecer los temporizadores
en tiempos innecesariamente prolongados, ya que podría perder el tiempo de suscripción
asignado.

RH124-RHEL9.0-es-5-20230516 xvii
Introducción

Realización de ejercicios de laboratorio


Es posible que vea los siguientes tipos de actividades de laboratorio en este curso:

• Un ejercicio guiado es un ejercicio práctico que sigue a una sección de presentación. Lo guía
paso a paso para realizar un procedimiento.

• Un cuestionario se suele usar para corroborar el aprendizaje de los conocimientos o cuando una
actividad práctica resulta poco práctica por algún otro motivo.

• Un trabajo de laboratorio al final del capítulo es una actividad práctica que se puede calificar
para ayudarlo a verificar su aprendizaje. Usted trabajará en una serie de pasos de alto nivel, los
cuales están basados en los ejercicios guiados de ese capítulo, pero los pasos no lo guiarán en
cada comando. Se proporciona una solución con un tutorial paso a paso.

• Se usa un trabajo de laboratorio con revisión integral al final del curso. También es una actividad
práctica que se puede calificar y puede abarcar el contenido de todo el curso. Usted trabaja en
una especificación de lo que debe lograr en la actividad, sin recibir los pasos específicos para
hacerlo. Reiteramos: se proporciona una solución con un tutorial paso a paso que cumple la
especificación.

Para preparar su entorno de laboratorio al inicio de cada actividad práctica, ejecute el comando
lab start con el nombre de actividad especificado de las instrucciones de la actividad. Del
mismo modo, al final de cada actividad práctica, ejecute el comando lab finish con el mismo
nombre de actividad para eliminar todo después de la actividad. Cada actividad práctica tiene un
nombre único dentro de un curso.

La sintaxis para ejecutar un script de ejercicio es la siguiente:

[student@workstation ~]$ lab action exercise

Las acciones son start (iniciar), grade (calificar) o finish (finalizar). Todos los ejercicios
soportan las acciones start y finish. Solo los trabajos de laboratorio al final del capítulo y los
trabajos de laboratorio con revisión integral soportan la acción grade.

start
La acción start verifica los recursos necesarios para comenzar un ejercicio. Esto podría
incluir los ajustes de configuración, la creación de recursos, la verificación de los servicios con
requisitos previos y la verificación de los resultados necesarios de los ejercicios anteriores.
Puede realizar un ejercicio en cualquier momento, incluso sin realizar los ejercicios anteriores.

grade
Para las actividades calificables, la acción grade dirige el comando lab para evaluar su
trabajo y muestra una lista de criterios de calificación con un estado PASS o FAIL para cada
uno. Para que el estado sea PASS en todos los criterios, corrija los errores y vuelva a ejecutar
la acción grade.

finish
La acción finish elimina los recursos que se configuraron durante el ejercicio. Puede realizar
un ejercicio tantas veces como desee.

xviii RH124-RHEL9.0-es-5-20230516
Introducción

El comando lab soporta el autocompletado con tab. Por ejemplo, para enumerar todos los
ejercicios que puede iniciar, ingrese lab start y, luego, presione la tecla Tab dos veces.

RH124-RHEL9.0-es-5-20230516 xix
xx RH124-RHEL9.0-es-5-20230516
capítulo 1

Introducción a Red Hat


Enterprise Linux
Meta Definir código abierto, Linux, distribuciones de
Linux y Red Hat Enterprise Linux.

Objetivos Explicar el propósito del código abierto, Linux, las


distribuciones de Linux y Red Hat Enterprise Linux.

Secciones ¿Qué es Linux? (y cuestionario)

RH124-RHEL9.0-es-5-20230516 1
capítulo 1 | Introducción a Red Hat Enterprise Linux

¿Qué es Linux?

Objetivos
Definir y explicar el propósito de Linux, el código abierto, las distribuciones de Linux y Red Hat
Enterprise Linux.

¿Por qué debería aprender sobre Linux?


Es muy importante que los profesionales de TI entiendan la tecnología de Linux.

Linux tiene un uso generalizado en todo el mundo. Los usuarios de Internet interactúan con
aplicaciones Linux y sistemas de servidor web a diario, navegando por la World Wide Web y usando
sitios de comercio electrónico para comprar y vender productos.

Sin embargo, Linux se usa para mucho más que Internet. Linux gestiona los sistemas de punto
de venta y los mercados de valores del mundo, y también se usa en los televisores inteligentes
y en los sistemas de entretenimiento durante el vuelo, además se ejecuta en las principales
500 supercomputadoras del mundo. Linux proporciona las tecnologías centrales que impulsan
la revolución de la nube y las herramientas usadas para desarrollar la próxima generación de
aplicaciones de microservicios basadas en contenedores, tecnologías de almacenamiento basado
en software y soluciones de grandes volúmenes de datos (big data).

En el centro de datos moderno, Linux y Microsoft Windows son los sistemas operativos
predominantes. El uso de Linux continúa expandiéndose en espacios empresariales, de nube y de
dispositivos. Debido a su adopción generalizada, tiene muchas razones para aprender Linux:

• Un usuario de Windows necesita interoperar con los sistemas y las aplicaciones de Linux.
• En el desarrollo de aplicaciones, Linux suele alojar la aplicación o su tiempo de ejecución.
• En la computación en la nube, las instancias de la nube privada y pública usan Linux como el
sistema operativo.
• Las aplicaciones móviles y los dispositivos de Internet de las cosas (IoT) suelen ejecutarse en
Linux.
• Al buscar nuevas oportunidades de carrera de TI, hay mucha demanda de habilidades de Linux.

¿Qué hace que Linux sea excelente?


Si alguien le pregunta "¿Por qué Linux es genial?", entonces tiene muchas respuestas para elegir:

• Linux es software de código abierto.

Ser de código abierto significa que puede ver todo el funcionamiento de un programa o
sistema. También se pueden probar cambios y compartirlos libremente para que otros los usen.
El modelo de código abierto facilita el desarrollo de mejoras, lo que acelera la innovación.

• Linux proporciona una interfaz de línea de comandos (CLI) para un acceso sencillo y un scripting
poderoso.

Linux se desarrolla en torno a la filosofía de diseño básica de que los usuarios pueden
realizar todas las tareas de administración desde la CLI. Esto facilita la automatización, la
implementación y el aprovisionamiento, así como simplifica la administración de sistemas locales

2 RH124-RHEL9.0-es-5-20230516
capítulo 1 | Introducción a Red Hat Enterprise Linux

y remotos. A diferencia de muchos otros sistemas operativos, estas capacidades estaban en la


arquitectura desde el principio y resultan en facilidad de uso y estabilidad.

• Linux es un sistema operativo modular diseñado para reemplazar o eliminar componentes


fácilmente.

Los componentes del sistema se pueden actualizar y mejorar cuando sea necesario. Un sistema
Linux puede ser una estación de trabajo de desarrollo de uso general o un dispositivo de
software deliberadamente minimizado.

¿Qué es el software de código abierto?


El software de código abierto es software con código fuente que cualquiera puede usar, estudiar,
modificar y compartir.

El código fuente es el conjunto de instrucciones legibles que se usan para hacer un programa.
El código puede estar en formato interpretativo, como un script, o compilarse en un archivo
ejecutable binario que la computadora ejecuta directamente. Al crear el código fuente, se le
aplican los derechos de autor, y su titular controla los términos bajo los cuales se puede copiar,
adaptar y distribuir el software. Los usuarios pueden usar el software de acuerdo con su licencia de
software.

Otros tipos de software tienen un código fuente de "propiedad" o "de código fuente cerrado"
que solo la persona, el equipo o la organización que lo crearon pueden verlo, cambiarlo o
distribuirlo. Por lo general, las licencias propietarias restringen al usuario a ejecutar el programa y
proporcionan acceso limitado o nulo a la fuente.

El software de código abierto es diferente. Cuando el titular de los derechos de autor proporciona
software con una licencia de código abierto, otorga a los usuarios el derecho de ejecutar el
programa y también de ver, modificar, compilar y redistribuir el código fuente a otros sin pagar
regalías. La licencia de código abierto promueve la colaboración, el intercambio, la transparencia
y la innovación rápida, ya que alienta a otras personas a realizar modificaciones y mejoras en el
software, así como a compartirlas con los demás.

El software de código abierto aún se puede proporcionar para su uso con fines comerciales. El
código abierto es una parte crítica de las operaciones comerciales de muchas organizaciones.
Algunas licencias de código abierto permiten que el código se vuelva a usar en productos de
propiedad. Cualquiera puede vender el código fuente abierto, pero las verdaderas licencias
de código abierto generalmente permiten que el cliente redistribuya el código fuente.
Los proveedores de código abierto, como Red Hat, proporcionan ayuda comercial con la
implementación, el soporte y la ampliación de soluciones basadas en productos de código abierto.

El código abierto tiene muchos beneficios para el usuario:

• Control: vea lo que hace el código y mejórelo.


• Capacitación: aprenda del código real y desarrolle más aplicaciones útiles.
• Seguridad: inspeccione el código confidencial y corríjalo sin la ayuda de los desarrolladores
(developers) originales.
• Estabilidad: confíe en código que puede sobrevivir a la pérdida del desarrollador original.

Tipos de licencias de código abierto


Los desarrolladores de software de código abierto pueden licenciar su software de diferentes
maneras. Los términos de la licencia de software controlan cómo puede volver a usarse el código
fuente o cómo puede combinarse con otro código. Para ser de código abierto, las licencias deben
permitir que los usuarios usen, vean, cambien, compilen y distribuyan libremente el código.

RH124-RHEL9.0-es-5-20230516 3
capítulo 1 | Introducción a Red Hat Enterprise Linux

Hay dos clases generales de licencias de código abierto que son particularmente importantes:

• Las licencias copyleft, que están diseñadas para fomentar que el código se mantenga abierto.
• Las licencias permisivas, que están diseñadas para maximizar la reusabilidad del código.

Las licencias copyleft o de "uso compartido para todos" requieren que cualquier persona que
distribuya el código fuente, con o sin cambios, deba extender esta libertad para que los demás
también puedan copiar, cambiar y distribuir el código. La ventaja de las licencias copyleft es que
ayudan a que el código existente y las mejoras a ese código sigan siendo de código abierto, para
aumentar la cantidad de código fuente abierto disponible. Las licencias copyleft más comunes
son la Licencia Pública General de GNU (GNU General Public License, GPL) y la Licencia Pública
General Reducida de GNU (GNU Lesser General Public License, LGPL).

Las licencias permisivas están diseñadas para maximizar la reusabilidad del código fuente.
Usted puede usar el código fuente para cualquier propósito siempre que se conserven las
declaraciones de derechos de autor y de licencia, incluso al volver a usar ese código bajo licencias
más restrictivas o incluso de propiedad exclusiva. Si bien las licencias permisivas facilitan la
reusabilidad del código, se arriesga a fomentar mejoras exclusivas. Algunos ejemplos de licencias
permisivas son la licencia MIT/X11, la licencia BSD simplificada y la licencia de software Apache 2.0.

¿Quién desarrolla el software de código abierto?


En la actualidad, el desarrollo de código abierto es una actividad mayoritariamente profesional.
El código abierto ya no es desarrollado únicamente por un conjunto de voluntarios. Hoy en día, la
mayoría de las organizaciones pagan a los desarrolladores de código abierto para que trabajen en
proyectos de código abierto para desarrollar y contribuir con las mejoras que sus organizaciones y
sus clientes necesitan.

Los voluntarios y la comunidad académica desempeñan un papel importante y pueden hacer


contribuciones vitales, en especial en áreas de tecnologías emergentes. La combinación de
desarrollo formal e informal proporciona un entorno altamente dinámico y productivo.

¿Qué es una distribución de Linux?


Una distribución de Linux es un sistema operativo instalable construido a partir de un kernel de
Linux, que admite librerías y programas de usuario. Un sistema Linux completo es desarrollado
por varias comunidades de desarrollo independientes que trabajan en conjunto en componentes
individuales. Una distribución proporciona un método sencillo para instalar y gestionar un sistema
Linux que funcione.

En 1991, un estudiante graduado, llamado Linus Torvalds, desarrolló un kernel tipo UNIX y lo
denominó Linux, con licencia de software de código abierto bajo la GPL. El kernel es el núcleo del
sistema operativo, que gestiona el hardware, la memoria y la programación de los programas en
ejecución. El kernel de Linux se complementa con otro software de código abierto, incluidas las
utilidades y los programas del Proyecto GNU, una interfaz gráfica del sistema X Window de MIT. El
kernel de Linux también incluye otros componentes de código abierto, como el servidor de correo
Sendmail y el servidor web HTTP Apache, para convertirse en un sistema operativo completo de
código abierto parecido a UNIX.

Un desafío importante para los usuarios de Linux es reunir todas estas piezas de software
de muchas fuentes. Los primeros desarrolladores de Linux proporcionaron una distribución
de herramientas precompiladas y probadas que los usuarios pudieran descargar y usar para
configurar los sistemas Linux rápidamente.

Existen muchas distribuciones de Linux, cada una con diferentes objetivos y criterios de soporte.
Por lo general, las distribuciones tienen muchas características comunes:

4 RH124-RHEL9.0-es-5-20230516
capítulo 1 | Introducción a Red Hat Enterprise Linux

• Las distribuciones constan de un kernel de Linux y soportan programas de espacio de usuario.


• Las distribuciones pueden ser pequeñas y de propósito único o pueden incluir miles de
programas de código abierto.
• Las distribuciones proporcionan un medio para instalar y actualizar el software y sus
componentes.
• El proveedor de distribución soporta el software e, idealmente, participa en la comunidad de
desarrollo.

¿Qué es Red Hat?


Red Hat es el proveedor líder de soluciones de software de código abierto, que ha adoptado un
enfoque basado en la comunidad para proporcionar tecnologías fiables y de alto rendimiento de
nube, Linux, middleware, almacenamiento y virtualización. La misión de Red Hat es actuar como
catalizador entre las comunidades de clientes, colaboradores y partners para crear una tecnología
con el enfoque de código abierto.

La función de Red Hat es ayudar a los clientes a conectarse con la comunidad de código abierto y
sus partners para usar con eficacia las soluciones de software de código abierto. Red Hat participa
activamente en la comunidad de código abierto y la respalda. Los muchos años de experiencia han
convencido a la empresa de la importancia del código abierto para el futuro de la industria de TI.

Red Hat es más conocida por su participación en la comunidad de Linux y la distribución de


Red Hat Enterprise Linux. Red Hat también está activa en otras comunidades de código abierto,
incluidos los proyectos de middleware que se centran en la comunidad de desarrolladores
de JBoss. Red Hat también ofrece soluciones de virtualización, tecnologías de nube como
OpenStack y OpenShift y los proyectos de almacenamiento basados en software de Ceph y
Gluster, entre otros.

Ecosistema de Red Hat Enterprise Linux


Red Hat Enterprise Linux (RHEL) es la distribución comercial y de nivel de producción de Linux de
Red Hat. Red Hat desarrolla e integra software de código abierto en RHEL a través de un proceso
de múltiples etapas.

• Red Hat participa al apoyar proyectos individuales de código abierto. Aporta código, tiempo de
desarrollo, recursos y otros medios de apoyo, a menudo en colaboración con desarrolladores de
otras distribuciones de Linux para mejorar la calidad general del software para todos.

• Red Hat auspicia e integra proyectos de código abierto en una distribución dirigida por la
comunidad, Fedora. Fedora proporciona un entorno de trabajo libre que puede servir como
laboratorio de desarrollo y espacio de prueba para las funciones que se incorporan a sus
productos CentOS Stream y RHEL.

• Red Hat estabiliza el software CentOS Stream para garantizar que esté listo para el soporte y la
estandarización a largo plazo, y lo integra en su distribución lista para usos empresariales, RHEL.

RH124-RHEL9.0-es-5-20230516 5
capítulo 1 | Introducción a Red Hat Enterprise Linux

Figura 1.1: El ecosistema de Red Hat Enterprise Linux

Fedora
Fedora es un proyecto comunitario que produce y lanza un sistema operativo integral y gratuito
basado en Linux. Red Hat patrocina a la comunidad de Fedora y trabaja con sus representantes
para integrar el último software upstream en una distribución segura y de rápida actualización. El
proyecto Fedora contribuye al mundo del código abierto, y todos pueden participar.

Fedora prioriza la innovación y la excelencia por encima de la estabilidad a largo plazo. Las
principales actualizaciones ocurren cada seis meses y pueden traer cambios significativos.
Fedora admite versiones durante aproximadamente un año, lo que significa las dos últimas
actualizaciones, lo que lo hace menos adecuado para el uso de producción compatible. Fedora
sigue siendo la fuente de innovación para todo el ecosistema de Enterprise Linux. En general,
los paquetes comienzan en Fedora y se incluyen en CentOS Stream solo cuando se consideran
maduros en cuanto a estabilidad, seguridad, rendimiento y demanda de los clientes.

Paquetes extra para Enterprise Linux


Un grupo de interés especial (SIG) del proyecto Fedora crea y mantiene un repositorio de
paquetes con soporte de la comunidad denominado Extra Packages for Enterprise Linux (EPEL).
Las versiones de EPEL se alinean con las principales versiones de RHEL y permiten a los clientes
de RHEL ejecutar cargas de trabajo con dependencias de software que no son compatibles con
RHEL. Los paquetes EPEL no están incluidos en el soporte de Red Hat, pero son equivalentes al
nivel de calidad de Fedora.

Por lo general, los paquetes de EPEL se crean con respecto a las versiones de RHEL. EPEL Next
es un repositorio adicional para que los encargados del mantenimiento de paquetes creen en
CentOS Stream. Este repositorio es útil cuando CentOS Stream contiene una nueva base de
datos de librería RHEL, o si un paquete EPEL tiene un requisito de compilación de versión mínima
que ya está en CentOS Stream pero aún no en RHEL.

6 RH124-RHEL9.0-es-5-20230516
capítulo 1 | Introducción a Red Hat Enterprise Linux

Flujo de CentOS
CentOS Stream es el proyecto upstream para RHEL. El desarrollo de la próxima versión de
RHEL es transparente y está abierto a las contribuciones de la comunidad que pueden influir
directamente en la próxima versión. Los parches que se envían a CentOS Stream se integran
más rápido en RHEL para permitir cambios significativos durante el ciclo de vida de la versión
actual de RHEL. CentOS Stream es una distribución de distribución e integración continua, con
compilaciones nocturnas probadas y estables.

El proyecto CentOS da la bienvenida a colaboradores de todo el mundo, para dar a los derivados
de RHEL la oportunidad de contribuir a CentOS Stream para su propio beneficio. El proyecto
CentOS también tiene como objetivo promover el software de código abierto sostenible que
responda más rápido a las vulnerabilidades de seguridad, las tecnologías emergentes y los
requisitos cambiantes de los clientes.

nota
Antes de 2019, CentOS Linux era una distribución disponible de forma gratuita y sin
soporte creada por la comunidad a partir del código fuente de Red Hat después de
cada versión principal de RHEL. Aunque la comunidad de CentOS disfrutaba de un
clon de RHEL disponible de forma gratuita, este modelo tenía desventajas. Por lo
general, las contribuciones de los desarrolladores a CentOS Linux no se exportaban
a Fedora o RHEL sin un considerable esfuerzo duplicado. Además, se produjeron
retrasos significativos entre una versión de RHEL y su compilación de distribución
de CentOS correspondiente, con un retraso similar para las correcciones críticas
de seguridad, controlador y ajuste de RHEL. Red Hat cambió al modelo CentOS
Stream para abordar estos problemas.

Una ventaja de CentOS Stream es que, como fuente para el desarrollo de RHEL,
está disponible en las mismas arquitecturas que RHEL, incluidas Intel/AMD x86_64,
ARM64, IBM Power e IBM Z.

Varias organizaciones de tecnología innovadora han demostrado que CentOS Stream es un


reemplazo viable para CentOS Linux original. CentOS Stream se puede descargar e instalar
libremente para muchos casos de uso, incluidos el desarrollo y la producción ligera. Para los
usuarios de la comunidad con casos de uso que no son adecuados para una distribución de
entrega continua con versiones de parches asíncronos, Red Hat proporciona suscripciones de
desarrollador de RHEL individuales gratuitas para uso a pequeña escala, como demostraciones,
creación de prototipos, control de calidad y producción limitada.

Red Hat Enterprise Linux


Red Hat Enterprise Linux (RHEL) es la distribución de Linux, con soporte comercial, lista para
la producción, de Red Hat. En la industria de la computación, RHEL es reconocida como la
plataforma líder para la computación de código abierto. RHEL está ampliamente probada y cuenta
con un ecosistema mundial de partners de soporte para certificaciones de hardware y software,
servicios de consultoría, capacitación y garantías de mantenimiento y soporte de varios años.

Red Hat crea versiones principales de RHEL directamente desde el proyecto de desarrollo
continuo de CentOS Stream, que se obtiene de Fedora. A diferencia del modelo de desarrollo de
RHEL anterior, las versiones se compilaron internamente con menos transparencia y la fuente se
proporcionó solo para la compilación como CentOS Linux después de la versión de RHEL. Ahora,
el nuevo modelo de desarrollo de CentOS Stream está abierto y disponible para todos, para
recibir comentarios y contribuciones, y el código está preparado para ser el próximo lanzamiento
importante de RHEL.

RH124-RHEL9.0-es-5-20230516 7
capítulo 1 | Introducción a Red Hat Enterprise Linux

RHEL usa un modelo de soporte basado en suscripción y no cobra tarifas de licencia por software
de código abierto. Las suscripciones de soporte de Red Hat proporcionan soporte de productos,
mantenimiento, actualizaciones, parches de seguridad y acceso a la base de conocimiento del
portal de clientes, utilidades y versiones descargables de productos de Red Hat.

En la siguiente tabla, se enumeran algunas diferencias clave entre Fedora, CentOS Stream y
RHEL.

Fedora Flujo de RHEL


CentOS

Ciclo de vida esperado 12 a 18 meses 5 años 10 años

Proveedor de software certificado No Generalmente Sí


no

Documentación proporcionada por Comunidad Comunidad Red Hat

Soporte de expertos disponible No No Sí

Equipo de seguridad del producto No No Sí

Certificaciones de seguridad No No Sí

Opciones gratuitas Sí Sí Sí

Herramientas de administración No No Sí

RHEL para Edge


RHEL para Edge es una variante basada en imágenes de RHEL, con un mecanismo de
implementación diferente. RHEL proporciona la capacidad de crear imágenes del sistema
operativo diseñadas específicamente a través de una herramienta denominada Image Builder.
Con este mecanismo, los equipos de TI pueden crear, implementar y mantener estas imágenes
de RHEL en menos tiempo durante la vida útil del sistema. Las implementaciones basadas en
imágenes están optimizadas para diversas arquitecturas perimetrales, pero se pueden personalizar
para implementaciones perimetrales específicas.

Las características de Edge en RHEL incluyen capacidades de escalamiento y administración


segura, incluido el aprovisionamiento sin intervención, la visibilidad del estado del sistema y las
correcciones de seguridad rápidas desde una sola interfaz.

Red Hat CoreOS


RHEL CoreOS (RHCOS) no es un sistema operativo independiente, sino que se crea a partir de
componentes de RHEL y, luego, se lanza, actualiza y gestiona como parte de Red Hat OpenShift
Container Platform (RHOCP) para aplicaciones nativas de la nube. RHCOS es fundamentalmente
un host de contenedor de RHEL basado en imágenes, que usa el motor de contenedores
compatible con Container Runtime Interface (CRI-O) que está integrado en RHOCP. Para
obtener más información sobre Red Hat CoreOS, comience por familiarizarse con OpenShift y los
contenedores.

Red Hat Universal Base Image


Red Hat Universal Base Image (UBI) es básicamente un derivado de RHEL que se puede
redistribuir libremente. UBI está diseñado para ser una base para casos de uso nativos de la nube y

8 RH124-RHEL9.0-es-5-20230516
capítulo 1 | Introducción a Red Hat Enterprise Linux

aplicaciones web que se desarrollan en contenedores. Todo el contenido de UBI es un subconjunto


de RHEL, con paquetes que provienen de canales seguros de RHEL, y UBI se admite de manera
similar a RHEL cuando se ejecuta en plataformas soportadas por Red Hat, como OpenShift y
hosts RHEL.

Con UBI, los desarrolladores pueden centrar sus esfuerzos en su aplicación en la imagen de
contenedor. UBI es un conjunto de imágenes base y un conjunto de imágenes de aplicaciones
(como python, ruby, node.js, httpd o nginx). UBI también consta de un conjunto de repositorios
RPM desde los cuales puede actualizar cualquier imagen base de UBI para incluir las
dependencias del paquete que su aplicación requiere.

Desarrollo continuo de Red Hat Enterprise Linux


En la comunidad upstream de Fedora, Fedora Rawhide es el entorno de desarrollo continuo para
una cadencia regular de versiones públicas de Fedora. La comunidad prueba y prepara nuevas
versiones del kernel de Linux, controladores de dispositivos, utilidades y aplicaciones para la
próxima distribución de Fedora. El desarrollo de versiones principales de RHEL comienza con la
selección de la última versión de Fedora como base para la distribución de desarrollo continuo de
CentOS Stream actual.

Antes de que un paquete se introduzca formalmente en CentOS Stream, se somete a pruebas


rigurosas para cumplir con los estándares de los paquetes que se incluirán en RHEL. Las
actualizaciones que se publican en CentOS Stream son las mismas que las actualizaciones
publicadas en la versión secundaria inédita de RHEL en desarrollo.

Figura 1.2: Desarrollo continuo de Red Hat Enterprise Linux

Como se muestra en la figura, Fedora 34 es la base de código original para RHEL 9 y para
CentOS Stream 9. A medida que se actualizan los paquetes, se envían a CentOS Stream y a la
compilación nocturna de RHEL. Las líneas continuas indican distribuciones o compilaciones que
están disponibles para uso público.

De manera similar a la relación entre Fedora Rawhide y Fedora, CentOS Stream es el entorno de
desarrollo continuo para preparar la próxima versión secundaria de RHEL. Red Hat realiza pruebas
exhaustivas de hardware, integración, dependencia y rendimiento antes de lanzar la próxima
distribución pública de RHEL.

Obtención de Red Hat Enterprise Linux.


Por lo general, Red Hat Enterprise Linux se obtiene con una suscripción de soporte de pago, y Red
Hat proporciona varias formas de obtener RHEL y otros productos del ecosistema RHEL, muchas
de ellas sin costo.

• Fedora Linux y sus derivados están disponibles de forma gratuita desde el proyecto Fedora en
https://getfedora.org/, incluida una versión emergente de Fedora CoreOS.
• Los paquetes EPEL y EPEL Next están disponibles de forma gratuita en los repositorios de
proyectos EPEL. Aprenda a usar EPEL en https://docs.fedoraproject.org/en-US/epel/.
• CentOS Stream está disponible de forma gratuita en https://www.centos.org/centos-stream/.

RH124-RHEL9.0-es-5-20230516 9
capítulo 1 | Introducción a Red Hat Enterprise Linux

Descarga de evaluación de RHEL


Una copia de evaluación de RHEL está disponible en https://access.redhat.com/products/red-
hat-enterprise-linux/evaluation. Debe tener una cuenta (gratuita) en el Portal de clientes para
que https://access.redhat.com acceda y descargue los productos de evaluación. Las evaluaciones
de productos le dan derecho a recibir actualizaciones y soporte durante un período limitado. El
soporte finaliza cuando finaliza el período de evaluación, pero el software de evaluación continúa
funcionando. Puede encontrar información adicional para muchas evaluaciones de productos en
las páginas de evaluación del Portal de clientes.

Suscripción para desarrolladores de Red Hat


Red Hat ofrece una suscripción disponible de forma gratuita para muchos productos a través
del programa Red Hat Developer en https://developer.redhat.com. Con una suscripción
de desarrollador, los desarrolladores pueden diseñar, crear prototipos, probar y demostrar
rápidamente sus aplicaciones en el mismo software de Red Hat que en los sistemas de producción.
Cree una cuenta personal en https://access.redhat.com y, luego, regístrese en el programa
Developer. Puede usar una cuenta personal existente, pero no use una cuenta que ya esté
asociada con la suscripción de soporte de alguna organización. La suscripción de desarrollador es
autosuficiente, pero proporciona actualizaciones continuas del producto. Red Hat recomienda que
las personas que deseen adquirir experiencia con RHEL y los productos para desarrolladores se
unan al programa para desarrolladores.

Plataformas de nube pública


Los principales proveedores de nube pública de hiperescala, como Amazon Web Services, Google
Cloud Platform y Microsoft Azure, ofrecen imágenes oficiales para implementar instancias de
Red Hat Enterprise Linux, con gestión de suscripciones del servicio Red Hat Cloud Access. Las
suscripciones totalmente autorizadas para productos RHEL y Red Hat están disponibles a través
del proveedor de nube, y son portátiles en nubes híbridas y de varios proveedores.

Contenedores
Puede usar las imágenes base universales de Red Hat y el contenido asociado para el desarrollo
y la implementación sin una suscripción a Red Hat. Para obtener soporte operativo y acceso a
herramientas que no son de UBI, los contenedores que se crean en UBI deben implementarse en
una plataforma soportada por Red Hat, como OpenShift o Red Hat Enterprise Linux. El acceso a
contenido no relacionado con UBI requiere una suscripción a Red Hat.

10 RH124-RHEL9.0-es-5-20230516
capítulo 1 | Introducción a Red Hat Enterprise Linux

Referencias
Introducción a Red Hat Enterprise Linux
https://access.redhat.com/products/red-hat-enterprise-linux#getstarted

Suscripción gratuita para desarrolladores individuales de Red Hat Enterprise


Linux: preguntas frecuentes
https://developers.redhat.com/articles/faqs-no-cost-red-hat-enterprise-linux#

El enfoque de código abierto


https://opensource.com/open-source-way

Fedora
https://getfedora.org/

Red Hat Universal Base Images


https://developers.redhat.com/products/rhel/ubi

Red Hat Cloud Access


https://www.redhat.com/en/technologies/cloud-computing/cloud-access

RH124-RHEL9.0-es-5-20230516 11
capítulo 1 | Introducción a Red Hat Enterprise Linux

Cuestionario

Introducción a Red Hat Enterprise Linux


Elija las respuestas correctas para las siguientes preguntas:

1. ¿Cuáles de las siguientes declaraciones son beneficios del software de código abierto
para el usuario? (Elija dos opciones).
a. El código puede sobrevivir a la pérdida del desarrollador o distribuidor original.
b. Las partes confidenciales del código están protegidas y solo están disponibles para el
desarrollador original.
c. Puede aprender del código real y desarrollar aplicaciones más efectivas.
d. El código permanece abierto mientras esté en un repositorio público, pero la licencia
puede cambiar cuando se incluye con el software de código cerrado.

2. ¿Cuáles de las dos declaraciones son formas en las que Red Hat desarrolla sus
productos para el futuro e interactúa con la comunidad? (Elija dos opciones).
a. Patrocinar e integrar proyectos de código abierto en el proyecto impulsado por la
comunidad de Fedora.
b. Desarrollar herramientas de integración específicas solo disponibles en distribuciones de
Red Hat.
c. Participar en proyectos upstream.
d. Volver a empaquetar y a emitir licencias para productos de la comunidad.

3. ¿Qué dos afirmaciones describen los beneficios de Linux? (Elija dos opciones).
a. El desarrollo de Linux está completamente a cargo de voluntarios, lo que lo convierte en
un sistema operativo de bajo costo.
b. Linux es modular y puede configurarse para un escritorio gráfico completo o para un
pequeño dispositivo.
c. Linux está bloqueado en un estado conocido durante un mínimo de un año para cada
versión, lo que facilita el desarrollo de software personalizado.
d. Linux incluye una interfaz de línea de comandos potente y programable que facilita la
automatización y el aprovisionamiento.

12 RH124-RHEL9.0-es-5-20230516
capítulo 1 | Introducción a Red Hat Enterprise Linux

Solución

Introducción a Red Hat Enterprise Linux


Elija las respuestas correctas para las siguientes preguntas:

1. ¿Cuáles de las siguientes declaraciones son beneficios del software de código abierto
para el usuario? (Elija dos opciones).
a. El código puede sobrevivir a la pérdida del desarrollador o distribuidor original.
b. Las partes confidenciales del código están protegidas y solo están disponibles para el
desarrollador original.
c. Puede aprender del código real y desarrollar aplicaciones más efectivas.
d. El código permanece abierto mientras esté en un repositorio público, pero la licencia
puede cambiar cuando se incluye con el software de código cerrado.

2. ¿Cuáles de las dos declaraciones son formas en las que Red Hat desarrolla sus
productos para el futuro e interactúa con la comunidad? (Elija dos opciones).
a. Patrocinar e integrar proyectos de código abierto en el proyecto impulsado por la
comunidad de Fedora.
b. Desarrollar herramientas de integración específicas solo disponibles en distribuciones de
Red Hat.
c. Participar en proyectos upstream.
d. Volver a empaquetar y a emitir licencias para productos de la comunidad.

3. ¿Qué dos afirmaciones describen los beneficios de Linux? (Elija dos opciones).
a. El desarrollo de Linux está completamente a cargo de voluntarios, lo que lo convierte en
un sistema operativo de bajo costo.
b. Linux es modular y puede configurarse para un escritorio gráfico completo o para un
pequeño dispositivo.
c. Linux está bloqueado en un estado conocido durante un mínimo de un año para cada
versión, lo que facilita el desarrollo de software personalizado.
d. Linux incluye una interfaz de línea de comandos potente y programable que facilita la
automatización y el aprovisionamiento.

RH124-RHEL9.0-es-5-20230516 13
capítulo 1 | Introducción a Red Hat Enterprise Linux

Resumen
• El software de código abierto tiene código fuente que cualquiera puede usar, estudiar, modificar
y compartir libremente.

• Una distribución de Linux es un sistema operativo instalable construido a partir de un kernel de


Linux, que admite librerías y programas de usuario.

• Red Hat participa en el soporte y la contribución de código para proyectos de código abierto,
patrocina e integra el software del proyecto en distribuciones impulsadas por la comunidad y
estabiliza el software para ofrecerlo como productos compatibles listos para la empresa.

• Red Hat Enterprise Linux es la distribución de Linux con soporte comercial de código abierto
lista para empresas que proporciona Red Hat.

• Una suscripción gratuita a Red Hat Developer es un método útil para obtener información y
recursos de aprendizaje, incluidas suscripciones para el desarrollador a Red Hat Enterprise Linux
y otros productos de Red Hat.

14 RH124-RHEL9.0-es-5-20230516
capítulo 2

Acceso a la línea de comandos


Meta Iniciar sesión en el sistema Linux y ejecutar
comandos simples desde la shell.

Objetivos • Iniciar sesión en el sistema Linux y ejecutar


comandos simples desde la shell.
• Iniciar sesión en el sistema Linux con el entorno
de escritorio GNOME y ejecutar comandos
desde un prompt de shell en un programa de
terminal.
• Ahorrar tiempo en la ejecución de comandos
desde un prompt de shell con los accesos
directos de Bash.

Secciones • Acceso a la línea de comandos (y cuestionario)


• Acceso a la línea de comandos a través del
escritorio (y ejercicio guiado)
• Ejecución de comandos con la shell Bash (y
cuestionario)

Trabajo de Acceso a la línea de comandos


laboratorio

RH124-RHEL9.0-es-5-20230516 15
capítulo 2 | Acceso a la línea de comandos

Acceso a la línea de comandos

Objetivos
Iniciar sesión en el sistema Linux y ejecutar comandos simples con la shell.

Introducción a la shell Bash


Una línea de comandos es una interfaz basada en texto que se usa para introducir instrucciones
en un sistema de cómputo. Un programa denominado shell proporciona la línea de comandos de
Linux. Se han desarrollado muchas variantes de programas de shell a lo largo de los años. Cada
usuario puede usar una shell diferente, pero Red Hat recomienda usar la shell predeterminada para
la administración del sistema.

La shell predeterminada para usuarios de Red Hat Enterprise Linux (RHEL) es GNU Bourne-
Again Shell (bash). La shell bash es una versión mejorada del Bourne Shell (sh) original en
sistemas UNIX.

La shell muestra una cadena cuando espera la entrada del usuario, denominada prompt de shell.
Cuando un usuario regular inicia una shell, el prompt incluye un carácter de dólar ($) final:

[user@host ~]$

El carácter de hash (#) reemplaza al carácter de dólar ($) si la shell se está ejecutando como el
superusuario root. Este carácter indica que se trata de una shell de superusuario, lo que permite
evitar errores que pueden afectar a todo el sistema.

[root@host ~]#

El uso de bash para ejecutar comandos puede ser eficaz. La shell bash proporciona un
lenguaje de secuencia de comandos capaz de admitir la automatización de tareas. La shell tiene
capacidades adicionales que pueden habilitar o simplificar operaciones o posibilitar aquellas que
son difíciles de realizar a escala con herramientas gráficas.

nota
La shell bash es conceptualmente similar al intérprete de línea de comandos
cmd.exe de Microsoft Windows. Sin embargo, bash tiene un lenguaje de
programación sofisticado y es más similar a Windows PowerShell.

En macOS, la shell bash era la shell predeterminada antes de macOS 10.15 Catalina.
En macOS 10.15 Catalina, Apple cambió la shell predeterminada a la shell zsh, una
shell alternativa que también está disponible en RHEL.

Conceptos básicos de la shell


Los comandos que se ingresan en el prompt de shell están compuestos por tres partes básicas:

• Comando que se ejecuta.

16 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

• Opciones que permiten ajustar el comportamiento del comando.


• Argumentos que generalmente son destinos del comando.

El comando es el nombre del programa que se ejecuta. Puede estar seguido de una o más
opciones que ajustan el comportamiento del comando o lo que hace. Las opciones generalmente
comienzan con uno o dos guiones (-a o --all, por ejemplo) para que se distingan de los
argumentos. Los comandos pueden estar seguidos por uno o más argumentos, que generalmente
indican un destino sobre el cual el comando debe operar.

Por ejemplo, en la cadena usermod -L user01, usermod es el comando, -L es la opción y


user01 es el argumento. Este comando bloquea la contraseña de la cuenta del usuario user01.

Iniciar sesión en un sistema local


Un terminal es una interfaz basada en texto que se usa para ingresar comandos e imprimir salidas
desde un sistema de cómputo. Para ejecutar la shell, debe iniciar sesión en la computadora en un
terminal.

La computadora puede tener conectados un teclado y una pantalla de hardware para la entrada
y salida. Esta es la consola física de la máquina Linux. La consola física admite varias consolas
virtuales que pueden ejecutar terminales independientes. Cada consola virtual admite un inicio de
sesión independiente. Puede cambiar entre las consolas virtuales presionando Ctrl+Alt y una
tecla de función (F1 a F6) al mismo tiempo. La mayoría de estas consolas virtuales ejecutan un
terminal que proporciona un aviso de inicio de sesión de texto. Si ingresa su nombre de usuario y
contraseña correctamente, inicie sesión y obtenga un prompt de shell.

La computadora puede proporcionar un prompt de inicio de sesión gráfico en una de las consolas
virtuales. Puede usar el prompt de inicio de sesión gráfico para iniciar sesión en un entorno gráfico.
El entorno gráfico también se ejecuta en una consola virtual. Para obtener un prompt de shell,
debe iniciar un programa de terminal en el entorno gráfico. El prompt de shell se proporciona en
una ventana de aplicación de su programa de terminal gráfico.

nota
Muchos administradores de sistemas eligen no ejecutar un entorno gráfico en sus
servidores porque los usuarios no inician sesión en los servidores como espacio de
trabajo de escritorio. La carga de trabajo de un servidor puede usar de manera más
efectiva los recursos significativos que usa un entorno gráfico.

En Red Hat Enterprise Linux 9, si el entorno gráfico está disponible, la pantalla de inicio de sesión
se ejecutará en la primera consola virtual, llamada tty1. Hay cinco prompts de inicio de sesión de
texto adicionales disponibles en las consolas virtuales dos (tty2) a seis (tty6).

El entorno gráfico se inicia en la primera consola virtual que una sesión de inicio de sesión no está
usando actualmente. Normalmente, la sesión gráfica reemplaza al prompt de inicio de sesión en
la segunda consola virtual (tty2). Sin embargo, si esa consola está en uso en una sesión de inicio
de sesión de texto activa (no solo en un prompt de inicio de sesión), en su lugar, se usa la siguiente
consola virtual libre.

La pantalla de inicio de sesión gráfico se sigue ejecutando en la primera consola virtual (tty1). Si
ya ha iniciado sesión en una sesión gráfica y cambia a otro usuario en el entorno gráfico sin cerrar
sesión, se iniciará otro entorno gráfico para ese usuario en la siguiente consola virtual libre.

Cuando cierra sesión en un entorno gráfico, sale de la consola virtual y la consola física volverá
automáticamente a la pantalla de inicio de sesión gráfica de la primera consola virtual.

RH124-RHEL9.0-es-5-20230516 17
capítulo 2 | Acceso a la línea de comandos

nota
En Red Hat Enterprise Linux 6 y 7, la pantalla de inicio de sesión gráfica se ejecuta
en la primera consola virtual; sin embargo, al iniciar sesión, el entorno gráfico
inicial reemplaza a la pantalla de inicio de sesión de la primera consola virtual en
lugar de iniciarse en una nueva consola virtual. En Red Hat Enterprise Linux 8, el
comportamiento es el mismo que en Red Hat Enterprise Linux 9.

Un servidor sin periféricos no tiene teclado ni pantalla conectados permanentemente. Un centro


de datos puede estar lleno de muchos racks de servidores sin periféricos; al no proporcionar
a cada uno un teclado y una pantalla, se ahorran espacio y gastos. Para permitir que los
administradores inicien sesión, un servidor sin periféricos puede tener un prompt de inicio de
sesión proporcionado por su consola serial, que se ejecuta en un puerto serial conectado a un
servidor de consola en red para tener acceso remoto.

La consola en serie se usa normalmente para acceder al servidor si la tarjeta de red del servidor
se configura incorrectamente y el inicio de sesión en el servidor a través de la conexión de red
convencional se vuelve imposible. Sin embargo, la mayoría de las veces, se accede a los servidores
sin periféricos por otros medios a través de la red, por ejemplo, la informática de red virtual (VNC)
para ejecutar una interfaz gráfica en la máquina de destino.

Iniciar sesión en un sistema remoto


Los usuarios y administradores de Linux a menudo necesitan obtener acceso de shell a un sistema
remoto conectándose a él a través de la red. En un entorno de cómputo moderno, muchos
servidores sin periféricos son máquinas virtuales o se ejecutan como instancias de nube pública o
privada. Estos sistemas no son físicos y no tienen consolas de hardware reales. Es posible que ni
siquiera puedan proporcionar acceso a su consola física o consola serial (simulada).

En Linux, la forma más común de obtener un prompt de shell en un sistema remoto es usar Secure
Shell (SSH). La mayoría de los sistemas Linux (incluidos los que usan Red Hat Enterprise Linux) y
macOS proporcionan el OpenSSHprograma de línea de comandosssh para este propósito.

En este ejemplo, un usuario con un prompt de shell en la máquina host usa ssh para iniciar sesión
en el sistema Linux remoto remotehost con el usuario remoteuser:

[user@host ~]$ ssh remoteuser@remotehost


remoteuser@remotehost's password: password
[remoteuser@remotehost ~]$

El comando ssh cifra la conexión para proteger la comunicación contra el espionaje o el robo de
contraseñas y contenido.

Algunos sistemas, como las nuevas instancias en la nube, no permiten que los usuarios usen
una contraseña para iniciar sesión con ssh para mejorar la seguridad. Una forma alternativa de
autenticarse en una máquina remota sin ingresar una contraseña es a través de la autenticación de
clave pública.

Con este método de autenticación, los usuarios tienen un archivo de identidad especial con una
clave privada, equivalente a una contraseña, que mantienen en secreto. Su cuenta en el servidor
está configurada con una clave pública, que no tiene que ser secreta. Al iniciar sesión, los usuarios
pueden configurar ssh para proporcionar la clave privada. Si su clave pública coincidente está
instalada en esa cuenta en ese servidor remoto, iniciarán sesión sin necesitar una contraseña.

18 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

En el siguiente ejemplo, un usuario con un prompt de shell en la máquina host inicia sesión en
remotehost como remoteuser con ssh, mediante el uso del método de autenticación de clave
pública. El comando ssh con la opción -i se usa para especificar el archivo de clave privada del
usuario, que es mylab.pem. La clave pública coincidente ya está configurada como una clave
autorizada en la cuenta remoteuser.

[user@host ~]$ ssh -i mylab.pem remoteuser@remotehost


[remoteuser@remotehost ~]$

Para que la conexión funcione, solo el usuario propietario del archivo puede tener acceso para
leer el archivo de clave privada. En el ejemplo anterior, donde la clave privada está en el archivo
mylab.pem, puede usar el comando chmod 600 mylab.pem para garantizar que solo el
propietario pueda leer el archivo. La forma de configurar los permisos de archivo se describe en
más detalle en un capítulo posterior.

Los usuarios también pueden tener configuradas claves privadas que se prueban
automáticamente, pero ese asunto está fuera del alcance de esta sección. En las referencias que
aparecen al final de esta sección, hay más información acerca de este tema.

nota
La primera vez que inicie sesión en una nueva máquina, le mostrará una advertencia
de ssh que no puede establecer la autenticidad del host:

[user@host ~]$ ssh -i mylab.pem remoteuser@remotehost


The authenticity of host 'remotehost (192.0.2.42)' can't be established.
ECDSA key fingerprint is 47:bf:82:cd:fa:68:06:ee:d8:83:03:1a:bb:29:14:a3.
Are you sure you want to continue connecting (yes/no)? yes
[remoteuser@remotehost ~]$

Cada vez que se conecta a un host remoto con ssh, el host remoto envía su clave de host para
autenticarse y para ayudar a configurar la comunicación cifrada. El comando ssh compara la clave
de host con una lista de claves de host guardadas para asegurarse de que no tiene cambios. Si
la clave de host presenta cambios, podría indicar que alguien está tratando de fingir ser ese host
para capturar la conexión, lo que también se conoce como ataque de interceptor. En SSH, las
claves de host protegen contra los ataques de interceptor; estas claves de host son únicas para
cada servidor, y deben cambiarse periódicamente y siempre que se sospeche una violación a la
seguridad.

Recibe esta advertencia cuando su máquina local no tiene una clave de host guardada para el host
remoto. Si introduce yes, la clave de host que envió el host remoto se acepta y se guarda para
referencia futura. El proceso de inicio de sesión continuará y no deberá volver a ver este mensaje
cuando se conecte a este host. Si introduce no, la clave de host se rechaza, y se cierra la conexión.

Si la máquina local tiene una clave de host guardada y no coincide con la que envió el host remoto,
la conexión se cierra automáticamente con una advertencia.

Cerrar sesión desde un sistema remoto


Cuando haya terminado con la shell y desee salir, puede elegir una de las varias formas de
finalizar la sesión. Puede introducir el comando exit para finalizar la sesión de shell actual. Como
alternativa, puede terminar una sesión presionando Ctrl+D.

RH124-RHEL9.0-es-5-20230516 19
capítulo 2 | Acceso a la línea de comandos

En el siguiente ejemplo, se muestra a un usuario que cierra una sesión de SSH:

[remoteuser@remotehost ~]$ exit


logout
Connection to remotehost closed.
[user@host ~]$

Referencias
Páginas del manual: intro(1), bash(1), pts(4), ssh(1) y ssh-keygen(1)

Para obtener más información sobre OpenSSH y la autenticación de clave pública,


consulte el capítulo Using Secure Communications between Two Systems with
OpenSSH en la guía Red Hat Enterprise Linux 9 Securing Networks en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-
single/securing_networks/index

Se incluyen instrucciones sobre cómo leer las páginas man y otros documentos de
ayuda en línea en el próximo capítulo.

20 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

Cuestionario

Acceso a la línea de comandos


Elija la respuesta correcta para las siguientes preguntas:

1. ¿Qué término describe al intérprete que ejecuta los comandos que se escriben como
cadenas?
a. Comando
b. Consola
c. Shell
d. Terminal

2. ¿Qué término describe la indicación visual que muestra que una shell interactiva espera
que el usuario escriba un comando?
a. Argumento
b. Comando
c. Opción
d. Prompt

3. ¿Qué término describe el nombre del programa que se ejecutará?


a. Argumento
b. Comando
c. Opción
d. Prompt

4. ¿Qué término describe la parte de la línea de comandos que modifica el


comportamiento de un comando?
a. Argumento
b. Comando
c. Opción
d. Prompt

5. ¿Qué término describe la parte de la línea de comandos que especifica el destino


donde debe operar el comando?
a. Argumento
b. Comando
c. Opción
d. Prompt

RH124-RHEL9.0-es-5-20230516 21
capítulo 2 | Acceso a la línea de comandos

6. ¿Qué término describe el hardware de pantalla y el teclado para interactuar con un


sistema?
a. Consola física
b. Consola virtual
c. Shell
d. Terminal

7. ¿Qué término describe a una de las varias consolas lógicas, de las cuales cada una
puede respaldar una sesión de inicio de sesión independiente?
a. Consola física
b. Consola virtual
c. Shell
d. Terminal

8. ¿Qué término describe a una interfaz que proporciona una pantalla de salida y un
teclado de entrada en una sesión de shell?
a. Consola
b. Consola virtual
c. Shell
d. Terminal

22 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

Solución

Acceso a la línea de comandos


Elija la respuesta correcta para las siguientes preguntas:

1. ¿Qué término describe al intérprete que ejecuta los comandos que se escriben como
cadenas?
a. Comando
b. Consola
c. Shell
d. Terminal

2. ¿Qué término describe la indicación visual que muestra que una shell interactiva espera
que el usuario escriba un comando?
a. Argumento
b. Comando
c. Opción
d. Prompt

3. ¿Qué término describe el nombre del programa que se ejecutará?


a. Argumento
b. Comando
c. Opción
d. Prompt

4. ¿Qué término describe la parte de la línea de comandos que modifica el


comportamiento de un comando?
a. Argumento
b. Comando
c. Opción
d. Prompt

5. ¿Qué término describe la parte de la línea de comandos que especifica el destino


donde debe operar el comando?
a. Argumento
b. Comando
c. Opción
d. Prompt

RH124-RHEL9.0-es-5-20230516 23
capítulo 2 | Acceso a la línea de comandos

6. ¿Qué término describe el hardware de pantalla y el teclado para interactuar con un


sistema?
a. Consola física
b. Consola virtual
c. Shell
d. Terminal

7. ¿Qué término describe a una de las varias consolas lógicas, de las cuales cada una
puede respaldar una sesión de inicio de sesión independiente?
a. Consola física
b. Consola virtual
c. Shell
d. Terminal

8. ¿Qué término describe a una interfaz que proporciona una pantalla de salida y un
teclado de entrada en una sesión de shell?
a. Consola
b. Consola virtual
c. Shell
d. Terminal

24 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

Acceso a la línea de comandos con el


escritorio

Objetivos
Iniciar sesión en el sistema Linux con el entorno de escritorio GNOME y ejecutar comandos desde
un prompt de shell en un programa de terminal.

Introducción al entorno de escritorio de GNOME


El entorno de escritorio es la interfaz gráfica de usuario en un sistema Linux. GNOME 40 es el
entorno de escritorio predeterminado en Red Hat Enterprise Linux 9. Proporciona un escritorio
integrado para los usuarios y una plataforma de desarrollo unificada sobre un marco gráfico
proporcionado por Wayland (de forma predeterminada) o el sistema heredado X Window
System.

GNOME Shell proporciona las funciones centrales de la interfaz de usuario para el entorno
de escritorio GNOME. La aplicación GNOME Shell es muy personalizable. Red Hat Enterprise
Linux 9 toma como valor predeterminado de aspecto y comportamiento de GNOME Shell el tema
"Estándar", que se usa en esta sección. Puede usar de forma predeterminada un tema "Clásico"
alternativo, que se asemeja más a la apariencia de versiones anteriores de GNOME y que se usa
en versiones anteriores de RHEL. Puede seleccionar cualquiera de los temas de forma persistente
al iniciar sesión haciendo clic en el icono de engranaje junto al botón Sign In. El icono de engranaje
está disponible después de seleccionar su cuenta, pero antes de ingresar su contraseña.

Figura 2.1: La pantalla de inicio de sesión de RHEL 9

RH124-RHEL9.0-es-5-20230516 25
capítulo 2 | Acceso a la línea de comandos

La primera vez que inicia sesión como usuario nuevo, puede realizar un programa opcional de
"Recorrido" inicial para conocer las nuevas funciones de RHEL 9. Después de completarla u
omitirla, aparece la pantalla principal de GNOME.

Para revisar la documentación en GNOME Help, haga clic en el botón Activities en el lado
izquierdo de la barra superior. En el guion en la parte inferior de la pantalla, haga clic en el icono
del anillo para iniciarlo o desplace el mouse sobre el icono Help.

Partes de la shell de GNOME


Los elementos de la shell de GNOME incluyen las siguientes partes, como se muestra en esta
captura de pantalla de la shell de GNOME en el modo de vista general de Activities:

Barra superior: la barra que se muestra en la parte superior de la pantalla. Aparece en la vista
general de Activities y en los espacios de trabajo. La barra superior proporciona el botón
Activities y los controles de volumen, redes, acceso al calendario y de selección de métodos
de entrada del teclado (si hay más de uno configurado).

Vista general de Activities: este modo ayuda al usuario a organizar ventanas e iniciar
aplicaciones. Para ingresar a la vista general de Activities (Actividades) puede hacer clic en
el botón Activities en la esquina superior izquierda de la barra superior o presionar la tecla
Super. Busque la tecla Super (a veces denominada tecla Windows o tecla Command) cerca
de la esquina inferior izquierda de los teclados más comunes. Las tres áreas principales son
dash en la parte inferior de la pantalla, windows overview en el centro y workspace selector
en el lado derecho.

Menú del sistema: el menú en la esquina superior derecha de la barra superior proporciona
controles para ajustar el brillo de la pantalla y para activar y desactivar las conexiones de
red. En el submenú del nombre del usuario, hay opciones para ajustar la configuración de la
cuenta y cerrar la sesión del sistema. El menú del sistema también ofrece botones para abrir
la ventana Settings, bloquear la pantalla o apagar el sistema.

Guion: esta lista configurable de iconos muestra sus aplicaciones favoritas, aplicaciones
en ejecución y un botón Show Applications para seleccionar aplicaciones arbitrarias. Las
aplicaciones se pueden iniciar al hacer clic en uno de los iconos o al usar el botón Show

26 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

Applications para buscar una aplicación que se usa con menos frecuencia. Al guion también
se lo denomina dock.

Descripción general de Windows: el área en el centro de la descripción general de Actividades


que muestra miniaturas de ventanas activas en el espacio de trabajo actual, para traer
ventanas al primer plano en un espacio de trabajo desordenado o moverlas a otro espacio de
trabajo.

Selector de espacios de trabajo: área a la derecha que muestra miniaturas de los espacios de
trabajo activos y permite seleccionar espacios de trabajo y mover ventanas de un espacio de
trabajo a otro.

Bandeja de mensajes: con la bandeja de mensajes, puede revisar las notificaciones de


aplicaciones o componentes del sistema. Si ocurre una notificación, normalmente esta
aparece primero brevemente como una sola línea en la parte superior de la pantalla, y
aparece un indicador persistente en la barra superior junto al reloj para informar al usuario de
las notificaciones recibidas recientemente. Abra la bandeja de mensajes para revisar estas
notificaciones al hacer clic en el reloj en la parte superior o al presionar Super+M. Cierre la
bandeja de mensajes al presionar el reloj en la barra superior o al presionar Esc o Super+M
nuevamente. La bandeja de mensajes también muestra el calendario y la información sobre
los eventos en el calendario.

Figura 2.2: Primer plano de una bandeja de mensajes abierta

Puede ver y editar los métodos abreviados de teclado de GNOME que usa su cuenta. Abra
el menú del sistema en el lado derecho de la barra superior. Haga clic en el botón Settings
(Configuración) en la parte inferior del menú de la izquierda. En la ventana de la aplicación que se
abre, seleccione Keyboard en el panel izquierdo. En el panel derecho aparecerá la configuración
actual de métodos abreviados en la sección Keyboard Shortcuts > Customize Shortcuts.

nota
Algunos métodos abreviados de teclado, como las teclas de función o la tecla
Super, pueden ser difíciles de enviar a una máquina virtual. El sistema operativo
local o la aplicación que usa para acceder al escritorio gráfico de la máquina virtual
pueden capturar las pulsaciones de teclas especiales que usan esos métodos
abreviados.

RH124-RHEL9.0-es-5-20230516 27
capítulo 2 | Acceso a la línea de comandos

Importante
En los entornos actuales de capacitación virtual y de autoaprendizaje
proporcionados por Red Hat, el uso de la tecla Super puede ser complicado, ya que
es posible que su explorador web no la pase a la máquina virtual en el entorno del
aula.

En la parte superior de la ventana del explorador que muestra la interfaz para su


máquina virtual, haga clic en el icono de teclado en el margen derecho. Se abre
un teclado en pantalla. Haga clic en el icono nuevamente para cerrar el teclado en
pantalla.

El teclado en pantalla considera a Super como una tecla modificadora que a


menudo se mantiene presionada mientras se presiona otra tecla. Si hace clic una
vez, se pone amarilla para indicar que la tecla se mantiene presionada. Entonces,
por ejemplo, para ingresar Super+M en el teclado en pantalla, puede hacer clic en
Super y, luego, en M.

Para presionar y soltar Super en el teclado en pantalla, haga clic dos veces. El
primer clic "mantiene pulsada" la teclaSuper y el segundo la suelta.

Las otras teclas que se consideran teclas modificadoras (como Super) en el


teclado en pantalla son Shift, Ctrl, Alt y Caps. Las teclas Esc y Menu se
consideran teclas normales y no teclas modificadoras.

Acceso a los espacios de trabajo


Los espacios de trabajo son pantallas de escritorio por separado que tienen diferentes ventanas
de aplicaciones. Se pueden usar espacios de trabajo para organizar el entorno de trabajo al
agrupar las ventanas abiertas de la aplicación por tarea. Por ejemplo, puede agrupar ventanas
para una actividad de mantenimiento del sistema particular (como configurar un nuevo servidor
remoto) en un espacio de trabajo y agrupar las aplicaciones de correo electrónico y otras
aplicaciones de comunicación en otro espacio de trabajo.

Elija entre dos métodos para cambiar entre espacios de trabajo. El primer método es presionar
Ctrl+Alt+LeftArrow o Ctrl+Alt+RightArrow para cambiar entre espacios de trabajo de
forma secuencial. El segundo es cambiar a la vista general de Activities y hacer clic en el espacio
de trabajo deseado.

Una ventaja de usar la vista general de Activities es que se puede hacer clic en las ventanas y
arrastrarlas entre espacios de trabajo mediante el uso de workspace selector en el lado derecho
de la pantalla y windows overview en el centro de la pantalla.

28 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

Importante
Al igual que lo que sucede con Super, en los entornos actuales de capacitación
virtual y autoaprendizaje de Red Hat, el explorador web por lo general no transfiere
las combinaciones de teclas Ctrl+Alt a la máquina virtual en el entorno del aula.

Puede ingresar estas combinaciones de teclas para cambiar espacios de trabajo a


través del teclado en pantalla. Al menos dos espacios de trabajo deben estar en uso.
Abra el teclado en pantalla y haga clic en Ctrl, Alt y luego en LeftArrow (Flecha
arriba) o RightArrow (Flecha abajo).

Sin embargo, en esos entornos de capacitación, generalmente es más simple evitar


los métodos abreviados de teclado y el teclado en pantalla. Para cambiar espacios
de trabajo, haga clic en el botón Activities y, luego, en el selector de espacios de
trabajo a la derecha de la vista general de Activities (Actividades) y haga clic en el
espacio de trabajo al que desea cambiar.

Inicio de un terminal
Para obtener un prompt de shell en GNOME, inicie una aplicación de terminal gráfica como GNOME
Terminal. Use uno de los siguientes métodos para iniciar un terminal:

• En la vista general Activities, seleccione Terminal en dash, ya sea en Favoritos o con el botón
Show Applications.
• Busque terminal en el campo de búsqueda en la parte superior de windows overview.
• Presione la combinación de teclas Alt+F2 para abrir la ventana Enter a Command e introduzca
gnome-terminal.

Cuando abre una ventana de terminal, se muestra un prompt de shell para el usuario que inició
el programa de terminal gráfica. El prompt de shell y la barra de títulos de la ventana de terminal
indicarán el nombre de usuario actual, el nombre del host y el directorio de trabajo.

Bloquear la pantalla y cerrar sesión


El bloqueo de la pantalla, o el cierre definitivo de sesión, se realiza desde el menú del sistema bien
a la derecha de la barra superior.

Para bloquear la pantalla, en el menú del sistema en la esquina superior derecha, haga clic en el
botón de bloqueo en la parte inferior del menú o presione Super+L (que puede ser más fácil de
recordar como Windows+L). La pantalla también se bloqueará si la sesión gráfica está inactiva
durante unos minutos.

Aparecerá una lock screen curtain que muestra la hora del sistema y el nombre del usuario que
inició sesión. Para desbloquear la pantalla, puede presionar Enter, Space o hacer clic en el botón
izquierdo del mouse. Luego, ingrese la contraseña de ese usuario en lock screen.

Para cerrar sesión y finalizar la sesión gráfica actual, seleccione el menú del sistema en la esquina
superior derecha de la barra superior y seleccione Power Off/Log Out > Log Out. Aparece una
ventana que ofrece la opción para Cancel o confirmar la acción Log Out.

Apagar o reiniciar el sistema


Para apagar el sistema, desde el menú del sistema en la esquina superior derecha, seleccione
Power Off/Log out > Power Off o presione Ctrl+Alt+Del. Aparece una ventana que ofrece
la opción para Cancel o confirmar la acción Power Off. Si no elige nada, el sistema se apagará
automáticamente después de 60 segundos.

RH124-RHEL9.0-es-5-20230516 29
capítulo 2 | Acceso a la línea de comandos

Para reiniciar el sistema, desde el menú del sistema en la esquina superior derecha, seleccione
Power Off/Log out > Restart. Aparece una ventana que ofrece la opción para Cancel o confirmar
la acción Restart. Si no elige nada, el sistema se reiniciará automáticamente después de 60
segundos.

Referencias
Ayuda de GNOME

• yelp

Ayuda de GNOME: Visual Overview of GNOME

• yelp help:gnome-help/shell-introduction

Página web de GNOME 40


https://forty.gnome.org/

30 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

Ejercicio Guiado

Acceso a la línea de comandos con el


escritorio
En este ejercicio, iniciará sesión como usuario normal a través del gestor de visualización
gráfica para conocer el entorno de escritorio estándar de GNOME que ofrece GNOME 40.

Resultados
• Iniciar sesión en un sistema Linux con el entorno de escritorio GNOME 40.
• Ejecutar comandos desde un prompt de shell en un programa de terminal.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start cli-desktop

Instrucciones
1. Inicie sesión en workstation como student con la contraseña student.

1.1. En workstation, en la pantalla de inicio de sesión de GNOME, haga clic en la


cuenta de usuario student. Escriba student como contraseña cuando se le
indique.

1.2. Presione Enter.

2. Cambie la contraseña para student de student a 55TurnK3y.

Importante
El script finish restablece la contraseña del usuario student a student. Debe
ejecutar el script al final del ejercicio.

2.1. Abra una ventana Terminal y use el comando passwd en el prompt de shell.
En el entorno de aprendizaje virtual con teclado visual, presione la tecla Super
dos veces para ingresar a la vista general de Activities. Escriba terminal y, luego,
presione Enter para iniciar Terminal.

2.2. En la ventana Terminal que aparece, escriba passwd en el prompt de shell. Cambie
la contraseña student de student a 55TurnK3y.

RH124-RHEL9.0-es-5-20230516 31
capítulo 2 | Acceso a la línea de comandos

[student@workstation ~]$ passwd


Changing password for user student.
Current password: student
New password: 55TurnK3y
Retype new password: 55TurnK3y
passwd: all authentication tokens updated successfully.

3. Cierre sesión y vuelva a iniciarla con el usuario student con la contraseña 55TurnK3y
para verificar el cambio de contraseña.

3.1. Haga clic en el menú del sistema en la esquina superior derecha.

3.2. Seleccione Power Off/Log Out > Log Out.

3.3. Haga clic en Log Out en el cuadro de diálogo de confirmación que se muestra.

3.4. En la pantalla de inicio de sesión GNOME, haga clic en la cuenta de usuario student.
Escriba 55TurnK3y como contraseña cuando se le indique.

3.5. Presione Enter.

4. Bloquee la pantalla.

4.1. En el menú del sistema en la esquina superior derecha, presione el botón Lock.

5. Desbloquee la pantalla.

5.1. Presione Enter para desbloquear la pantalla.

5.2. En el campo Password, escriba 55TurnK3y como contraseña.

5.3. Presione Enter.

6. Determine cómo apagar workstation desde la interfaz gráfica, pero haga clic en Cancel
(Cancelar) para cancelar la operación sin apagar el sistema.

6.1. En el menú del sistema en la esquina superior derecha, seleccione Power Off/Log
Out > Power Off. Aparecerá un cuadro de diálogo con las opciones Cancel o Power
Off la máquina.

6.2. Haga clic en Cancel en el cuadro de diálogo que se muestra.

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish cli-desktop

Esto concluye la sección.

32 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

Ejecutar comandos con shell de bash

Objetivos
Ahorrar tiempo en la ejecución de comandos desde un prompt de shell con los accesos directos de
Bash.

Sintaxis básica de comandos


GNU Bourne-Again Shell (bash) es un programa que interpreta comandos escritos por el
usuario. Cada cadena escrita en la shell puede tener un máximo de tres partes: el comando, las
opciones (que suelen comenzar con un guion - o un doble guion --) y los argumentos. Cada
palabra escrita en la shell está separada de otras palabras por espacios. Los comandos son
nombres de programas que están instalados en el sistema. Cada comando tiene sus opciones y
argumentos.

Cuando esté listo para ejecutar un comando, presione la tecla Enter. Escriba cada comando en
una línea separada. La salida del comando se muestra antes de que aparezca el siguiente prompt
de shell.

[user@host ~]$ whoami


user
[user@host ~]$

Para escribir más de un comando en una sola línea, use un punto y coma (;) como separador
de comando. El punto y coma pertenece a la clase de caracteres denominada metacaracteres
que tienen una interpretación especial para bash. En este caso, la salida de ambos comandos se
muestra antes de que aparezca el siguiente prompt de shell.

En el siguiente ejemplo, se muestra cómo combinar dos comandos (command1 y command2) en la


línea de comandos.

[user@host ~]$ command1 ; command2


command1 output
command2 output
[user@host ~]$

Escribir comandos simples


El comando date muestra la fecha y la hora actuales. El superusuario o un usuario privilegiado
también pueden usar el comando date para configurar el reloj del sistema. Un argumento que
comienza con el signo más (+) especifica una cadena de formato para el comando de fecha.

RH124-RHEL9.0-es-5-20230516 33
capítulo 2 | Acceso a la línea de comandos

[user@host ~]$ date


Sun Feb 27 08:32:42 PM EST 2022
[user@host ~]$ date +%R
20:33
[user@host ~]$ date +%x
02/27/2022

El comando passwd sin opciones cambia la contraseña del usuario actual. Para cambiar la
contraseña, primero especifique la contraseña original para la cuenta. De manera predeterminada,
el comando passwd se configura para solicitar una contraseña más sólida, que esté compuesta
por letras minúsculas, letras mayúsculas, números y símbolos, y que no se base en una palabra del
diccionario. El superusuario o un usuario con privilegios pueden usar el comando passwd para
cambiar las contraseñas de otros usuarios.

[user@host ~]$ passwd


Changing password for user user.
Current password: old_password
New password: new_password
Retype new password: new_password
passwd: all authentication tokens updated successfully.

Linux no requiere de extensiones de nombre de archivo para clasificar los archivos por tipo. El
comando file escanea el encabezado compilado de un archivo en busca de un magic number
de 2 dígitos y muestra su tipo. Los archivos de texto se reconocen porque no están compilados.

[user@host ~]$ file /etc/passwd


/etc/passwd: ASCII text
[user@host ~]$ file /bin/passwd
/bin/passwd: setuid ELF 64-bit LSB pie executable, x86-64, version 1
(SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=a467cb9c8fa7306d41b96a820b0178f3a9c66055, for GNU/Linux 3.2.0,
stripped
[user@host ~]$ file /home
/home: directory

Vea el contenido de los archivos


El comando cat se usa a menudo en Linux. Use este comando para crear archivos individuales
o múltiples, ver el contenido de los archivos, concatenar el contenido de diversos archivos y
redirigirlo a un terminal o a archivos.

En el siguiente ejemplo, se muestra cómo ver el contenido del archivo /etc/passwd:

[user@host ~]$ cat /etc/passwd


root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...output omitted...

Para mostrar el contenido de varios archivos, agregue los nombres de archivo al comando cat
como argumentos:

34 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

[user@host ~]$ cat file1 file2


Hello World!!
Introduction to Linux commands.

Algunos archivos son largos y es posible que necesiten más espacio del que proporciona el
terminal. El comando cat no muestra el contenido de un archivo como páginas. El comando less
muestra una página del archivo a la vez y le permite desplazarse a su gusto.

Use el comando less para avanzar y retroceder por las páginas de los archivos que son más
largos de lo que puede mostrar una ventana de terminal. Use las teclas UpArrow y DownArrow
para desplazarse hacia arriba y hacia abajo. Presione q para salir del comando.

Los comandos head y tail muestran el comienzo y el final de un archivo, respectivamente. De


manera predeterminada, estos comandos muestran 10 líneas del archivo, pero ambos tienen la
opción -n para especificar una cantidad diferente de líneas.

[user@host ~]$ head /etc/passwd


root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[user@host ~]$ tail -n 3 /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:980:978::/run/gnome-initial-setup/:/sbin/nologin
dnsmasq:x:979:977:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin

El comando wc cuenta líneas, palabras y caracteres en un archivo. Use las opciones -l, -w o -c
para mostrar solo la cantidad dada de líneas, palabras o caracteres, respectivamente.

[user@host ~]$ wc /etc/passwd


41 98 2338 /etc/passwd
[user@host ~]$ wc -l /etc/passwd ; wc -l /etc/group
41 /etc/passwd
63 /etc/group
[user@host ~]$ wc -c /etc/group /etc/hosts
883 /etc/group
114 /etc/hosts
997 total

Comprender el autocompletado con tab


El autocompletado con tab permite que el usuario complete comandos o nombres de archivo
rápidamente una vez que haya escrito lo suficiente en el prompt como para hacerlo único. Si
los caracteres escritos no son únicos, al presionar la tecla Tab dos veces, aparecen todos los
comandos que comienzan con los caracteres ya escritos.

RH124-RHEL9.0-es-5-20230516 35
capítulo 2 | Acceso a la línea de comandos

[user@host ~]$ pasTab+Tab


passwd paste pasuspender
[user@host ~]$ passTab
[user@host ~]$ passwd
Changing password for user user.
Current password:

Presione la tecla Tab dos veces.

Presione la tecla Tab una vez.

El autocompletado con tab puede usarse para completar nombres de archivo cuando se escriben
como argumentos para comandos. Presione la tecla Tab para completar el nombre de archivo
tanto como sea posible. Si se presiona la tecla Tab por segunda vez, provoca que la shell enumere
todos los archivos que coinciden con el patrón actual. Escriba caracteres adicionales hasta que el
nombre sea único; a continuación, use el autocompletado con tab para finalizar el comando.

[user@host ~]$ ls /etc/pasTab


[user@host ~]$ ls /etc/passwdTab
passwd passwd-

Presione la tecla Tab una vez.

Presione la tecla Tab una vez.

Use el comando useradd para crear usuarios en el sistema. El comando useradd tiene muchas
opciones que pueden ser difíciles de recordar. Al usar la opción de completar con tabulación,
puede completar el nombre de la opción con un mínimo de escritura.

[root@host ~]# useradd --Tab+Tab


--badnames --gid --no-log-init --shell
--base-dir --groups --non-unique --skel
--btrfs-subvolume-home --help --no-user-group --system
--comment --home-dir --password --uid
--create-home --inactive --prefix --user-
group
--defaults --key --root
--expiredate --no-create-home --selinux-user

Presione la tecla Tab dos veces.

Escribir un comando largo en varias líneas


Los comandos con muchas opciones y argumentos pueden volverse largos rápidamente y la
ventana de comandos los delimita automáticamente cuando el cursor llega al margen derecho. En
cambio, escriba un comando largo usando más de una línea para facilitar la lectura.

Para escribir un comando en más de una línea, use un carácter de barra invertida (\), que se
conoce como el carácter de escape. El carácter de barra invertida ignora el significado del
siguiente carácter.

Anteriormente aprendió que para completar la entrada de un comando, debe presionar la tecla
Enter, el carácter de nueva línea. Con el escape del carácter de nueva línea, la shell se traslada a
una nueva línea de comando sin ejecutar el comando. La shell reconoce la solicitud mostrando un

36 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

prompt de continuación en una nueva línea vacía, denominado prompt adicional, y usa el carácter
mayor que (>) de forma predeterminada. Los comandos pueden continuarse a lo largo de muchas
líneas.

Uno de los problemas con el uso por parte del prompt adicional del carácter mayor que (>) es
que los estudiantes nuevos pueden insertar erróneamente el carácter adicional mayor que como
parte del comando escrito. A continuación, la shell interpreta un carácter mayor que escrito como
redirección de salida, que el usuario no pretendía. La redirección de salida se trata en un próximo
capítulo. Para evitar confusiones, en este manual no se mostrarán prompts adicionales en las
salidas de pantalla. Un usuario aún ve el prompt adicional en la ventana de la shell, pero el material
del curso muestra intencionalmente solo los caracteres que se deben escribir, como se muestra en
el siguiente ejemplo.

[user@host ~]$ head -n 3 \


/usr/share/dict/words \
/usr/share/dict/linux.words
==> /usr/share/dict/words <==
1080
10-point
10th

==> /usr/share/dict/linux.words <==


1080
10-point
10th

Mostrar el historial de comandos


El comando history muestra una lista de los comandos ejecutados anteriormente con un
número de comando como prefijo.

El carácter de signo de admiración, (!), es un metacarácter para expandir los comandos anteriores
sin volver a escribirlos. El comando !number se expande hasta el comando que coincide con
el número especificado. El comando !string se expande hasta el comando más reciente que
comienza con la cadena especificada.

[user@host ~]$ history


...output omitted...
23 clear
24 who
25 pwd
26 ls /etc
27 uptime
28 ls -l
29 date
30 history
[user@host ~]$ !ls
ls -l
total 0
drwxr-xr-x. 2 student student 6 Feb 27 19:24 Desktop
...output omitted...
[user@host ~]$ !26
ls /etc
abrt hosts pulse

RH124-RHEL9.0-es-5-20230516 37
capítulo 2 | Acceso a la línea de comandos

adjtime hosts.allow purple


aliases hosts.deny qemu-ga
...output omitted...

Las teclas de flecha pueden usarse para navegar por los comandos anteriores en el historial de
la shell. La tecla UpArrow edita el comando anterior en la lista de historial. La tecla DownArrow
edita el comando siguiente en la lista de historial. LeftArrow y RightArrow mueven el cursor
hacia la izquierda y hacia la derecha en el comando actual de la lista del historial para que pueda
editar el comando antes de ejecutarlo.

Use la combinación de teclas Esc+. o Alt+. para insertar la última palabra del comando anterior
en la ubicación actual del cursor. El uso repetido de la combinación de teclas reemplaza ese
texto con la última palabra de comandos anteriores en el historial. La combinación de teclas
Alt+. es particularmente conveniente porque puede mantener presionado Alt y presionar .
repetidamente para pasar con facilidad por los comandos anteriores.

Editar la línea de comandos


Cuando se usa en forma interactiva, bash tiene una función de edición de línea de comandos.
Use los comandos del editor de texto para desplazarse y modificar el comando actual que se
está escribiendo. El uso de las teclas de flecha para moverse dentro del comando actual y pasar
por el historial de comando se presentó anteriormente en esta sección. En la siguiente tabla, se
muestran más potentes comandos de edición.

Métodos abreviados útiles de edición de línea de comandos

Método abreviado Descripción

Ctrl+A Ir al inicio de la línea de comandos.

Ctrl+E Ir al final de la línea de comandos.

Ctrl+U Borrar desde el cursor hasta el principio de la línea de comandos.

Ctrl+K Borrar desde el cursor hasta el final de la línea de comandos.

Ctrl+LeftArrow Ir al inicio de la palabra anterior en la línea de comandos.

Ctrl+RightArrow Ir al final de la palabra siguiente en la línea de comandos.

Ctrl+R Buscar un patrón en la lista de historial de comandos.

Estos comandos de edición de la línea de comandos son los más útiles para los nuevos usuarios.
Para otros comandos, consulte la página del manual bash(1).

Referencias
Páginas del manual: bash(1), date(1), file(1), magic(5), cat(1), more(1), less(1),
head(1), passwd(1), tail(1) y wc(1)

38 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

Cuestionario

Ejecutar comandos con shell de bash


Elija las respuestas correctas para las siguientes preguntas:

1. ¿Qué comando de Bash muestra las últimas cinco líneas del archivo /var/log/
messages ?
a. head -n 10 /var/log/messages
b. tail 10 /var/log/messages
c. tail -n 5 /var/log/messages
d. tail -l 10 /var/log/messages
e. less /var/log/messages

2. ¿Qué método abreviado o comando de Bash separa los comandos en la misma línea?
a. Presionar Tab
b. history
c. ;
d. !string
e. Presionar Esc+.

3. ¿Qué comando de Bash se usa para cambiar la contraseña de un usuario?


a. password
b. pass
c. passwd
d. usermod
e. userpassword

4. ¿Qué comando de Bash se usa para mostrar el tipo de archivo?


a. file
b. less
c. cat
d. history
e. view

5. ¿Qué comando o método abreviado de Bash se usa para completar comandos,


nombres de archivo y opciones?
a. ;
b. !number
c. history
d. Presionar Tab
e. Presionar Esc+.

RH124-RHEL9.0-es-5-20230516 39
capítulo 2 | Acceso a la línea de comandos

6. ¿Qué comando o método abreviado de Bash vuelve a ejecutar un comando específico


de la lista del historial?
a. Presionar Tab
b. !number
c. !string
d. history
e. Presionar Esc+.

7. ¿Qué comando o método abreviado de Bash va al inicio de la línea de comandos?


a. !number
b. !string
c. Presionar Ctrl+LeftArrow
d. Presionar Ctrl+K
e. Presionar Ctrl+A

8. ¿Qué comando o método abreviado de Bash muestra la lista de comandos ejecutados


anteriormente?
a. Presionar Tab
b. !string
c. !number
d. history
e. Presionar Esc+.

9. ¿Qué comando o método abreviado de Bash copia el último argumento de comandos


anteriores?
a. Presionar Ctrl+K
b. Presionar Ctrl+A
c. !number
d. Presionar Esc+.

40 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

Solución

Ejecutar comandos con shell de bash


Elija las respuestas correctas para las siguientes preguntas:

1. ¿Qué comando de Bash muestra las últimas cinco líneas del archivo /var/log/
messages ?
a. head -n 10 /var/log/messages
b. tail 10 /var/log/messages
c. tail -n 5 /var/log/messages
d. tail -l 10 /var/log/messages
e. less /var/log/messages

2. ¿Qué método abreviado o comando de Bash separa los comandos en la misma línea?
a. Presionar Tab
b. history
c. ;
d. !string
e. Presionar Esc+.

3. ¿Qué comando de Bash se usa para cambiar la contraseña de un usuario?


a. password
b. pass
c. passwd
d. usermod
e. userpassword

4. ¿Qué comando de Bash se usa para mostrar el tipo de archivo?


a. file
b. less
c. cat
d. history
e. view

5. ¿Qué comando o método abreviado de Bash se usa para completar comandos,


nombres de archivo y opciones?
a. ;
b. !number
c. history
d. Presionar Tab
e. Presionar Esc+.

RH124-RHEL9.0-es-5-20230516 41
capítulo 2 | Acceso a la línea de comandos

6. ¿Qué comando o método abreviado de Bash vuelve a ejecutar un comando específico


de la lista del historial?
a. Presionar Tab
b. !number
c. !string
d. history
e. Presionar Esc+.

7. ¿Qué comando o método abreviado de Bash va al inicio de la línea de comandos?


a. !number
b. !string
c. Presionar Ctrl+LeftArrow
d. Presionar Ctrl+K
e. Presionar Ctrl+A

8. ¿Qué comando o método abreviado de Bash muestra la lista de comandos ejecutados


anteriormente?
a. Presionar Tab
b. !string
c. !number
d. history
e. Presionar Esc+.

9. ¿Qué comando o método abreviado de Bash copia el último argumento de comandos


anteriores?
a. Presionar Ctrl+K
b. Presionar Ctrl+A
c. !number
d. Presionar Esc+.

42 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

Trabajo de laboratorio

Acceso a la línea de comandos


En este laboratorio, usará la shell Bash para ejecutar comandos.

Resultados
• Ejecutar correctamente programas simples con la línea de comandos de la shell Bash.
• Ejecutar comandos para identificar tipos de archivos y visualizar partes de archivos de
texto.
• Practicar el uso de algunos "atajos" del historial de comandos de Bash para repetir
comandos o partes de comandos con más eficiencia.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start cli-review

Instrucciones
1. Use el comando date para mostrar la fecha y hora actuales.
2. Muestre la hora actual en reloj de 24 horas (por ejemplo, 13:57). Sugerencia: la cadena de
formato que se muestra en la salida es %R.
3. ¿Qué tipo de archivo es /home/student/zcat? ¿Es legible por el ojo humano?
4. Use el comando wc y los accesos directos de Bash para visualizar el tamaño del archivo zcat.
5. Muestre las primeras 10 líneas del archivo zcat.
6. Muestre las últimas 10 líneas del archivo zcat.
7. Repita el comando anterior exactamente con cuatro o menos pulsaciones del teclado.
8. Use el comando tail, opción -n 20, para visualizar las últimas 20 líneas del archivo.
Use la edición de la línea de comandos para hacer esta tarea con una cantidad mínima de
pulsaciones.
9. Use el historial de shell para ejecutar el comando date +%R de nuevo.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade cli-review

RH124-RHEL9.0-es-5-20230516 43
capítulo 2 | Acceso a la línea de comandos

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish cli-review

Esto concluye la sección.

44 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

Solución

Acceso a la línea de comandos


En este laboratorio, usará la shell Bash para ejecutar comandos.

Resultados
• Ejecutar correctamente programas simples con la línea de comandos de la shell Bash.
• Ejecutar comandos para identificar tipos de archivos y visualizar partes de archivos de
texto.
• Practicar el uso de algunos "atajos" del historial de comandos de Bash para repetir
comandos o partes de comandos con más eficiencia.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start cli-review

Instrucciones
1. Use el comando date para mostrar la fecha y hora actuales.

[student@workstation ~]$ date


Mon Feb 28 01:57:25 PM PDT 2022

2. Muestre la hora actual en reloj de 24 horas (por ejemplo, 13:57). Sugerencia: la cadena de
formato que se muestra en la salida es %R.

2.1. Use el argumento +%R con el comando date para mostrar la hora actual en reloj de 24
horas.

[student@workstation ~]$ date +%R


13:58

3. ¿Qué tipo de archivo es /home/student/zcat? ¿Es legible por el ojo humano?

3.1. Use el comando file para determinar su tipo de archivo.

[student@workstation ~]$ file zcat


zcat: a /usr/bin/sh script, ASCII text executable

4. Use el comando wc y los accesos directos de Bash para visualizar el tamaño del archivo zcat.

RH124-RHEL9.0-es-5-20230516 45
capítulo 2 | Acceso a la línea de comandos

4.1. Puede usar el comando wc para mostrar la cantidad de líneas, palabras y bytes en el
script zcat. En lugar de volver a escribir el nombre del archivo, use el atajo del historial
de Bash Esc+. (presione las teclas Esc y . al mismo tiempo) para volver a usar el
argumento del comando anterior.

[student@workstation ~]$ wc Esc+.


[student@workstation ~]$ wc zcat
51 299 1988 zcat

5. Muestre las primeras 10 líneas del archivo zcat.

5.1. El comando head muestra el inicio del archivo. Intente usar el atajo Esc+. de nuevo.

[student@workstation ~]$ head Esc+.


[student@workstation ~]$ head zcat
#!/bin/sh
# Uncompress files to standard output.

# Copyright (C) 2007, 2010-2018 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify


# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.

6. Muestre las últimas 10 líneas del archivo zcat.

6.1. Use el comando tail para mostrar las últimas 10 líneas del archivo zcat.

[student@workstation ~]$ tail Esc+.


[student@workstation ~]$ tail zcat
With no FILE, or when FILE is -, read standard input.

Report bugs to "<bug-gzip@gnu.org>."

case $1 in
--help) printf '%s\n' "$usage" || exit 1;;
--version) printf '%s\n' "$version" || exit 1;;
esac

exec gzip -cd "$@"

7. Repita el comando anterior exactamente con cuatro o menos pulsaciones del teclado.

7.1. Repita el comando anterior exactamente con cuatro o menos pulsaciones del teclado.
Presione la tecla UpArrow una vez para desplazarse hacia atrás un comando a través
del historial de comandos y luego presione Enter (usa dos teclas). Una alternativa
sería ingresar el comando de atajo !! y luego presionar Enter (usa cuatro teclas) para
ejecutar el comando más reciente en el historial de comandos. Pruebe ambos métodos.

[student@workstation]$ !!
tail zcat
With no FILE, or when FILE is -, read standard input.

46 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

Report bugs to "<bug-gzip@gnu.org>."

case $1 in
--help) printf '%s\n' "$usage" || exit 1;;
--version) printf '%s\n' "$version" || exit 1;;
esac

exec gzip -cd "$@"

8. Use el comando tail, opción -n 20, para visualizar las últimas 20 líneas del archivo.
Use la edición de la línea de comandos para hacer esta tarea con una cantidad mínima de
pulsaciones.

8.1. Use la tecla UpArrow para mostrar el comando anterior. A continuación, use la
combinación de teclas Ctrl+A para mover el cursor al principio de la línea. A
continuación, use la combinación de teclas Ctrl+RightArrow para pasar a la
siguiente palabra. Luego, agregue la opción -n 20 y presione Enter para ejecutar el
comando.

[student@workstation ~]$ tail -n 20 zcat


-l, --list list compressed file contents
-q, --quiet suppress all warnings
-r, --recursive operate recursively on directories
-S, --suffix=SUF use suffix SUF on compressed files
--synchronous synchronous output (safer if system crashes, but slower)
-t, --test test compressed file integrity
-v, --verbose verbose mode
--help display this help and exit
--version display version information and exit

With no FILE, or when FILE is -, read standard input.

Report bugs to "<bug-gzip@gnu.org>."

case $1 in
--help) printf '%s\n' "$usage" || exit 1; exit;;
--version) printf '%s\n' "$version" || exit 1; exit;;
esac

exec gzip -cd "$@"

9. Use el historial de shell para ejecutar el comando date +%R de nuevo.

9.1. Use el comando history para visualizar la lista de comandos anteriores e identificar el
comando específico date que se ejecutará. Use !number para ejecutar el comando,
donde number es el número de comando que se usará desde la salida del comando
history.
Su historial de shell puede ser diferente del que figura en el siguiente ejemplo.
Determine el número de comando que se usará en función de la salida de su propio
comando history.

[student@workstation ~]$ history


1 date
2 date +%R

RH124-RHEL9.0-es-5-20230516 47
capítulo 2 | Acceso a la línea de comandos

3 file zcat
4 wc zcat
5 head zcat
6 tail zcat
7 tail -n 20 zcat
8 history
[student@workstation ~]$ !2
date +%R
14:02

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade cli-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish cli-review

Esto concluye la sección.

48 RH124-RHEL9.0-es-5-20230516
capítulo 2 | Acceso a la línea de comandos

Resumen
• La shell Bash es un intérprete de comandos que solicita a los usuarios interactivos que
especifiquen los comandos de Linux.

• Muchos comandos tienen una opción --help que muestra un mensaje o una pantalla de uso.

• Puede usar espacios de trabajo para organizar varias ventanas de aplicaciones.

• El botón Activities situado en la esquina superior izquierda de la barra superior proporciona un


modo de vista general que ayuda a organizar las ventanas e iniciar las aplicaciones.

• El comando file detecta el comienzo de un archivo y muestra qué tipo de archivo es.

• Los comandos head y tail muestran el comienzo y el final de un archivo, respectivamente.

• Puede usar la compleción con tabulación para completar los nombres de archivo al escribirlos
como argumentos para comandos.

• Puede usar la interfaz gráfica para muchas tareas administrativas. Puede deshabilitar la interfaz
para preservar los recursos para las aplicaciones en ejecución.

• Puede escribir muchos comandos en la misma línea usando el carácter de punto y coma ; y
puede ejecutar un solo comando en varias líneas usando el carácter de barra invertida \.

RH124-RHEL9.0-es-5-20230516 49
50 RH124-RHEL9.0-es-5-20230516
capítulo 3

Gestionar archivos desde la


línea de comandos
Meta Copiar, mover, crear, eliminar y organizar archivos
desde la shell Bash.

Objetivos • Describir cómo Linux organiza los archivos y


los propósitos de diversos directorios en la
jerarquía del sistema de archivos.
• Especificar la ubicación absoluta y la ubicación
relativa de los archivos en relación con el
directorio de trabajo actual, determinar y
cambiar el directorio de trabajo, y hacer una
lista del contenido de los directorios.
• Crear, copiar, mover y eliminar archivos y
directorios.
• Crear varias referencias de nombres de archivo
al mismo archivo con enlaces duros y simbólicos
(o "blandos").
• Ejecutar con eficiencia los comandos que
afectan a muchos archivos mediante el uso de
las funciones de coincidencia de patrones de la
shell Bash.

Secciones • Descripción de conceptos de la jerarquía del


sistema de archivos Linux (y cuestionario)
• Especificación de archivos por nombre (y
cuestionario)
• Gestión de archivos con las herramientas de
línea de comandos (y ejercicio guiado)
• Creación de enlaces entre archivos (y ejercicio
guiado)
• Coincidencia de nombres de archivo con
expansiones de shell (y cuestionario)

Trabajo de Gestionar archivos desde la línea de comandos


laboratorio

RH124-RHEL9.0-es-5-20230516 51
capítulo 3 | Gestionar archivos desde la línea de comandos

Descripción de conceptos de la jerarquía


del sistema de archivos Linux

Objetivos
Describir cómo Linux organiza los archivos y los propósitos de diversos directorios en la jerarquía
del sistema de archivos.

La jerarquía del sistema de archivos


Todos los archivos de un sistema Linux se guardan en sistemas de archivos que están organizados
en un árbol de directorios invertido individual conocido como jerarquía de sistema de archivos.
Esta jerarquía es un árbol invertido porque se dice que la raíz del árbol está en la parte superior de
la jerarquía, y las ramas de los directorios y subdirectorios se extienden debajo de la raíz.

Figura 3.1: Directorios importantes del sistema de archivos de Red Hat Enterprise Linux 9

El directorio / es el directorio root que está en la parte superior de la jerarquía del sistema de
archivos. El carácter / también se usa también como un separador de directorio en los
nombres de archivo. Por ejemplo, si etc es un subdirectorio del directorio /, llame a ese directorio
/etc. De la misma manera, si el directorio /etc contiene un archivo con el nombre issue, llame a
ese archivo /etc/issue.

Los subdirectorios de / se usan con fines estandarizados para organizar archivos por tipo y
objetivo, y hacer que sea más fácil encontrar los archivos. Por ejemplo, en el directorio root, el
subdirectorio /boot se usa para guardar archivos para arrancar el sistema.

52 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

nota
Los siguientes términos ayudan a describir el contenido del directorio del sistema de
archivos:

• El contenido estático no se modifica hasta que se edita o se reconfigura en forma


explícita.
• El contenido dinámico o variable se puede modificar o adjuntar mediante
procesos activos.
• El contenido persistente se mantiene después de un arranque nuevo, como los
parámetros de configuración.
• El contenido de tiempo de ejecución de un proceso o del sistema se elimina al
reiniciar.

En la siguiente tabla, se enumeran algunos de los directorios más importantes del sistema por
nombre y objetivo.

Directorios importantes de Red Hat Enterprise Linux

Ubicación Propósito

/boot Archivos para iniciar el proceso de arranque.

/dev Archivos de dispositivo especiales que el sistema usa para acceder al hardware.

/etc Archivos de configuración específicos del sistema.

/home Directorio de inicio, donde los usuarios habituales guardan sus datos y los
archivos de configuración.

/root Directorio de inicio para el superusuario administrativo, root.

/run Datos de tiempo de ejecución para procesos que se iniciaron desde el último
arranque. Esto incluye archivos de ID de proceso y archivos de bloqueo. El
contenido de este directorio se vuelve a crear en el arranque nuevo. Este
directorio consolida los directorios /var/run y /var/lock de versiones
anteriores de Red Hat Enterprise Linux.

/tmp Un espacio con capacidad de escritura por parte de cualquier usuario del
sistema para archivos temporales. Los archivos a los que no se haya accedido,
y que no se hayan cambiado ni modificado durante 10 días se eliminan de
este directorio automáticamente. El directorio /var/tmp es también un
directorio temporal, en el que los archivos que no tuvieron acceso, cambios ni
modificaciones durante más de 30 días se eliminan automáticamente.

/usr Software instalado, librerías compartidas, incluidos archivos y datos de programa


de solo lectura. Los subdirectorios importantes del directorio /usr incluyen los
siguientes comandos:

• /usr/bin: Comandos del usuario


• /usr/sbin: Comandos de administración del sistema
• /usr/local: Software personalizado a nivel local

RH124-RHEL9.0-es-5-20230516 53
capítulo 3 | Gestionar archivos desde la línea de comandos

Ubicación Propósito

/var Los datos variables específicos del sistema deberían conservarse entre los
arranques. Los archivos que cambian en forma dinámica (por ejemplo, bases de
datos, directorios caché, archivos de registro, documentos en cola de impresión
y contenido de sitio web) pueden encontrarse en /var.

Importante
En Red Hat Enterprise Linux 7 y versiones posteriores, cuatro directorios antiguos
en / tienen contenido idéntico al de sus equivalentes que están en /usr:

• /bin y /usr/bin
• /sbin y /usr/sbin
• /lib y /usr/lib
• /lib64 y /usr/lib64

En versiones anteriores de Red Hat Enterprise Linux, estos eran directorios distintos
que contenían diferentes conjuntos de archivos. En Red Hat Enterprise Linux 7 y
versiones posteriores, los directorios de / son enlaces simbólicos a los directorios
coincidentes de /usr.

Referencias
Página del manual: hier(7)

54 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

Cuestionario

Descripción de conceptos de la jerarquía


del sistema de archivos Linux
Elija las respuestas correctas para las siguientes preguntas:

1. ¿Qué directorio contiene datos de configuración persistentes y específicos del


sistema?
a. /etc
b. /root
c. /run
d. /usr

2. ¿Qué directorio está en la parte superior de la jerarquía del sistema de archivos del
sistema?
a. /etc
b. /
c. /home/root
d. /root

3. ¿Qué directorio contiene los directorios de inicio de los usuarios?


a. /
b. /home
c. /root
d. /user

4. ¿Qué directorio contiene archivos para arrancar el sistema?


a. /boot
b. /home/root
c. /bootable
d. /etc

5. ¿Qué directorio contiene archivos del sistema para acceder al hardware?


a. /etc
b. /run
c. /dev
d. /usr

RH124-RHEL9.0-es-5-20230516 55
capítulo 3 | Gestionar archivos desde la línea de comandos

6. ¿Qué directorio es el directorio de inicio del superusuario administrativo?


a. /etc
b. /
c. /home/root
d. /root

7. ¿Qué directorio contiene los comandos y las utilidades habituales?


a. /commands
b. /run
c. /usr/bin
d. /usr/sbin

8. ¿Qué directorio contiene datos de tiempo de ejecución de procesos no persistentes?


a. /tmp
b. /etc
c. /run
d. /var

9. ¿Qué directorio contiene las librerías y los programas de software instalados?


a. /etc
b. /lib
c. /usr
d. /var

56 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

Solución

Descripción de conceptos de la jerarquía


del sistema de archivos Linux
Elija las respuestas correctas para las siguientes preguntas:

1. ¿Qué directorio contiene datos de configuración persistentes y específicos del


sistema?
a. /etc
b. /root
c. /run
d. /usr

2. ¿Qué directorio está en la parte superior de la jerarquía del sistema de archivos del
sistema?
a. /etc
b. /
c. /home/root
d. /root

3. ¿Qué directorio contiene los directorios de inicio de los usuarios?


a. /
b. /home
c. /root
d. /user

4. ¿Qué directorio contiene archivos para arrancar el sistema?


a. /boot
b. /home/root
c. /bootable
d. /etc

5. ¿Qué directorio contiene archivos del sistema para acceder al hardware?


a. /etc
b. /run
c. /dev
d. /usr

RH124-RHEL9.0-es-5-20230516 57
capítulo 3 | Gestionar archivos desde la línea de comandos

6. ¿Qué directorio es el directorio de inicio del superusuario administrativo?


a. /etc
b. /
c. /home/root
d. /root

7. ¿Qué directorio contiene los comandos y las utilidades habituales?


a. /commands
b. /run
c. /usr/bin
d. /usr/sbin

8. ¿Qué directorio contiene datos de tiempo de ejecución de procesos no persistentes?


a. /tmp
b. /etc
c. /run
d. /var

9. ¿Qué directorio contiene las librerías y los programas de software instalados?


a. /etc
b. /lib
c. /usr
d. /var

58 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

Especificar archivos por nombre

Objetivos
Especificar la ubicación absoluta y la ubicación relativa de los archivos en relación con el directorio
de trabajo actual, determinar y cambiar el directorio de trabajo, y hacer una lista del contenido de
los directorios.

Rutas absolutas y rutas relativas


La ruta de un archivo o directorio especifica su ubicación única en el sistema de archivos. Si se
sigue la ruta de un archivo, pasa por uno o más subdirectorios con nombre que están delimitados
por una barra (/) hasta que se llega al destino. Los directorios, también llamados carpetas, pueden
contener otros archivos y otros subdirectorios. Se hace referencia a los directorios de la misma
manera que con los archivos.

Importante
Es posible incluir un espacio en un nombre de archivo de Linux. La shell también
usa espacios para separar las opciones y los argumentos en la línea de comandos.
Si un comando incluye un archivo que tiene un espacio en su nombre, la shell puede
malinterpretar el comando y asumir que el nombre del archivo son argumentos
múltiples. Para evitar este error, escriba los nombres de archivo entre comillas para
que la shell interprete el nombre como un solo argumento. Red Hat recomienda
evitar espacios en los nombres de archivos.

Rutas absolutas
Una ruta absoluta es un nombre completamente calificado que especifica la ubicación exacta de
los archivos en la jerarquía del sistema de archivos. La ruta absoluta comienza en el directorio root
(/) y especifica cada subdirectorio que se debe atravesar para llegar al archivo específico. Cada
archivo en un sistema de archivos tiene un único nombre de ruta absoluta, reconocido con una
regla simple: un nombre de ruta con una barra inclinada (/) como primer carácter es el nombre de
la ruta absoluta.

Por ejemplo, el nombre de ruta absoluta para el archivo de registro de mensajes del sistema es /
var/log/messages. Los nombres de rutas absolutas pueden ser extensos; en consecuencia, los
archivos también pueden ubicarse en forma relativa al directorio de trabajo actual para su prompt
de shell.

El directorio de trabajo actual y las rutas relativas


Cuando un usuario inicia sesión y abre una ventana de comandos, la ubicación inicial normalmente
es el directorio de inicio del usuario. Los procesos del sistema también tienen un directorio
inicial. Los usuarios y los procesos cambian a otros directorios según sea necesario. Los términos
directorio de trabajo o directorio de trabajo actual se refieren a su ubicación actual.

Al igual que una ruta absoluta, una ruta relativa identifica una ubicación única y especifica solo
la ruta necesaria para llegar a la ubicación desde el directorio de trabajo. Los nombres de ruta
relativas siguen una regla simple: un nombre de ruta que no tenga otro carácter más que una barra

RH124-RHEL9.0-es-5-20230516 59
capítulo 3 | Gestionar archivos desde la línea de comandos

inclinada como primer carácter es un nombre de ruta relativa. Por ejemplo, en relación con el
directorio /var, el archivo de registro de mensajes es log/messages.

Los sistemas de archivos de Linux, incluidos ext4, XFS, GFS2y GlusterFS, distinguen entre
mayúsculas y minúsculas. Si se crean los archivos FileCase.txt y filecase.txt en el mismo
directorio, se obtienen dos archivos exclusivos.

Los sistemas de archivos que no pertenecen a Linux podrían funcionar de manera diferente. Por
ejemplo, VFAT, NTFS de Microsoft y HFS+ de Apple tienen un comportamiento de conservación
de tipo de letra. A pesar de que estos sistemas de archivos no distinguen entre minúsculas y
mayúsculas, muestran los nombres de archivo con el uso de mayúsculas original del archivo.
Al crear los archivos en el ejemplo anterior en un sistema de archivos VFAT, ambos nombres
apuntarían al mismo archivo y no a dos archivos diferentes.

Navegar por rutas en el sistema de archivos


El comando pwd muestra el nombre completo de ruta del directorio de trabajo actual para esa
shell. Este comando puede ayudarlo a determinar la sintaxis para acceder a los archivos por medio
de nombres de ruta relativa. El comando ls enumera el contenido del directorio para el directorio
especificado o, si no se indica un directorio, para el directorio de trabajo actual.

[user@host ~]$ pwd


/home/user
[user@host ~]$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
[user@host ~]$

Use el comando cd para cambiar el directorio de trabajo actual de su shell. Si no especifica ningún
argumento para el comando, cambia a su directorio de inicio.

En el siguiente ejemplo, se usa una combinación de rutas absolutas y relativas con el comando cd
para cambiar el directorio de trabajo actual para la shell.

[user@host ~]$ pwd


/home/user
[user@host ~]$ cd Videos
[user@host Videos]$ pwd
/home/user/Videos
[user@host Videos]$ cd /home/user/Documents
[user@host Documents]$ pwd
/home/user/Documents
[user@host Documents]$ cd
[user@host ~]$ pwd
/home/user
[user@host ~]$

En el ejemplo anterior, el prompt de shell predeterminado también muestra el último componente


de la ruta absoluta al directorio de trabajo actual. Por ejemplo, para el directorio /home/user/
Videos, solo se muestra el directorio Videos. El prompt muestra el carácter tilde (~) cuando el
directorio de trabajo actual es su directorio de inicio.

El comando touch actualiza la marca de tiempo de un archivo con respecto a la fecha y hora
actual sin modificarlo. Este comando es útil para crear archivos vacíos y pueden usarse para
practicar, ya que si se usa el comando touch con un nombre de un archivo que no existe, se

60 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

crea el archivo. En el siguiente ejemplo, el comando touch crea archivos de práctica en los
subdirectorios Documents y Videos.

[user@host ~]$ touch Videos/blockbuster1.ogg


[user@host ~]$ touch Videos/blockbuster2.ogg
[user@host ~]$ touch Documents/thesis_chapter1.odf
[user@host ~]$ touch Documents/thesis_chapter2.odf
[user@host ~]$

El comando ls tiene varias opciones para mostrar los atributos en los archivos. Las opciones más
usadas son -l (formato de enumeración extensa), -a (todos los archivos, incluidos los archivos
ocultos) y -R (recurrente, para incluir el contenido de todos los subdirectorios).

[user@host ~]$ ls -l
total 0
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Desktop
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Documents
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Downloads
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Music
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Pictures
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Public
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Templates
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Videos
[user@host ~]$ ls -la
total 40
drwx------. 17 user user 4096 Mar 2 03:07 .
drwxr-xr-x. 4 root root 35 Feb 10 10:48 ..
drwxr-xr-x. 4 user user 27 Mar 2 03:01 .ansible
-rw-------. 1 user user 444 Mar 2 04:32 .bash_history
-rw-r--r--. 1 user user 18 Aug 9 2021 .bash_logout
-rw-r--r--. 1 user user 141 Aug 9 2021 .bash_profile
-rw-r--r--. 1 user user 492 Aug 9 2021 .bashrc
drwxr-xr-x. 9 user user 4096 Mar 2 02:45 .cache
drwxr-xr-x. 9 user user 4096 Mar 2 04:32 .config
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Desktop
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Documents
...output omitted...

En la parte superior de la lista hay dos directorios especiales. Un punto (.) se refiere al directorio
actual y dos puntos (..) se refieren al directorio principal. Estos directorios especiales existen en
todos los directorios del sistema y son útiles cuando se usan comandos de gestión de archivos.

RH124-RHEL9.0-es-5-20230516 61
capítulo 3 | Gestionar archivos desde la línea de comandos

Importante
Los nombres de archivo que comienzan con un punto (.) indican archivos
ocultos; no se los puede ver en la vista normal con ls y otros comandos. Este
comportamiento no es una característica de seguridad. Los archivos ocultos evitan
que los archivos de configuración necesarios del usuario llenen los directorios de
inicio. Existen muchos comandos que procesan archivos ocultos solo con opciones
de línea de comandos específicas y previenen que la configuración de un usuario se
copie por accidente en otros directorios o usuarios.

Para proteger el contenido de los archivos de la visualización indebida, se deben


usar permisos de archivos.

También puede usar el carácter especial tilde (~) en combinación con otros comandos para una
mejor interacción con el directorio de inicio.

[user@host ~]$ cd /var/log/


[user@host log]$ ls -l ~
total 0
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Desktop
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Documents
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Downloads
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Music
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Pictures
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Public
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Templates
drwxr-xr-x. 2 user user 6 Mar 2 02:45 Videos
[user@host ~]$

El comando cd tiene muchas opciones. Algunas opciones son útiles para practicar temprano
y usar con frecuencia. El comando cd - cambia al directorio anterior, donde estaba el usuario
antes de estar en el directorio actual. En el siguiente ejemplo, se ilustra este comportamiento y se
alterna entre dos directorios, lo cual es útil al procesar una serie de tareas similares.

[user@host ~]$ cd Videos


[user@host Videos]$ pwd
/home/user/Videos
[user@host Videos]$ cd /home/user/Documents
[user@host Documents]$ pwd
/home/user/Documents
[user@host Documents]$ cd -
[user@host Videos]$ pwd
/home/user/Videos
[user@host Videos]$ cd -
[user@host Documents]$ pwd
/home/user/Documents
[user@host Documents]$ cd -
[user@host Videos]$ pwd
/home/user/Videos
[user@host Videos]$ cd
[user@host ~]$

62 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

El comando cd .. usa el directorio oculto (..) para ascender un nivel hasta el directorio
principal, sin necesidad de conocer el nombre exacto del directorio principal. El otro directorio
oculto (.) especifica el directorio actual en los comandos en que la ubicación actual es el
argumento de origen o destino y se evita la necesidad de escribir el nombre de la ruta absoluta del
directorio.

[user@host Videos]$ pwd


/home/user/Videos
[user@host Videos]$ cd .
[user@host Videos]$ pwd
/home/user/Videos
[user@host Videos]$ cd ..
[user@host ~]$ pwd
/home/user
[user@host ~]$ cd ..
[user@host home]$ pwd
/home
[user@host home]$ cd ..
[user@host /]$ pwd
/
[user@host /]$ cd
[user@host ~]$ pwd
/home/user
[user@host ~]$

Referencias
info libc 'file name resolution' (GNU C Library Reference Manual)

• Sección 11.2.2: Resolución de nombre de archivo

https://www.gnu.org/software/libc/manual/html_node/File-Name-Resolution.html

Páginas del manual: bash(1), cd(1), ls(1), pwd(1), unicode(7) y utf-8(7)

UTF-8 y Unicode
http://www.utf-8.com/

RH124-RHEL9.0-es-5-20230516 63
capítulo 3 | Gestionar archivos desde la línea de comandos

Cuestionario

Especificar archivos por nombre


Elija las respuestas correctas para las siguientes preguntas:

1. ¿Qué comando vuelve al directorio de inicio del usuario actual, suponiendo que el
directorio de trabajo actual es /tmp y su directorio de inicio es /home/user?
a. cd
b. cd ..
c. cd .
d. cd *
e. cd /home

2. ¿Qué comando muestra el nombre de la ruta absoluta de la ubicación actual?


a. cd
b. pwd
c. ls ~
d. ls -d

3. ¿Qué comando vuelve al directorio de trabajo que se usó antes del directorio de
trabajo actual?
a. cd -
b. cd -p
c. cd ~
d. cd ..

4. ¿Qué comando cambia el directorio de trabajo hasta dos niveles desde la ubicación
actual?
a. cd ~/..
b. cd ../ ..
c. cd ../..
d. cd ~/

5. ¿Qué comando enumera los archivos de la ubicación actual con un formato largo e
incluyendo los archivos ocultos?
a. llong ~
b. ls -a
c. ls -l
d. ls -al

64 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

6. ¿Qué comando crea un archivo vacío llamado helloworld.py en el directorio de inicio


user, suponiendo que su directorio actual es /home?
a. touch ./helloworld.py
b. touch ~/helloworld.py
c. touch helloworld.py
d. touch ../helloworld.py

7. ¿Qué comando siempre cambia el directorio de trabajo al directorio principal de la


ubicación actual?
a. cd ~
b. cd ..
c. cd ../..
d. cd -u1

8. ¿Qué comando cambia el directorio de trabajo a /tmp si el directorio de trabajo actual


es /home/student?
a. cd tmp
b. cd ..
c. cd ../../tmp
d. cd ~tmp

RH124-RHEL9.0-es-5-20230516 65
capítulo 3 | Gestionar archivos desde la línea de comandos

Solución

Especificar archivos por nombre


Elija las respuestas correctas para las siguientes preguntas:

1. ¿Qué comando vuelve al directorio de inicio del usuario actual, suponiendo que el
directorio de trabajo actual es /tmp y su directorio de inicio es /home/user?
a. cd
b. cd ..
c. cd .
d. cd *
e. cd /home

2. ¿Qué comando muestra el nombre de la ruta absoluta de la ubicación actual?


a. cd
b. pwd
c. ls ~
d. ls -d

3. ¿Qué comando vuelve al directorio de trabajo que se usó antes del directorio de
trabajo actual?
a. cd -
b. cd -p
c. cd ~
d. cd ..

4. ¿Qué comando cambia el directorio de trabajo hasta dos niveles desde la ubicación
actual?
a. cd ~/..
b. cd ../ ..
c. cd ../..
d. cd ~/

5. ¿Qué comando enumera los archivos de la ubicación actual con un formato largo e
incluyendo los archivos ocultos?
a. llong ~
b. ls -a
c. ls -l
d. ls -al

66 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

6. ¿Qué comando crea un archivo vacío llamado helloworld.py en el directorio de inicio


user, suponiendo que su directorio actual es /home?
a. touch ./helloworld.py
b. touch ~/helloworld.py
c. touch helloworld.py
d. touch ../helloworld.py

7. ¿Qué comando siempre cambia el directorio de trabajo al directorio principal de la


ubicación actual?
a. cd ~
b. cd ..
c. cd ../..
d. cd -u1

8. ¿Qué comando cambia el directorio de trabajo a /tmp si el directorio de trabajo actual


es /home/student?
a. cd tmp
b. cd ..
c. cd ../../tmp
d. cd ~tmp

RH124-RHEL9.0-es-5-20230516 67
capítulo 3 | Gestionar archivos desde la línea de comandos

Gestión de archivos con las herramientas


de línea de comandos

Objetivos
Crear, copiar, mover y eliminar archivos y directorios.

Gestión de archivos de la línea de comandos


Crear, copiar, mover y eliminar archivos y directorios son operaciones comunes para un
administrador de sistemas. Sin opciones, algunos comandos se usan para interactuar con archivos
o pueden manipular directorios con el conjunto de opciones adecuado.

Tenga en cuenta las opciones que se usan al ejecutar un comando. El significado de algunas
opciones puede diferir entre los comandos.

Crear directorios
El comando mkdir crea uno o más directorios o subdirectorios. Toma como un argumento una
lista de rutas a los directorios que desea crear.

En el siguiente ejemplo, los archivos y directorios se organizan en el directorio /home/user/


Documents. Use el comando mkdir y una lista delimitada por espacios con los nombres de
directorios para crear varios directorios.

[user@host ~]$ cd Documents


[user@host Documents]$ mkdir ProjectX ProjectY ProjectZ
[user@host Documents]$ ls
ProjectX ProjectY ProjectZ

Si el directorio existe, o un directorio principal del directorio que está intentando crear no existe, el
comando mkdir falla y muestra un error.

La opción de comando mkdir -p (parent) crea directorios principales faltantes para el destino
solicitado. En el siguiente ejemplo, el comando mkdir crea tres subdirectorios ChapterN con un
comando. La opción -p crea el directorio principal faltante Thesis.

[user@host Documents]$ mkdir -p Thesis/Chapter1 Thesis/Chapter2 Thesis/Chapter3


[user@host Documents]$ ls -R Thesis/
Thesis/:
Chapter1 Chapter2 Chapter3

Thesis/Chapter1:

Thesis/Chapter2:

Thesis/Chapter3:

Tenga cuidado cuando use el comando mkdir con la opción -p, ya que los errores de ortografía
accidentales pueden generar directorios involuntarios sin que produzcan mensajes de error. En

68 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

el siguiente ejemplo, simule que está intentando crear un subdirectorio Watched en el directorio
llamado Videos, pero que accidentalmente omite la letra "s" en Videos en su comando mkdir.

[user@host ~]$ mkdir Video/Watched


mkdir: cannot create directory Video/Watched: No such file or directory

El comando mkdir generó un error porque el directorio Video no existe. Si ha usado el comando
mkdir con la opción -p, el directorio Video se crearía involuntariamente. El subdirectorio
Watched se crearía en ese directorio incorrecto.

Copiar archivos y directorios


El comando cp copia un archivo y crea un archivo en el directorio actual o en otro directorio
especificado.

[user@host ~]$ cd Videos


[user@host Videos]$ cp blockbuster1.ogg blockbuster3.ogg
[user@host Videos]$ ls -l
total 0
-rw-rw-r--. 1 user user 0 Feb 8 16:23 blockbuster1.ogg
-rw-rw-r--. 1 user user 0 Feb 8 16:24 blockbuster2.ogg
-rw-rw-r--. 1 user user 0 Feb 8 16:34 blockbuster3.ogg

También puede usar el comando cp para copiar varios archivos en un directorio. En este escenario,
el último argumento debe ser un directorio. Los archivos copiados conservan su nombre original
en el directorio nuevo. Si existe un archivo con el mismo nombre en el directorio de destino, el
archivo existente se sobrescribe.

nota
De manera predeterminada, el comando cp no copia directorios; los omite.

En el siguiente ejemplo, se enumeran dos directorios como argumentos, Thesis y ProjectX. El


último argumento, el directorio ProjectX, es el destino y es válido como destino. El argumento
Thesis es ignorado por el comando cp porque está diseñado para ser copiado y es un directorio.

[user@host Documents]$ cp thesis_chapter1.txt thesis_chapter2.txt Thesis ProjectX


cp: -r not specified; omitting directory 'Thesis'
[user@host Documents]$ ls Thesis ProjectX
ProjectX:
thesis_chapter1.txt thesis_chapter2.txt

Thesis:
Chapter1 Chapter2 Chapter3

El directorio Thesis no se pudo copiar, pero sí lo hicieron los archivos thesis_chapter1.txt y


thesis_chapter2.txt.

Puede copiar directorios y sus contenidos mediante el uso del comando cp con la opción -
r. Tenga en cuenta que puede usar los directorios especiales . y .. en las combinaciones de
comandos. En el siguiente ejemplo, el directorio Thesis y su contenido se copian en el directorio
ProjectY.

RH124-RHEL9.0-es-5-20230516 69
capítulo 3 | Gestionar archivos desde la línea de comandos

[user@host Documents]$ cd ProjectY


[user@host ProjectY]$ cp -r ../Thesis/ .
[user@host ProjectY]$ ls -lR
.:
total 0
drwxr-xr-x. 5 user user 54 Mar 7 15:08 Thesis

./Thesis:
total 0
drwxr-xr-x. 2 user user 6 Mar 7 15:08 Chapter1
drwxr-xr-x. 2 user user 6 Mar 7 15:08 Chapter2
drwxr-xr-x. 2 user user 6 Mar 7 15:08 Chapter3

./Thesis/Chapter1:
total 0

./Thesis/Chapter2:
total 0

./Thesis/Chapter3:
total 0

Mover archivos y directorios


El comando mv mueve los archivos de una ubicación a otra. Si piensa que la ruta absoluta a un
archivo es su nombre completo y mueve un archivo, esto equivale a cambiar el nombre de un
archivo. El contenido de los archivos que se mueven permanece sin cambios.

Use el comando mv para cambiar el nombre de un archivo. En el siguiente ejemplo, el comando


mv thesis_chapter2.txt cambia el nombre del archivo de thesis_chapter2.txt a
thesis_chapter2_reviewed.txt en el mismo directorio.

[user@host Documents]$ ls -l
-rw-r--r--. 1 user user 7100 Mar 7 14:37 thesis_chapter1.txt
-rw-r--r--. 1 user user 11431 Mar 7 14:39 thesis_chapter2.txt
...output omitted...
[user@host Documents]$ mv thesis_chapter2.txt thesis_chapter2_reviewed.txt
[user@host Documents]$ ls -l
-rw-r--r--. 1 user user 7100 Mar 7 14:37 thesis_chapter1.txt
-rw-r--r--. 1 user user 11431 Mar 7 14:39 thesis_chapter2_reviewed.txt
...output omitted...

Use el comando mv para mover un archivo a un directorio diferente. En el siguiente ejemplo,


el archivo thesis_chapter1.txt se mueve del directorio ~/Documents al directorio ~/
Documents/Thesis/Chapter1. Puede usar el comando mv con la opción -v para mostrar una
salida detallada de las operaciones del comando.

[user@host Documents]$ ls Thesis/Chapter1


[user@host Documents]$
[user@host Documents]$ mv -v thesis_chapter1.txt Thesis/Chapter1
renamed 'thesis_chapter1.txt' -> 'Thesis/Chapter1/thesis_chapter1.txt'
[user@host Documents]$ ls Thesis/Chapter1
thesis_chapter1.txt

70 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

[user@host Documents]$ ls -l
-rw-r--r--. 1 user user 11431 Mar 7 14:39 thesis_chapter2_reviewed.txt
...output omitted...

Eliminar archivos y directorios


El comando rm elimina archivos. De manera predeterminada, rm no elimina directorios. Puede
usar el comando rm -r o la opción --recursive para habilitar el comando rm para eliminar
directorios y sus contenidos. El comando rm -r primero recorre cada subdirectorio y elimina
individualmente sus archivos antes de eliminar cada directorio.

En el siguiente ejemplo, el comando rm elimina el archivo thesis_chapter1.txt sin opciones,


pero para eliminar el directorio Thesis/Chapter1, debe agregar la opción -r.

[user@host Documents]$ ls -l Thesis/Chapter1


-rw-r--r--. 1 user user 7100 Mar 7 14:37 thesis_chapter1.txt
[user@host Documents]$ rm Thesis/Chapter1/thesis_chapter1.txt
[user@host Documents]$ rm Thesis/Chapter1
rm: cannot remove 'Thesis/Chapter1': Is a directory
[user@host Documents]$ rm -r Thesis/Chapter1
[user@host Documents]$ ls -l Thesis
drwxr-xr-x. 2 user user 6 Mar 7 12:37 Chapter2
drwxr-xr-x. 2 user user 6 Mar 7 12:37 Chapter3

Importante
Red Hat Enterprise Linux no ofrece una función de deshacer la eliminación de
línea de comandos ni tampoco una papelera de reciclaje desde donde se puedan
restaurar los archivos que se borraron. Una papelera es un componente de un
entorno de escritorio como GNOME, pero no es usado por comandos que se
ejecutan desde una shell.

Le recomendamos que verifique su directorio de trabajo actual antes de eliminar un archivo o


directorio mediante el uso de rutas relativas.

[user@host Documents]$ pwd


/home/user/Documents
[user@host Documents]$ ls -l thesis*
-rw-r--r--. 1 user user 11431 Mar 7 14:39 thesis_chapter2_reviewed.txt
[user@host Documents]$ rm thesis_chapter2_reviewed.txt
[user@host Documents]$ ls -l thesis*
ls: cannot access 'thesis*': No such file or directory

Puede usar el comando rm con la opción -i para pedir confirmación de forma interactiva antes
de la eliminación. Esto es básicamente lo contrario que usar el comando rm con la opción -f, que
fuerza la eliminación sin pedir confirmación al usuario.

RH124-RHEL9.0-es-5-20230516 71
capítulo 3 | Gestionar archivos desde la línea de comandos

[user@host Documents]$ rm -ri Thesis


rm: descend into directory 'Thesis'? y
rm: descend into directory 'Thesis/Chapter2'? y
rm: remove regular empty file 'Thesis/Chapter2/thesis_chapter2.txt'? y
rm: remove directory 'Thesis/Chapter2'? y
rm: remove directory 'Thesis/Chapter3'? y
rm: remove directory 'Thesis'? y

Advertencia
Si especifica tanto la opción -i como la -f, la opción -f tiene prioridad y no se le
pide confirmación antes de que rm borre los archivos.

También puede usar el comando rmdir para eliminar directorios vacíos. Use el comando rm,
opción -r, para eliminar directorios que no estén vacíos.

[user@host Documents]$ pwd


/home/user/Documents
[user@host Documents]$ rmdir ProjectZ
[user@host Documents]$ rmdir ProjectX
rmdir: failed to remove 'ProjectX': Directory not empty
[user@host Documents]$ rm -r ProjectX
[user@host Documents]$

Referencias
Páginas del manual cp(1), mkdir(1), mv(1), rm(1) y rmdir(1)

72 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

Ejercicio Guiado

Gestión de archivos con las herramientas


de línea de comandos
En este ejercicio, deberá ser capaz de crear, organizar, copiar, y eliminar archivos y
directorios.

Resultados
• Crear, organizar, copiar y eliminar archivos y directorios.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start files-manage

Instrucciones
1. Inicie sesión en la máquina servera con el usuario student. En el directorio de inicio del
usuario student, cree tres subdirectorios: Music, Pictures y Videos.

1.1. Use el comando ssh para iniciar sesión en la máquina servera con el usuario
student. Los sistemas se configuran a fin de que usen claves SSH para la
autenticación, por lo que no se necesita una contraseña.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$

1.2. En el directorio de inicio del usuario student, use el comando mkdir para crear tres
subdirectorios: Music, Pictures y Videos.

[student@servera ~]$ mkdir Music Pictures Videos

2. Use el comando touch para crear conjuntos de archivos de práctica vacíos para usar
durante este trabajo de laboratorio. En cada conjunto, reemplace X con los números del 1 al
6.

• Cree seis archivos con nombres como songX.mp3.


• Cree seis archivos con nombres como snapX.jpg.
• Cree seis archivos con nombres como filmX.avi.

RH124-RHEL9.0-es-5-20230516 73
capítulo 3 | Gestionar archivos desde la línea de comandos

[student@servera ~]$ touch song1.mp3 song2.mp3 song3.mp3 \


song4.mp3 song5.mp3 song6.mp3
[student@servera ~]$ touch snap1.jpg snap2.jpg snap3.jpg \
snap4.jpg snap5.jpg snap6.jpg
[student@servera ~]$ touch film1.avi film2.avi film3.avi \
film4.avi film5.avi film6.avi
[student@servera ~]$ ls -l
total 0
-rw-r--r--. 1 student student 0 Mar 7 20:58 film1.avi
-rw-r--r--. 1 student student 0 Mar 7 20:58 film2.avi
-rw-r--r--. 1 student student 0 Mar 7 20:58 film3.avi
-rw-r--r--. 1 student student 0 Mar 7 20:58 film4.avi
-rw-r--r--. 1 student student 0 Mar 7 20:58 film5.avi
-rw-r--r--. 1 student student 0 Mar 7 20:58 film6.avi
drwxr-xr-x. 2 student student 6 Mar 7 20:58 Music
drwxr-xr-x. 2 student student 6 Mar 7 20:58 Pictures
-rw-r--r--. 1 student student 0 Mar 7 20:58 snap1.jpg
-rw-r--r--. 1 student student 0 Mar 7 20:58 snap2.jpg
-rw-r--r--. 1 student student 0 Mar 7 20:58 snap3.jpg
-rw-r--r--. 1 student student 0 Mar 7 20:58 snap4.jpg
-rw-r--r--. 1 student student 0 Mar 7 20:58 snap5.jpg
-rw-r--r--. 1 student student 0 Mar 7 20:58 snap6.jpg
-rw-r--r--. 1 student student 0 Mar 7 20:58 song1.mp3
-rw-r--r--. 1 student student 0 Mar 7 20:58 song2.mp3
-rw-r--r--. 1 student student 0 Mar 7 20:58 song3.mp3
-rw-r--r--. 1 student student 0 Mar 7 20:58 song4.mp3
-rw-r--r--. 1 student student 0 Mar 7 20:58 song5.mp3
-rw-r--r--. 1 student student 0 Mar 7 20:58 song6.mp3
drwxr-xr-x. 2 student student 6 Mar 7 20:58 Videos

3. Mueva los archivos de canciones (extensión.mp3) al directorio Music, los archivos


de instantáneas (extensión.jpg) al directorio Pictures y los archivos de películas
(extensión.avi) al directorio Videos.

[student@servera ~]$ mv song1.mp3 song2.mp3 song3.mp3 \


song4.mp3 song5.mp3 song6.mp3 Music
[student@servera ~]$ mv snap1.jpg snap2.jpg snap3.jpg \
snap4.jpg snap5.jpg snap6.jpg Pictures
[student@servera ~]$ mv film1.avi film2.avi film3.avi \
film4.avi film5.avi film6.avi Videos
[student@servera ~]$ ls -l Music Pictures Videos
Music:
total 0
-rw-r--r--. 1 student student 0 Mar 7 20:58 song1.mp3
-rw-r--r--. 1 student student 0 Mar 7 20:58 song2.mp3
-rw-r--r--. 1 student student 0 Mar 7 20:58 song3.mp3
-rw-r--r--. 1 student student 0 Mar 7 20:58 song4.mp3
-rw-r--r--. 1 student student 0 Mar 7 20:58 song5.mp3
-rw-r--r--. 1 student student 0 Mar 7 20:58 song6.mp3

Pictures:
total 0

74 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

-rw-r--r--. 1 student student 0 Mar 7 20:58 snap1.jpg


-rw-r--r--. 1 student student 0 Mar 7 20:58 snap2.jpg
-rw-r--r--. 1 student student 0 Mar 7 20:58 snap3.jpg
-rw-r--r--. 1 student student 0 Mar 7 20:58 snap4.jpg
-rw-r--r--. 1 student student 0 Mar 7 20:58 snap5.jpg
-rw-r--r--. 1 student student 0 Mar 7 20:58 snap6.jpg

Videos:
total 0
-rw-r--r--. 1 student student 0 Mar 7 20:58 film1.avi
-rw-r--r--. 1 student student 0 Mar 7 20:58 film2.avi
-rw-r--r--. 1 student student 0 Mar 7 20:58 film3.avi
-rw-r--r--. 1 student student 0 Mar 7 20:58 film4.avi
-rw-r--r--. 1 student student 0 Mar 7 20:58 film5.avi
-rw-r--r--. 1 student student 0 Mar 7 20:58 film6.avi

4. Cree tres subdirectorios para organizar sus archivos y nombre los subdirectorios friends,
family y work. Use un solo comando para crear los tres subdirectorios al mismo tiempo.

[student@servera ~]$ mkdir friends family work


[student@servera ~]$ ls -l
total 0
drwxr-xr-x. 2 student student 6 Mar 7 21:01 family
drwxr-xr-x. 2 student student 6 Mar 7 21:01 friends
drwxr-xr-x. 2 student student 108 Mar 7 21:00 Music
drwxr-xr-x. 2 student student 108 Mar 7 21:00 Pictures
drwxr-xr-x. 2 student student 108 Mar 7 21:00 Videos
drwxr-xr-x. 2 student student 6 Mar 7 21:01 work

5. Copie los archivos que contengan números 1 y 2 en el directorio friends y los archivos
que contengan números 3 y 4 en el directorio family. Tenga en cuenta que está haciendo
copias; por lo tanto, los archivos originales permanecerán en sus ubicaciones originales una
vez que complete el paso.
Cuando copie archivos de varias ubicaciones a una sola ubicación, Red Hat recomienda que
pase al directorio de destino antes de copiar los archivos. Use la sintaxis de ruta más simple,
ya sea absoluta o relativa, para llegar al origen de cada tarea de gestión de archivos.

5.1. Copie los archivos que contengan números 1 y 2 en el directorio friends.

[student@servera ~]$ cd friends


[student@servera friends]$ cp ~/Music/song1.mp3 ~/Music/song2.mp3 \
~/Pictures/snap1.jpg ~/Pictures/snap2.jpg ~/Videos/film1.avi \
~/Videos/film2.avi .
[student@servera friends]$ ls -l
total 0
-rw-r--r--. 1 student student 0 Mar 7 21:02 film1.avi
-rw-r--r--. 1 student student 0 Mar 7 21:02 film2.avi
-rw-r--r--. 1 student student 0 Mar 7 21:02 snap1.jpg
-rw-r--r--. 1 student student 0 Mar 7 21:02 snap2.jpg
-rw-r--r--. 1 student student 0 Mar 7 21:02 song1.mp3
-rw-r--r--. 1 student student 0 Mar 7 21:02 song2.mp3

5.2. Copie los archivos que contengan números 3 y 4 en el directorio family.

RH124-RHEL9.0-es-5-20230516 75
capítulo 3 | Gestionar archivos desde la línea de comandos

[student@servera friends]$ cd ../family


[student@servera family]$ cp ~/Music/song3.mp3 ~/Music/song4.mp3 \
~/Pictures/snap3.jpg ~/Pictures/snap4.jpg ~/Videos/film3.avi \
~/Videos/film4.avi .
[student@servera family]$ ls -l
total 0
total 0
-rw-r--r--. 1 student student 0 Mar 7 21:04 film3.avi
-rw-r--r--. 1 student student 0 Mar 7 21:04 film4.avi
-rw-r--r--. 1 student student 0 Mar 7 21:04 snap3.jpg
-rw-r--r--. 1 student student 0 Mar 7 21:04 snap4.jpg
-rw-r--r--. 1 student student 0 Mar 7 21:04 song3.mp3
-rw-r--r--. 1 student student 0 Mar 7 21:04 song4.mp3

6. Copie los directorios family y friends y su contenido en el directorio work.

[student@servera family]$ cd ../work


[student@servera work]$ cp -r ~/family ~/friends .
[student@servera work]$ ls -l
total 0
drwxr-xr-x. 2 student student 108 Mar 7 21:05 family
drwxr-xr-x. 2 student student 108 Mar 7 21:05 friends

7. Las tareas del proyecto ya están terminadas, por lo que es hora de limpiar los directorios.
Use el comando rm -r para eliminar recursivamente los directorios family, friends y
work, así como su contenido.

[student@servera work]$ cd ..
[student@servera ~]$ rm -r family friends work
[student@servera ~]$ ls -l
total 0
drwxr-xr-x. 2 student student 108 Mar 7 21:00 Music
drwxr-xr-x. 2 student student 108 Mar 7 21:00 Pictures
drwxr-xr-x. 2 student student 108 Mar 7 21:00 Videos

8. Regrese al sistema workstation con el usuario student.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish files-manage

76 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 77
capítulo 3 | Gestionar archivos desde la línea de comandos

Creación de enlaces entre archivos

Objetivos
Hacer que varios nombres de archivo hagan referencia al mismo archivo con enlaces duros y
simbólicos (o "blandos").

Gestión de enlaces entre archivos


Puede crear varios nombres que apunten al mismo archivo. Estos nombres de archivos se
denominan enlaces.

Puede crear dos tipos de enlaces: un enlace duro o un enlace simbólico (a veces denominado
enlace blando). Cada forma tiene sus ventajas y desventajas.

Crear enlaces duros


Cada archivo comienza con un solo enlace duro, desde su nombre inicial hasta los datos en el
sistema de archivos. Cuando crea un enlace duro a un archivo, crea otro nombre que apunta a esos
mismos datos. El nuevo enlace duro actúa exactamente igual que el nombre del archivo original.
Después de que se crea el enlace, no puede distinguir la diferencia entre el nuevo enlace duro y el
nombre original del archivo.

Puede determinar si un archivo tiene varios enlaces duros mediante el comando ls -l. Un ítem
que aparece es el recuento de enlaces de cada archivo, es decir, la cantidad de enlaces duros que
tiene el archivo. En el ejemplo siguiente, el recuento de enlaces del archivo newfile.txt es 1.
Tiene exactamente una ruta absoluta, que es la ubicación /home/user/newfile.txt.

[user@host ~]$ pwd


/home/user
[user@host ~]$ ls -l newfile.txt
-rw-r--r--. 1 user user 0 Mar 11 19:19 newfile.txt

Puede usar el comando ln para crear un enlace duro (otro nombre de archivo) que apunte a un
archivo existente. El comando necesita al menos dos argumentos, una ruta al archivo existente y la
ruta al enlace duro que desea crear.

En el siguiente ejemplo se crea un enlace duro llamado newfile-hlink2.txt con el nombre


para el archivo existente newfile.txt en el directorio /tmp.

[user@host ~]$ ln newfile.txt /tmp/newfile-hlink2.txt


[user@host ~]$ ls -l newfile.txt /tmp/newfile-hlink2.txt
-rw-rw-r--. 2 user user 12 Mar 11 19:19 newfile.txt
-rw-rw-r--. 2 user user 12 Mar 11 19:19 /tmp/newfile-hlink2.txt

Para determinar si dos archivos tienen un enlace duro, use el comando ls con la opción -i para
enumerar el número de inodo de cada archivo. Si los archivos están en el mismo sistema de
archivos y sus números de inodo son los mismos, los archivos son enlaces duros que apuntan a los
mismos contenidos de los archivos de datos.

78 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

[user@host ~]$ ls -il newfile.txt /tmp/newfile-hlink2.txt


8924107 -rw-rw-r--. 2 user user 12 Mar 11 19:19 newfile.txt
8924107 -rw-rw-r--. 2 user user 12 Mar 11 19:19 /tmp/newfile-hlink2.txt

Importante
Todos los enlaces duros que hacen referencia al mismo archivo tendrán la misma
estructura de inodos que el recuento de enlaces, permiso de acceso, pertenencia
a usuarios y grupos, marcas de tiempo y contenido de archivo. Cuando se cambia
esa información para un enlace duro, los otros enlaces duros para el mismo archivo
también muestran la nueva información. Esto se debe a que cada enlace duro
apunta a los mismos datos en el dispositivo de almacenamiento.

Incluso si se elimina el archivo original, aún puede acceder al contenido del archivo siempre que
exista al menos un enlace duro adicional. Los datos se eliminan del almacenamiento solo cuando
se elimina el último enlace duro, lo que hace que el contenido del archivo no esté referenciado por
ningún enlace duro.

[user@host ~]$ rm -f newfile.txt


[user@host ~]$ ls -l /tmp/newfile-hlink2.txt
-rw-rw-r--. 1 user user 12 Mar 11 19:19 /tmp/newfile-hlink2.txt
[user@host ~]$ cat /tmp/newfile-hlink2.txt
Hello World

Limitaciones de los enlaces duros


Los enlaces duros tienen algunas limitaciones. En primer lugar, los enlaces duros solo se pueden
usar con archivos normales. No puede usar el comando ln para crear un enlace duro a un
directorio o archivo especial.

En segundo lugar, solo puede usar enlaces duros si ambos archivos están en el mismo sistema
de archivos. La jerarquía del sistema de archivos puede estar compuesta por varios dispositivos
de almacenamiento. Dependiendo de la configuración de su sistema, cuando pase a un nuevo
directorio, ese directorio y su contenido pueden almacenarse en un sistema de archivos diferente.

Puede usar el comando df para enumerar los directorios que están en diferentes sistemas de
archivos. Por ejemplo, es posible que visualice la siguiente salida:

[user@host ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 886788 0 886788 0% /dev
tmpfs 902108 0 902108 0% /dev/shm
tmpfs 902108 8696 893412 1% /run
tmpfs 902108 0 902108 0% /sys/fs/cgroup
/dev/mapper/rhel_rhel9--root 10258432 1630460 8627972 16% /
/dev/sda1 1038336 167128 871208 17% /boot
tmpfs 180420 0 180420 0% /run/user/1000

Los archivos que están en dos directorios diferentes con el indicador "Montado en" y sus
subdirectorios están en sistemas de archivos distintos. Por lo tanto, en el sistema en este ejemplo,
puede crear un enlace duro entre los archivos /var/tmp/link1 y /home/user/file porque
ambos son subdirectorios del directorio /, pero no de ningún otro directorio de la lista. Sin

RH124-RHEL9.0-es-5-20230516 79
capítulo 3 | Gestionar archivos desde la línea de comandos

embargo, no puede crear un enlace duro entre los archivos /boot/test/badlink y /home/
user/file. El primer archivo está en un subdirectorio del directorio /boot (en la lista "Montado
en") y está en el sistema de archivos /dev/sda1. El segundo archivo está en el sistema de
archivos /dev/mapper/rhel_rhel9—root.

Crear enlaces simbólicos


El comando ln con la opción -s crea un enlace simbólico, que también se conoce como "enlace
blando". Un enlace simbólico no es un archivo regular, sino un tipo de archivo especial que apunta
a un archivo o a un directorio existente.

Los enlaces simbólicos tienen algunas ventajas en comparación con los enlaces duros:

• Los enlaces simbólicos pueden vincular dos archivos en diferentes sistemas de archivos.
• Los enlaces simbólicos pueden apuntar a un directorio o archivo especial, no solo a un archivo
regular.

En el siguiente ejemplo, el comando ln -s crea un enlace simbólico para el archivo /home/


user/newfile-link2.txt. El nombre del enlace simbólico es /tmp/newfile-symlink.txt.

[user@host ~]$ ln -s /home/user/newfile-link2.txt /tmp/newfile-symlink.txt


[user@host ~]$ ls -l newfile-link2.txt /tmp/newfile-symlink.txt
-rw-rw-r--. 1 user user 12 Mar 11 19:19 newfile-link2.txt
lrwxrwxrwx. 1 user user 11 Mar 11 20:59 /tmp/newfile-symlink.txt -> /home/user/
newfile-link2.txt
[user@host ~]$ cat /tmp/newfile-symlink.txt
Symbolic Hello World

En el ejemplo anterior, el primer carácter de la lista larga para el archivo /tmp/newfile-


symlink.txt es l (letra I) en lugar de -. Este carácter indica que el archivo es un enlace
simbólico y no un archivo regular.

Cuando se elimina el archivo regular original, el enlace simbólico seguirá apuntando al archivo,
pero el destino desaparece. Un enlace simbólico que apunta a un archivo que falta se denomina
"enlace simbólico colgante".

[user@host ~]$ rm -f newfile-link2.txt


[user@host ~]$ ls -l /tmp/newfile-symlink.txt
lrwxrwxrwx. 1 user user 11 Mar 11 20:59 /tmp/newfile-symlink.txt -> /home/user/
newfile-link2.txt
[user@host ~]$ cat /tmp/newfile-symlink.txt
cat: /tmp/newfile-symlink.txt: No such file or directory

80 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

Importante
Un efecto adicional del enlace simbólico colgante en el ejemplo anterior es que
si usted crea un archivo con el mismo nombre que el archivo eliminado (/home/
user/newfile-link2.txt), el enlace simbólico ya no estará "colgando" y
apuntará al archivo nuevo. Los enlaces duros no funcionan de esta forma. Si borra
un enlace duro y luego usa herramientas normales (en lugar de ln) para crear un
archivo con el mismo nombre, el nuevo archivo no se vincula al archivo anterior.
Considere la siguiente manera de comparar enlaces duros y enlaces simbólicos para
comprender cómo funcionan:

• Un enlace duro apunta un nombre a los datos de un dispositivo de


almacenamiento.
• Un enlace simbólico apunta un nombre a otro nombre, que apunta a datos en un
dispositivo de almacenamiento.

Un enlace simbólico puede apuntar a un directorio. El enlace simbólico funciona como un


directorio. Si usa cd para cambiar al enlace simbólico, el directorio de trabajo actual se convierte
en el directorio enlazado. Algunas herramientas pueden hacer un seguimiento del hecho de que
usted siguió un enlace simbólico para llegar allí. Por ejemplo, de manera predeterminada, cd
actualiza su directorio de trabajo actual por medio del nombre del enlace simbólico, y no del
nombre del directorio real. Si desea actualizar el directorio de trabajo actual con el nombre del
directorio real, puede usar la opción -P.

En el siguiente ejemplo, se crea un enlace simbólico llamado /home/user/configfiles que


apunta al directorio /etc.

[user@host ~]$ ln -s /etc /home/user/configfiles


[user@host ~]$ cd /home/user/configfiles
[user@host configfiles]$ pwd
/home/user/configfiles
[user@host configfiles]$ cd -P /home/user/configfiles
[user@host etc]$ pwd
/etc

Referencias
Página del manual: ln(1)

info ln (Make links between files)

RH124-RHEL9.0-es-5-20230516 81
capítulo 3 | Gestionar archivos desde la línea de comandos

Ejercicio Guiado

Creación de enlaces entre archivos


En este ejercicio, crea enlaces duros y enlaces simbólicos, y comparará los resultados.

Resultados
• Crear enlaces duros y enlaces simbólicos entre archivos.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start files-make

Instrucciones
1. Use el comando ssh para iniciar sesión en la máquina servera con el usuario student. La
configuración del sistema admite el uso de claves SSH para la autenticación, por lo que no
se necesita una contraseña.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$

2. Cree un enlace duro denominado /home/student/links/file.hardlink para el


archivo /home/student/files/target.file. Verifique el recuento de enlaces para el
archivo original y el nuevo archivo vinculado.

2.1. Vea el recuento de enlaces para el archivo /home/student/files/target.file.

[student@servera ~]$ ls -l files/target.file


total 4
-rw-r--r--. 1 student student 11 Mar 3 06:51 files/target.file

2.2. Cree un enlace duro denominado /home/student/links/file.hardlink.


Establezca su enlace con el archivo /home/student/files/target.file.

[student@servera ~]$ ln /home/student/files/target.file \


/home/student/links/file.hardlink

2.3. Verifique el recuento de enlaces para el archivo original /home/student/


files/target.file y el nuevo archivo vinculado, /home/student/files/
file.hardlink. El recuento de enlaces debe ser de 2 para ambos archivos.

82 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

[student@servera ~]$ ls -l files/target.file links/file.hardlink


-rw-r--r--. 2 student student 11 Mar 3 06:51 files/target.file
-rw-r--r--. 2 student student 11 Mar 3 06:51 links/file.hardlink

3. Se crea un enlace simbólico llamado /home/student/tempdir que apunta al directorio /


tmp en la máquina servera. Verifique el enlace simbólico recientemente creado.

3.1. Cree un enlace simbólico denominado /home/student/tempdir y vincúlelo al


directorio /tmp.

[student@servera ~]$ ln -s /tmp /home/student/tempdir

3.2. Use el comando ls -l para verificar el enlace simbólico recién creado.

[student@servera ~]$ ls -l /home/student/tempdir


lrwxrwxrwx. 1 student student 4 Mar 3 06:55 /home/student/tempdir -> /tmp

4. Regrese al sistema workstation con el usuario student.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish files-make

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 83
capítulo 3 | Gestionar archivos desde la línea de comandos

Coincidencia de nombres de archivo con


expansiones de shell

Objetivos
Ejecutar con eficiencia los comandos que afectan a muchos archivos mediante el uso de las
funciones de coincidencia de patrones de la shell Bash.

Expansiones de las líneas de comandos


Cuando escribe un comando en el prompt de shell de Bash, la shell procesa esa línea de comandos
a través de múltiples expansiones antes de ejecutarla. Puede usar estas expansiones de shell para
realizar tareas complejas que de otro modo serían difíciles o imposibles.

A continuación se encuentran las principales expansiones que realiza la shell de Bash:

• Expansión de llaves que puede generar múltiples cadenas de caracteres

• Expansión de tilde que se expande a una ruta a un directorio de inicio de usuario

• Expansión de variables que reemplaza el texto con el valor almacenado en una variable de shell

• Sustitución de comandos que reemplaza el texto con la salida de un comando

• Expansión del nombre de ruta que ayuda a seleccionar uno o más archivos por coincidencia de
patrones

La expansión del nombre de ruta, históricamente llamada globbing, es una de las características
más útiles de Bash. Con esta función, es más fácil gestionar muchos archivos. Si se usan los
metacaracteres que se “expanden” para establecer una coincidencia entre los archivos y los
nombres de ruta que se buscan, los comandos actúan en un conjunto de archivos orientado a la
vez.

Expansión del nombre de ruta y coincidencia de patrones


La expansión del nombre de ruta expande un patrón de caracteres especiales que representan
comodines o clases de caracteres en una lista de nombres de archivo que coinciden con el
patrón. Antes de que la shell ejecute el comando, reemplaza el patrón con la lista de nombres
de archivo que coinciden. Si el patrón no coincide con nada, la shell intentará usar el patrón
como un argumento literal para el comando que ejecuta. En la siguiente tabla se mencionan los
metacaracteres y las clases de patrones que se usan para la coincidencia de patrones.

Tabla de metacaracteres y coincidencias

Patrón Coincidencias

* Cualquier cadena de cero o más caracteres

? Cualquier carácter individual

[abc…] Cualquier carácter en la clase incluida (entre corchetes)

[!abc…] Cualquier carácter que no esté en la clase incluida

84 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

Patrón Coincidencias

[^abc…] Cualquier carácter que no esté en la clase incluida

[[:alpha:]] Cualquier carácter alfabético

[[:lower:]] Cualquier carácter en minúsculas

[[:upper:]] Cualquier carácter en mayúsculas

[[:alnum:]] Cualquier dígito o carácter alfabético

[[:punct:]] Cualquier carácter imprimible que no sea un espacio o alfanumérico

[[:digit:]] Cualquier dígito de 0 a 9

[[:space:]] Cualquier carácter de espacio en blanco, que puede incluir tabulaciones,


nuevas líneas, retornos de carro, fuentes de formulario o espacios

Para el siguiente ejemplo, simule que ha ejecutado los siguientes comandos para crear algunos
archivos de muestra:

[user@host ~]$ mkdir glob; cd glob


[user@host glob]$ touch alfa bravo charlie delta echo able baker cast dog easy
[user@host glob]$ ls
able alfa baker bravo cast charlie delta dog easy echo
[user@host glob]$

En el siguiente ejemplo, los dos primeros comandos usan coincidencias de patrones simples con el
asterisco (*) para hacer coincidir todos los nombres de archivos que comienzan con "a" y todos los
nombres de archivos que contienen una "a", respectivamente. El tercer comando usa el asterisco y
los corchetes para hacer coincidir todos los nombres de archivos que comienzan con "a" o "c".

[user@host glob]$ ls a*
able alfa
[user@host glob]$ ls *a*
able alfa baker bravo cast charlie delta easy
[user@host glob]$ ls [ac]*
able alfa cast charlie

El siguiente ejemplo también usa caracteres de interrogación (?) para hacer coincidir algunos de
esos nombres de archivo. Los dos comandos coinciden solo con nombres de archivos con cuatro y
cinco caracteres de longitud, respectivamente.

[user@host glob]$ ls ????


able cast easy echo
[user@host glob]$ ls ?????
baker bravo delta

Expansión de llaves
La expansión de llaves se usa para generar cadenas discrecionales de caracteres. Las llaves
contienen una lista de cadenas, o una expresión de cadenas, separadas por comas. El resultado

RH124-RHEL9.0-es-5-20230516 85
capítulo 3 | Gestionar archivos desde la línea de comandos

incluye el texto que antecede o que sigue a la definición de llaves. Las expansiones de llaves
pueden estar anidadas, una dentro de la otra. También puede usar la sintaxis de doble punto (..),
que se expande a una secuencia. Por ejemplo, la sintaxis de doble punto {m..p} dentro de las
llaves se expande a m n o p.

[user@host glob]$ echo {Sunday,Monday,Tuesday,Wednesday}.log


Sunday.log Monday.log Tuesday.log Wednesday.log
[user@host glob]$ echo file{1..3}.txt
file1.txt file2.txt file3.txt
[user@host glob]$ echo file{a..c}.txt
filea.txt fileb.txt filec.txt
[user@host glob]$ echo file{a,b}{1,2}.txt
filea1.txt filea2.txt fileb1.txt fileb2.txt
[user@host glob]$ echo file{a{1,2},b,c}.txt
filea1.txt filea2.txt fileb.txt filec.txt

La expansión de llaves se usa en la práctica, por ejemplo, para crear rápidamente múltiples
archivos o directorios.

[user@host glob]$ mkdir ../RHEL{7,8,9}


[user@host glob]$ ls ../RHEL*
RHEL7 RHEL8 RHEL9

Expansión de tilde
El carácter del tilde (~) coincide con el directorio de inicio del usuario actual. Si comienza con una
cadena de caracteres que no tenga una barra (/), la shell interpreta que la cadena hasta esa barra
es un nombre de usuario, si se logra una coincidencia, y reemplaza la cadena con la ruta absoluta
al directorio de inicio de ese usuario. Si ningún nombre de usuario coincide, la shell empleará la
propia tilde seguida de la cadena de caracteres.

En el siguiente ejemplo, el comando echo se usa para mostrar el valor del carácter de tilde.
También puede usar el comando echo para mostrar los valores de los caracteres de expansión de
llaves y variables, y otros.

[user@host glob]$ echo ~root


/root
[user@host glob]$ echo ~user
/home/user
[user@host glob]$ echo ~/glob
/home/user/glob
[user@host glob]$ echo ~nonexistinguser
~nonexistinguser

Expansión de variables
Una variable actúa como un contenedor con nombre que almacena un valor en la memoria. Las
variables simplifican el acceso y la modificación de los datos almacenados desde la línea de
comandos o dentro de un script de shell.

Puede asignar datos como valor de una variable con la siguiente sintaxis:

86 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

[user@host ~]$ VARIABLENAME=value

Puede usar la expansión de variables para convertir el nombre de la variable a su valor en la línea
de comandos. Si una cadena comienza con un signo de dólar ($), entonces la shell intentará usar el
resto de esa cadena como un nombre de variable y reemplazarlo con el valor de la variable.

[user@host ~]$ USERNAME=operator


[user@host ~]$ echo $USERNAME
operator

Para evitar errores debidos a otras expansiones de shell, puede poner el nombre de la variable
entre llaves, por ejemplo, ${VARIABLENAME}.

[user@host ~]$ USERNAME=operator


[user@host ~]$ echo ${USERNAME}
operator

Los nombres de las variables solo pueden contener letras (mayúsculas y minúsculas), números
y guiones bajos. Los nombres de las variables distinguen entre mayúsculas y minúsculas y no
pueden comenzar con un número.

Sustitución de comandos
La sustitución de comandos permite obtener un comando para reemplazar el comando mismo
en la línea de comandos. La sustitución de comandos se produce cuando un comando está entre
paréntesis y precedido por un signo de dólar ($). La forma $(command) puede anidar varias
expansiones de comando dentro de cada una.

[user@host glob]$ echo Today is $(date +%A).


Today is Wednesday.
[user@host glob]$ echo The time is $(date +%M) minutes past $(date +%l%p).
The time is 26 minutes past 11AM.

nota
Una forma anterior de sustitución de comandos usa acentos graves: `command`.
Aunque la shell Bash aún acepta este formato, intente evitarlo porque es fácil
confundir visualmente los acentos graves con comillas simples, y los acentos graves
no se pueden anidar.

Cómo evitar la expansión de argumentos


Muchos caracteres tienen un significado especial en la shell Bash. Para evitar que la shell realice
expansiones de shell en partes de su línea de comandos, puede usar caracteres y cadenas entre
comillas y de escape.

La barra invertida (\) es un carácter de escape en la shell Bash. Evitará que el siguiente carácter
se expanda.

RH124-RHEL9.0-es-5-20230516 87
capítulo 3 | Gestionar archivos desde la línea de comandos

[user@host glob]$ echo The value of $HOME is your home directory.


The value of /home/user is your home directory.
[user@host glob]$ echo The value of \$HOME is your home directory.
The value of $HOME is your home directory.

En el ejemplo anterior, con el signo de dólar protegido de la expansión, Bash lo trata como un
carácter normal, sin la expansión de variables en $HOME.

Para proteger las cadenas de caracteres más extensas, puede usar comillas simples (') o dobles
(") para encerrar las cadenas. Tienen efectos ligeramente diferentes. Las comillas simples
detienen toda la expansión de shell. Las comillas dobles detienen la mayor parte de la expansión
de shell.

Las comillas dobles evitan que los caracteres especiales que no sean el signo dólar ($), la barra
invertida (\), la comilla invertida (`) y el signo de exclamación (!) operen dentro del texto entre
comillas. Las comillas dobles bloquean la expansión del nombre de ruta, pero aún permite que
ocurra la sustitución de comandos y la expansión de variables.

[user@host glob]$ myhost=$(hostname -s); echo $myhost


host
[user@host glob]$ echo "***** hostname is ${myhost} *****"
***** hostname is host *****

Use comillas simples para interpretar todo el texto entre comillas literalmente.

[user@host glob]$ echo "Will variable $myhost evaluate to $(hostname -s)?"


Will variable host evaluate to host?
[user@host glob]$ echo 'Will variable $myhost evaluate to $(hostname -s)?'
Will variable $myhost evaluate to $(hostname -s)?

Importante
Tanto en la pantalla como en el teclado, es fácil confundir la comilla simple (') y
el acento grave de sustitución de comando (`). El uso de uno incorrectamente,
cuando la intención era usar el otro, generará un comportamiento inesperado de la
shell.

Referencias
Páginas del manual: bash(1), cd(1), glob(7), isalpha(3), ls(1),
path_resolution(7) y pwd(1)

88 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

Cuestionario

Coincidencia de nombres de archivo con


expansiones de shell
Elija las respuestas correctas para las siguientes preguntas:

1. ¿Qué patrón coincidirá solo con los nombres de archivo que terminan con "b"?
a. b*
b. *b
c. *b*
d. [!b]*

2. ¿Qué patrón coincidirá solo con los nombres de archivo que comienzan con "b"?
a. b*
b. *b
c. *b*
d. [!b]*

3. ¿Qué patrón coincidirá solo con los nombres de archivo donde el primer carácter no es
"b"?
a. b*
b. *b
c. *b*
d. [!b]*

4. ¿Qué patrón coincidirá con todos los nombres de archivo que contienen "b"?
a. b*
b. *b
c. *b*
d. [!b]*

5. ¿Qué patrón coincidirá solo con los nombres de archivo que contienen un número?
a. *#*
b. *[[:digit:]]*
c. *[digit]*
d. [0-9]

RH124-RHEL9.0-es-5-20230516 89
capítulo 3 | Gestionar archivos desde la línea de comandos

6. ¿Qué patrón coincidirá solo con los nombres de archivo que comienzan con una letra
mayúscula?
a. ^?*
b. ^*
c. [upper]*
d. [[:upper:]]*
e. [[CAP]]*

7. ¿Qué patrón coincidirá solo con los nombres de archivo de al menos tres caracteres de
longitud?
a. ???*
b. ???
c. \3*
d. +++*
e. ...*

90 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

Solución

Coincidencia de nombres de archivo con


expansiones de shell
Elija las respuestas correctas para las siguientes preguntas:

1. ¿Qué patrón coincidirá solo con los nombres de archivo que terminan con "b"?
a. b*
b. *b
c. *b*
d. [!b]*

2. ¿Qué patrón coincidirá solo con los nombres de archivo que comienzan con "b"?
a. b*
b. *b
c. *b*
d. [!b]*

3. ¿Qué patrón coincidirá solo con los nombres de archivo donde el primer carácter no es
"b"?
a. b*
b. *b
c. *b*
d. [!b]*

4. ¿Qué patrón coincidirá con todos los nombres de archivo que contienen "b"?
a. b*
b. *b
c. *b*
d. [!b]*

5. ¿Qué patrón coincidirá solo con los nombres de archivo que contienen un número?
a. *#*
b. *[[:digit:]]*
c. *[digit]*
d. [0-9]

RH124-RHEL9.0-es-5-20230516 91
capítulo 3 | Gestionar archivos desde la línea de comandos

6. ¿Qué patrón coincidirá solo con los nombres de archivo que comienzan con una letra
mayúscula?
a. ^?*
b. ^*
c. [upper]*
d. [[:upper:]]*
e. [[CAP]]*

7. ¿Qué patrón coincidirá solo con los nombres de archivo de al menos tres caracteres de
longitud?
a. ???*
b. ???
c. \3*
d. +++*
e. ...*

92 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

Trabajo de laboratorio

Gestionar archivos desde la línea de


comandos
En este trabajo de laboratorio, crea, mueve y elimina archivos y directorios usando la shell y
diversas técnicas de coincidencia de nombres de archivo.

Resultados
• Usar comodines para localizar y manipular archivos.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start files-review

Instrucciones
1. Use el comando ssh para iniciar sesión en la máquina serverb con el usuario student. La
configuración del sistema admite el uso de claves SSH para la autenticación.
2. Cree un nuevo directorio llamado project_plans en el directorio Documents. El directorio
Documents debe colocarse en el directorio de inicio del usuario student. Cree dos archivos
vacíos en el directorio project_plans llamados season1_project_plan.odf y
season2_project_plan.odf.
Pista: Si el directorio ~/Documents no existe, use el comando mkdir con la opción -p para
crearlo.
3. Cree conjuntos de archivos de práctica vacíos para usar en este trabajo de laboratorio.
Si no reconoce inmediatamente el atajo deseado de expansión de la shell, use la
solución para aprender y practicar. Use la función de autocompletado con tab de la
shell para localizar los nombres de ruta de archivos. Cree 12 archivos con los nombres
tv_seasonX_episodeY.ogg en el directorio /home/student. Reemplace X con el
número de temporada e Y con el episodio de esa temporada, para dos temporadas de seis
episodios cada una.
4. Como autor de una serie exitosa de novelas de misterio, está editando los capítulos
de su próximo bestseller para publicarlos. Cree ocho archivos con los nombres
mystery_chapterX.odf. Reemplace la X con los números del 1 al 8.
5. Use un solo comando para crear dos subdirectorios llamados season1 y season2 en
el directorio Videos, a fin de organizar los capítulos de la serie de televisión. Mueva los
episodios de la serie de televisión correspondientes a los subdirectorios de temporadas. Use
solo dos comandos y especifique los destinos con la sintaxis relativa.

RH124-RHEL9.0-es-5-20230516 93
capítulo 3 | Gestionar archivos desde la línea de comandos

6. Cree una jerarquía de directorios de dos niveles con un solo comando para organizar los
capítulos del libro de misterios. Cree el subdirectorio my_bestseller en el directorio
Documents y el subdirectorio chapters en el nuevo directorio my_bestseller. Cree tres
subdirectorios más directamente en el directorio my_bestseller con un solo comando.
Nombre a estos subdirectorios editor, changes y vacation. No necesita usar el comando
mkdir -p para crear elementos principales porque el directorio principal my_bestseller
existe.
7. Cambie al directorio chapters. Use el atajo del directorio de inicio con tilde (~) para mover
todos los capítulos del libro al directorio chapters, que ahora es el directorio actual. Use la
sintaxis más simple para especificar el directorio de destino.
Quiere enviar los primeros dos capítulos al editor para la revisión. Mueva solo esos dos
capítulos al directorio editor para evitar modificarlos durante la revisión. Comenzando
por el subdirectorio chapters, use la expansión de llaves con un rango para especificar los
nombres de archivo de los capítulos que se moverán y una ruta relativa para el directorio de
destino.
En las vacaciones, tiene la intención de escribir los capítulos 7 y 8. Use un solo comando para
mover los archivos del directorio chapters al directorio vacation. Para especificar los
nombres de archivo de los capítulos, use la expansión de llaves con una lista de cadenas y sin
usar caracteres comodín.
8. Cambie el directorio de trabajo a ~/Videos/season2 y copie el primer episodio de la
temporada al directorio vacation. Use un solo comando cd para pasar del directorio
de trabajo al directorio ~/Documents/my_bestseller/vacation. Haga una lista
de sus archivos. Use el argumento directorio de trabajo anterior para volver al directorio
season2. (Este argumento se ejecutará correctamente si el último cambio de directorio
con el comando cd se hizo solo con un comando en lugar de varios comandos cd). Desde el
directorio season2, copie el archivo del episodio 2 en el directorio vacation. Use el atajo
de nuevo para volver al directorio vacation.
9. Los autores de los capítulos 5 y 6 quieren experimentar con posibles cambios. Copie
ambos archivos del directorio ~/Documents/my_bestseller/chapters al directorio
~/Documents/my_bestseller/changes para evitar que estos cambios modifiquen
los archivos originales. Diríjase al directorio ~/Documents/my_bestseller. Use la
coincidencia de patrones con corchetes para especificar qué números de capítulo deben
coincidir en el argumento filename del comando cp.
10. Cambie su directorio actual al directorio changes y use el comando date +%F
con sustitución de comandos para copiar el archivo mystery_chapter5.odf
a un archivo nuevo que incluya la fecha completa. Use el formato de nombre
mystery_chapter5_YYYY-MM-DD.odf.
Al usar el reemplazo de comando con el comando date +%s, haga otra copia de
mystery_chapter5.odf y anexe la marca de tiempo actual (como el número de segundos
desde la era, 1970-01-01 00:00 UTC)para garantizar un nombre de archivo único.
11. Después de una revisión adicional, usted decide que no necesita los cambios en la trama.
Elimine el directorio changes.
De ser necesario, vaya al directorio changes y elimine todos los archivos del directorio. No
puede eliminar un directorio mientras sea el directorio de trabajo actual.
Pase al directorio principal del directorio changes. Intente eliminar el directorio vacío con el
comando rm sin la opción recursiva -r. Este intento debe fallar. Finalmente, use el comando
rmdir para eliminar el directorio vacío; esta acción se ejecuta correctamente.
Cuando finalicen las vacaciones, el directorio vacation ya no será necesario. Elimínelo
usando el comando rmcon la opción recursiva.
Una vez que haya finalizado, regrese al directorio de inicio del usuario student.

94 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

12. Cree un enlace duro al archivo ~/Documents/project_plans/


season2_project_plan.odf denominado ~/Documents/backups/
season2_project_plan.odf.back. Un enlace duro evita la eliminación accidental
del archivo original y mantiene actualizado el archivo de respaldo a medida que cambia el
original.
Pista: Si el directorio ~/Documents/backups no existe, use el comando mkdir para
crearlo.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade files-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish files-review

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 95
capítulo 3 | Gestionar archivos desde la línea de comandos

Solución

Gestionar archivos desde la línea de


comandos
En este trabajo de laboratorio, crea, mueve y elimina archivos y directorios usando la shell y
diversas técnicas de coincidencia de nombres de archivo.

Resultados
• Usar comodines para localizar y manipular archivos.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start files-review

Instrucciones
1. Use el comando ssh para iniciar sesión en la máquina serverb con el usuario student. La
configuración del sistema admite el uso de claves SSH para la autenticación.

[student@workstation ~]$ ssh student@serverb


...output omitted...

2. Cree un nuevo directorio llamado project_plans en el directorio Documents. El directorio


Documents debe colocarse en el directorio de inicio del usuario student. Cree dos archivos
vacíos en el directorio project_plans llamados season1_project_plan.odf y
season2_project_plan.odf.
Pista: Si el directorio ~/Documents no existe, use el comando mkdir con la opción -p para
crearlo.

[student@serverb ~]$ mkdir -p ~/Documents/project_plans


[student@serverb ~]$ touch \
~/Documents/project_plans/{season1,season2}_project_plan.odf
[student@serverb ~]$ ls -lR Documents/
Documents/:
total 0
drwxr-xr-x. 2 student student 70 Mar 7 03:50 project_plans

Documents/project_plans:
total 0
-rw-r--r--. 1 student student 0 Mar 7 03:50 season1_project_plan.odf
-rw-r--r--. 1 student student 0 Mar 7 03:50 season2_project_plan.odf

96 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

3. Cree conjuntos de archivos de práctica vacíos para usar en este trabajo de laboratorio.
Si no reconoce inmediatamente el atajo deseado de expansión de la shell, use la
solución para aprender y practicar. Use la función de autocompletado con tab de la
shell para localizar los nombres de ruta de archivos. Cree 12 archivos con los nombres
tv_seasonX_episodeY.ogg en el directorio /home/student. Reemplace X con el
número de temporada e Y con el episodio de esa temporada, para dos temporadas de seis
episodios cada una.

[student@serverb ~]$ touch tv_season{1..2}_episode{1..6}.ogg


[student@serverb ~]$ ls tv*
tv_season1_episode1.ogg tv_season1_episode5.ogg tv_season2_episode3.ogg
tv_season1_episode2.ogg tv_season1_episode6.ogg tv_season2_episode4.ogg
tv_season1_episode3.ogg tv_season2_episode1.ogg tv_season2_episode5.ogg
tv_season1_episode4.ogg tv_season2_episode2.ogg tv_season2_episode6.ogg

4. Como autor de una serie exitosa de novelas de misterio, está editando los capítulos
de su próximo bestseller para publicarlos. Cree ocho archivos con los nombres
mystery_chapterX.odf. Reemplace la X con los números del 1 al 8.

[student@serverb ~]$ touch mystery_chapter{1..8}.odf


[student@serverb ~]$ ls mys*
mystery_chapter1.odf mystery_chapter4.odf mystery_chapter7.odf
mystery_chapter2.odf mystery_chapter5.odf mystery_chapter8.odf
mystery_chapter3.odf mystery_chapter6.odf

5. Use un solo comando para crear dos subdirectorios llamados season1 y season2 en
el directorio Videos, a fin de organizar los capítulos de la serie de televisión. Mueva los
episodios de la serie de televisión correspondientes a los subdirectorios de temporadas. Use
solo dos comandos y especifique los destinos con la sintaxis relativa.

5.1. Cree dos subdirectorios llamados season1 y season2 debajo del directorio Videos
con un solo comando.

[student@serverb ~]$ mkdir -p Videos/season{1..2}


[student@serverb ~]$ ls Videos
season1 season2

5.2. Con tan solo dos comandos, mueva los episodios de la serie de televisión
correspondientes a los subdirectorios de temporadas.

[student@serverb ~]$ mv tv_season1* Videos/season1


[student@serverb ~]$ mv tv_season2* Videos/season2
[student@serverb ~]$ ls -R Videos
Videos:
season1 season2

Videos/season1:
tv_season1_episode1.ogg tv_season1_episode3.ogg tv_season1_episode5.ogg
tv_season1_episode2.ogg tv_season1_episode4.ogg tv_season1_episode6.ogg

Videos/season2:
tv_season2_episode1.ogg tv_season2_episode3.ogg tv_season2_episode5.ogg
tv_season2_episode2.ogg tv_season2_episode4.ogg tv_season2_episode6.ogg

RH124-RHEL9.0-es-5-20230516 97
capítulo 3 | Gestionar archivos desde la línea de comandos

6. Cree una jerarquía de directorios de dos niveles con un solo comando para organizar los
capítulos del libro de misterios. Cree el subdirectorio my_bestseller en el directorio
Documents y el subdirectorio chapters en el nuevo directorio my_bestseller. Cree tres
subdirectorios más directamente en el directorio my_bestseller con un solo comando.
Nombre a estos subdirectorios editor, changes y vacation. No necesita usar el comando
mkdir -p para crear elementos principales porque el directorio principal my_bestseller
existe.

6.1. Cree el directorio my_bestseller debajo del directorio Documents. Cree el


directorio chapters debajo del directorio my_bestseller.

[student@serverb ~]$ mkdir -p Documents/my_bestseller/chapters


[student@serverb ~]$ ls -R Documents
Documents:
my_bestseller project_plans

Documents/my_bestseller:
chapters

Documents/my_bestseller/chapters:

Documents/project_plans:
season1_project_plan.odf season2_project_plan.odf

6.2. Cree tres directorios llamados editor, changes y vacation debajo del directorio
my_bestseller con un solo comando.

[student@serverb ~]$ mkdir Documents/my_bestseller/{editor,changes,vacation}


[student@serverb ~]$ ls -R Documents
Documents:
my_bestseller project_plans

Documents/my_bestseller:
changes chapters editor vacation

Documents/my_bestseller/changes:

Documents/my_bestseller/chapters:

Documents/my_bestseller/editor:

Documents/my_bestseller/vacation:

Documents/project_plans:
season1_project_plan.odf season2_project_plan.odf

7. Cambie al directorio chapters. Use el atajo del directorio de inicio con tilde (~) para mover
todos los capítulos del libro al directorio chapters, que ahora es el directorio actual. Use la
sintaxis más simple para especificar el directorio de destino.
Quiere enviar los primeros dos capítulos al editor para la revisión. Mueva solo esos dos
capítulos al directorio editor para evitar modificarlos durante la revisión. Comenzando
por el subdirectorio chapters, use la expansión de llaves con un rango para especificar los
nombres de archivo de los capítulos que se moverán y una ruta relativa para el directorio de
destino.

98 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

En las vacaciones, tiene la intención de escribir los capítulos 7 y 8. Use un solo comando para
mover los archivos del directorio chapters al directorio vacation. Para especificar los
nombres de archivo de los capítulos, use la expansión de llaves con una lista de cadenas y sin
usar caracteres comodín.

7.1. Cambie al directorio chapters y use el atajo del directorio de inicio con tilde (~) para
mover todos los capítulos del libro al directorio chapters.

[student@serverb ~]$ cd Documents/my_bestseller/chapters


[student@serverb chapters]$ mv ~/mystery_chapter* .
[student@serverb chapters]$ ls
mystery_chapter1.odf mystery_chapter4.odf mystery_chapter7.odf
mystery_chapter2.odf mystery_chapter5.odf mystery_chapter8.odf
mystery_chapter3.odf mystery_chapter6.odf

7.2. Mueva los dos primeros capítulos al directorio editor. Use la expansión de llaves con
un rango para especificar los nombres de archivo de los capítulos que se moverán y una
ruta relativa para el directorio de destino.

[student@serverb chapters]$ mv mystery_chapter{1..2}.odf ../editor


[student@serverb chapters]$ ls
mystery_chapter3.odf mystery_chapter5.odf mystery_chapter7.odf
mystery_chapter4.odf mystery_chapter6.odf mystery_chapter8.odf
[student@serverb chapters]$ ls ../editor
mystery_chapter1.odf mystery_chapter2.odf

7.3. Use un solo comando para mover los capítulos 7 y 8 del directorio chapters al
directorio vacation. Para especificar los nombres de archivo de los capítulos, use la
expansión de llaves con una lista de cadenas y sin usar caracteres comodín.

[student@serverb chapters]$ mv mystery_chapter{7,8}.odf ../vacation


[student@serverb chapters]$ ls
mystery_chapter3.odf mystery_chapter5.odf
mystery_chapter4.odf mystery_chapter6.odf
[student@serverb chapters]$ ls ../vacation
mystery_chapter7.odf mystery_chapter8.odf

8. Cambie el directorio de trabajo a ~/Videos/season2 y copie el primer episodio de la


temporada al directorio vacation. Use un solo comando cd para pasar del directorio
de trabajo al directorio ~/Documents/my_bestseller/vacation. Haga una lista
de sus archivos. Use el argumento directorio de trabajo anterior para volver al directorio
season2. (Este argumento se ejecutará correctamente si el último cambio de directorio
con el comando cd se hizo solo con un comando en lugar de varios comandos cd). Desde el
directorio season2, copie el archivo del episodio 2 en el directorio vacation. Use el atajo
de nuevo para volver al directorio vacation.

8.1. Cambie el directorio de trabajo a ~/Videos/season2 y copie el primer episodio de la


temporada al directorio vacation.

[student@serverb chapters]$ cd ~/Videos/season2


[student@serverb season2]$ cp *episode1.ogg ~/Documents/my_bestseller/vacation

RH124-RHEL9.0-es-5-20230516 99
capítulo 3 | Gestionar archivos desde la línea de comandos

8.2. Use un solo comando cd para cambiar de su directorio de trabajo al directorio


~/Documents/my_bestseller/vacation, enumere sus archivos y use el
argumento - para regresar al directorio anterior. Copie el archivo del episodio 2 en
el directorio vacation. Use el comando cd con el argumento - para regresar al
directorio vacation.

[student@serverb season2]$ cd ~/Documents/my_bestseller/vacation


[student@serverb vacation]$ ls
mystery_chapter7.odf mystery_chapter8.odf tv_season2_episode1.ogg
[student@serverb vacation]$ cd -
/home/student/Videos/season2
[student@serverb season2]$ cp *episode2.ogg ~/Documents/my_bestseller/vacation
[student@serverb season2]$ cd -
/home/student/Documents/my_bestseller/vacation
[student@serverb vacation]$ ls
mystery_chapter7.odf tv_season2_episode1.ogg
mystery_chapter8.odf tv_season2_episode2.ogg

9. Los autores de los capítulos 5 y 6 quieren experimentar con posibles cambios. Copie
ambos archivos del directorio ~/Documents/my_bestseller/chapters al directorio
~/Documents/my_bestseller/changes para evitar que estos cambios modifiquen
los archivos originales. Diríjase al directorio ~/Documents/my_bestseller. Use la
coincidencia de patrones con corchetes para especificar qué números de capítulo deben
coincidir en el argumento filename del comando cp.

[student@serverb vacation]$ cd ~/Documents/my_bestseller


[student@serverb my_bestseller]$ cp chapters/mystery_chapter[56].odf changes
[student@serverb my_bestseller]$ ls chapters
mystery_chapter3.odf mystery_chapter5.odf
mystery_chapter4.odf mystery_chapter6.odf
[student@serverb my_bestseller]$ ls changes
mystery_chapter5.odf mystery_chapter6.odf

10. Cambie su directorio actual al directorio changes y use el comando date +%F
con sustitución de comandos para copiar el archivo mystery_chapter5.odf
a un archivo nuevo que incluya la fecha completa. Use el formato de nombre
mystery_chapter5_YYYY-MM-DD.odf.
Al usar el reemplazo de comando con el comando date +%s, haga otra copia de
mystery_chapter5.odf y anexe la marca de tiempo actual (como el número de segundos
desde la era, 1970-01-01 00:00 UTC)para garantizar un nombre de archivo único.

[student@serverb my_bestseller]$ cd changes


[student@serverb changes]$ cp mystery_chapter5.odf \
mystery_chapter5_$(date +%F).odf
[student@serverb changes]$ cp mystery_chapter5.odf \
mystery_chapter5_$(date +%s).odf
[student@serverb changes]$ ls
mystery_chapter5_1646644424.odf mystery_chapter5.odf
mystery_chapter5_2022-03-07.odf mystery_chapter6.odf

11. Después de una revisión adicional, usted decide que no necesita los cambios en la trama.
Elimine el directorio changes.

100 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

De ser necesario, vaya al directorio changes y elimine todos los archivos del directorio. No
puede eliminar un directorio mientras sea el directorio de trabajo actual.
Pase al directorio principal del directorio changes. Intente eliminar el directorio vacío con el
comando rm sin la opción recursiva -r. Este intento debe fallar. Finalmente, use el comando
rmdir para eliminar el directorio vacío; esta acción se ejecuta correctamente.
Cuando finalicen las vacaciones, el directorio vacation ya no será necesario. Elimínelo
usando el comando rmcon la opción recursiva.
Una vez que haya finalizado, regrese al directorio de inicio del usuario student.

11.1. Elimine el directorio changes. Cambie al directorio principal del directorio changes
e intente eliminar el directorio vacío usando el comando rm sin la opción recursiva -r,
que debería fallar. Use el comando rmdir para eliminar el directorio vacío.

[student@serverb changes]$ rm mystery*


[student@serverb changes]$ cd ..
[student@serverb my_bestseller]$ rm changes
rm: cannot remove 'changes': Is a directory
[student@serverb my_bestseller]$ rmdir changes
[student@serverb my_bestseller]$ ls
chapters editor vacation

11.2. Elimine el directorio vacation usando el comando rm con la opción -r. Regrese al
directorio de inicio del usuario student.

[student@serverb my_bestseller]$ rm -r vacation


[student@serverb my_bestseller]$ ls
chapters editor
[student@serverb my_bestseller]$ cd
[student@serverb ~]$

12. Cree un enlace duro al archivo ~/Documents/project_plans/


season2_project_plan.odf denominado ~/Documents/backups/
season2_project_plan.odf.back. Un enlace duro evita la eliminación accidental
del archivo original y mantiene actualizado el archivo de respaldo a medida que cambia el
original.
Pista: Si el directorio ~/Documents/backups no existe, use el comando mkdir para
crearlo.

12.1. Cree un enlace duro al archivo ~/Documents/project_plans/


season2_project_plan.odf denominado ~/Documents/backups/
season2_project_plan.odf.back.

[student@serverb ~]$ mkdir ~/Documents/backups


[student@serverb ~]$ ln ~/Documents/project_plans/season2_project_plan.odf \
~/Documents/backups/season2_project_plan.odf.back
[student@serverb ~]$ ls -lR ~/Documents/
/home/student/Documents/:
total 0
drwxr-xr-x. 2 student student 43 Mar 7 04:18 backups
drwxr-xr-x. 4 student student 36 Mar 7 04:16 my_bestseller
drwxr-xr-x. 2 student student 70 Mar 7 03:50 project_plans

RH124-RHEL9.0-es-5-20230516 101
capítulo 3 | Gestionar archivos desde la línea de comandos

/home/student/Documents/backups:
total 0
-rw-r--r--. 2 student student 0 Mar 7 03:50 season2_project_plan.odf.back

/home/student/Documents/my_bestseller:
total 0
drwxr-xr-x. 2 student student 118 Mar 7 04:07 chapters
drwxr-xr-x. 2 student student 62 Mar 7 04:06 editor

/home/student/Documents/my_bestseller/chapters:
total 0
-rw-r--r--. 1 student student 0 Mar 7 03:56 mystery_chapter3.odf
-rw-r--r--. 1 student student 0 Mar 7 03:56 mystery_chapter4.odf
-rw-r--r--. 1 student student 0 Mar 7 03:56 mystery_chapter5.odf
-rw-r--r--. 1 student student 0 Mar 7 03:56 mystery_chapter6.odf

/home/student/Documents/my_bestseller/editor:
total 0
-rw-r--r--. 1 student student 0 Mar 7 03:56 mystery_chapter1.odf
-rw-r--r--. 1 student student 0 Mar 7 03:56 mystery_chapter2.odf

/home/student/Documents/project_plans:
total 0
-rw-r--r--. 1 student student 0 Mar 7 03:50 season1_project_plan.odf
-rw-r--r--. 2 student student 0 Mar 7 03:50 season2_project_plan.odf

Tenga en cuenta que el recuento de enlaces es 2 para los archivos


season2_project_plan.odf.back y season2_project_plan.odf.

12.2. Regrese al sistema workstation con el usuario student.

[student@serverb ~]$ exit


logout
Connection to serverb closed.
[student@workstation ~]$

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade files-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish files-review

Esto concluye la sección.

102 RH124-RHEL9.0-es-5-20230516
capítulo 3 | Gestionar archivos desde la línea de comandos

Resumen
• Los archivos de un sistema Linux se organizan en un árbol de directorios invertido individual, una
jerarquía de sistema de archivos.

• Las rutas absolutas comienzan con una barra inclinada (/) y especifican la ubicación de un
archivo en la jerarquía del sistema de archivos.

• Las rutas relativas no comienzan con un carácter de barra inclinada.

• Las rutas relativas especifican la ubicación de un archivo en relación con el directorio de trabajo
actual.

• Puede usar comandos en combinación con los caracteres especiales de punto (.), punto doble
(..) y tilde (~) para hacer referencia a la ubicación de un archivo en el sistema de archivos.

• Los comandos mkdir, rmdir, cp, mv y rm son comandos clave para gestionar archivos en
Linux.

• Los enlaces duros y los enlaces blandos son formas diferentes de hacer que varios nombres de
archivo apunten a los mismos datos.

• La shell Bash ofrece funciones de coincidencia de patrones, expansión y sustitución para


ayudarlo a ejecutar los comandos de manera eficiente.

RH124-RHEL9.0-es-5-20230516 103
104 RH124-RHEL9.0-es-5-20230516
capítulo 4

Obtener ayuda en Red Hat


Enterprise Linux
Meta Resolver problemas mediante el uso de sistemas
de ayuda locales.

Objetivos Encontrar información en las páginas de manual


del sistema Linux local.

Secciones Lectura de páginas del manual (y ejercicio guiado)

Trabajo de Obtener ayuda en Red Hat Enterprise Linux


laboratorio

RH124-RHEL9.0-es-5-20230516 105
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

Leer las páginas del manual

Objetivos
Encontrar información en las páginas de manual del sistema Linux local.

Introducción a las páginas del manual de Linux


Una fuente de documentación que generalmente está disponible en el sistema local son las
páginas del manual del sistema o las páginas del manual. Los paquetes de software envían estas
páginas para proporcionar documentación, y puede acceder a ellas desde la línea de comandos
con el comando man. Las páginas se almacenan en subdirectorios del directorio /usr/share/
man.

El histórico manual para programadores de Linux, del cual provienen las páginas del manual, se
convertía en varias secciones debido a su tamaño. Cada sección contiene información sobre un
tema en particular.

Secciones comunes del manual de Linux

Sección Tipo de contenido Descripción

1 Comandos del usuario Ejecutables y programas de la shell.

2 Llamadas al sistema Rutinas del kernel invocadas desde el espacio


del usuario

3 Funciones de la librería Proporcionadas por librerías de programas

4 Archivos especiales Como archivos de dispositivos

5 Formatos de archivo Para muchos archivos y estructuras de


configuración

6 Juegos y protectores de pantalla Sección histórica destinada a programas de


entretenimiento

7 Convenciones, estándares y Protocolos y sistemas de archivos


páginas varias

8 Comandos de administración del Tareas de mantenimiento


sistema y con privilegios

9 API del kernel de Linux Llamadas internas del kernel

Para diferenciar nombres de temas idénticos en secciones diferentes, las referencias de las
páginas del manual incluyen el número de la sección entre paréntesis después del tema. Por
ejemplo: en passwd(1) se describe el comando para cambiar contraseñas, mientras que en
passwd(5) se explica el formato de archivo /etc/passwd para almacenar cuentas de usuario
local.

106 RH124-RHEL9.0-es-5-20230516
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

Si desea leer páginas del manual específicas, use el comando man topic. Las páginas del manual
muestran el contenido de una en una. El comando man busca en las secciones del manual en orden
alfanumérico. Por ejemplo, man passwd muestra passwd(1) de manera predeterminada. Para
mostrar el tema de la página del manual de una sección específica, puede usar el comando man
section topic. Por ejemplo, man 5 passwd muestra passwd(5).

Los temas conocidos de administración del sistema se tratan en las secciones 1 (comandos del
usuario), 5 (formatos de archivos) y 8 (comandos administrativos). Los administradores que usan
ciertas herramientas para la solución de problemas también recurren a la sección 2 (llamadas
del sistema). Las secciones restantes generalmente se usan para consulta de programadores y
administración avanzada.

Navegue y busque páginas del manual


Es una habilidad de administración fundamental realizar búsquedas por temas de manera eficiente
y de navegar a través de páginas del manual. Si bien puede usar las herramientas de la GUI para
configurar los recursos comunes del sistema, usar la interfaz de línea de comandos es aún más
eficiente. Para navegar la línea de comandos con eficacia, deberá ser capaz de encontrar la
información que necesita en las páginas del manual.

En la siguiente tabla, se incluyen algunos comandos de navegación al visualizar páginas del


manual:

Navegar por las páginas del manual

Comando Resultado

Spacebar Avanzar (abajo) una pantalla.

PageDown Avanzar una pantalla.

PageUp Retroceder (arriba) una pantalla.

DownArrow Avanzar una línea.

UpArrow Retroceder una línea.

D Avanzar media pantalla.

U Retroceder media pantalla.

/string Buscar hacia delante una cadena en la página del manual.

N Repetir búsqueda anterior hacia delante en la página del manual.

Shift+N Repetir la búsqueda anterior más atrás en la página del manual.

G Ir al inicio de la página del manual.

Shift+G Ir al final de la página del manual.

Q Salir del manual y regresar al prompt de shell de comandos.

RH124-RHEL9.0-es-5-20230516 107
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

Importante
Puede usar expresiones regulares para buscar en páginas man. Si bien el texto
simple (como passwd) funciona según lo esperado, las expresiones regulares usan
metacaracteres (como $, *, . y ^) para lograr una coincidencia de patrón más
sofisticada. Por lo tanto, la realización de búsquedas con cadenas que incluyen
metacaracteres de expresión de programa, como make $$$, puede arrojar
resultados imprevistos.

Puede encontrar más información acerca de las expresiones regulares y la sintaxis


en el tema del manual regex(7).

Leer las páginas del manual


Las páginas del manual separan cada tema en varias partes. La mayoría de los temas usan los
mismos encabezados y siguen el mismo orden. Normalmente, un tema no presenta todos los
encabezados, porque no todos los encabezados se aplican a todos los temas.

Estos son algunos encabezados comunes:

Encabezados

Encabezado Descripción

NAME Nombre del sujeto, generalmente un comando o nombre de archivo,


una descripción breve

SYNOPSIS Resumen de la sintaxis del comando

DESCRIPTION Descripción que proporciona una comprensión básica del tema

OPTIONS Explicación de las opciones de ejecución del comando

EXAMPLES Ejemplos de cómo usar el comando, la función o el archivo

FILES Una lista de archivos y directorios relacionados con la página del


manual

SEE ALSO Información relacionada, normalmente otros temas de la página del


manual

BUGS Errores conocidos en el software

AUTHOR Información sobre las personas que han contribuido al desarrollo del
tema

Búsqueda de páginas del manual por palabra clave


Use el comando man, opción -k (equivalente al comando apropos) para buscar una palabra clave
en los títulos y descripciones de la página man. Como resultado, la búsqueda de palabras clave
muestra una lista de temas de páginas del manual con números de sección que coinciden con la
palabra clave. Por ejemplo, el siguiente comando busca páginas del manual con la palabra passwd:

108 RH124-RHEL9.0-es-5-20230516
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

[user@host ~]$ man -k passwd


chgpasswd (8) - update group passwords in batch mode
chpasswd (8) - update passwords in batch mode
fgetpwent_r (3) - get passwd file entry reentrantly
getpwent_r (3) - get passwd file entry reentrantly
...
passwd (1) - update user's authentication tokens
passwd (1ossl) - OpenSSL application commands
passwd (5) - password file
passwd2des (3) - RFS password encryption
...

La opción de comando man -K (mayúscula) busca la palabra clave en la página de texto completo,
no solo en los títulos y descripciones. Una búsqueda en texto completo emplea más recursos del
sistema y lleva más tiempo.

Con la búsqueda de páginas de texto completo, el comando man muestra la primera página
con una coincidencia. Presione Q para salir de esta primera página y el comando man muestra la
siguiente página.

En este ejemplo, man muestra cada coincidencia y le permite ver u omitir cada una.

[user@host ~]# man -K passwd


--Man-- next: cut(1p) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
Ctrl-D
--Man-- next: logname(1p) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
Ctrl-D
--Man-- next: sort(1p) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
Ctrl-D
--Man-- next: xargs(1) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
Ctrl-D
--Man-- next: chage(1) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
Ctrl-C

nota
Las búsquedas por palabra clave se basan en un índice generado con el comando
mandb(8), que se debe ejecutar como root.

El servicio man-db-cache-update ejecuta automáticamente el comando mandb


al instalar cualquier paquete con las páginas del manual.

Referencias
Páginas del manual: man(1), mandb(8), man-pages(7), less(1), intro(1),
intro(2), intro(5), intro(7) y intro(8)

RH124-RHEL9.0-es-5-20230516 109
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

Ejercicio Guiado

Leer las páginas del manual


En este ejercicio, practica cómo encontrar información relevante con las opciones y los
argumentos de man.

Resultados
• Usar el sistema de manual de Linux man para encontrar información útil mediante la
búsqueda y la navegación.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start help-manual

Instrucciones
1. En workstation, vea la página del manual gedit. Vea las opciones para editar un archivo
específico con gedit desde la línea de comandos.
Use una de las opciones de la página del manual gedit para abrir el archivo /home/
student/manual por medio de gedit con el cursor al final del archivo.

1.1. Visualice la página del manual gedit.

[student@workstation ~]$ man gedit


GEDIT(1) General Commands Manual GEDIT(1)
NAME
gedit - text editor for the GNOME Desktop

SYNOPSIS
gedit [OPTION...] [FILE...] [+LINE[:COLUMN]]
gedit [OPTION...] -
...output omitted...

1.2. En la página del manual gedit, vea las opciones para editar un archivo específico
desde la línea de comandos.

110 RH124-RHEL9.0-es-5-20230516
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

OPTIONS
...output omitted...
FILE Specifies the file to open when gedit starts.
...output omitted...
+LINE For the first file, go to the line specified by LINE (do not insert
a space between the "+" sign and the number). If LINE is missing, go to the last
line.
...output omitted...

Presione q para salir de la página del manual.

1.3. Use el comando gedit + para abrir el archivo manual. El número de línea que falta
junto a la opción + abre un archivo que se pasó como argumento con el cursor al final
de la última línea.

[student@workstation ~]$ gedit + manual


this is the first line
the quick brown fox just came over to greet the lazy poodle!

Confirme que el archivo se abre con el cursor al final de la última línea en el archivo.
Presione Ctrl+q para cerrar la aplicación.

2. Lea la página del manual su(1).


Tenga en cuenta que cuando se omite el argumento usuario, el comando su presupone que
el usuario es root. Si el comando su viene seguido por un solo guion (-), se inicia una shell
de inicio de sesión secundaria. Sin el guion, el comando su crea una shell de no inicio de
sesión, que coincide con el entorno actual del usuario.

[student@workstation ~]$ man 1 su


SU(1) User Commands SU(1)
NAME
su - run a command with substitute user and group ID

SYNOPSIS
su [options] [-] [user [argument...]]

DESCRIPTION
su allows to run commands with a substitute user and group ID.

When called with no user specified, su defaults to running an interactive


shell as root.
...output omitted...
OPTIONS
...output omitted...
-, -l, --login
Start the shell as a login shell with an environment similar to a real
login.
...output omitted...

RH124-RHEL9.0-es-5-20230516 111
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

nota
Las opciones separadas por coma en una sola línea, como -, -l y --login, todas
dan como resultado el mismo comportamiento.

Presione q para salir de la página del manual.

3. El comando man también tiene sus propias páginas de manual. Abra la página del manual
del comando man(1).

[student@workstation ~]$ man man


MAN(1) Manual pager utils MAN(1)

NAME
man - an interface to the on-line reference manuals
...output omitted...
DESCRIPTION
man is the system's manual pager. Each page argument given to man is
normally the name of a program, utility or function. The manual page
associated with each of these arguments is then found and displayed.
A section, if provided, will direct man to look only in that section
of the manual.
...output omitted...

Presione q para salir de la página del manual.

4. El directorio /usr/share/man contiene todas las páginas del manual. Localice las páginas
de manual, el código binario y el código fuente para la utilidad passwd con el comando
whereis. Verifique que el directorio /usr/share/man contenga las páginas del manual
para la utilidad passwd.

[student@workstation ~]$ whereis passwd


passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1ossl.gz /usr/
share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz

5. Use el comando man -k zip para buscar la página del manual con la información
detallada sobre un archivo ZIP.

[student@workstation ~]$ man -k zip


...output omitted...
zipinfo (1) - list detailed information about a ZIP archive
zipnote (1) - write the comments in zipfile to stdout, edit comments and
rename files in zipfile
zipsplit (1) - split a zipfile into smaller zipfiles

112 RH124-RHEL9.0-es-5-20230516
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

6. Use el comando man -k boot para mostrar la página del manual que contiene una lista de
los parámetros que se pueden pasar al kernel durante el proceso de arranque.

[student@workstation ~]$ man -k boot


binfmt.d (5) - Configure additional binary formats for executables at boot
bootparam (7) - introduction to boot time parameters of the Linux kernel
bootup (7) - System bootup process
...output omitted...

7. Use el comando man -k ext4 para encontrar el comando que se usa para ajustar los
parámetros del sistema de archivos ext4.

[student@workstation ~]$ man -k ext4


...output omitted...
resize2fs (8) - ext2/ext3/ext4 file system resizer
tune2fs (8) - adjust tunable filesystem parameters on ext2/ext3/ext4
filesystems

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish help-manual

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 113
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

Trabajo de laboratorio

Obtener ayuda en Red Hat Enterprise


Linux
En este trabajo de laboratorio, buscará documentación para ayudarlo a completar las tareas.

Resultados
• Encontrar la información relevante para los comandos buscando en las páginas del
manual.
• Aprender opciones nuevas para comandos de documentación que se usan con frecuencia.
• Usar herramientas adecuadas para ver e imprimir documentación y otros archivos que no
son texto.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start help-review

Instrucciones
1. En la máquina workstation, determine cómo preparar una página del manual para
su impresión. Específicamente, determine qué formato o lenguaje de representación
predeterminado se usa para imprimir.
2. Cree un archivo de salida con formato PostScript de la página del manual passwd. Invoque el
archivo passwd.ps y colóquelo en el directorio de inicio del usuario student. Determine el
formato del archivo. Investigue el contenido del archivo passwd.ps con el comando less.

nota
Dado que necesita guardar la salida del comando man en un archivo, puede usar el
símbolo > que redirige la salida estándar a un archivo.

Como ejemplo, el siguiente comando enumera los nombres de archivo regulares del
directorio de inicio en un archivo.

[student@workstation ~]$ ls > /tmp/my-file-names

Este comando se enseña en más detalle en un capítulo posterior.

3. Mediante el uso de las páginas del manual, busque los comandos que puede usar para ver e
imprimir archivos PostScript.

114 RH124-RHEL9.0-es-5-20230516
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

4. Aprenda a usar el visor de evince(1) en modo de vista previa. Además, determine la


manera de abrir un documento para que se inicie en una página específica. Abra su archivo
PostScript usando evince tres veces: primero usando el modo predeterminado, luego con la
opción de modo de vista previa y, finalmente, para comenzar en la página 3. Cierre el archivo
del documento cuando termine.
5. Usando las páginas del manual, busque lp(1) para determinar cómo imprimir cualquier
documento a partir de una página específica. Sin ingresar ningún comando (a falta de
impresora), aprenda la sintaxis, en un comando, para imprimir solo las páginas 2 y 3 de su
archivo en formato PostScript.
6. Use el explorador Firefox para abrir el directorio de páginas del manual del sistema (/
usr/share/doc) y navegue por el subdirectorio de paquetes man-db. Vea los manuales
provistos. Después de terminar de revisar los manuales man-db, localice y navegue hasta el
subdirectorio del paquetekexec-tools. Vea el archivo kexec-kdump-howto.txt, en el
que se describen configuraciones del sistema importantes almacenadas en el directorio /
etc/sysconfig.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade help-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish help-review

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 115
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

Solución

Obtener ayuda en Red Hat Enterprise


Linux
En este trabajo de laboratorio, buscará documentación para ayudarlo a completar las tareas.

Resultados
• Encontrar la información relevante para los comandos buscando en las páginas del
manual.
• Aprender opciones nuevas para comandos de documentación que se usan con frecuencia.
• Usar herramientas adecuadas para ver e imprimir documentación y otros archivos que no
son texto.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start help-review

Instrucciones
1. En la máquina workstation, determine cómo preparar una página del manual para
su impresión. Específicamente, determine qué formato o lenguaje de representación
predeterminado se usa para imprimir.

1.1. Use el comando man man para determinar cómo preparar una página del manual para
su impresión.

[student@worksation ~]$ man man


...output omitted...
man -t bash | lpr -Pps
Format the manual page for bash into the default troff or groff format
and pipe it to the printer named ps. The default output for groff
is usually PostScript. man --help should advise as to which processor
is bound to the -t option.
...output omitted...

Presione q para salir de la página del manual.

nota
El comando man con la opción -t prepara una página del manual para la impresión,
con PostScript predeterminado.

116 RH124-RHEL9.0-es-5-20230516
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

2. Cree un archivo de salida con formato PostScript de la página del manual passwd. Invoque el
archivo passwd.ps y colóquelo en el directorio de inicio del usuario student. Determine el
formato del archivo. Investigue el contenido del archivo passwd.ps con el comando less.

nota
Dado que necesita guardar la salida del comando man en un archivo, puede usar el
símbolo > que redirige la salida estándar a un archivo.

Como ejemplo, el siguiente comando enumera los nombres de archivo regulares del
directorio de inicio en un archivo.

[student@workstation ~]$ ls > /tmp/my-file-names

Este comando se enseña en más detalle en un capítulo posterior.

2.1. Use el comando man -t para crear un archivo con formato de la página del manual
passwd.

[student@workstation ~]$ man -t passwd > passwd.ps


[student@workstation ~]$ ls -al
...output omitted...
-rw-r--r--. 1 student student 20168 Mar 8 09:02 passwd.ps
...output omitted...

2.2. Use el comando file para determinar el formato del archivo.

[student@workstation ~]$ file /home/student/passwd.ps


/home/student/passwd.ps: PostScript document text conforming DSC level 3.0

2.3. Use el comando less para ver el archivo /home/student/passwd.ps.

[student@workstation ~]$ less /home/student/passwd.ps


%!PS-Adobe-3.0
%%Creator: groff version 1.22.3
%%CreationDate: Tue Feb 26 11:14:40 2019
%%DocumentNeededResources: font Times-Roman
%%+ font Times-Bold
%%+ font Times-Italic
%%+ font Symbol
%%DocumentSuppliedResources: procset grops 1.22 3
...output omitted...

nota
El resultado de los estados file afirma que el archivo está en formato PostScript,
y usted lo ha confirmado al ver su contenido. Observe las líneas del encabezado de
información de PostScript. Use q para salir del comando less.

3. Mediante el uso de las páginas del manual, busque los comandos que puede usar para ver e
imprimir archivos PostScript.

RH124-RHEL9.0-es-5-20230516 117
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

3.1. Busque en las páginas del manual para obtener información acerca de los archivos
PostScript. Use la opción -k para este propósito.

[student@workstation ~]# man -k postscript viewer


enscript (1) - convert text files to PostScript, HTML, RTF, ANSI, and
overstrikes
eps2eps (1) - Ghostscript PostScript "distiller"
evince (1) - GNOME document viewer
evince-previewer (1) - show a printing preview of PostScript and PDF documents
evince-thumbnailer (1) - create png thumbnails from PostScript and PDF documents
gcm-viewer (1) - GNOME Color Manager Profile Viewer Tool
...output omitted...

nota
Si usa varias palabras con la opción -k, se encuentran páginas del manual que
coinciden con cualquier palabra; como las que contienen "postscript" o "visor" en
sus descripciones. Observe los comandos evince(1) en la salida.

4. Aprenda a usar el visor de evince(1) en modo de vista previa. Además, determine la


manera de abrir un documento para que se inicie en una página específica. Abra su archivo
PostScript usando evince tres veces: primero usando el modo predeterminado, luego con la
opción de modo de vista previa y, finalmente, para comenzar en la página 3. Cierre el archivo
del documento cuando termine.

4.1. Use el comando man evince para aprender a usar el visor en modo de vista previa.

[student@workstation ~]$ man evince


...output omitted...
-i, --page-index=NUMBER
Open the document on the page with the specified page index (this is
the exact page number, not a page label).
...output omitted...
-w, --preview
Run evince as a previewer.
...output omitted...

Presione q para salir de la página del manual.

nota
La opción -w (o --preview) abre evince en modo de vista previa. La opción -i
abre evince en la página de inicio especificada.

4.2. Use el comando evince para abrir el archivo /home/student/passwd.ps.

[student@workstation ~]$ evince /home/student/passwd.ps

4.3. Use el comando evince -w /home/student/passwd.ps para abrir el archivo en


modo de vista previa.

[student@workstation ~]$ evince -w /home/student/passwd.ps

118 RH124-RHEL9.0-es-5-20230516
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

4.4. Use el comando evince -i 3 /home/student/passwd.ps para abrir el archivo en


la página 3.

[student@workstation ~]$ evince -i 3 /home/student/passwd.ps

nota
Cuando el modo evince normal permite una visualización en pantalla completa
y con estilo de presentación, el modo de vista previa de evince resulta útil para
tareas rápidas de exploración e impresión. Observe el print icon en la parte superior.

5. Usando las páginas del manual, busque lp(1) para determinar cómo imprimir cualquier
documento a partir de una página específica. Sin ingresar ningún comando (a falta de
impresora), aprenda la sintaxis, en un comando, para imprimir solo las páginas 2 y 3 de su
archivo en formato PostScript.

5.1. Use el comando man lp para determinar cómo imprimir páginas específicas de un
documento.

[student@workstation ~]$ man lp


...output omitted...
-P page-list
Specifies which pages to print in the document. The list can contain
a list of numbers and ranges (-) separated by commas, e.g., "1,3-5, 16". The page
numbers refer to the output pages and not the document's original pages - options
like "number-up" can affect the numbering of the pages.
...output omitted...

Presione q para salir de la página del manual.

nota
De lp(1), aprende que la opción -P especifica la lista de páginas para imprimir en el
documento. El comando lp envía la solicitud de impresión a la cola de la impresora
predeterminada y envía solo el rango de páginas que empieza en 2 y termina en 3.
Por lo tanto, una respuesta válida es lp passwd.ps -P 2-3.

6. Use el explorador Firefox para abrir el directorio de páginas del manual del sistema (/
usr/share/doc) y navegue por el subdirectorio de paquetes man-db. Vea los manuales
provistos. Después de terminar de revisar los manuales man-db, localice y navegue hasta el
subdirectorio del paquetekexec-tools. Vea el archivo kexec-kdump-howto.txt, en el
que se describen configuraciones del sistema importantes almacenadas en el directorio /
etc/sysconfig.

6.1. Use firefox /usr/share/doc para ver la documentación del sistema. Navegue al
subdirectorio man-db. Haga clic en los manuales para verlos.

[student@workstation ~]$ firefox /usr/share/doc

RH124-RHEL9.0-es-5-20230516 119
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

nota
Puede crear marcadores para los directorios de uso frecuente. Después de navegar
por al directorio man-db, haga clic para abrir y ver la versión del texto del manual
y, luego, ciérrelo. Haga clic para abrir la versión de PostScript. Como se observó
anteriormente, evince es el visor predeterminado del sistema para documentos en
formato PDF y PostScript. Cuando termine, cierre el visor evince.

6.2. En el explorador Firefox, localice el subdirectorio de paquetes kexec-tools y vea el


archivo kexec-kdump-howto.txt. En este archivo se describen configuraciones del
sistema importantes almacenadas en el directorio /etc/sysconfig.
Cierre el documento y Firefox cuando termine.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade help-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish help-review

Esto concluye la sección.

120 RH124-RHEL9.0-es-5-20230516
capítulo 4 | Obtener ayuda en Red Hat Enterprise Linux

Resumen
• Use el comando man para ver las páginas del manual y mostrar información sobre los
componentes de un sistema Linux, como archivos, comandos y funciones.

• Por convención, cuando se hace referencia a una página del manual, el nombre de una página va
seguido de su número de sección entre paréntesis.

• Puede usar expresiones regulares para buscar contenido en páginas del manual.

RH124-RHEL9.0-es-5-20230516 121
122 RH124-RHEL9.0-es-5-20230516
capítulo 5

Crear, ver y editar archivos de


texto
Meta Crear, visualizar y editar archivos de texto desde
una salida de comando o en un editor de texto.

Objetivos • Guardar la salida o los errores en un archivo con


la redirección de shell y procesar la salida de
comando a través de varios programas de línea
de comandos con pipes.
• Crear y editar archivos de texto desde la línea
de comandos con el editor vim.
• Definir las variables de shell para facilitar la
ejecución de comandos, y editar los scripts de
arranque de Bash para configurar las variables
de shell y del entorno a fin de modificar el
comportamiento de la shell y de los programas
ejecutados desde la shell.

Secciones • Redireccionamiento de la salida a un archivo o


programa (y cuestionario)
• Edición de archivos de texto desde el prompt
de shell (y ejercicio guiado)
• Modificación del entorno de shell (y ejercicio
guiado)

Trabajo de Crear, ver y editar archivos de texto


laboratorio

RH124-RHEL9.0-es-5-20230516 123
capítulo 5 | Crear, ver y editar archivos de texto

Redireccionamiento de la salida a un
archivo o programa

Objetivos
Guardar la salida o los errores en un archivo con la redirección de shell y procesar la salida de
comando a través de varios programas de línea de comandos con pipes.

Entrada estándar, salida estándar y error estándar


Un programa o proceso en ejecución lee la entrada y escribe la salida. Cuando se ejecuta un
comando desde el prompt de shell, normalmente lee su entrada desde el teclado y envía su salida
a su ventana de terminal.

Un proceso usa canales numerados denominados descriptores de archivo para recibir entradas y
enviar salidas. Todos los procesos comienzan con al menos tres descriptores de archivo. Entrada
estándar(canal 0) lee la entrada desde el teclado. Salida estándar(canal 1) envía la salida normal al
terminal. Error estándar(canal 2) envía mensajes de error al terminal.

Si un programa abre conexiones independientes para otros archivos, puede usar descriptores de
archivo con números superiores.

Figura 5.1: Canales de E/S de un proceso (descriptores de archivo)

En la siguiente tabla, se resume la información acerca de los descriptores de archivos:

Canales (descriptores de archivo)

Número Nombre de canal Descripción Conexión Uso


predeterminada

0 stdin Entrada estándar Teclado Solo lectura

1 stdout Salida estándar Terminal Solo escritura

2 stderr Error estándar Terminal Solo escritura

Más de 3 filename Otros archivos Ninguna Lectura, escritura


o ambas

124 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

Redireccionamiento de la salida a un archivo


Redireccionamiento de entrada/salida (E/S) cambia la forma en la que el proceso obtiene su
entrada o salida. En lugar de obtener la entrada del teclado, o enviar la salida y los errores al
terminal, el proceso puede leer o escribir en los archivos. Con la redirección, puede guardar los
mensajes en un archivo en lugar de mostrar la salida en el terminal. Alternativamente, puede usar
el redireccionamiento para descartar la salida o los errores, de manera que no se muestren en el
terminal ni se guarden.

Puede redireccionar un proceso stdout para suprimir la salida de un proceso y evitar que
aparezca en el terminal. Si redirige stdout a un archivo y el archivo no existe, se crea el archivo.
Si el archivo existe y el redireccionamiento no es uno que se agregue al archivo, el contenido del
archivo se sobrescribirá con el redireccionamiento. Para descartar la salida de un proceso, puede
redirigir al archivo especial vacío /dev/null que descarta la salida del canal que se redirige a él.

Como se puede ver en la siguiente tabla, el redireccionamiento únicamente stdout no evita que
aparezcan los mensajes de error stderr en el terminal.

Operadores de redireccionamiento de salida

Uso Explicación Ayuda visual

> file Redirigir stdout para


sobrescribir un archivo.

>> file Redirigir stdout para


agregar a un archivo.

2> file Redirigir stderr para


sobrescribir un archivo.

2> /dev/null Descartar mensajes de


error stderr mediante el
redireccionamiento a /dev/
null.

> file 2>&1 Redirigir stdout y stderr


para sobrescribir el mismo
&> file archivo.

>> file 2>&1 Redirigir stdout y stderr


para agregar al mismo
&>> file archivo.

RH124-RHEL9.0-es-5-20230516 125
capítulo 5 | Crear, ver y editar archivos de texto

Importante
El orden de las operaciones de redireccionamiento es importante. La siguiente
secuencia redirige la salida estándar al archivo output.log y, luego, redirige el
error estándar al mismo lugar que la salida estándar (output.log).

> output.log 2>&1

La siguiente secuencia redirige en el orden opuesto. Esta secuencia redirige los


mensajes de error estándar al lugar predeterminado para la salida estándar (la
ventana de terminal, de modo que no hay cambios) y luego redirige solo la salida
estándar al archivo output.log.

2>&1 > output.log

Por esta razón, algunas personas prefieren usar los operadores de


redireccionamiento fusionados:

• &> output.log en lugar de > output.log 2>&1


• &>> output.log en lugar de >> output.log 2>&1 (en Bash 4 o RHEL 6 y
posteriores)

Sin embargo, los administradores de sistemas y programadores prefieren evitar


los operadores de redireccionamiento fusionados más nuevos al usar shells
alternativas con bash (conocidas como shells compatibles con Bourne) para
los scripts de comandos. Estos nuevos operadores de redireccionamiento no
están estandarizados ni implementados en todas aquellas shells y tienen otras
limitaciones.

Ejemplos de redireccionamiento de salidas


Use el redireccionamiento para simplificar muchas tareas de administración de rutina. Use la tabla
anterior como ayuda y analice los siguientes ejemplos:

Guarde una marca de tiempo en el archivo /tmp/saved-timestamp para su posterior consulta.

[user@host ~]$ date > /tmp/saved-timestamp

Copie las últimas 100 líneas del archivo /var/log/secure a otro archivo /tmp/last-100-
log-secure.

[user@host ~]$ tail -n 100 /var/log/secure > /tmp/last-100-log-secure

Concatenar los cuatro archivos step en un archivo en el directorio tmp.

[user@host ~]$ cat step1.sh step2.log step3 step4 > /tmp/all-four-steps-in-one

Enumere los nombres de archivo regulares y ocultos del directorio de inicio y guarde la salida en el
archivo my-file-names.

[user@host ~]$ ls -a > my-file-names

126 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

Agregue una línea al archivo existente /tmp/many-lines-of-information.

[user@host ~]$ echo "new line of information" >> /tmp/many-lines-of-information

Los siguientes comandos generan mensajes de error porque algunos directorios del sistema son
inaccesibles para los usuarios normales. Observe cómo se redirigen los mensajes de error.

Redirija los errores desde el comando find al archivo /tmp/errors al visualizar la salida de un
comando normal en el terminal.

[user@host ~]$ find /etc -name passwd 2> /tmp/errors

Guarde la salida de un proceso en el archivo /tmp/output y los mensajes de error en el archivo /


tmp/errors.

[user@host ~]$ find /etc -name passwd > /tmp/output 2> /tmp/errors

Guarde la salida de un proceso en el archivo /tmp/output y descarte los mensajes de error.

[user@host ~]$ find /etc -name passwd > /tmp/output 2> /dev/null

Almacene la salida y los errores generados en forma conjunta en el archivo /tmp/all-message-


output.

[user@host ~]$ find /etc -name passwd &> /tmp/all-message-output

Adjunte la salida y los errores generados en el archivo /tmp/all-message-output.

[user@host ~]$ find /etc -name passwd >> /tmp/all-message-output 2>&1

Construcción de tuberías
Una tubería es una secuencia de uno o más comandos separados por el carácter de barra vertical
(|). Una tubería conecta la salida estándar del primer comando con la entrada estándar del
siguiente comando.

Figura 5.8: Tubería de E/S de proceso

Use tuberías para manipular y asignar un formato a la salida de un proceso por otros procesos
antes de su salida al terminal. Imagine que los datos "fluyen" a través de la tubería de un proceso a
otro, y que se alteran levemente por cada comando de la tubería por la que pasan.

RH124-RHEL9.0-es-5-20230516 127
capítulo 5 | Crear, ver y editar archivos de texto

nota
Las tuberías y el redireccionamiento de E/S manipulan la salida y la entrada
estándar. Las tuberías envían la salida estándar de un proceso a la entrada estándar
de otro proceso. El redireccionamiento envía la salida estándar a archivos o recibe la
entrada estándar de estos.

Ejemplos de tuberías
En la siguiente lista, se muestran algunos ejemplos de tuberías:

Redireccione la salida del comando ls al comando less para mostrarla en la terminal de a una
pantalla por vez.

[user@host ~]$ ls -l /usr/bin | less

Redireccione la salida del comando ls al comando wc -l, que cuenta la cantidad de líneas
recibidas de ls y las imprime en la terminal.

[user@host ~]$ ls | wc -l

Redirija la salida del comando ls -t al comando head para mostrar las primeras 10 líneas, con el
resultado final redirigido al archivo /tmp/first-ten-changed-files.

[user@host ~]$ ls -t | head -n 10 > /tmp/first-ten-changed-files

Tuberías, redirección y anexión a un archivo


Cuando el redireccionamiento se combina con una tubería, la shell configura toda la tubería
primero y luego redirige la entrada/salida. Si usa el redireccionamiento de la salida se usa en el
medio de una tubería, la salida irá al archivo y no al siguiente comando de la tubería.

En el siguiente ejemplo, la salida del comando ls irá al archivo /tmp/saved-output y el


comando less no mostrará nada en el terminal.

[user@host ~]$ ls > /tmp/saved-output | less

El comando tee supera esta limitación. En una tubería, tee copia la entrada estándar a la salida
estándar y además redirige la salida estándar a los archivos asignados como argumentos para
el comando. Si se imaginan los datos como agua que fluye a través de una tubería, se puede
visualizar tee como una junta en "T" en la tubería que envía la salida en dos direcciones.

Figura 5.9: Tubería de E/S de proceso con tee

128 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

Ejemplos de tuberías que usan el comando en T


En el siguiente ejemplo, se redirige la salida del comando ls al archivo /tmp/saved-output y se
la pasa al comando less, para que se muestre en el terminal de a una pantalla por vez.

[user@host ~]$ ls -l | tee /tmp/saved-output | less

Si usa el comando tee al final de una tubería, el terminal muestra la salida de los comandos en la
tubería y la guarda en un archivo al mismo tiempo.

[user@host ~]$ ls -t | head -n 10 | tee /tmp/ten-last-changed-files

Use el comando tee con la opción -a para anexar el contenido a un archivo en lugar de
sobrescribirlo.

[user@host ~]$ ls -l | tee -a /tmp/append-files

Importante
Puede redirigir el error estándar por una tubería, pero no puede usar los operadores
de redireccionamiento fusionados (&> y &>>). En el siguiente ejemplo, se muestra la
manera correcta de redirigir la salida y el error estándares a través de una tubería:

[user@host ~]$ find / -name passwd 2>&1 | less

Referencias
info bash (The GNU Bash Reference Manual)

• Sección 3.2.3: Tuberías

• Sección 3.6: Redireccionamientos

info coreutils 'tee invocation' (The GNU coreutils Manual)

• Sección 17.1: Redireccionamiento de la salida a varios archivos o procesos

Páginas del manual: bash(1), cat(1), head(1), less(1), mail(1), tee(1), tty(1),
wc(1)

RH124-RHEL9.0-es-5-20230516 129
capítulo 5 | Crear, ver y editar archivos de texto

Cuestionario

Redireccionamiento de la salida a un
archivo o programa
Elija la respuesta correcta para las siguientes preguntas:

1. ¿Qué operador de redirección de salida muestra la salida a un terminal y descarta todos


los mensajes de error?
a. &> file
b. 2> &> file
c. 2> /dev/null
d. 1> /dev/null

2. ¿Qué operador de redireccionamiento de salida envía la salida a un archivo y envía los


errores a un archivo diferente?
a. > file 2> file2
b. > file 1> file2
c. > file &2> file2
d. | tee file

3. ¿Qué operador de redireccionamiento de salida envía tanto la salida como los errores a
un archivo, lo crea o sobrescribe su contenido?
a. | tee file
b. 2 &> file
c. 1 &> file
d. &> file

4. ¿Qué operador de redirección de salida envía la salida y los errores al mismo archivo y
conserva el contenido del archivo si existe?
a. > file 2> file2
b. &> file
c. >> file 2>&1
d. >> file 1>&1

5. ¿Qué operador de redireccionamiento de salida descarta todos los mensajes que


normalmente se envían al terminal?
a. > file 2> file2
b. &> /dev/null
c. &> /dev/null 2> file
d. &> file

130 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

6. ¿Qué operador de redireccionamiento de salida envía la salida tanto a la pantalla como


a un archivo al mismo tiempo?
a. &> /dev/null
b. > file 2> file2
c. | tee file
d. | < file

7. ¿Qué operador de redireccionamiento de salida guarda la salida en un archivo y


descarta todos los mensajes de error?
a. &> file
b. | tee file 2> /dev/null
c. > file 1> /dev/null
d. > file 2> /dev/null

RH124-RHEL9.0-es-5-20230516 131
capítulo 5 | Crear, ver y editar archivos de texto

Solución

Redireccionamiento de la salida a un
archivo o programa
Elija la respuesta correcta para las siguientes preguntas:

1. ¿Qué operador de redirección de salida muestra la salida a un terminal y descarta todos


los mensajes de error?
a. &> file
b. 2> &> file
c. 2> /dev/null
d. 1> /dev/null

2. ¿Qué operador de redireccionamiento de salida envía la salida a un archivo y envía los


errores a un archivo diferente?
a. > file 2> file2
b. > file 1> file2
c. > file &2> file2
d. | tee file

3. ¿Qué operador de redireccionamiento de salida envía tanto la salida como los errores a
un archivo, lo crea o sobrescribe su contenido?
a. | tee file
b. 2 &> file
c. 1 &> file
d. &> file

4. ¿Qué operador de redirección de salida envía la salida y los errores al mismo archivo y
conserva el contenido del archivo si existe?
a. > file 2> file2
b. &> file
c. >> file 2>&1
d. >> file 1>&1

5. ¿Qué operador de redireccionamiento de salida descarta todos los mensajes que


normalmente se envían al terminal?
a. > file 2> file2
b. &> /dev/null
c. &> /dev/null 2> file
d. &> file

132 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

6. ¿Qué operador de redireccionamiento de salida envía la salida tanto a la pantalla como


a un archivo al mismo tiempo?
a. &> /dev/null
b. > file 2> file2
c. | tee file
d. | < file

7. ¿Qué operador de redireccionamiento de salida guarda la salida en un archivo y


descarta todos los mensajes de error?
a. &> file
b. | tee file 2> /dev/null
c. > file 1> /dev/null
d. > file 2> /dev/null

RH124-RHEL9.0-es-5-20230516 133
capítulo 5 | Crear, ver y editar archivos de texto

Edición de archivos de texto desde el


prompt de shell

Objetivos
Crear y editar archivos de texto desde la línea de comandos con el editor vim.

Editar archivos con Vim


Un principio fundamental de diseño de Linux es que la configuración y la información se
almacenan en archivos basados en texto. Estos archivos siguen diversas estructuras, como listas
de configuraciones, formatos tipo INI, XML o YAML estructurados, etc. La ventaja de almacenar
archivos en una estructura basada en texto es que se pueden editar con cualquier editor de texto.

Vim es una versión mejorada del editor vi, que se distribuye con los sistemas Linux y UNIX. Vim es
un editor altamente configurable y eficaz que ofrece edición en pantalla partida, formateo de color
y resaltado para la edición de texto.

Ventajas del editor Vim


Cuando un sistema usa un prompt de shell de solo texto, debe saber cómo usar al menos un
editor de texto para editar archivos. Así, puede editar archivos de configuración basados en texto
desde una ventana de terminal o desde inicios de sesión remotos a través del comando ssh o
de la consola web. Tampoco necesitará acceso a un escritorio gráfico para editar archivos en un
servidor, y es posible que ese servidor no necesite ejecutar un entorno de escritorio gráfico.

La razón clave para aprender a usar Vim es que casi siempre se instala de manera predeterminada
en un servidor para editar archivos basados en texto. La Interfaz de sistema operativo portátil o
estándar POSIX especificaba el editor vi en Linux, y muchos otros sistemas operativos similares a
UNIX hacen lo mismo.

Además, Vim se usa a menudo como la implementación de vi en otros sistemas operativos o


distribuciones comunes. Por ejemplo, macOS actualmente incluye una instalación ligera de Vim de
forma predeterminada. Por lo tanto, las habilidades de Vim que se aprenden para Linux también
pueden resultar útiles en otros lugares.

Introducción a Vim
Puede instalar el editor Vim en Red Hat Enterprise Linux con cualquiera de los dos paquetes.
Estos dos paquetes proporcionan diferentes funciones y comandos de Vim para editar archivos
basados en texto.

Con el paquete vim-minimal, puede instalar el editor vi con funciones centrales. Esta es una
instalación muy ligera que incluye solo el conjunto de características centrales y el comando básico
vi. Puede abrir un archivo para editarlo con el comando vi:

[user@host ~]$ vi filename

De manera alternativa, puede usar el paquete vim-enhanced para instalar el editor de Vim. Este
paquete proporciona un conjunto de características mucho más completo, un sistema de ayuda en
línea, y un programa tutorial. Use el comando vim para iniciar Vim en este modo mejorado:

134 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

[user@host ~]$ vim filename

Las funciones centrales del editor Vim están disponibles en ambos comandos.

Si vim-enhanced está instalado, se configura un alias de shell para que si los usuarios normales
ejecutan el comando vi, obtienen automáticamente el comando vim en su lugar. Este alias no
se aplica al usuario root y otros usuarios con UID por debajo de 200 (que usan los servicios del
sistema).

Si vim-enhanced está instalado y un usuario regular desea usar el comando vi, es posible que
tenga que usar el comando \vi para anular el alias temporalmente. Puede usar \vi --version
y vim --version para comparar los conjuntos de características de los dos comandos.

Modos de operación de Vim


El editor Vim ofrece diversos modos de operación, como el modo de comando, el modo de
comando extendido, el modo de edición y el modo visual. Como usuario de Vim, siempre verifique
el modo actual, ya que el efecto de las pulsaciones de teclas varía entre los modos.

Figura 5.10: Cambio entre modos de Vim

Cuando se abre Vim por primera vez, arranca en el modo de comandos, usado para navegar, cortar
y pegar, y otro tipo de modificación de texto. Al presionar la tecla requerida se accede a funciones
de edición específicas.

• Una pulsación de la tecla i ingresa al modo de inserción, en el cual todo el texto ingresado se
convierte en contenido de archivo. Al presionar Esc se vuelve al modo comando.

• Al pulsar la tecla v se ingresa al modo visual, en el cual se pueden seleccionar varios caracteres
para la manipulación de texto. Use Shift+V para líneas múltiples y Ctrl+V para seleccionar en
bloque. Para salir del modo visual, use las teclas v, Shift+V o Ctrl+V.

• Al pulsar la tecla : se inicia el modo de comandos ampliado para tareas como la escritura del
archivo (para guardarlo) y la salida del editor Vim.

RH124-RHEL9.0-es-5-20230516 135
capítulo 5 | Crear, ver y editar archivos de texto

nota
Si no está seguro del modo que Vim está usando, presione Esc un par de veces
para volver al modo de comandos. Es seguro presionar la tecla Esc en modo
comando repetidamente.

Flujo de trabajo mínimo y básico de Vim


Vim tiene pulsaciones de teclas eficaces, coordinadas para tareas de edición avanzadas. Aunque
se las considera beneficiosas con la práctica, las capacidades de Vim pueden abrumar a los nuevos
usuarios.

Red Hat recomienda aprender las siguientes teclas y comandos de Vim:

• La tecla u deshace la edición más reciente.


• La tecla x borra un solo carácter.
• El comando :w escribe (guarda) el archivo y permanece en el modo de comandos para seguir
editando.
• El comando :wq escribe (guarda) el archivo y sale de Vim.
• El comando :q! sale de Vim y descarta todos los cambios que se realizaron al archivo desde la
última escritura.

Aprender estos comandos ayuda a un usuario de Vim a realizar cualquier tarea de edición.

Reorganización de texto existente


En Vim, puede tirar y colocar (copiar y pegar) usando los caracteres de comando y y p. Coloque
el cursor en el primer carácter que se seleccionará; luego, ingrese al modo visual. Use las teclas de
fechas para expandir la selección visual. Cuando esté listo, presione y para extraer la selección en
la memoria. Coloque el cursor en la nueva ubicación y, luego, presione p para colocar la selección
en la posición del cursor.

Modo visual en Vim


El modo visual es útil para resaltar y manipular texto en diferentes líneas y columnas. Puede
ingresar modos visuales en Vim usando las siguientes combinaciones de teclas.

• Modo de caracteres: v
• Modo de línea: Shift+v
• Modo de bloques: Ctrl+v

El modo de caracteres resalta oraciones en un bloque de texto. La palabra VISUAL aparece en


la parte inferior de la pantalla. Presione v para entrar en el modo de caracteres visuales. Con
Shift+v ingresa en el modo de líneas. En la parte inferior de la pantalla aparecerá VISUAL LINE.

El modo de bloques visuales es ideal para manipular archivos de datos. Presione la tecla Ctrl+v
para ingresar al bloque visual desde el cursor. VISUAL BLOCK aparece en la parte inferior de la
pantalla. Use las teclas de flecha para resaltar la sección que desea cambiar.

136 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

nota
Primero, tómese el tiempo para familiarizarse con las capacidades básicas de Vim.
Luego, amplíe su vocabulario de Vim aprendiendo más pulsaciones de teclas de
Vim.

El ejercicio para esta sección usará el comando vimtutor. Este tutorial, del
paquete vim-enhanced, es una excelente manera de aprender las funciones
centrales de Vim.

Archivos de configuración de Vim


Los archivos de configuración /etc/vimrc y ~/.vimrc alteran el comportamiento del editor
vim para todo el sistema o un usuario específico, respectivamente. Dentro de estos archivos
de configuración, puede especificar el comportamiento, como el espaciado de tabulación
predeterminado, el resaltado de sintaxis, los esquemas de color y más. La modificación del
comportamiento del editor vim es particularmente útil cuando se trabaja con lenguajes como
YAML, que tienen requisitos de sintaxis estrictos. Considere el siguiente archivo ~/.vimrc, que
establece la tabulación predeterminada (indicada por los caracteres ts) en dos espacios al editar
archivos YAML. El archivo también incluye el parámetro set number para mostrar los números de
línea mientras se editan todos los archivos.

[user@host ~]$ cat ~/.vimrc


autocmd FileType yaml setlocal ts=2
set number

Una lista completa de vimrc opciones de configuración está disponible en las referencias.

Referencias
Página del manual: vim(1)

El comando :help en vim (si el paquete vim-enhanced está instalado).

Manual de referencia de Vim: Opciones de Vim


https://vimhelp.org/options.txt.html#options.txt

RH124-RHEL9.0-es-5-20230516 137
capítulo 5 | Crear, ver y editar archivos de texto

Ejercicio Guiado

Edición de archivos de texto desde el


prompt de shell
En este ejercicio, usará el comando vimtutor para practicar técnicas básicas de edición en
el editor vim.

Resultados
• Editar archivos con Vim.
• Volverse más competente en el uso de Vim con el comando vimtutor.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start edit-editfile

Instrucciones
1. Use el comando ssh para iniciar sesión en la máquina servera con el usuario student.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$

2. Ejecute el comando vimtutor. Lea la pantalla de bienvenida y realice la Lección 1.1.


En la presentación, las teclas de flecha del teclado ayudan a navegar por la ventana.
Inicialmente, cuando el editor vi se desarrolló por primera vez, los usuarios no podían
confiar en tener teclas de flecha o asignaciones de teclado que funcionaran para que las
teclas de flecha movieran el cursor. Por lo tanto, vi se diseñó originalmente para mover
el cursor con comandos mediante las teclas de caracteres estándar, como las agrupadas
convenientemente h, j, k y l.
A continuación se incluye una manera de recordarlas:
hang atrás, jump abajo, kick arriba, leap adelante.

[student@servera ~]$ vimtutor

3. En la ventana vimtutor, realice la Lección 1.2.


En esta lección, se enseña a salir sin necesidad de conservar los cambios no deseados. Se
pierden todos los cambios. A veces, es preferible perder los cambios antes que dejar un
archivo vital en un estado incorrecto.

138 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

4. En la ventana vimtutor, realice la Lección 1.3.


Vim ofrece pulsaciones de teclas rápidas y eficientes para eliminar una cantidad exacta de
palabras, líneas, oraciones o párrafos. Cualquier edición es posible con la tecla x para la
eliminación de un solo carácter.

5. En la ventana vimtutor, realice la Lección 1.4.


Para la mayoría de las tareas de edición, la primera tecla que se presiona es i (insertar).

6. En la ventana vimtutor, realice la Lección 1.5.


En la lección anterior, solo se enseñó el comando i para ingresar al modo de edición. En
esta lección, se demuestra el uso de otras teclas disponibles para cambiar la posición del
cursor en el modo de inserción. En el modo de inserción, todo el texto escrito cambia el
contenido de archivo.

7. En la ventana vimtutor, realice la Lección 1.6.


Escriba :wq para guardar el archivo y salir del editor.

8. En la ventana vimtutor, lea el Resumen de la Lección 1.


El comando vimtutor incluye seis lecciones más de varios pasos. Estas lecciones no se
asignan como parte de este curso, pero puede explorarlas para aprender más.

9. Regrese al sistema workstation con el usuario student.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish edit-editfile

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 139
capítulo 5 | Crear, ver y editar archivos de texto

Modificación del entorno de Shell

Objetivos
Definir las variables de shell para facilitar la ejecución de comandos, y editar los scripts de
arranque de Bash para configurar las variables de shell y del entorno a fin de modificar el
comportamiento de la shell y de los programas ejecutados desde la shell.

Uso de variables de shell


Con la shell Bash, puede configurar variables de shell que facilitan la ejecución de comandos o la
modificación del comportamiento de la shell. También puede exportar variables de shell como
variables de entorno, que se copian automáticamente a los programas que se ejecutan desde
esa shell cuando se inician. Puede usar variables para facilitar la ejecución de un comando con un
argumento largo, o para aplicar una configuración común a los comandos que se ejecutan desde
esa shell.

Las variables de shell corresponden únicamente a una sesión de shell en particular. Si tiene dos
ventanas de terminal abiertas o dos sesiones de inicio de sesión independientes en el mismo
servidor remoto, está ejecutando dos shells. Cada shell tiene su propio conjunto de valores para
sus variables de shell.

Asignación de valores a variables


Asigne un valor a una variable de shell con la siguiente sintaxis:

[user@host ~]$ VARIABLENAME=value

Los nombres de las variables pueden incluir letras mayúsculas o minúsculas, dígitos y el carácter
de guion bajo (_). Por ejemplo, los siguientes comandos establecen variables de shell:

[user@host ~]$ COUNT=40


[user@host ~]$ first_name=John
[user@host ~]$ file1=/tmp/abc
[user@host ~]$ _ID=RH123

Recuerde que este cambio solo afecta a la shell en la que se ejecuta el comando sin afectar a las
demás shells que pueda estar ejecutando en ese servidor.

Puede usar el comando set para enumerar todas las variables de shell que están configuradas
actualmente. (También enumera todas las funciones de shell, que se pueden ignorar). Para
mejorar la capacidad de lectura, puede canalizar la salida al comando less para poder verla una
página por vez.

140 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

[user@host ~]$ set | less


BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote\
:force_fignore:globasciiranges:histappend:interactive_comments:login_shell:progc\
omp:promptvars:sourcepath
BASHRCSOURCED=Y
...output omitted...

Recuperar valores con la expansión de variable


Puede usar la expansión de variable para referirse al valor de una variable que ha configurado. Para
usar la expansión de variable, anteponga un símbolo de dólar ($) al nombre de la variable. En los
siguientes ejemplos, el comando echo imprime el resto de la línea de comandos ingresada, pero
después de que se realiza la expansión de variable.

Por ejemplo, el siguiente comando establece la variable COUNT en 40.

[user@host ~]$ COUNT=40

Si ingresa el comando echo COUNT, se imprimirá la cadena COUNT.

[user@host ~]$ echo COUNT


COUNT

Si, en cambio, ingresa el comando echo $COUNT, imprime el valor de la variable COUNT.

[user@host ~]$ echo $COUNT


40

También puede usar una variable para referirse a un nombre de archivo largo para varios
comandos.

[user@host ~]$ file1=/tmp/tmp.z9pXW0HqcC


[user@host ~]$ ls -l $file1
-rw-------. 1 student student 1452 Jan 22 14:39 /tmp/tmp.z9pXW0HqcC
[user@host ~]$ rm $file1
[user@host ~]$ ls -l $file1
total 0

RH124-RHEL9.0-es-5-20230516 141
capítulo 5 | Crear, ver y editar archivos de texto

Importante
Siempre puede usar llaves en la expansión de variables, aunque a menudo son
innecesarias.

En el siguiente ejemplo, el comando echo intenta expandir la variable inexistente


COUNTx, lo que no produce un error, sino que no produce nada. El comando
tampoco informa ningún error.

[user@host ~]$ echo Repeat $COUNTx


Repeat

Si algún carácter final se encuentra junto a un nombre de variable, delimite el


nombre de la variable con llaves. En el siguiente ejemplo, el comando echo ahora
expande la variable COUNT.

[user@host ~]$ echo Repeat ${COUNT}x


Repeat 40x

Configuración de Bash con variables de shell


Algunas variables de shell se establecen cuando se inicia Bash. Puede modificarlas para ajustar el
comportamiento de la shell.

Por ejemplo, las variables de shell HISTFILE, HISTFILESIZE y HISTTIMEFORMAT afectan


el historial de shell y el comando history. La variable HISTFILE especifica en qué archivo
se guardará el historial de shell, y se establece de manera predeterminada en el archivo
~/.bash_history. La variable HISTFILESIZE especifica cuántos comandos deben guardarse
en ese archivo del historial. La variable HISTTIMEFORMAT define el formato de sello de tiempo
para cada comando en el historial. Esta variable no existe de forma predeterminada.

[user@host ~]$ history


...output omitted...
6 ls /etc
7 uptime
8 ls -l
9 date
10 history
[user@host ~]$ HISTTIMEFORMAT="%F %T "
[user@host ~]$ history
...output omitted...
6 2022-05-03 04:58:11 ls /etc
7 2022-05-03 04:58:13 uptime
8 2022-05-03 04:58:15 ls -l
9 2022-05-03 04:58:16 date
10 2022-05-03 04:58:18 history
11 2022-05-03 04:59:10 HISTTIMEFORMAT="%F %T "
12 2022-05-03 04:59:12 history

Otro ejemplo es la variable PS1, que controla el aspecto del prompt de shell. Si cambia este valor,
cambia el aspecto del prompt de shell. Diversas expansiones de caracteres especiales compatibles

142 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

con el prompt se enumeran en la sección "PROMPTING" (Pedido de confirmación) de la página


del manual bash(1).

[user@host ~]$ PS1="bash\$ "


bash$ PS1="[\u@\h \W]\$ "
[user@host ~]$

Debido a que el valor que establece la variable PS1 es un prompt, Red Hat recomienda finalizar
el prompt con un espacio final. Asimismo, siempre que el valor de una variable contenga algún
tipo de espacio, incluido un espacio, una tabulación o un retorno, el valor debe estar entre
comillas simples o dobles. Se producirán resultados inesperados si se omiten las comillas. La
variable anterior PS1 cumple tanto con la recomendación de espacio final como con la regla de las
comillas.

Configuración de programas con variables de entorno


La shell proporciona un entorno para los programas que se ejecutan desde esa shell. Entre
otros elementos, este entorno incluye información sobre el directorio de trabajo actual en el
sistema de archivos, las opciones de línea de comandos que pasan al programa y los valores de
las variables de entorno. Los programas pueden usar estas variables de entorno para cambiar su
comportamiento o su configuración predeterminada.

Si una variable de shell no es una variable de entorno, solo la shell puede usarla. Sin embargo, si
una variable de shell es una variable de entorno, entonces la shell y cualquier programa que se
ejecute desde esa shell pueden usar la variable.

nota
Las variables HISTFILE, HISTFILESIZE y PS1, estudiadas en la sección anterior,
no deben exportarse como variables de entorno, ya que solo las usa la propia shell y
no los programas que se ejecutan desde la shell.

Puede asignar cualquier variable definida en la shell en una variable de entorno marcándola para
exportación con el comando export.

[user@host ~]$ EDITOR=vim


[user@host ~]$ export EDITOR

Puede configurar y exportar una variable en un solo paso:

[user@host ~]$ export EDITOR=vim

Las aplicaciones y las sesiones usan estas variables para determinar su comportamiento. Por
ejemplo, la shell configura automáticamente la variable HOME con el nombre de archivo del
directorio de inicio del usuario cuando se inicia. Puede usar esta variable para ayudar a los
programas a determinar dónde guardar los archivos.

Otro ejemplo es la variable LANG, que establece la configuración regional. Esta variable ajusta
el idioma preferido para la salida del programa; el conjunto de caracteres; el formato de fechas,
números y moneda; y el orden de clasificación de los programas. Si se configura en en_US.UTF-8,
la configuración local usará el inglés de EE. UU. con codificación de caracteres Unicode UTF-8.
Si está configurado en otra opción, por ejemplo. fr_FR.UTF-8 usará el francés y la codificación
Unicode UTF-8.

RH124-RHEL9.0-es-5-20230516 143
capítulo 5 | Crear, ver y editar archivos de texto

[user@host ~]$ date


Tue Jan 22 16:37:45 CST 2019
[user@host ~]$ export LANG=fr_FR.UTF-8
[user@host ~]$ date
mar. janv. 22 16:38:14 CST 2019

Otra variable importante del entorno es PATH. La variable PATH contiene una lista de directorios
separados por dos puntos que contienen programas:

[user@host ~]$ echo $PATH


/home/user/.local/bin:/home/user/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/
bin:/usr/local/sbin:/usr/sbin

Cuando ejecuta un comando como ls, la shell busca el archivo ejecutable ls en cada uno de esos
directorios en orden, y ejecuta el primer archivo coincidente que encuentra. (En un sistema típico,
este archivo es /usr/bin/ls).

Puede agregar directorios a su variable PATH. Por ejemplo, quizás tenga scripts o programas
ejecutables que desea ejecutar como comandos regulares en el directorio /home/user/sbin.
Puede anexar el directorio /home/user/sbin a su PATH para la sesión actual de la siguiente
manera:

[user@host ~]$ export PATH=${PATH}:/home/user/sbin

Para enumerar todas las variables de entorno de una shell, ejecute el comando env:

[user@host ~]$ env


...output omitted...
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
HOSTNAME=host.example.com
XDG_SESSION_ID=4
...output omitted...

Configuración del editor de texto predeterminado


La variable de entorno EDITOR especifica el editor de texto predeterminado para programas de
línea de comandos. Muchos programas usan el editor vi o vim si no se especifica, pero puede
anular esta preferencia:

[user@host ~]$ export EDITOR=nano

Importante
Por convención, las variables de entorno y las variables de shell que se configuran
automáticamente por la shell tienen nombres con todos los caracteres en
mayúsculas. Para configurar sus propias variables, es posible que desee usar
nombres con caracteres en minúscula para evitar los nombres duplicados.

144 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

Configuración automática de variables


Cuando se inicia Bash, se ejecutan varios archivos de texto con comandos de shell que inicializan
el entorno de shell. Para configurar automáticamente las variables de shell o de entorno cuando se
inicia su shell, puede editar estos scripts de arranque de Bash.

Los scripts exactos que se ejecutan dependen de si se trata de una shell interactiva o no
interactiva, y una shell con inicio de sesión o sin inicio de sesión. Un usuario ingresa comandos
directamente en una shell interactiva, mientras que una shell no interactiva, como un script, se
ejecuta en segundo plano sin la intervención del usuario. Se invoca una shell de inicio de sesión
cuando un usuario inicia sesión localmente a través del terminal o de forma remota a través del
protocolo SSH. Una shell sin inicio de sesión se invoca desde una sesión existente, como abrir un
terminal desde la GUI de GNOME.

Para shells de inicio de sesión interactivas, los archivos /etc/profile y ~/.bash_profile


configuran el entorno Bash. Los archivos /etc/profile y ~/.bash_profile también
obtienen los archivos /etc/bashrc y ~/.bashrc, respectivamente. Para shells sin inicio
de sesión interactivas, los archivos /etc/bashrc y ~/.bashrc configuran el entorno Bash.
Mientras que los archivos /etc/profile y /etc/bashrc se aplican a todo el sistema, los
archivos ~/.bash_profile y ~/.bashrc son específicos del usuario. Las shells no interactivas
invocan cualquier archivo que defina la variable BASH_ENV. Esta variable no se define de forma
predeterminada.

Para crear una variable que esté disponible para todas sus shells interactivas, edite el archivo
~/.bashrc. Para aplicar una variable solo una vez después de que el usuario inicie sesión,
defínala en el archivo ~/.bash_profile.

Por ejemplo, para cambiar el editor predeterminado cuando inicia sesión a través de SSH, puede
modificar la variable EDITOR en su archivo ~/.bash_profile:

# .bash_profile

# Get the aliases and functions


if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs


export EDITOR=nano

nota
La mejor manera de ajustar la configuración que afecta a todas las cuentas de
usuario es agregando un archivo con una extensión .sh que contiene los cambios
en el directorio /etc/profile.d. Para crear los archivos en el directorio /etc/
profile.d, inicie sesión con el usuario root.

Alias de bash
Los alias de Bash son atajos a otros comandos de Bash. Por ejemplo, si debe escribir un comando
largo con frecuencia, puede crear un alias más corto para invocarlo. Puede usar el comando alias
para crear alias. Considere el siguiente ejemplo que crea un alias hello para un comando echo.

[user@host ~]$ alias hello='echo "Hello, this is a long string."'

RH124-RHEL9.0-es-5-20230516 145
capítulo 5 | Crear, ver y editar archivos de texto

A continuación, puede ejecutar el comando hello y se invoca el comando echo.

[user@host ~]$ hello


Hello, this is a long string.

Agregar alias al archivo ~/.bashrc de un usuario para que estén disponibles en cualquier shell
interactiva.

Deshacer y exportar variables y alias


Para deshacer la configuración y la exportación de una variable, use el comando unset:

[user@host ~]$ echo $file1


/tmp/tmp.z9pXW0HqcC
[user@host ~]$ unset file1
[user@host ~]$ echo $file1

[user@host ~]$

Para deshacer la exportación de una variable sin deshacer la configuración, use el comando
export -n:

[user@host ~]$ export -n PS1

Para anular la configuración de un alias, use el comando unalias :

[user@host ~]$ unalias hello

Referencias
Páginas del manual: bash(1), env(1) y builtins(1)

146 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

Ejercicio Guiado

Modificación del entorno de Shell


En este ejercicio, usa las variables de shell y la expansión de variables para ejecutar
comandos y configurar una variable de entorno a fin de establecer el editor predeterminado
para las nuevas shells.

Resultados
• Editar un perfil de usuario.
• Crear una variable de shell.
• Crear una variable de entorno.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando garantiza que estén disponibles todos los recursos requeridos.

[student@workstation ~]$ lab start edit-bashconfig

Instrucciones
1. Cambie la variable de shell student del usuario PS1 a [\u@\h \t \w]$ (recuerde poner
el valor de PS1 entre comillas e incluir un espacio final después del símbolo de dólar). Este
cambio agrega el tiempo al prompt.

1.1. Use el comando ssh para iniciar sesión en servera con el usuario student.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$

1.2. Use Vim para editar el archivo de configuración ~/.bashrc.

[student@servera ~]$ vim ~/.bashrc

1.3. Agregue la variable de shell PS1 y su valor en el archivo ~/.bashrc. Establezca el


valor de la variable de shell, incluido un espacio final al final, entre comillas.

...output omitted...
export PATH
PS1='[\u@\h \t \w]$ '

1.4. Salga de servera y vuelva a iniciar sesión usando el comando ssh para actualizar
el prompt de comandos o ejecute el archivo ~/.bashrc con el comando source
~/.bashrc.

RH124-RHEL9.0-es-5-20230516 147
capítulo 5 | Crear, ver y editar archivos de texto

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera 14:45:05 ~]$

2. Asigne un valor a una variable de shell local. Los nombres de las variables pueden incluir
letras mayúsculas o minúsculas, dígitos y el carácter de guion bajo. Recupere el valor de la
variable.

2.1. Cree una nueva variable llamada file con un valor de tmp.zdkei083. El archivo
tmp.zdkei083 existe en el directorio de inicio de student.

[student@servera 14:47:05 ~]$ file=tmp.zdkei083

2.2. Recupere el valor de la variable file.

[student@servera 14:48:35 ~]$ echo $file


tmp.zdkei083

2.3. Use el nombre de la variable file y el comando ls -l para enumerar el archivo


tmp.zdkei083. Use el comando rm y el nombre de la variable file para eliminar el
archivo tmp.zdkei083. Verifique que se haya eliminado el archivo.

[student@servera 14:59:07 ~]$ ls -l $file


-rw-r--r--. 1 student student 0 Jan 23 14:59 tmp.zdkei083
[student@servera 14:59:10 ~]$ rm $file
[student@servera 14:59:15 ~]$ ls -l $file
ls: cannot access 'tmp.zdkei083': No such file or directory

3. Asigne un valor a la variable EDITOR. Use un comando para asignar la variable como una
variable de entorno.

[student@servera 14:46:40 ~]$ export EDITOR=vim


[student@servera 14:46:55 ~]$ echo $EDITOR
vim

4. Regrese al sistema workstation con el usuario student.

[student@servera 14:47:11 ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

148 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

[student@workstation ~]$ lab finish edit-bashconfig

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 149
capítulo 5 | Crear, ver y editar archivos de texto

Trabajo de laboratorio

Crear, ver y editar archivos de texto


En este trabajo de laboratorio, editará un archivo de texto con el editor vim.

Resultados
• Usar Vim para editar archivos.
• Usar el modo visual de Vim para simplificar la edición de archivos grandes.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start edit-review

Instrucciones
1. En workstation, cree la variable de shell lab_file y asigne editing_final_lab.txt
como valor. Enumere el directorio de inicio student, incluidos los directorios y archivos
ocultos, y redirija la salida al archivo editing_final_lab.txt mediante el uso de la
variable de shell.
2. Use Vim para editar el archivo editing_final_lab.txt. Use la variable de shell
lab_file.
3. Ingrese el modo visual basado en líneas de Vim. Su salida de pantalla puede ser diferente a
estos ejemplos. Elimine las primeras tres líneas del archivo editing_final_lab.txt.
4. Ingrese al modo visual de Vim. Elimine los últimos siete caracteres de la primera columna de
la primera línea. Conserve solo los primeros cuatro caracteres de la primera columna.
Use las teclas de flecha para ubicar el cursor en el último carácter de la primera columna de
la primera línea. Elimine la selección escribiendo x.
5. Ingrese al modo de bloque visual de Vim. Repita la operación del paso anterior, pero esta
vez seleccione desde la segunda hasta la última línea. Conserve solo los primeros cuatro
caracteres de la primera columna.
6. Ingrese el modo de bloque visual de Vim y elimine la cuarta columna del archivo.
7. Ingrese al modo de bloque visual de Vim para eliminar la columna de hora y deje las columnas
de mes y día en todas las líneas.
8. Ingrese al modo de línea visual de Vim y elimine las filas que contienen las cadenas Desktop
y Public.
9. Guarde sus cambios y salga del archivo.

150 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

10. Realice una copia de seguridad del archivo editing_final_lab.txt y agregue la fecha
(en segundos) al final del nombre del archivo precedido por un carácter de subrayado (_).
Use la variable de shell lab_file.
11. Agregue una línea discontinua al archivo editing_final_lab.txt. La línea discontinua
debe contener 12 caracteres de guion (-) para que este trabajo de laboratorio se califique
correctamente. Use la variable de shell lab_file.
12. Enumere el contenido del directorio Documents, agregue la salida al archivo
editing_final_lab.txt y muestre la salida en el terminal. Use el comando tee y la
variable de shell lab_file.
13. Confirme que el listado de directorios esté en la parte inferior del archivo de trabajo de
laboratorio. Use la variable de shell lab_file.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade edit-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish edit-review

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 151
capítulo 5 | Crear, ver y editar archivos de texto

Solución

Crear, ver y editar archivos de texto


En este trabajo de laboratorio, editará un archivo de texto con el editor vim.

Resultados
• Usar Vim para editar archivos.
• Usar el modo visual de Vim para simplificar la edición de archivos grandes.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start edit-review

Instrucciones
1. En workstation, cree la variable de shell lab_file y asigne editing_final_lab.txt
como valor. Enumere el directorio de inicio student, incluidos los directorios y archivos
ocultos, y redirija la salida al archivo editing_final_lab.txt mediante el uso de la
variable de shell.
En la máquina workstation, cree la variable de shell lab_file y asigne
editing_final_lab.txt como valor. Use el comando ls -al en el directorio de inicio
student y redirija la salida al archivo editing_final_lab.txt.

[student@workstation ~]$ lab_file=editing_final_lab.txt


[student@workstation ~]$ ls -al > $lab_file

2. Use Vim para editar el archivo editing_final_lab.txt. Use la variable de shell


lab_file.

[student@workstation ~]$ vim $lab_file

3. Ingrese el modo visual basado en líneas de Vim. Su salida de pantalla puede ser diferente a
estos ejemplos. Elimine las primeras tres líneas del archivo editing_final_lab.txt.
Use las teclas de flecha para ubicar el cursor en el primer carácter de la primera línea. Ingrese
el modo visual basado en líneas con Shift+V. Desplácese hacia abajo usando la tecla de
flecha dos veces para seleccionar las primeras tres líneas. Elimine las líneas escribiendo x.

152 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

4. Ingrese al modo visual de Vim. Elimine los últimos siete caracteres de la primera columna de
la primera línea. Conserve solo los primeros cuatro caracteres de la primera columna.
Use las teclas de flecha para ubicar el cursor en el quinto carácter de la primera columna de
la primera línea. Ingrese al modo visual al escribir v.
Use las teclas de flecha para ubicar el cursor en el último carácter de la primera columna de
la primera línea. Elimine la selección escribiendo x.

5. Ingrese al modo de bloque visual de Vim. Repita la operación del paso anterior, pero esta
vez seleccione desde la segunda hasta la última línea. Conserve solo los primeros cuatro
caracteres de la primera columna.
Use las teclas de flecha para ubicar el cursor en el quinto carácter de la segunda línea.
Ingrese en el modo visual con la secuencia de control Ctrl+V. Use las teclas de flecha para

RH124-RHEL9.0-es-5-20230516 153
capítulo 5 | Crear, ver y editar archivos de texto

ubicar el cursor en el último carácter de la primera columna de la última línea. Elimine la


selección escribiendo x.

6. Ingrese el modo de bloque visual de Vim y elimine la cuarta columna del archivo.
Use las teclas de flecha para ubicar el cursor en el primer carácter de la cuarta columna.
Ingrese al modo de bloque visual con Ctrl+V. Use las teclas de flecha para ubicar el cursor
en el último carácter y la última fila de la cuarta columna. Elimine la selección escribiendo x.

7. Ingrese al modo de bloque visual de Vim para eliminar la columna de hora y deje las columnas
de mes y día en todas las líneas.
Use las teclas de flecha para ubicar el cursor en el primer carácter de la actual séptima
columna. Ingrese al modo de bloque visual escribiendo Ctrl+V. Use las teclas de flecha

154 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

para ubicar el cursor en el último carácter de la séptima columna de la última fila. Elimine la
selección escribiendo x.

8. Ingrese al modo de línea visual de Vim y elimine las filas que contienen las cadenas Desktop
y Public.
Use las teclas de flecha para ubicar el cursor en cualquier carácter de la fila Desktop.
Ingrese el modo visual con la V mayúscula. Se selecciona la línea completa. Elimine la
selección escribiendo x. Repita la operación para la fila con la cadena Public.

RH124-RHEL9.0-es-5-20230516 155
capítulo 5 | Crear, ver y editar archivos de texto

9. Guarde sus cambios y salga del archivo.


Para guardar y salir del archivo, ingrese el comando de la última línea :wq.

10. Realice una copia de seguridad del archivo editing_final_lab.txt y agregue la fecha
(en segundos) al final del nombre del archivo precedido por un carácter de subrayado (_).
Use la variable de shell lab_file.
Use el comando cp para realizar una copia de seguridad del archivo
editing_final_lab.txt. Use el comando $(date +%s) al final del nombre de la copia
de seguridad (backup) precedido por un carácter de guión bajo para que el nombre sea
único.

[student@workstation ~]$ cp $lab_file \


editing_final_lab_$(date +%s).txt

11. Agregue una línea discontinua al archivo editing_final_lab.txt. La línea discontinua


debe contener 12 caracteres de guion (-) para que este trabajo de laboratorio se califique
correctamente. Use la variable de shell lab_file.
Use el comando echo con 12 guiones y anexe la salida al archivo
editing_final_lab.txt.

[student@workstation ~]$ echo "------------" >> $lab_file

12. Enumere el contenido del directorio Documents, agregue la salida al archivo


editing_final_lab.txt y muestre la salida en el terminal. Use el comando tee y la
variable de shell lab_file.
Use el comando ls para enumerar el directorio Documents y canalice la salida al comando
tee -a para anexar la salida al archivo editing_final_lab.txt.

[student@workstation ~]$ ls Documents/ | tee -a $lab_file


lab_review.txt

156 RH124-RHEL9.0-es-5-20230516
capítulo 5 | Crear, ver y editar archivos de texto

13. Confirme que el listado de directorios esté en la parte inferior del archivo de trabajo de
laboratorio. Use la variable de shell lab_file.

[student@workstation ~]$ cat $lab_file


drwx 3 student 17 Mar 4 .ansible
-rw- 1 student 18 Nov 5 .bash_logout
-rw- 1 student 141 Nov 5 .bash_profile
-rw- 1 student 492 Nov 5 .bashrc
drwx 9 student 4096 Mar 8 .cache
drwx 8 student 4096 Mar 8 .config
drwx 2 student 6 Mar 8 Documents
drwx 2 student 6 Mar 8 Downloads
-rw- 1 student 0 Mar 8 editing_final_lab.txt
drwx 2 student 25 Mar 4 .grading
drwx 4 student 32 Mar 8 .local
drwx 2 student 6 Mar 8 Music
drwx 2 student 6 Mar 8 Pictures
drwx 2 student 77 Mar 4 .ssh
drwx 2 student 6 Mar 8 Templates
drwx 3 student 18 Mar 4 .venv
drwx 2 student 6 Mar 8 Videos
------------
lab_review.txt

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade edit-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish edit-review

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 157
capítulo 5 | Crear, ver y editar archivos de texto

Resumen
• Los programas o procesos en ejecución tienen tres canales de comunicación estándar: entrada
estándar, salida estándar y error estándar.

• Puede usar el redireccionamiento de E/S para leer la entrada estándar de un archivo o escribir la
salida o los errores de un proceso en un archivo.

• Las tuberías pueden conectar la salida estándar de un proceso a la entrada estándar de otro
proceso, y pueden formatear la salida o crear comandos complejos.

• Conozca cómo usar al menos un editor de texto de línea de comandos, y Vim es la opción
recomendada porque generalmente se instala de manera predeterminada en las distribuciones
de Linux.

• Las variables de shell pueden facilitar la ejecución de comandos y corresponden únicamente a


una sesión de shell.

• Puede modificar el comportamiento de la shell o los procesos con variables de entorno.

158 RH124-RHEL9.0-es-5-20230516
capítulo 6

Gestión de usuarios y grupos


locales
Meta Crear, gestionar y eliminar usuarios y grupos
locales, y administrar políticas de contraseña
locales.

Objetivos • Describir el propósito de los usuarios y grupos


en un sistema Linux.
• Cambiar a la cuenta de superusuario para
gestionar un sistema Linux y otorgar a otros
usuarios acceso de superusuario a través del
comando sudo.
• Crear, gestionar y eliminar cuentas de usuario
locales.
• Crear, modificar y eliminar cuentas de grupo
locales.
• Establecer una política de gestión de
contraseñas para los usuarios, y bloquear y
desbloquear manualmente las cuentas de los
usuarios.

Secciones • Conceptos de usuarios y grupos (y


cuestionario)
• Obtención de acceso de superusuario (y
ejercicio guiado)
• Gestión de cuentas de usuarios locales (y
ejercicio guiado)
• Gestión de cuentas de grupos locales (y
ejercicio guiado)
• Gestión de contraseñas de usuarios (y ejercicio
guiado)

Trabajo de Gestión de usuarios y grupos locales


laboratorio

RH124-RHEL9.0-es-5-20230516 159
capítulo 6 | Gestión de usuarios y grupos locales

Describir conceptos de usuario y grupo

Objetivos
Describir el propósito de los usuarios y grupos en un sistema Linux.

¿Qué es un usuario?
Una cuenta de usuario proporciona límites de seguridad entre personas y programas que pueden
ejecutar comandos.

Los usuarios tienen nombres de usuario para identificarlos como usuarios humanos y facilitar el
trabajo. Internamente, el sistema distingue las cuentas de usuario por el número de identificación
único que se les asigna, el ID de usuario o UID. En la mayoría de los escenarios, si una persona usa
una cuenta de usuario, el sistema asigna una contraseña secreta para que el usuario demuestre
que es el usuario autorizado para iniciar sesión.

Las cuentas de usuario son fundamentales para la seguridad del sistema. Cada proceso (programa
en ejecución) en el sistema se ejecuta como un usuario particular. Cada archivo tiene un usuario
particular como su propietario. Con la propiedad del archivo, al sistema aplica el control de acceso
para los usuarios de los archivos. El usuario que está asociado con un proceso de ejecución
determina los archivos y directorios accesibles para ese proceso.

Hay cuentas de usuario de los siguientes tipos principales: el superusuario, el usuario del sistema y
el usuario normal.

• La cuenta de superusuario administra el sistema. El nombre del superusuario es root y la


cuenta tiene UID 0. El superusuario tiene acceso completo al sistema.

• El sistema tiene cuentas de usuario del sistema que usan los procesos que proporcionan
servicios de soporte. Estos procesos, o daemons por lo general no necesitan ejecutarse como
superusuario. Son cuentas asignadas sin privilegios para proteger sus archivos y otros recursos
entre sí y de los usuarios habituales del sistema. Los usuarios no inician sesión de forma
interactiva con una cuenta de usuario del sistema.

• La mayoría de los usuarios tienen cuentas de usuario normal que usan para su trabajo diario. Al
igual que los usuarios del sistema, los usuarios normales tienen acceso limitado al sistema.

Puede usar el comando id para mostrar información acerca del usuario con sesión iniciada
actualmente:

[user01@host ~]$ id
uid=1000(user01) gid=1000(user01) groups=1000(user01)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Para ver información básica sobre otro usuario, envíe el nombre de usuario al comando id como
argumento:

[user01@host ~]$ id user02


uid=1002(user02) gid=1001(user02) groups=1001(user02)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

160 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Use el comando ls -l para ver el propietario de un archivo. Use el comando ls -ld para ver
el propietario de un directorio, en lugar del contenido de ese directorio. En la siguiente salida, la
tercera columna muestra el nombre de usuario.

[user01@host ~]$ ls -l mytextfile.txt


-rw-rw-r--. 1 user01 user01 0 Feb 5 11:10 mytextfile.txt
[user01@host]$ ls -ld Documents
drwxrwxr-x. 2 user01 user01 6 Feb 5 11:10 Documents

Para ver la información del proceso, use el comando ps. La opción predeterminada es mostrar
solo los procesos que están en la shell actual. Agregue el comando ps con la opción -a para ver
todos los procesos con una terminal. Use el comando ps con la opción -u para ver el usuario
asociado con un proceso. En la siguiente salida, la primera columna muestra el nombre de usuario.

[user01@host ~]$ ps -au


USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1690 0.0 0.0 220984 1052 ttyS0 Ss+ 22:43 0:00 /sbin/agetty -o -p --
\u --keep-baud 1
user01 1769 0.0 0.1 377700 6844 tty2 Ssl+ 22:45 0:00 /usr/libexec/gdm-x-
session --register-
user01 1773 1.3 1.3 528948 78356 tty2 Sl+ 22:45 0:03 /usr/libexec/Xorg vt2
-displayfd 3 -au
user01 1800 0.0 0.3 521412 19824 tty2 Sl+ 22:45 0:00 /usr/libexec/gnome-
session-binary
user01 3072 0.0 0.0 224152 5756 pts/1 Ss 22:48 0:00 -bash
user01 3122 0.0 0.0 225556 3652 pts/1 R+ 22:49 0:00 ps -au

En la salida de los comandos anteriores, se muestran los usuarios por nombre, pero, internamente,
el sistema operativo usa UID para realizar un seguimiento de los usuarios. La asignación de
nombres de usuario a UID se define en las bases de datos de la información de la cuenta. De forma
predeterminada, los sistemas usan el archivo /etc/passwd para almacenar información sobre los
usuarios locales.

Cada línea del archivo /etc/passwd contiene información sobre un usuario. El archivo se divide
en siete campos separados por dos puntos. A continuación, se muestra un ejemplo de una línea de
/etc/passwd:

[user01@host ~]$ cat /etc/passwd


...output omitted...
user01:x:1000:1000:User One:/home/user01:/bin/bash

Considere cada parte del bloque de código, separada por dos puntos:

• user01 : Nombre de usuario para este usuario.


• x : La contraseña cifrada del usuario se almacenaba históricamente aquí; ahora es un marcador
de posición.
• 1000 : El número de UID para esta cuenta de usuario.
• 1000 : El número de GID para el grupo principal de esta cuenta de usuario. Los grupos se
analizan más adelante en esta sección.
• User One : Un breve comentario, una descripción o el nombre real de este usuario.
• /home/user01 : El directorio de inicio del usuario y el directorio de trabajo inicial cuando se
inicia la shell de inicio de sesión.

RH124-RHEL9.0-es-5-20230516 161
capítulo 6 | Gestión de usuarios y grupos locales

• /bin/bash : El programa de shell predeterminado para este usuario, que se ejecuta al iniciar
sesión. Algunas cuentas usan la shell /sbin/nologin para no permitir inicios de sesión
interactivos con esa cuenta.

¿Qué es un grupo?
Un grupo es una colección de usuarios que necesitan compartir el acceso a archivos y otros
recursos del sistema. Los grupos otorgan acceso a los archivos a un conjunto de usuarios en lugar
de a un solo usuario.

Al igual que los usuarios, los grupos tienen nombres de grupo para facilitar el reconocimiento.
Internamente, el sistema distingue los grupos por el número de identificación único, el ID de
grupo o GID, que se les asigna. La asignación de nombres de grupo a GID se define en las
bases de datos de gestión de identidades de la información de la cuenta de grupo. De forma
predeterminada, los sistemas usan el archivo /etc/group para almacenar información sobre los
grupos locales.

Cada línea del archivo /etc/group contiene información sobre un grupo. Cada entrada de grupo
se divide en cuatro campos separados con dos puntos. A continuación, se muestra un ejemplo de
una línea de /etc/group:

[user01@host ~]$ cat /etc/group


...output omitted...
group01:x:10000:user01,user02,user03

Considere cada parte del bloque de código, separada por dos puntos:

• group01 : Nombre para este grupo.


• x : Campo de contraseña de grupo obsoleto; ahora es un marcador de posición.
• 10000 : El número de GID para este grupo (10000).
• user01,user02,user03 : una lista de usuarios que son miembros de este grupo como grupo
complementario.

Grupos principales y grupos complementarios


Cada usuario tiene exactamente un grupo principal. Para usuarios locales, este es el grupo
enumerado por GID en el archivo /etc/passwd. El grupo principal es propietario de los archivos
que crea el usuario.

Cuando se crea un usuario regular, se crea un grupo con el mismo nombre que el usuario, para
que sea el grupo principal para el usuario. El usuario es el único miembro de este grupo privado de
usuarios. Este diseño de membresía de grupo simplifica la gestión de permisos de archivos, para
que los grupos de usuarios estén separados de forma predeterminada.

Los usuarios también pueden tener grupos complementarios. La pertenencia a grupos


complementarios se almacena en el archivo /etc/group. A los usuarios se les otorga acceso
a los archivos en función de si alguno de sus grupos tiene acceso, más allá de si los grupos son
principales o complementarios. Por ejemplo, si el usuario user01 tiene un grupo principal user01
y los grupos complementarios wheel y webadmin, entonces ese usuario puede leer archivos
legibles para cualquiera de esos tres grupos.

El comando id puede mostrar la pertenencia al grupo de un usuario. En el ejemplo anterior, el


usuario user01 tiene el grupo user01 como su grupo principal (gid). El ítem groups enumera
todas las membresías de grupo para este usuario y el usuario también tiene los grupos wheel y
group01 como grupos complementarios.

162 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

[user01@host ~]$ id
uid=1001(user01) gid=1003(user01) groups=1003(user01),10(wheel),10000(group01)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Referencias
Páginas del manual: id(1), passwd(5) y group(5)

info libc (GNU C Library Reference Manual)

• Sección 30: Usuarios y grupos

(El paquete glibc-devel se debe haber instalado para que este nodo info esté
disponible).

RH124-RHEL9.0-es-5-20230516 163
capítulo 6 | Gestión de usuarios y grupos locales

Cuestionario

Describir conceptos de usuario y grupo


Elija la respuesta correcta para las siguientes preguntas:

1. ¿Qué ítem representa un número que identifica al usuario en el nivel más fundamental?
a. Usuario principal
b. UID
c. GID
d. Nombre de usuario

2. ¿Qué ítem representa el programa que proporciona el prompt de línea de comandos


del usuario?
a. Shell principal
b. Directorio de inicio
c. Shell de inicio de sesión
d. Nombre de comando

3. ¿Qué ítem o archivo representa la ubicación de la información del grupo local?


a. Directorio de inicio
b. /etc/passwd
c. /etc/GID
d. /etc/group

4. ¿Qué ítem o archivo representa la ubicación de los archivos personales del usuario?
a. Directorio de inicio
b. Shell de inicio de sesión
c. /etc/passwd
d. /etc/group

5. ¿Qué ítem representa un número que identifica al grupo en el nivel más fundamental?
a. Grupo principal
b. UID
c. GID
d. Groupid

164 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

6. ¿Qué ítem o archivo representa la ubicación de la información de la cuenta de usuario


local?
a. Directorio de inicio
b. /etc/passwd
c. /etc/UID
d. /etc/group

7. ¿Cuál es el cuarto campo del archivo /etc/passwd?


a. Directorio de inicio
b. UID
c. Shell de inicio de sesión
d. Grupo principal

RH124-RHEL9.0-es-5-20230516 165
capítulo 6 | Gestión de usuarios y grupos locales

Solución

Describir conceptos de usuario y grupo


Elija la respuesta correcta para las siguientes preguntas:

1. ¿Qué ítem representa un número que identifica al usuario en el nivel más fundamental?
a. Usuario principal
b. UID
c. GID
d. Nombre de usuario

2. ¿Qué ítem representa el programa que proporciona el prompt de línea de comandos


del usuario?
a. Shell principal
b. Directorio de inicio
c. Shell de inicio de sesión
d. Nombre de comando

3. ¿Qué ítem o archivo representa la ubicación de la información del grupo local?


a. Directorio de inicio
b. /etc/passwd
c. /etc/GID
d. /etc/group

4. ¿Qué ítem o archivo representa la ubicación de los archivos personales del usuario?
a. Directorio de inicio
b. Shell de inicio de sesión
c. /etc/passwd
d. /etc/group

5. ¿Qué ítem representa un número que identifica al grupo en el nivel más fundamental?
a. Grupo principal
b. UID
c. GID
d. Groupid

166 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

6. ¿Qué ítem o archivo representa la ubicación de la información de la cuenta de usuario


local?
a. Directorio de inicio
b. /etc/passwd
c. /etc/UID
d. /etc/group

7. ¿Cuál es el cuarto campo del archivo /etc/passwd?


a. Directorio de inicio
b. UID
c. Shell de inicio de sesión
d. Grupo principal

RH124-RHEL9.0-es-5-20230516 167
capítulo 6 | Gestión de usuarios y grupos locales

Obtención de acceso de superusuario

Objetivos
Cambiar a la cuenta de superusuario para gestionar un sistema Linux y otorgar a otros usuarios
acceso de superusuario a través del comando sudo.

El superusuario
La mayoría de los sistemas operativos tienen un superusuario; un usuario que tiene todo el poder
sobre el sistema. En Red Hat Enterprise Linux, este es el usuario root. Este usuario tiene el
poder de anular los privilegios normales del sistema de archivos, y puede usarlo para gestionar y
administrar el sistema. Para tareas como la instalación o eliminación de software, y para gestionar
los directorios y los archivos del sistema, los usuarios deben aumentar sus privilegios al usuario
root.

Por lo general, solo el usuario root puede controlar la mayoría de los dispositivos, pero se
aplican algunas excepciones. Los usuarios normales pueden controlar dispositivos desmontables,
como dispositivos USB. Por lo tanto, los usuarios normales pueden agregar y eliminar archivos y
gestionar de otro modo un dispositivo desmontable, pero solo el usuario root puede gestionar los
discos duros de manera predeterminada.

Sin embargo, este privilegio ilimitado viene acompañado de una responsabilidad. El usuario
root tiene poder ilimitado para dañar el sistema: eliminar archivos y directorios, eliminar cuentas
de usuarios, agregar puertas traseras, etc. Si la cuenta de usuario root se ve comprometida, el
sistema está en peligro y es posible que pierda el control administrativo. Red Hat invita a los
administradores de sistemas a que inicien sesión como usuario normal y que escalen los privilegios
a root solo cuando sea necesario.

La cuenta root en Linux es similar a la cuenta Administrator local en Microsoft Windows. En


Linux, la mayoría de los administradores del sistema inician sesión en el sistema como un usuario
sin privilegios y usan distintas herramientas para ganar privilegios de usuario root temporalmente.

Advertencia
Los usuarios de Microsoft Windows pueden estar familiarizados con la práctica
de iniciar sesión con el usuario local Administrator para realizar tareas de
administrador del sistema. En la actualidad, no se recomienda esta práctica; los
usuarios obtienen privilegios para realizar la administración mediante membresías
en el grupo Administrators. De manera similar, en RHEL, Red Hat recomienda
que los administradores del sistema nunca inicien sesión directamente como root.
En cambio, los administradores de sistema deben iniciar sesión como usuario normal
y usar mecanismos (su, sudo o PolicyKit, por ejemplo) para obtener privilegios
de superusuario temporalmente.

Al haber iniciado sesión como root, todo el entorno de escritorio se ejecuta sin
necesidad con privilegios administrativos. Una vulnerabilidad de seguridad que
normalmente podría comprometer solo una cuenta de usuario normal puede poner
en peligro todo el sistema.

168 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Cambiar cuentas de usuario


El comando su les permite a los usuarios cambiar a una cuenta de usuario diferente. Si ejecuta el
comando su desde una cuenta de usuario regular con otra cuenta de usuario como parámetro,
debe proporcionar la contraseña de la cuenta a la que desea cambiar. Cuando el usuario root
ejecuta el comando su, no es necesario introducir la contraseña del usuario.

Este ejemplo usa el comando su de la cuenta user01 para cambiar a la cuenta user02:

[user01@host ~]$ su - user02


Password: user02_password
[user02@host ~]$

Si omite el nombre de usuario, el comando su o su - intenta cambiar a root de forma


predeterminada.

[user01@host ~]$ su -
Password: root_password
[root@host ~]#

El comando su inicia una shell sin inicio de sesión, mientras que el comando su - (con la opción
de guion) inicia una shell de inicio de sesión. La diferencia principal entre los dos comandos es que
su - establece el entorno de la shell como si iniciara una sesión nueva como ese usuario, mientras
que su inicia una shell como ese usuario, pero usa la configuración de entorno del usuario original.

Normalmente, los administradores deben ejecutar su - para obtener una shell con la
configuración de entorno normal del usuario de destino. Si desea obtener más información,
consulte la página del manual bash(1).

nota
El uso más frecuente del comando su es obtener una interfaz de línea de comandos
(prompt de shell) que se ejecuta como otro usuario, generalmente el usuario
root. Sin embargo, puede usar el comando su con la opción -c para ejecutar un
programa arbitrario como otro usuario. Este comportamiento es similar a la utilidad
de Windows runas. Ejecute info su para ver más detalles.

Ejecución de comandos con Sudo


Por razones de seguridad, en algunos casos, los administradores del sistema configuran el usuario
root para que no tenga una contraseña válida. Por lo tanto, los usuarios no pueden iniciar sesión
en el sistema como root directamente con una contraseña. Además, no puede usar su para
obtener una shell interactiva. En este caso, puede usar el comando sudo para obtener acceso a
root.

A diferencia del comando su, sudo por lo general requiere que los usuarios ingresen su propia
contraseña para la autenticación y no la contraseña de la cuenta de usuario a la que intentan
acceder. Es decir, los usuarios que usan sudo para ejecutar comandos como root no necesitan
saber la contraseña root. En su lugar, usan sus propias contraseñas para autenticar el acceso.

En la siguiente tabla, se resumen las diferencias entre los comandos su, su -y sudo :

RH124-RHEL9.0-es-5-20230516 169
capítulo 6 | Gestión de usuarios y grupos locales

su su - sudo

Conviértase en Sí Sí Por comando escalado


nuevo usuario

Entorno Usuario actual Nuevo usuario Usuario actual

Se requiere Nuevo usuario Nuevo usuario Usuario actual


contraseña

Privilegios Igual que el nuevo Igual que el nuevo Definido por configuración
usuario usuario

Actividad Solo comando su Solo comando su Por comando escalado


registrada

Además, puede configurar el comando sudo para permitir que usuarios específicos ejecuten
cualquier comando como otro usuario, o solo algunos comandos como ese usuario. Por ejemplo,
cuando sudo se configura para permitir al usuario user01 ejecutar el comando usermod como
root, puede ejecutar el siguiente comando a fin de bloquear o desbloquear una cuenta de
usuario:

[user01@host ~]$ sudo usermod -L user02


[sudo] password for user01: user01_password
[user01@host ~]$ su - user02
Password: user02_password
su: Authentication failure
[user01@host ~]$

Si un usuario intenta ejecutar un comando como otro usuario, y la configuración de sudo no lo


permite, el bash bloquea el comando, se registra el intento y, de forma predeterminada, se enviará
un correo electrónico al usuario root.

[user02@host ~]$ sudo tail /var/log/secure


[sudo] password for user02: user02_password
user02 is not in the sudoers file. This incident will be reported.
[user02@host ~]$

Otro beneficio de sudo es registrar de manera predeterminada todos los comandos ejecutados en
/var/log/secure.

[user01@host ~]$ sudo tail /var/log/secure


...output omitted...
Mar 9 20:45:46 host sudo[2577]: user01 : TTY=pts/0 ; PWD=/home/user01 ;
USER=root ; COMMAND=/sbin/usermod -L user02
...output omitted...

En Red Hat Enterprise Linux 7 y versiones posteriores, todos los miembros del grupo wheel
pueden usar sudo para ejecutar comandos como cualquier usuario, incluido el usuario root,
usando su propia contraseña.

170 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Advertencia
Históricamente, los sistemas UNIX usan la membresía del grupo wheel para otorgar
o controlar el acceso como superusuario. RHEL 6 no otorgó ningún privilegio
especial al grupo wheel de manera predeterminada. Los administradores de
sistemas que anteriormente usaron este grupo para un propósito no estándar deben
actualizar una configuración anterior, para evitar que usuarios inesperados y no
autorizados obtengan acceso administrativo en RHEL 7 y sistemas posteriores.

Obtención de una shell de root interactiva con Sudo


Para acceder a la cuenta root con sudo, use el comando sudo -i. Este comando cambia a la
cuenta root y ejecuta la shell predeterminada de ese usuario (generalmente bash) y los scripts
de inicio de sesión interactivos asociados. Para ejecutar la shell sin los scripts interactivos, use el
comando sudo -s.

Por ejemplo, un administrador puede obtener una shell interactiva como root en una instancia de
AWS Elastic Cloud Computing (EC2) al usar una autenticación de clave pública de SSH para iniciar
sesión con el usuario normal ec2-user. Luego, ejecute el comando sudo -i para acceder a la
shell del usuario root.

[ec2-user@host ~]$ sudo -i


[sudo] password for ec2-user: ec2-user_password
[root@host ~]#

Configuración de Sudo
El archivo /etc/sudoers es el archivo de configuración principal del comando sudo. Para evitar
problemas si varios administradores intentan editar el archivo al mismo tiempo, puede editarlo solo
con el comando especial visudo. El editor visudo también valida el archivo para garantizar que
no haya errores de sintaxis.

Por ejemplo, la siguiente línea del archivo /etc/sudoers habilita el acceso sudo para miembros
del grupo wheel:

%wheel ALL=(ALL:ALL) ALL

• La cadena %wheel es el usuario o grupo al que se aplica la regla. El símbolo % antes de la


palabra wheel especifica un grupo.

• El comando ALL=(ALL:ALL) especifica que en cualquier host con este archivo (el primer ALL),
los usuarios en el grupo wheel pueden ejecutar comandos como cualquier otro usuario (el
segundo ALL) y cualquier otro grupo (el tercero ALL) en el sistema.

• El comando final ALL especifica que los usuarios en el grupo wheel pueden ejecutar cualquier
comando.

De forma predeterminada, el archivo /etc/sudoers también incluye el contenido de cualquier


archivo del directorio /etc/sudoers.d como parte del archivo de configuración. Con esta
jerarquía, puede agregar el acceso sudo para un usuario simplemente al colocar un archivo
apropiado en ese directorio.

RH124-RHEL9.0-es-5-20230516 171
capítulo 6 | Gestión de usuarios y grupos locales

nota
Puede habilitar o deshabilitar el acceso sudo al copiar un archivo en el directorio o
eliminándolo de él.

En este curso, creará y eliminará archivos en el directorio /etc/sudoers.d para


configurar el acceso sudo para usuarios y grupos.

Para habilitar el acceso sudo completo para el usuario user01, puede crear el archivo /etc/
sudoers.d/user01 con el siguiente contenido:

user01 ALL=(ALL) ALL

Para habilitar el acceso sudo completo para el grupo group01, puede crear el archivo /etc/
sudoers.d/group01 con el siguiente contenido:

%group01 ALL=(ALL) ALL

Para permitir que los usuarios en el grupo games ejecuten el comando id con el usuario
operator, puede crear el archivo /etc/sudoers.d/games con el siguiente contenido:

%games ALL=(operator) /bin/id

También es posible configurar sudo para permitir que un usuario ejecute comandos como otro
usuario sin ingresar su contraseña, con el comando NOPASSWD: ALL:

ansible ALL=(ALL) NOPASSWD: ALL

Si bien otorgar este nivel de acceso a un usuario o grupo implica riesgos de seguridad evidentes,
los administradores del sistema suelen usar este enfoque en instancias de la nube, máquinas
virtuales y sistemas de aprovisionamiento para configurar servidores. La cuenta con este acceso
se debe proteger y puede requerir autenticación de clave pública de SSH para que un usuario que
se encuentra en un sistema remoto pueda acceder a ella.

Por ejemplo, Amazon Machine Image (AMI) oficial de Red Hat Enterprise Linux en Amazon Web
Services Marketplace se envía con las contraseñas root y ec2-user bloqueadas. La cuenta ec2-
user está configurada para permitir el acceso interactivo remoto a través de la autenticación
de clave pública de SSH. El usuario ec2-user también puede ejecutar cualquier comando
como root sin contraseña debido a que la última línea del archivo /etc/sudoers de AMI está
configurada de la siguiente manera:

ec2-user ALL=(ALL) NOPASSWD: ALL

Puede volver a habilitar el requisito de ingresar una contraseña para sudo o puede hacer otros
cambios para reforzar la seguridad como parte de la configuración del sistema.

172 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Referencias
Páginas del manual: su(1), sudo(8), visudo(8) y sudoers(5)

info libc persona (GNU C Library Reference Manual)

• Sección 30.2: "The Persona of a Process"

(El paquete glibc-doc se debe haber instalado para que este nodo info esté
disponible).

RH124-RHEL9.0-es-5-20230516 173
capítulo 6 | Gestión de usuarios y grupos locales

Ejercicio Guiado

Obtención de acceso de superusuario


En este ejercicio, practica cambiar a la cuenta root y ejecutar comandos como root.

Resultados
• Usar el comando sudo para cambiar al usuario root y acceder a la shell interactiva como
root sin tener que saber la contraseña del superusuario.
• Explicar cómo los comandos su y su - pueden afectar al entorno de la shell al ejecutar o
no ejecutar los scripts de inicio de sesión.
• Usar el comando sudo para ejecutar otros comandos con el usuario root.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start users-superuser

Instrucciones
1. En workstation, abra una sesión de SSH servera con el usuario student.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$

2. Explore el entorno de la shell del usuario student. Visualice la información del usuario y
del grupo actual, y muestre el directorio de trabajo actual. También vea las variables de
entorno que especifican el directorio de inicio del usuario y las ubicaciones de los archivos
ejecutables del usuario.

2.1. Ejecute id para ver la información del usuario y grupo actual.

[student@servera ~]$ id
uid=1000(student) gid=1000(student) groups=1000(student),10(wheel)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

2.2. Ejecute pwd para ver el directorio de trabajo actual.

[student@servera ~]$ pwd


/home/student

174 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

2.3. Imprima los valores de las variables HOME y PATH para determinar el directorio de
inicio y la ruta de los archivos ejecutables del usuario, respectivamente.

[student@servera ~]$ echo $HOME


/home/student
[student@servera ~]$ echo $PATH
/home/student/.local/bin:/home/student/bin:/usr/local/bin:/usr/bin:/usr/local/
sbin:/usr/sbin

3. Cambie al usuario root en una shell sin inicio de sesión y explore el nuevo entorno de la
shell.

3.1. Ejecute el comando sudo su en el prompt de shell para convertirse en el usuario


root.

[student@servera ~]$ sudo su


[sudo] password for student: student
[root@servera student]#

3.2. Ejecute id para ver la información del usuario y grupo actual.

[root@servera student]# id
uid=0(root) gid=0(root) groups=0(root)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

3.3. Ejecute pwd para ver el directorio de trabajo actual.

[root@servera student]# pwd


/home/student

3.4. Imprima los valores de las variables HOME y PATH para determinar el directorio de
inicio y la ruta de los archivos ejecutables del usuario, respectivamente.

[root@servera student]# echo $HOME


/root
[root@servera student]# echo $PATH
/root/.local/bin:/root/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/
local/bin

Cuando usa el comando su para convertirse en el usuario root, no conserva la ruta


actual del usuario student. Como puede ver en el siguiente paso, la ruta tampoco es
la ruta del usuario root.
¿Qué sucedió? La diferencia es que no ejecuta su directamente. En cambio,
ejecutó el comando su con el usuario root mediante sudo porque no cuenta con la
contraseña del superusuario. El comando sudo inicialmente anula la variable PATH
del entorno por razones de seguridad. Cualquier comando que se ejecute después de
la anulación inicial todavía puede actualizar la variable PATH, como puede ver en los
siguientes pasos.

3.5. Salga de la shell del usuario root para volver a la shell del usuario student.

RH124-RHEL9.0-es-5-20230516 175
capítulo 6 | Gestión de usuarios y grupos locales

[root@servera student]# exit


exit
[student@servera ~]$

4. Cambie al usuario root en una shell con inicio de sesión y explore el nuevo entorno de la
shell.

4.1. Ejecute el comando sudo su - en el prompt de shell para convertirse en el usuario


root.
El comando sudo puede o no pedirle la contraseña de student, según el período
de espera de sudo. El período de espera predeterminado es de cinco minutos. Si se
ha autenticado en sudo en los últimos cinco minutos, el comando sudo no le pedirá
la contraseña. Si han transcurrido más de cinco minutos desde que se autenticó en
sudo, debe ingresar student como la contraseña para la autenticación en sudo.

[student@servera ~]$ sudo su -


[root@servera ~]#

Observe la diferencia en el prompt de shell en comparación con el de sudo su en el


paso anterior.

4.2. Ejecute id para ver la información del usuario y grupo actual.

[root@servera ~]# id
uid=0(root) gid=0(root) groups=0(root)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

4.3. Ejecute pwd para ver el directorio de trabajo actual.

[root@servera ~]# pwd


/root

4.4. Imprima los valores de las variables HOME y PATH para determinar el directorio de
inicio y la ruta de los archivos ejecutables del usuario, respectivamente.

[root@servera ~]# echo $HOME


/root
[root@servera ~]# echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

Como en el paso anterior, después de que el comando sudo restableció la variable


PATH en la configuración del entorno de shell del usuario student, el comando su
- ejecutó los scripts de inicio de sesión de la shell para root y estableció la variable
PATH con otro valor. El comando su sin la opción de guion (-) no tiene el mismo
comportamiento.

4.5. Salga de la shell del usuario root para volver a la shell del usuario student.

[root@servera ~]# exit


logout
[student@servera ~]$

176 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

5. Verifique que el usuario operator1 pueda ejecutar cualquier comando como cualquier
usuario mediante el uso del comando sudo.

[student@servera ~]$ sudo cat /etc/sudoers.d/operator1


operator1 ALL=(ALL) ALL

6. Conviértase en el usuario operator1 y vea el contenido del archivo /var/log/


messages. Copie el archivo /etc/motd en /etc/motdOLD. Quite el archivo /etc/
motdOLD. Dado que estas operaciones requieren derechos administrativos, use el comando
sudo para ejecutar esos comandos como el superusuario. No cambie a root usando sudo
su o sudo su -. Use redhat como contraseña para el usuario operator1.

6.1. Cambie al usuario operator1.

[student@servera ~]$ su - operator1


Password: redhat
[operator1@servera ~]$

6.2. Intente ver las últimas cinco líneas de /var/log/messages sin usar sudo. No
debería poder.

[operator1@servera ~]$ tail -5 /var/log/messages


tail: cannot open '/var/log/messages' for reading: Permission denied

6.3. Intente ver las últimas cinco líneas de /var/log/messages usando sudo. Debe ser
capaz de realizarse de manera correcta.

[operator1@servera ~]$ sudo tail -5 /var/log/messages


[sudo] password for operator1: redhat
Mar 9 15:53:36 servera su[2304]: FAILED SU (to operator1) student on pts/1
Mar 9 15:53:51 servera su[2307]: FAILED SU (to operator1) student on pts/1
Mar 9 15:53:58 servera su[2310]: FAILED SU (to operator1) student on pts/1
Mar 9 15:54:12 servera su[2322]: (to operator1) student on pts/1
Mar 9 15:54:25 servera su[2353]: (to operator1) student on pts/1

nota
La salida anterior puede diferir en su sistema.

6.4. Intente copiar /etc/motd como /etc/motdOLD sin usar sudo. No debería poder.

[operator1@servera ~]$ cp /etc/motd /etc/motdOLD


cp: cannot create regular file '/etc/motdOLD': Permission denied

6.5. Intente copiar /etc/motd como /etc/motdOLD usando sudo. Debe ser capaz de
realizarse de manera correcta.

[operator1@servera ~]$ sudo cp /etc/motd /etc/motdOLD


[operator1@servera ~]$

RH124-RHEL9.0-es-5-20230516 177
capítulo 6 | Gestión de usuarios y grupos locales

6.6. Intente eliminar /etc/motdOLD sin usar sudo. No debería poder.

[operator1@servera ~]$ rm /etc/motdOLD


rm: remove write-protected regular empty file '/etc/motdOLD'? y
rm: cannot remove '/etc/motdOLD': Permission denied
[operator1@servera ~]$

6.7. Intente eliminar /etc/motdOLD usando sudo. Debe ser capaz de realizarse de
manera correcta.

[operator1@servera ~]$ sudo rm /etc/motdOLD


[operator1@servera ~]$

6.8. Regrese al sistema workstation con el usuario student.

[operator1@servera ~]$ exit


logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish users-superuser

Esto concluye la sección.

178 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Gestión de cuentas de usuarios locales

Objetivos
Crear, modificar y eliminar cuentas de usuario locales.

Gestión de usuarios locales


Se pueden usar herramientas de la línea de comandos para gestionar cuentas de usuarios locales.
En esta sección se revisan algunas herramientas importantes.

Creación de usuarios desde la línea de comandos


El comando useradd username crea un usuario llamado username. Configura el directorio
de inicio del usuario y la información de la cuenta, y crea un grupo privado para el usuario
denominado username. En este punto, la cuenta no tiene configurada una contraseña válida y el
usuario no puede iniciar sesión hasta que se defina una.

El comando useradd --help muestra las opciones básicas para anular los valores
predeterminados. Normalmente, puede usar las mismas opciones con el comando usermod para
modificar un usuario existente.

El archivo /etc/login.defs establece algunas opciones predeterminadas para cuentas


de usuarios, como el rango de números UID válidos y las reglas de vigencia de contraseñas
predeterminadas. Los valores de este archivo afectan solo a las cuentas de usuario creadas
recientemente. Un cambio en este archivo no afectará a los usuarios existentes.

En Red Hat Enterprise Linux 9, el comando useradd asigna a los nuevos usuarios el primer UID
libre mayor o igual a 1000, a menos que especifique explícitamente un UID mediante la opción -u.

Modificación de usuarios existentes desde la línea de


comandos
El comando usermod --help muestra las opciones para modificar una cuenta. Algunas opciones
comunes son las siguientes:

Opciones de usermod: Uso

-a, --append Se utiliza con la opción -G para agregar los


grupos complementarios al conjunto actual
de membresías de grupo del usuario en
lugar de reemplazar el conjunto de grupos
complementarios con un nuevo conjunto.

-c, --comment COMMENT Agregar el texto COMMENT en el campo de


comentarios.

-d, --home HOME_DIR Especificar un directorio de inicio para la


cuenta de usuario.

RH124-RHEL9.0-es-5-20230516 179
capítulo 6 | Gestión de usuarios y grupos locales

Opciones de usermod: Uso

-g, --gid GROUP Especificar el grupo principal para la cuenta


de usuario.

-G, --groups GROUPS Especificar una lista de grupos


complementarios separados por comas para
la cuenta de usuario.

-L, --lock Bloquear la cuenta de usuario.

-m, --move-home Mover el directorio de inicio del usuario a una


nueva ubicación. Debe usarlo con la opción -
d.

-s, --shell SHELL Especificar una shell de inicio de sesión


particular para la cuenta de usuario.

-U, --unlock Desbloquear la cuenta de usuario.

Eliminación de usuarios desde la línea de comandos


El comando userdel username elimina al usuario username de /etc/passwd, pero deja el
directorio de inicio del usuario intacto. El comando userdel -r username elimina al usuario de
/etc/passwd, así como el directorio de inicio del usuario.

Advertencia
Cuando elimina un usuario sin especificar la opción userdel -r, los archivos del
usuario ahora son propiedad de un UID no asignado. Si crea un usuario y a ese
usuario se le asigna el UID del usuario eliminado, la nueva cuenta será propietaria de
esos archivos, lo que supone un riesgo para la seguridad. Por lo general, las políticas
de seguridad de la organización no permiten la eliminación de cuentas de usuario y,
en cambio, bloquean su uso para evitar este escenario.

En el siguiente ejemplo, se demuestra cómo este escenario puede conducir a una


fuga de información:

[root@host ~]# useradd user01


[root@host ~]# ls -l /home
drwx------. 3 user01 user01 74 Mar 4 15:22 user01
[root@host ~]# userdel user01
[root@host ~]# ls -l /home
drwx------. 3 1000 1000 74 Mar 4 15:22 user01
[root@host ~]# useradd -u 1000 user02
[root@host ~]# ls -l /home
drwx------. 3 user02 user02 74 Mar 4 15:23 user02
drwx------. 3 user02 user02 74 Mar 4 15:22 user01

Observe que user02 ahora es propietario de todos los archivos que pertenecieron
a user01. El usuario root puede usar el comando find / -nouser -o -
nogroup para encontrar todos los archivos y directorios que no pertenecen a nadie.

180 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Configuración de contraseñas desde la línea de comandos


El comando passwd username define la contraseña inicial o cambia la contraseña existente del
usuario username. El usuario root puede definir una contraseña en cualquier valor. El terminal
muestra un mensaje si la contraseña no cumple con los criterios mínimos recomendados, pero
puede volver a ingresar la contraseña nueva y el comando passwd la actualiza correctamente.

[root@host ~]# passwd user01


Changing password for user user01.
New password: redhat
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: redhat
passwd: all authentication tokens updated successfully.
[root@host ~]#

Un usuario regular debe elegir una contraseña de al menos ocho caracteres. No use una palabra
del diccionario, el nombre de usuario ni la contraseña anterior.

Rangos de UID
Red Hat Enterprise Linux usa números y rangos de números de UID específicos con fines
específicos.

• UID 0: el UID de la cuenta de superusuario (root).

• UID 1-200: UID de la cuenta del sistema asignados estáticamente a los procesos del sistema.

• UID 201-999: UID asignados a procesos del sistema que no poseen archivos en este sistema.
El software que requiere un UID sin privilegios se asigna dinámicamente desde este conjunto
disponible.

• UID 1000+: el rango de UID para asignar a usuarios regulares sin privilegios.

nota
RHEL 6 y las versiones anteriores usan UID en el rango de 1 a 499 para usuarios del
sistema y UID superiores a 500 para usuarios regulares. Puede cambiar los rangos
predeterminados useradd y groupadd en el archivo /etc/login.defs.

Referencias
Páginas del manual: useradd(8), usermod(8) y userdel(8)

RH124-RHEL9.0-es-5-20230516 181
capítulo 6 | Gestión de usuarios y grupos locales

Ejercicio Guiado

Gestión de cuentas de usuarios locales


En este ejercicio, crea varios usuarios en su sistema y establece contraseñas para esos
usuarios.

Resultados
• Configurar un sistema Linux con cuentas de usuario adicionales.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start users-user

Instrucciones
1. Desde workstation, abra una sesión de SSH en servera con el usuario student y
cambie al usuario root.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#

2. Cree el usuario operator1 y confirme que existe en el sistema.

[root@servera ~]# useradd operator1


[root@servera ~]# tail /etc/passwd
...output omitted...
operator1:x:1002:1002::/home/operator1:/bin/bash

3. Establezca la contraseña de operator1 en redhat.

[root@servera ~]# passwd operator1


Changing password for user operator1.
New password: redhat
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: redhat
passwd: all authentication tokens updated successfully.

182 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

4. Cree los usuarios adicionales operator2 y operator3. Establezca sus contraseñas como
redhat.

4.1. Agregue el usuario operator2. Establezca la contraseña de operator2 en redhat.

[root@servera ~]# useradd operator2


[root@servera ~]# passwd operator2
Changing password for user operator2.
New password: redhat
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: redhat
passwd: all authentication tokens updated successfully.

4.2. Agregue el usuario operator3. Establezca la contraseña de operator3 en redhat.

[root@servera ~]# useradd operator3


[root@servera ~]# passwd operator3
Changing password for user operator3.
New password: redhat
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: redhat
passwd: all authentication tokens updated successfully.

5. Actualice las cuentas de usuario operator1 y operator2 para incluir los comentarios
Operator One y Operator Two, respectivamente. Verifique que existan los comentarios
para las cuentas de usuario.

5.1. Ejecute el comando usermod -c para actualizar los comentarios de la cuenta de


usuario operator1.

[root@servera ~]# usermod -c "Operator One" operator1

5.2. Ejecute el comando usermod -c para actualizar los comentarios de la cuenta de


usuario operator2.

[root@servera ~]# usermod -c "Operator Two" operator2

5.3. Vea el archivo /etc/passwd para confirmar que existen los comentarios para cada
uno de los usuarios operator1 y operator2.

[root@servera ~]# tail /etc/passwd


...output omitted...
operator1:x:1002:1002:Operator One:/home/operator1:/bin/bash
operator2:x:1003:1003:Operator Two:/home/operator2:/bin/bash
operator3:x:1004:1004::/home/operator3:/bin/bash

6. Elimine el usuario operator3 junto con cualquier dato personal del usuario. Confirme que
operator3 no existe.

6.1. Elimine el usuario operator3 del sistema.

RH124-RHEL9.0-es-5-20230516 183
capítulo 6 | Gestión de usuarios y grupos locales

[root@servera ~]# userdel -r operator3

6.2. Confirme que el usuario operator3 no existe.

[root@servera ~]# tail /etc/passwd


...output omitted...
operator1:x:1002:1002:Operator One:/home/operator1:/bin/bash
operator2:x:1003:1003:Operator Two:/home/operator2:/bin/bash

Tenga en cuenta que la salida anterior no muestra la información de la cuenta de


usuario de operator3.

6.3. Confirme que la carpeta de inicio del usuario operator3 no existe.

[root@servera ~]# ls -l /home


total 0
drwx------. 4 devops devops 90 Mar 3 09:59 devops
drwx------. 2 operator1 operator1 62 Mar 9 10:19 operator1
drwx------. 2 operator2 operator2 62 Mar 9 10:19 operator2
drwx------. 3 student student 95 Mar 3 09:49 student

6.4. Salga de la shell del usuario root para volver a la shell del usuario student.

[root@servera ~]# exit


logout
[student@servera ~]$

6.5. Cierre sesión en la máquina servera.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish users-user

Esto concluye la sección.

184 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Gestión de cuentas de grupos locales

Objetivos
Crear, modificar y eliminar cuentas de grupo locales.

Gestión de grupos locales


Varias herramientas de línea de comandos permiten la gestión de grupos. Si bien puede usar la
utilidad Users de la GUI para gestionar grupos, Red Hat recomienda que use herramientas de línea
de comandos.

Creación de grupos desde la línea de comandos


El comando groupadd crea grupos. Sin opciones, el comando groupadd emplea la siguiente
GID disponible de un rango que las variables GID_MIN y GID_MAX especifican en el archivo /
etc/login.defs. De manera predeterminada, el comando asigna un valor de GID mayor que
cualquier otro GID existente, incluso si hay un valor menor disponible.

El comando groupadd con la opción -g especifica un GID para que el grupo use.

[root@host ~]# groupadd -g 10000 group01


[root@host ~]# tail /etc/group
...output omitted...
group01:x:10000:

nota
Debido a la creación automática de grupos privados de usuarios (GID 1000+),
algunos administradores reservan un rango separado de GID para crear grupos
complementarios con otros fines. Sin embargo, esta gestión adicional no es
necesaria, ya que el UID y el GID primario de un usuario no necesitan ser el mismo
número.

El comando groupadd con la opción -r crea grupos del sistema. Al igual que con los grupos
normales, los grupos del sistema usan un GID del rango de GID del sistema válidos enumerados en
el archivo /etc/login.defs. Los ítems de configuración SYS_GID_MIN y SYS_GID_MAX en el
archivo /etc/login.defs definen el rango de GID del sistema.

[root@host ~]# groupadd -r group02


[root@host ~]# tail /etc/group
...output omitted...
group01:x:10000:
group02:x:988:

RH124-RHEL9.0-es-5-20230516 185
capítulo 6 | Gestión de usuarios y grupos locales

Modificación de grupos existentes desde la línea de comandos


El comando groupmod cambia las propiedades de un grupo existente. El comando groupmod con
la opción -n especifica un nuevo nombre para el grupo.

[root@host ~]# groupmod -n group0022 group02


[root@host ~]# tail /etc/group
...output omitted...
group0022:x:988:

Observe que el nombre del grupo se actualiza a group0022 desde group02. El comando
groupmod con la opción -g especifica un nuevo GID.

[root@host ~]# groupmod -g 20000 group0022


[root@host ~]# tail /etc/group
...output omitted...
group0022:x:20000:

Tenga en cuenta que el GID se modifica a 20000 desde 988.

Eliminación de grupos desde la línea de comandos


El comando groupdel elimina grupos.

[root@host ~]# groupdel group0022

nota
No puede eliminar un grupo si es el grupo principal de un usuario existente. De
manera similar a usar el comando userdel, asegúrese primero que ubique los
archivos que son propiedad del grupo.

Cambio de membresía de grupo desde la línea de comandos


La membresía de un grupo se controla con la gestión de usuarios. Use el comando usermod -g
para cambiar el grupo principal de un usuario.

[root@host ~]# id user02


uid=1006(user02) gid=1008(user02) groups=1008(user02)
[root@host ~]# usermod -g group01 user02
[root@host ~]# id user02
uid=1006(user02) gid=10000(group01) groups=10000(group01)

Use el comando usermod -aG para agregar un usuario a un grupo complementario.

[root@host ~]# id user03


uid=1007(user03) gid=1009(user03) groups=1009(user03)
[root@host ~]# usermod -aG group01 user03
[root@host ~]# id user03
uid=1007(user03) gid=1009(user03) groups=1009(user03),10000(group01)

186 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Importante
El comando usermod con la opción -a habilita el modo de adición. Sin la opción
-a, el comando elimina al usuario de cualquiera de los grupos complementarios
actuales que no estén incluidos en la lista de la opción -G.

Compare la membresía del grupo primario y complementario


El grupo principal de un usuario es el grupo que se ve en la cuenta del usuario en el archivo /etc/
passwd. Un usuario puede pertenecer solo a un grupo primario a la vez.

Los grupos complementarios de un usuario son los grupos adicionales que están configurados
para el usuario y visualizados en la entrada del usuario en el archivo /etc/group. Un usuario
puede pertenecer a tantos grupos complementarios como sea necesario para implementar el
acceso a los archivos y los permisos de manera eficaz.

Para configurar permisos de archivos basados en grupos, no existe diferencia entre los grupos
primarios y complementarios de un usuario. Si el usuario pertenece a un grupo al que se le ha
asignado acceso a archivos específicos, ese usuario tiene acceso a esos archivos.

La única distinción entre las membresías principales y complementarias de un usuario es cuando


un usuario crea un archivo. Los archivos nuevos deben tener un propietario de usuario y un
propietario de grupo que se asigna cuando se crea el archivo. El grupo primario del usuario se usa
para la propiedad del grupo del nuevo archivo, a menos lo anulen las opciones del comando.

Cambiar temporalmente su grupo principal


Solo se usa el grupo primario de un usuario para los atributos de creación de archivos nuevos. Sin
embargo, puede cambiar temporalmente su grupo primario a un grupo complementario al que ya
pertenece. Puede cambiar si está a punto de crear archivos, manualmente o con scripts, y desea
asignar un grupo diferente como propietario cuando se crean.

Use el comando newgrp para cambiar su grupo primario, en esta sesión de shell. Puede cambiar
entre cualquier grupo primario o complementario al que pertenezca, pero solo un grupo a la vez
puede ser primario. Su grupo primario vuelve al valor predeterminado si cierra la sesión y vuelve a
iniciarla. En este ejemplo, el grupo group01 se convierte temporalmente en el grupo principal de
este usuario.

[user03@host ~]# id
uid=1007(user03) gid=1009(user03) groups=1009(user03),10000(group01)
[user03@host ~]$ newgrp group01
[user03@host ~]# id
uid=1007(user03) gid=10000(group01) groups=1009(user03),10000(group01)

Referencias
Páginas del manual: group(5), groupadd(8), groupdel(8) y usermod(8)

RH124-RHEL9.0-es-5-20230516 187
capítulo 6 | Gestión de usuarios y grupos locales

Ejercicio Guiado

Gestión de cuentas de grupos locales


En este ejercicio, creará grupos, los usará como grupos complementarios para algunos
usuarios sin cambiar los grupos principales de esos usuarios y configurará uno de los grupos
con acceso sudo para ejecutar comandos como root.

Resultados
• Crear grupos y usarlos como grupos complementarios.
• Configurar acceso sudo para un grupo.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando crea las cuentas de usuario necesarias para configurar el entorno
correctamente.

[student@workstation ~]$ lab start users-group

Instrucciones
1. Desde workstation, abra una sesión de SSH en servera con el usuario student y
cambie al usuario root.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#

2. Cree el grupo complementario operators con el GID de 30000.

[root@servera ~]# groupadd -g 30000 operators

3. Cree el grupo complementario admin sin especificar un GID.

[root@servera ~]# groupadd admin

4. Verifique que el grupo complementario operators y el grupo complementario admin


existan.

188 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

[root@servera ~]# tail /etc/group


...output omitted...
operators:x:30000:
admin:x:30001:

5. Asegúrese de que los usuarios operator1, operator2 y operator3 pertenecen al grupo


operators.

5.1. Agregue los usuarios operator1, operator2 y operator3 al grupo operators.

[root@servera ~]# usermod -aG operators operator1


[root@servera ~]# usermod -aG operators operator2
[root@servera ~]# usermod -aG operators operator3

5.2. Confirme que los usuarios estén en el grupo.

[root@servera ~]# id operator1


uid=1002(operator1) gid=1002(operator1) groups=1002(operator1),30000(operators)
[root@servera ~]# id operator2
uid=1003(operator2) gid=1003(operator2) groups=1003(operator2),30000(operators)
[root@servera ~]# id operator3
uid=1004(operator3) gid=1004(operator3) groups=1004(operator3),30000(operators)

6. Asegúrese de que los usuarios sysadmin1, sysadmin2 y sysadmin3 pertenecen al


grupo admin. Habilite los derechos administrativos para todos los miembros del grupo
admin. Verifique que cualquier miembro del grupo admin pueda ejecutar comandos
administrativos.

6.1. Agregue los usuarios sysadmin1, sysadmin2 y sysadmin3 al grupo admin.

[root@servera ~]# usermod -aG admin sysadmin1


[root@servera ~]# usermod -aG admin sysadmin2
[root@servera ~]# usermod -aG admin sysadmin3

6.2. Confirme que los usuarios estén en el grupo.

[root@servera ~]# id sysadmin1


uid=1005(sysadmin1) gid=1005(sysadmin1) groups=1005(sysadmin1),30001(admin)
[root@servera ~]# id sysadmin2
uid=1006(sysadmin2) gid=1006(sysadmin2) groups=1006(sysadmin2),30001(admin)
[root@servera ~]# id sysadmin3
uid=1007(sysadmin3) gid=1007(sysadmin3) groups=1007(sysadmin3),30001(admin)

6.3. Examine el archivo /etc/group para comprobar las membresías de grupo


complementario.

[root@servera ~]# tail /etc/group


...output omitted...
operators:x:30000:operator1,operator2,operator3
admin:x:30001:sysadmin1,sysadmin2,sysadmin3

RH124-RHEL9.0-es-5-20230516 189
capítulo 6 | Gestión de usuarios y grupos locales

6.4. Cree el archivo /etc/sudoers.d/admin para que los miembros del grupo admin
tengan privilegios administrativos completos.

[root@servera ~]# echo "%admin ALL=(ALL) ALL" >> /etc/sudoers.d/admin

6.5. Cambie al usuario sysadmin1 (un miembro del grupo admin) y asegúrese de poder
ejecutar un comando sudo.

[root@servera ~]# su - sysadmin1


[sysadmin1@servera ~]$ sudo cat /etc/sudoers.d/admin
[sudo] password for sysadmin1: redhat
%admin ALL=(ALL) ALL

6.6. Regrese a la máquina workstation con el usuario student.

[sysadmin1@servera ~]$ exit


logout
[root@servera ~]# exit
logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish users-group

Esto concluye la sección.

190 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Gestión de contraseñas de usuarios

Objetivos
Establecer una política de gestión de contraseñas para los usuarios, y bloquear y desbloquear
manualmente las cuentas de los usuarios.

Contraseñas ocultas y política de contraseñas


Originalmente, las contraseñas cifradas se almacenaban en el archivo /etc/passwd de lectura
global. Estas contraseñas se consideraban adecuadas hasta que los ataques de diccionarios
a contraseñas cifradas se volvieron frecuentes. Las contraseñas con hash criptográfico se
trasladaron al archivo /etc/shadow, que solo el usuario root puede leer.

Al igual que el archivo /etc/passwd, cada usuario tiene una entrada con en el archivo /etc/
shadow. Una entrada de ejemplo del archivo /etc/shadow tiene nueve campos separados por
dos puntos:

[root@host ~]# cat /etc/shadow


...output omitted...
user03:$6$CSsXsd3rwghsdfarf:17933:0:99999:7:2:18113:

Cada campo de este bloque de código está separado por dos puntos:

• user03 : Nombre de la cuenta de usuario.

• $6$CSsXsd3rwghsdfarf : La contraseña con hash criptográfico del usuario.

• 17933 : Días desde la época en que se cambió la contraseña por última vez, donde la época es
1970-01-01 en la zona horaria UTC.

• 0 : El número mínimo de días que deben transcurrir desde el último cambio de contraseña antes
de que el usuario pueda volver a cambiarla.

• 99999 : El número máximo de días que pueden transcurrir sin un cambio de contraseña antes de
que la contraseña caduque. Un campo vacío significa que la contraseña nunca caduca.

• 7 : Cantidad de días para advertir al usuario que su contraseña caducará.

• 2 : Cantidad de días sin actividad, comenzando con el día en que caducó la contraseña, antes de
que la cuenta se bloquee automáticamente.

• 18113 : Día en que la cuenta caduca en días desde la época. Un campo vacío significa que la
cuenta nunca caduca.

• Por lo general, el último campo está vacío y se reserva para su uso en el futuro.

Formato de una contraseña con hash criptográfico


El campo de contraseña con hash criptográfico almacena tres datos: el algoritmo de hash
usado, el valor aleatorio y el hash criptográfico. El valor aleatorio agrega datos aleatorios al hash
criptográfico, para crear un hash único para fortalecer la contraseña con hash criptográfico. Cada
dato está delimitado por el signo del dólar ($).

RH124-RHEL9.0-es-5-20230516 191
capítulo 6 | Gestión de usuarios y grupos locales

$6$CSsXcYG1L/4ZfHr/$2W6evvJahUfzfHpc9X.45Jc6H30E

• 6 : El algoritmo de hash usado para esta contraseña. Un 6 indica un hash SHA-512, el RHEL 9
predeterminado, un 1 indica MD5 y un 5 indica SHA-256.

• CSsXcYG1L/4ZfHr/ : El valor aleatorio en uso para aplicar hash criptográfico a la contraseña;


se elige originalmente al azar.

• 2W6evvJahUfzfHpc9X.45Jc6H30E : El hash criptográfico de la contraseña del usuario; se


combinan el valor aleatorio y la contraseña de texto sin formato y, luego, se aplica un hash
criptográfico para generar este hash de la contraseña.

El motivo principal para combinar un valor aleatorio con la contraseña es defenderse contra los
ataques que usan listas de hash de contraseñas calculadas previamente. La adición de valores
aleatorios cambia los hash resultantes, lo que permite que la lista previamente calculada sea inútil.
Si un atacante obtiene una copia de un archivo /etc/shadow que usa valores aleatorios, necesita
adivinar las contraseñas con fuerza bruta, lo que requiere más tiempo y esfuerzo.

Verificación de contraseña
Cuando un usuario intenta iniciar sesión, el sistema busca la entrada correspondiente al usuario
en el archivo /etc/shadow y combina el valor aleatorio del usuario con la contraseña de texto sin
formato que se ingresó. A continuación, el sistema aplica un hash criptográfico a la combinación
de la contraseña de texto sin formato y valor aleatorio con el algoritmo de hash especificado.
Si el resultado coincide con el hash criptográfico, el usuario ingresó la contraseña correcta. Si el
resultado no coincide con el hash criptográfico, el usuario ingresó una contraseña incorrecta y
el intento de inicio de sesión falla. Este método permite que el sistema determine si el usuario
ingresó la contraseña correcta sin almacenarla en una forma que se puede usar para el inicio de
sesión.

Configuración de vigencia de contraseñas


En el siguiente diagrama, se indican los parámetros de vigencia de contraseñas relevantes que
pueden ajustarse mediante el comando chage para implementar una política de vigencia de
contraseñas. Observe que el nombre del comando es chage que significa "cambiar vigencia". No
confunda el comando con la palabra "cambiar".

Figura 6.1: Parámetros de caducidad de la contraseña

En el siguiente ejemplo, se demuestra cómo el comando chage cambia la política de contraseña


del usuario sysadmin05. El comando define una antigüedad mínima (-m) de cero días, una
vigencia máxima (-M) de 90 días, un período de advertencia (-W) de 7 días y un período de
inactividad (-I) de 14 días.

192 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

[root@host ~]# chage -m 0 -M 90 -W 7 -I 14 sysadmin05

Supongamos que gestiona las políticas de contraseña de usuario en un servidor de Red Hat. El
usuario cloudadmin10 es nuevo en el sistema y usted desea establecer una política de vigencia
de contraseña personalizada. Desea establecer la caducidad de la cuenta en 30 días a partir de
hoy, por lo que debe usar los siguientes comandos:

[root@host ~]# date +%F


2022-03-10
[root@host ~]# date -d "+30 days" +%F
2022-04-09
[root@host ~]# chage -E $(date -d "+30 days" +%F) cloudadmin10
[root@host ~]# chage -l cloudadmin10 | grep "Account expires"
Account expires : Apr 09, 2022

Use el comando date para mostrar la fecha actual.

Use el comando date para obtener la fecha dentro de 30 días.

Use el comando chage con la opción -E para cambiar la fecha de vencimiento para el usuario
cloudadmin10.

Use el comando chage con la opción -l para mostrar la política de vigencia de la contraseña
para el usuario cloudadmin10.

Después de unos días, observa en el archivo de registro /var/log/secure que el usuario


cloudadmin10 tiene un comportamiento extraño. El usuario intentó usar sudo para interactuar
con archivos que pertenecen a otros usuarios. Usted sospecha que el usuario pudo haber dejado
una sesión ssh abierta mientras trabajaba en otra máquina. Desea que el usuario cloudadmin10
cambie la contraseña en el próximo inicio de sesión, por lo que debe usar el siguiente comando:

[root@host ~]# chage -d 0 cloudadmin10

La próxima vez que el usuario cloudadmin10 inicie sesión, se le solicitará que cambie la
contraseña.

nota
El comando date puede calcular una fecha en el futuro. La opción -u informa la
hora en UTC.

[user01@host ~]$ date -d "+45 days" -u


Thu May 23 17:01:20 UTC 2019

Puede cambiar la configuración de vigencia de la contraseña predeterminada en el archivo /


etc/login.defs. Las opciones PASS_MAX_DAYS y PASS_MIN_DAYS establecen la antigüedad
máxima y mínima predeterminada de la contraseña, respectivamente. PASS_WARN_AGE define
el período de advertencia predeterminado de la contraseña. Cualquier cambio en las políticas de
vigencia de contraseñas predeterminadas afecta a los usuarios que se crean después del cambio.
Los usuarios existentes siguen usando la configuración de vigencia de la contraseña anterior en
lugar de las últimas. Para obtener más información sobre el archivo /etc/login.defs, consulte

RH124-RHEL9.0-es-5-20230516 193
capítulo 6 | Gestión de usuarios y grupos locales

el curso Red Hat Security: Linux in Physical, Virtual, and Cloud (RH415) y la página del manual
login.defs(5).

Restricción de acceso
Puede usar el comando usermod para modificar el vencimiento de la cuenta de un usuario. Por
ejemplo, el comando usermod con la opción -L bloquea una cuenta de usuario y el usuario no
puede iniciar sesión en el sistema.

[root@host ~]# usermod -L sysadmin03


[user01@host ~]$ su - sysadmin03
Password: redhat
su: Authentication failure

Si un usuario se va de la empresa en determinada fecha, puede bloquear la cuenta y determinar


su caducidad con un único comando usermod. La fecha debe indicarse como la cantidad de
días desde 1970-01-01 o en el formato AAAA-MM-DD. En el siguiente ejemplo, el comando
usermod bloquea y expira el usuario cloudadmin10 en 2022-08-14.

[root@host ~]# usermod -L -e 2022-08-14 cloudadmin10

Al bloquear una cuenta, evita que el usuario logre la autenticación con una contraseña en el
sistema. Este método se recomienda para evitar el acceso a una cuenta por parte de un ex
empleado de la empresa. Use el comando usermod con la opción -U para habilitar el acceso a la
cuenta nuevamente.

La shell nologin
La shell nologin actúa como una shell de reemplazo para las cuentas de usuario que no están
destinadas a iniciar sesión de forma interactiva en el sistema. Es una buena práctica de seguridad
deshabilitar el inicio de sesión de una cuenta en el sistema, cuando la cuenta no lo requiere.
Por ejemplo, un servidor de correo puede necesitar una cuenta para almacenar correos y una
contraseña para que el usuario realice la autenticación con un cliente de correo para recuperar
correo. Dicho usuario no debe iniciar sesión directamente en el sistema.

Ante una situación como la anterior, una solución común es definir la shell de inicio de sesión del
usuario en /sbin/nologin. Si el usuario intenta iniciar sesión en el sistema directamente, la shell
nologin cierra la conexión.

[root@host ~]# usermod -s /sbin/nologin newapp


[root@host ~]# su - newapp
Last login: Wed Feb 6 17:03:06 IST 2019 on pts/0
This account is currently not available.

Importante
La shell nologin evita el uso interactivo del sistema, pero no evita todo el acceso.
Los usuarios pueden, de todas maneras, realizar la autenticación y cargar o
recuperar archivos a través de aplicaciones, como aplicaciones web, programas de
transferencia de archivos o lectores de correo si usan la contraseña del usuario para
autenticarse.

194 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Referencias
Páginas del manual: chage(1), usermod(8), shadow(5), crypt(3) y
login.defs(5)

RH124-RHEL9.0-es-5-20230516 195
capítulo 6 | Gestión de usuarios y grupos locales

Ejercicio Guiado

Gestión de contraseñas de usuarios


En este ejercicio, configurará políticas de contraseña para varios usuarios.

Resultados
• Forzar un cambio de contraseña cuando el usuario inicia sesión en el sistema por primera
vez.
• Forzar un cambio de contraseña cada 90 días.
• Configurar la cuenta para que caduque 180 días a partir del día actual.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start users-password

Instrucciones
1. Desde workstation, abra una sesión de SSH con el usuario student en la máquina
servera.

[student@workstation ~]$ ssh student@servera


[student@servera ~]$

2. En servera, use el comando usermod para bloquear y desbloquear el usuario


operator1.

2.1. Con el usuario student, use los derechos administrativos para bloquear la cuenta
operator1.

[student@servera ~]$ sudo usermod -L operator1


[sudo] password for student: student

2.2. Intente iniciar sesión como operator1. Este comando debería fallar.

[student@servera ~]$ su - operator1


Password: redhat
su: Authentication failure

2.3. Desbloquee la cuenta operator1.

196 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

[student@servera ~]$ sudo usermod -U operator1

2.4. Intente iniciar sesión como operator1 nuevamente. Esta vez, el comando debería
ser exitoso.

[student@servera ~]$ su - operator1


Password: redhat
...output omitted...
[operator1@servera ~]$

2.5. Cierre sesión en la shell del usuario operator1 para volver a la shell del
usuariostudent.

[operator1@servera ~]$ exit


logout

3. Cambie la directiva de contraseña para el usuario operator1 a fin de solicitar una


contraseña nueva cada 90 días. Confirme que la vigencia de la contraseña se haya
establecido correctamente.

3.1. Cambie al usuario root.

[student@servera ~]$ sudo -i


[sudo] password for student: student
[root@servera ~]#

3.2. Establezca la vigencia máxima de la contraseña del usuario operator1 en 90 días.

[root@servera ~]# chage -M 90 operator1

3.3. Verifique que la contraseña del usuario operator1 caduque 90 días después de que
se modifica.

[root@servera ~]# chage -l operator1


Last password change : Mar 10, 2022
Password expires : Jun 10, 2022
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 90
Number of days of warning before password expires : 7

4. Fuerce un cambio de contraseña en el primer inicio de sesión en la cuenta de operator1.

[root@servera ~]# chage -d 0 operator1

5. Salga con el usuario root de la máquina servera.

RH124-RHEL9.0-es-5-20230516 197
capítulo 6 | Gestión de usuarios y grupos locales

[root@servera ~]# exit


logout
[student@servera ~]$

6. Inicie sesión como operator1 y cambie la contraseña a forsooth123. Después de


configurar la contraseña, vuelva a la shell del usuario student.

6.1. Inicie sesión como operator1 y cambie la contraseña a forsooth123 cuando se le


solicite.

[student@servera ~]$ su - operator1


Password: redhat
You are required to change your password immediately (administrator enforced)
Current password: redhat
New password: forsooth123
Retype new password: forsooth123
...output omitted...
[operator1@servera ~]$

6.2. Salga de la shell del usuario operator1 para volver al usuario student y luego
cambie al usuario root.

[operator1@servera ~]$ exit


logout
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#

7. Configure la cuenta operator1 para que caduque 180 días a partir del día actual.

7.1. Determine la fecha de vencimiento en 180 días. Use el formato %F con el comando
date para obtener el valor exacto. Esta fecha devuelta es un ejemplo; use el valor en
su sistema para los pasos posteriores a este.

[root@servera ~]# date -d "+180 days" +%F


2022-09-06

7.2. Configure la cuenta para que caduque en la fecha que se muestra en el paso anterior.
Por ejemplo:

[root@servera ~]# chage -E 2022-09-06 operator1

7.3. Verifique que la fecha de vencimiento de la cuenta se haya establecido


correctamente.

198 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

[root@servera ~]# chage -l operator1


Last password change : Mar 10, 2022
Password expires : Jun 10, 2022
Password inactive : never
Account expires : Sep 06, 2022
Minimum number of days between password change : 0
Maximum number of days between password change : 90
Number of days of warning before password expires : 7

8. Establezca las contraseñas para que caduquen 180 días a partir de la fecha actual para
todos los usuarios. Use los derechos administrativos para editar el archivo de configuración.

8.1. Establezca PASS_MAX_DAYS en 180 en /etc/login.defs. Use los derechos


administrativos cuando abre el archivo con el editor de texto. Puede usar el comando
vim /etc/login.defs para realizar este paso.

...output omitted...
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be
# used.
# PASS_MIN_DAYS Minimum number of days allowed between
# password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a
# password expires.
#
PASS_MAX_DAYS 180
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
...output omitted...

Importante
La contraseña predeterminada y la configuración de caducidad de la cuenta aplican
a los nuevos usuarios, pero no a los usuarios existentes.

8.2. Regrese al sistema workstation con el usuario student.

[root@servera ~]# exit


logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

RH124-RHEL9.0-es-5-20230516 199
capítulo 6 | Gestión de usuarios y grupos locales

[student@workstation ~]$ lab finish users-password

Esto concluye la sección.

200 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Trabajo de laboratorio

Gestión de usuarios y grupos locales


En este trabajo de laboratorio, definirá una política de contraseña local predeterminada,
creará un grupo complementario de tres usuarios, permitirá que el grupo use sudo para
ejecutar comandos como root y modificará la política de contraseña de un usuario.

Resultados
• Establecer una política de vigencia de contraseña predeterminada de la contraseña del
usuario local.

• Crear y usar un grupo complementario para los nuevos usuarios.

• Crear tres nuevos usuarios con el nuevo grupo complementario.

• Establecer una contraseña inicial para los usuarios creados.

• Configurar los miembros del grupo complementario para usar el comando sudo para
ejecutar cualquier comando como cualquier usuario.

• Establecer una política de vigencia de contraseña específica del usuario.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start users-review

Instrucciones
1. En la máquina workstation, abra una sesión de SSH en la máquina serverb con el usuario
student y cambie al usuario root.
2. En la máquina serverb, asegúrese de que los usuarios creados recientemente tengan
contraseñas que se deben cambiar cada 30 días.
3. Cree el grupo consultants con un GID de 35000.
4. Configure los derechos administrativos para permitir que todos los miembros del grupo
consultants ejecuten cualquier comando como cualquier usuario. Evite usar visudo
para editar el archivo /etc/sudoers. En su lugar, coloque el archivo de configuración en el
directorio /etc/sudoers.d.
5. Cree los usuarios consultant1, consultant2 y consultant3 con el grupo
consultants como grupo complementario.
6. Establezca las contraseñas consultant1, consultant2 y consultant3 como redhat.
7. Configure las cuentas consultant1, consultant2 y consultant3 para que venzan en
90 días a partir del día actual.

RH124-RHEL9.0-es-5-20230516 201
capítulo 6 | Gestión de usuarios y grupos locales

8. Cambie la directiva de contraseña para la cuenta consultant2 a fin de solicitar una


contraseña nueva cada 15 días.
9. Además, fuerce a los usuarios consultant1, consultant2 y consultant3 a cambiar sus
contraseñas en el primer inicio de sesión.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade users-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish users-review

Esto concluye la sección.

202 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Solución

Gestión de usuarios y grupos locales


En este trabajo de laboratorio, definirá una política de contraseña local predeterminada,
creará un grupo complementario de tres usuarios, permitirá que el grupo use sudo para
ejecutar comandos como root y modificará la política de contraseña de un usuario.

Resultados
• Establecer una política de vigencia de contraseña predeterminada de la contraseña del
usuario local.

• Crear y usar un grupo complementario para los nuevos usuarios.

• Crear tres nuevos usuarios con el nuevo grupo complementario.

• Establecer una contraseña inicial para los usuarios creados.

• Configurar los miembros del grupo complementario para usar el comando sudo para
ejecutar cualquier comando como cualquier usuario.

• Establecer una política de vigencia de contraseña específica del usuario.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start users-review

Instrucciones
1. En la máquina workstation, abra una sesión de SSH en la máquina serverb con el usuario
student y cambie al usuario root.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#

2. En la máquina serverb, asegúrese de que los usuarios creados recientemente tengan


contraseñas que se deben cambiar cada 30 días.

2.1. Establezca PASS_MAX_DAYS en 30 en el archivo /etc/login.defs. Use los


derechos administrativos al abrir el archivo con el editor de texto. Puede usar el
comando vim /etc/login.defs para este paso.

RH124-RHEL9.0-es-5-20230516 203
capítulo 6 | Gestión de usuarios y grupos locales

...output omitted...
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be
# used.
# PASS_MIN_DAYS Minimum number of days allowed between
# password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a
# password expires.
#
PASS_MAX_DAYS 30
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
...output omitted...

3. Cree el grupo consultants con un GID de 35000.

[root@serverb ~]# groupadd -g 35000 consultants

4. Configure los derechos administrativos para permitir que todos los miembros del grupo
consultants ejecuten cualquier comando como cualquier usuario. Evite usar visudo
para editar el archivo /etc/sudoers. En su lugar, coloque el archivo de configuración en el
directorio /etc/sudoers.d.

4.1. Cree el archivo /etc/sudoers.d/consultants y agréguele el siguiente contenido.


Puede usar el comando vim /etc/sudoers.d/consultants para este paso.

%consultants ALL=(ALL) ALL

5. Cree los usuarios consultant1, consultant2 y consultant3 con el grupo


consultants como grupo complementario.

[root@serverb ~]# useradd -G consultants consultant1


[root@serverb ~]# useradd -G consultants consultant2
[root@serverb ~]# useradd -G consultants consultant3

6. Establezca las contraseñas consultant1, consultant2 y consultant3 como redhat.

[root@serverb ~]# passwd consultant1


Changing password for user consultant1.
New password: redhat
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: redhat
passwd: all authentication tokens updated successfully.
[root@serverb ~]# passwd consultant2
Changing password for user consultant2.
New password: redhat
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: redhat
passwd: all authentication tokens updated successfully
[root@serverb ~]# passwd consultant3

204 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Changing password for user consultant3.


New password: redhat
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: redhat
passwd: all authentication tokens updated successfully

7. Configure las cuentas consultant1, consultant2 y consultant3 para que venzan en


90 días a partir del día actual.

7.1. Determine la fecha de vencimiento en 90 días. Esta fecha devuelta es un ejemplo; el


valor que ve, para usar en el siguiente paso, se basa en la fecha y hora actuales en su
sistema.

[root@serverb ~]# date -d "+90 days" +%F


2022-06-08

7.2. Configure la fecha de vencimiento de las cuentas consultant1, consultant2 y


consultant3 con el mismo valor determinado en el paso anterior. Por ejemplo:

[root@serverb ~]# chage -E 2022-06-08 consultant1


[root@serverb ~]# chage -E 2022-06-08 consultant2
[root@serverb ~]# chage -E 2022-06-08 consultant3

8. Cambie la directiva de contraseña para la cuenta consultant2 a fin de solicitar una


contraseña nueva cada 15 días.

[root@serverb ~]# chage -M 15 consultant2

9. Además, fuerce a los usuarios consultant1, consultant2 y consultant3 a cambiar sus


contraseñas en el primer inicio de sesión.

9.1. Establezca el último día del cambio de contraseña en 0 para que los usuarios deban
cambiar la contraseña cuando inicien sesión en el sistema por primera vez.

[root@serverb ~]# chage -d 0 consultant1


[root@serverb ~]# chage -d 0 consultant2
[root@serverb ~]# chage -d 0 consultant3

9.2. Regrese al sistema workstation con el usuario student.

[root@serverb ~]# exit


logout
[student@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

RH124-RHEL9.0-es-5-20230516 205
capítulo 6 | Gestión de usuarios y grupos locales

[student@workstation ~]$ lab grade users-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish users-review

Esto concluye la sección.

206 RH124-RHEL9.0-es-5-20230516
capítulo 6 | Gestión de usuarios y grupos locales

Resumen
• Los tipos de cuentas de usuario en Linux son: el superusuario, los usuarios del sistema y los
usuarios normales.

• Un usuario tiene un grupo primario y puede ser miembro de grupos complementarios.

• Los tres archivos críticos que contienen información de usuarios y grupos son /etc/passwd, /
etc/group y /etc/shadow.

• Puede ejecutar comandos como el superusuario con los comandos su y sudo.

• Los comandos useradd, usermod y userdel gestionan usuarios.

• Los comandos groupadd, groupmod y groupdel gestionan grupos.

• El comando passwd gestiona las contraseñas de los usuarios.

• El comando chage se puede usar para configurar y ver la configuración de caducidad de la


contraseña de los usuarios.

RH124-RHEL9.0-es-5-20230516 207
208 RH124-RHEL9.0-es-5-20230516
capítulo 7

Control de acceso a los archivos


Meta Configurar los permisos del sistema de archivos
Linux en los archivos e interpretar los efectos
de seguridad de los distintos parámetros de
configuración de permisos.

Objetivos • Enumerar los permisos del sistema de archivos


en archivos y directorios e interpretar el efecto
de esos permisos en el acceso de los usuarios y
grupos.
• Cambiar los permisos y la propiedad de los
archivos con las herramientas de línea de
comandos.
• Controlar los permisos predeterminados de
los archivos creados por los usuarios, explicar
los efectos de los permisos especiales y usar
permisos especiales y predeterminados para
configurar el propietario del grupo de archivos
creados en un directorio.

Secciones • Interpretación de los permisos del sistema de


archivos de Linux (y cuestionario)
• Gestión de los permisos del sistema de archivos
de la línea de comandos (y ejercicio guiado)
• Gestión de permisos predeterminados y acceso
a archivos (y ejercicio guiado)

Trabajo de Control de acceso a los archivos


laboratorio

RH124-RHEL9.0-es-5-20230516 209
capítulo 7 | Control de acceso a los archivos

Interpretación de los permisos del


sistema de archivos de Linux

Objetivos
Enumerar los permisos del sistema de archivos en archivos y directorios, e interpretar el efecto de
esos permisos en el acceso de los usuarios y grupos.

Permisos del sistema de archivos de Linux


Los permisos de archivos controlan el acceso a los archivos. Los permisos de archivos de Linux son
flexibles y pueden gestionar fácilmente los casos más normales de permisos.

Los archivos tienen tres categorías de usuario a las que se les aplican permisos. El propietario del
archivo es un usuario que normalmente es quien lo creó. También es posible que el propietario del
archivo sea un solo grupo, generalmente el grupo principal del usuario que creó el archivo, pero
esto se puede cambiar.

Pueden establecerse diferentes permisos para el usuario o grupo propietario (permisos de


usuario), el grupo propietario (permisos de grupo) y para otros usuarios del sistema que no sean el
usuario o un miembro del grupo propietario (otros permisos).

Los permisos más específicos tienen prioridad. Los permisos de usuario anulan los permisos de
grupo, lo cual anula los permisos de other.

Como ejemplo de cómo la pertenencia a un grupo permite la colaboración entre usuarios, imagine
que su sistema tiene dos usuarios: alice y bob. alice es miembro de los grupos alice y web,
y bob es miembro de los grupos bob, wheel y web. Cuando alice y bob trabajan juntos, los
archivos deben asociarse con el grupo web y los permisos del grupo deben permitir a ambos
usuarios tener acceso a los archivos.

Se usan tres categorías de permisos: lectura, escritura y ejecución. En la siguiente tabla, se explica
cómo estos permisos afectan el acceso a archivos y directorios.

Efectos de los permisos en archivos y directorios

Permiso Efecto en los archivos Efecto en los directorios

r (lectura) Puede leerse el El contenido del directorio (nombres de archivo)


contenido del archivo. puede detallarse.

w (escritura) Puede cambiarse el Cualquier archivo en el directorio puede crearse o


contenido del archivo. eliminarse.

x (ejecución) Los archivos pueden El directorio puede convertirse en el directorio de


ejecutarse como trabajo actual. Puede ejecutar el comando cd en él,
comandos. pero también se requiere permiso de lectura para
enumerar los archivos que se encuentran allí.

Los usuarios normalmente poseen permisos tanto de lectura como de ejecución en los directorios
de solo lectura, por lo que pueden enumerar el directorio y tener acceso completo de solo
lectura a todos sus contenidos. Si un usuario solo tiene acceso de lectura en un directorio, puede

210 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

enumerar los nombres de los archivos que contiene. Sin embargo, el usuario no puede acceder a
otra información, como permisos o marcas de tiempo. Si un usuario solo tiene acceso de ejecución
en un directorio, no puede enumerar nombres de archivo en el directorio. Si el usuario conoce el
nombre de un archivo para el cual tiene permiso de lectura, puede acceder al contenido de ese
archivo desde fuera del directorio al especificar explícitamente el nombre de archivo relativo.

Todo usuario que sea propietario o cuente con permisos de escritura para el directorio puede
quitar un archivo de él, sin importar la propiedad ni los permisos del archivo en sí. Puede anular
este comportamiento mediante el uso del permiso sticky bit, que se analizará más adelante en
este capítulo.

nota
Los permisos de archivos Linux funcionan de manera diferente al sistema de
permisos del sistema de archivos NTFS para Windows. En Linux, los permisos se
aplican solo al archivo o directorio en el que están configurados. Los subdirectorios
dentro de un directorio no heredan automáticamente los permisos del directorio
principal. Sin embargo, los permisos de un directorio pueden bloquear el acceso al
contenido del directorio si están definidos de manera restrictiva.

El permiso de read en un directorio de Linux es similar a List folder contents en


Windows. El permiso de write en un directorio de Linux es similar a Modify en
Windows. Esto implica la posibilidad de eliminar archivos y subdirectorios. En Linux,
con los permisos write y sticky bit establecidos en un directorio, solo el propietario
del usuario o grupo puede eliminarlos, lo que se asemeja al comportamiento Write
de Windows.

El usuario root en Linux posee los permisos equivalentes a Full Control de


Windows en todos los archivos. Sin embargo, la política de SELinux puede usar
contextos de seguridad de procesos y archivos para restringir el acceso incluso
al usuario root. SELinux se analiza en el curso Red Hat System Administration II
(RH134).

Visualización de permisos y propiedades de archivos y


directorios
El comando ls con la opción -l muestra información detallada sobre permisos y propiedad:

[user@host ~]$ ls -l test


-rw-rw-r--. 1 student student 0 Mar 8 17:36 test

Use el comando ls con la opción -d para mostrar información detallada sobre un directorio, y no
sobre su contenido.

[user@host ~]$ ls -ld /home


drwxr-xr-x. 5 root root 4096 Feb 31 22:00 /home

El primer carácter del listado extenso representa el tipo de archivo, que se interpreta de la
siguiente manera:

• - es un archivo regular.
• d es un directorio.
• l es un enlace simbólico.

RH124-RHEL9.0-es-5-20230516 211
capítulo 7 | Control de acceso a los archivos

• c es un archivo de dispositivo de caracteres.


• b es un archivo de dispositivo de bloque.
• p es un archivo de tubería nombrado.
• s es un archivo de socket local.

Los siguientes nueve caracteres representan los permisos de archivo. Estos caracteres se
interpretan como tres conjuntos de tres caracteres: el primer conjunto son permisos que se
aplican al propietario del archivo. El segundo conjunto son para el propietario del grupo del
archivo. El último conjunto se aplica a todos los demás usuarios (mundiales). Si el conjunto es
una cadena rwx, esa categoría tiene los tres permisos: lectura, escritura y ejecución. Si se ha
reemplazado una letra por un carácter de guion -, entonces esa categoría no tiene ese permiso.

Después de la segunda columna (recuento de enlaces), el primer nombre especifica el propietario


del archivo, y el segundo nombre, el propietario del grupo del archivo.

En el primer ejemplo, los permisos para el usuario student se especifican mediante el primer
conjunto de tres caracteres. El usuario student tiene permisos de lectura y escritura en el
archivo test, pero no tiene permiso de ejecución. El segundo conjunto de tres caracteres son los
permisos para el grupo student: permisos de lectura y escritura en test, pero no de ejecución.
El tercer conjunto de tres caracteres son los permisos para el resto de los usuarios; solo tienen
permiso de lectura para test.

Se aplica el conjunto de permisos más específicos. Por lo tanto, si el usuario student tiene
diferentes permisos del grupo student, y el usuario student también es miembro de ese grupo,
solo se aplican los permisos del usuario propietario. Este permiso permite establecer un conjunto
de permisos más restrictivo en un usuario que el que proporciona su membresía de grupo, cuando
puede no ser práctico eliminar al usuario del grupo.

Ejemplos de efectos de permisos


En los siguientes ejemplos, se ilustra cómo interactúan los permisos de archivos. Para estos
ejemplos, su sistema tiene cuatro usuarios con las siguientes membresías de grupo:

Usuario Membresías de grupo

operator1 operator1, consultant1

database1 database1, consultant1

database2 database2, operator2

contractor1 contractor1, operator2

Esos usuarios trabajan con archivos en el directorio dir. A continuación se incluye un listado
extenso de los archivos en ese directorio:

[database1@host dir]$ ls -la


total 24
drwxrwxr-x. 2 database1 consultant1 4096 Mar 4 10:23 .
drwxr-xr-x. 10 root root 4096 Mar 1 17:34 ..
-rw-rw-r--. 1 operator1 operator1 1024 Mar 4 11:02 app1.log
-rw-r--rw-. 1 operator1 consultant1 3144 Mar 4 11:02 app2.log
-rw-rw-r--. 1 database1 consultant1 10234 Mar 4 10:14 db1.conf
-rw-r-----. 1 database1 consultant1 2048 Mar 4 10:18 db2.conf

212 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

El comando ls con la opción -a muestra los permisos de los archivos ocultos, incluidos los
archivos especiales usados para representar el directorio y su directorio principal. En este ejemplo,
el directorio especial . refleja los permisos de dir, y el directorio especial .., los permisos de su
directorio principal.

Para el archivo db1.conf, el usuario propietario del archivo (database1) tiene permisos de
lectura y escritura en el archivo, pero no tiene permiso de ejecución. El grupo que es propietario
del archivo (consultant1) tiene permisos de lectura y escritura, pero no de ejecución. Todos los
demás usuarios tienen permiso de lectura, pero no de escritura ni de ejecución.

En la siguiente tabla, se muestran algunos efectos de este conjunto de permisos para estos
usuarios:

Efecto ¿Por qué es verdadero este efecto?

El usuario operator1 puede El usuario operator1 es miembro del grupo


cambiar el contenido del archivo consultant1, y ese grupo tiene permisos de lectura y
db1.conf. escritura respecto del archivo db1.conf.

El usuario database1 puede ver y El usuario database1 es propietario del archivo


modificar el contenido del archivo db2.conf y tiene permisos de lectura y de escritura.
db2.conf.

El usuario operator1 puede ver, El usuario operator1 es miembro del grupo


pero no modificar el contenido del consultant1, y ese grupo tiene solamente permiso
archivo db2.conf. de lectura respecto del archivo db2.conf.

Los usuarios database2 y Los permisos other se aplican a los usuarios


contractor1 no tienen acceso al database2 y contractor1, y dichos permisos no
contenido del archivo db2.conf. incluyen permisos de lectura ni escritura.

El usuario operator1 es el único El usuario operator1 y los miembros del grupo


usuario que puede cambiar el operator1 tienen permiso de escritura en el archivo,
contenido del archivo app1.log. pero otros usuarios no lo tienen. Sin embargo, el
único miembro del grupo operator1 es el usuario
operator1.

El usuario database2 puede El usuario database2 no es el propietario del archivo


cambiar el contenido del archivo app2.log y no está en el grupo consultant1; por
app2.log. ende, rigen permisos de other. Los permisos other
otorgan permiso de escritura al archivo.

El usuario database1 puede ver el El usuario database1 es miembro del grupo


contenido del archivo app2.log, consultant1, y ese grupo tiene solo permisos de
pero no modificar el contenido del lectura respecto del archivo app2.log. Si bien los
archivo app2.log. permisos other incluyen permiso de escritura, los
permisos del grupo tienen prioridad.

El usuario database1 puede El usuario database1 tiene permisos de escritura


eliminar los archivos app1.log y en el directorio dir, que se muestra en el directorio
app2.log. especial . y, como tal, puede eliminar cualquier archivo
de ese directorio. Esta operación es posible incluso si
el usuario database1 no tiene permiso de escritura en
los archivos directamente.

RH124-RHEL9.0-es-5-20230516 213
capítulo 7 | Control de acceso a los archivos

Referencias
Página del manual: ls(1)

info coreutils (GNU Coreutils)

• Sección 13: Cambiar atributos de archivos

214 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

Cuestionario

Interpretación de los permisos del


sistema de archivos de Linux
Revise la siguiente información y úsela para responder las preguntas del cuestionario.

El sistema tiene cuatro usuarios asignados a los siguientes grupos:

• El usuario consultant1 es miembro de los grupos consultant1 y database1.


• El usuario operator1 es miembro de los grupos operator1 y database1.
• El usuario contractor1 es miembro de los grupos contractor1 y contractor3.
• El usuario operator2 es miembro de los grupos operator2 y contractor3.

El directorio especial . contiene cuatro archivos con los siguientes permisos:

drwxrwxr-x. operator1 database1 .


-rw-rw-r--. consultant1 consultant1 app1.log
-rw-r--rw-. consultant1 database1 app2.log
-rw-rw-r--. operator1 database1 db1.conf
-rw-r-----. operator1 database1 db2.conf

Elija las respuestas correctas para las siguientes preguntas:

1. ¿Qué archivo regular posee el usuario operator1 y todos los usuarios pueden leer?
a. app1.log
b. app2.log
c. db1.conf
d. db2.conf

2. ¿Qué archivo puede modificar el usuario contractor1?


a. app1.log
b. app2.log
c. db1.conf
d. db2.conf

3. ¿Qué archivo no puede leer el usuario operator2?


a. app1.log
b. app2.log
c. db1.conf
d. db2.conf

RH124-RHEL9.0-es-5-20230516 215
capítulo 7 | Control de acceso a los archivos

4. ¿Qué archivo posee el grupo consultant1?


a. app1.log
b. app2.log
c. db1.conf
d. db2.conf

5. ¿Qué archivos puede eliminar el usuario operator1?


a. Solo db1.conf
b. Solo db2.conf
c. Todos los archivos en el directorio
d. Ninguno de los archivos

6. ¿Qué archivos puede eliminar el usuario operator2?


a. Solo app1.log
b. Solo app2.log
c. Tanto app1.log como app2.log
d. Ninguno de los archivos

216 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

Solución

Interpretación de los permisos del


sistema de archivos de Linux
Revise la siguiente información y úsela para responder las preguntas del cuestionario.

El sistema tiene cuatro usuarios asignados a los siguientes grupos:

• El usuario consultant1 es miembro de los grupos consultant1 y database1.


• El usuario operator1 es miembro de los grupos operator1 y database1.
• El usuario contractor1 es miembro de los grupos contractor1 y contractor3.
• El usuario operator2 es miembro de los grupos operator2 y contractor3.

El directorio especial . contiene cuatro archivos con los siguientes permisos:

drwxrwxr-x. operator1 database1 .


-rw-rw-r--. consultant1 consultant1 app1.log
-rw-r--rw-. consultant1 database1 app2.log
-rw-rw-r--. operator1 database1 db1.conf
-rw-r-----. operator1 database1 db2.conf

Elija las respuestas correctas para las siguientes preguntas:

1. ¿Qué archivo regular posee el usuario operator1 y todos los usuarios pueden leer?
a. app1.log
b. app2.log
c. db1.conf
d. db2.conf

2. ¿Qué archivo puede modificar el usuario contractor1?


a. app1.log
b. app2.log
c. db1.conf
d. db2.conf

3. ¿Qué archivo no puede leer el usuario operator2?


a. app1.log
b. app2.log
c. db1.conf
d. db2.conf

RH124-RHEL9.0-es-5-20230516 217
capítulo 7 | Control de acceso a los archivos

4. ¿Qué archivo posee el grupo consultant1?


a. app1.log
b. app2.log
c. db1.conf
d. db2.conf

5. ¿Qué archivos puede eliminar el usuario operator1?


a. Solo db1.conf
b. Solo db2.conf
c. Todos los archivos en el directorio
d. Ninguno de los archivos

6. ¿Qué archivos puede eliminar el usuario operator2?


a. Solo app1.log
b. Solo app2.log
c. Tanto app1.log como app2.log
d. Ninguno de los archivos

218 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

Gestión de permisos del sistema de


archivos desde la línea de comandos

Objetivos
Cambiar los permisos y la propiedad de los archivos con las herramientas de línea de comandos.

Cambio de permisos de archivos y directorios


El comando chmod tiene las siguientes características: cambia los permisos de archivo y directorio
desde la línea de comandos. Puede interpretarse como "cambiar modo", ya que el modo de un
archivo es otro nombre para los permisos de archivo. Tiene una instrucción de permiso seguida
de una lista de archivos o directorios para cambio. Puede establecer la instrucción de permiso de
forma simbólica o en notación octal (numérica).

Cambiar los permisos con el método simbólico


Use el comando chmod para modificar los permisos de archivos y directorios.

chmod Who/What/Which file|directory

Quién es la clase de usuario, como se muestra en la siguiente tabla. Si no proporciona una clase de
usuario, el comando chmod usa el grupo all como predeterminado.

Quién Conjunto Descripción

u usuario El propietario del archivo.

g grupo Miembro del grupo del archivo.

o otros Usuarios que no son el propietario del archivo ni miembros del


grupo del archivo.

a todos Los tres grupos anteriores.

Qué es el operador que modifica a Cuál, como se muestra en la siguiente tabla.

Qué Operación Descripción

+ agregar Agrega los permisos al archivo.

- borrar Borra los permisos del archivo.

= establecer Establece exactamente los permisos proporcionados para el


exactamente archivo.

Cuál es el modo y especifica los permisos para los archivos o directorios, como se muestra en la
siguiente tabla.

RH124-RHEL9.0-es-5-20230516 219
capítulo 7 | Control de acceso a los archivos

Cuál Modo Descripción

r lectura Acceso de lectura al archivo. Enumeración del acceso al


directorio.

w escritura Permisos de escritura en el archivo o directorio.

x ejecución Ejecución de los permisos del archivo. Permite ingresar al


directorio y acceder a archivos y subdirectorios dentro del
directorio.

X ejecución Permisos de ejecución para un directorio o permisos de ejecución


especial para un archivo si tiene establecido al menos uno de los bits de
ejecución.

El método simbólico de cambiar los permisos del archivo usa letras para representar los grupos de
permisos: u para usuario, g para grupo, o para otros y a para todos.

Con el método simbólico, no debe establecer un grupo completamente nuevo de permisos. En su


lugar, puede cambiar uno o más permisos existentes. Use los caracteres más (+) o menos (-) para
agregar o eliminar permisos, respectivamente, o use el carácter igual (=) para reemplazar todo el
conjunto de un grupo de permisos.

Una sola letra representa los permisos en sí: r para lectura, w para escritura y x para ejecución.
Puede usar una mayúscula X como indicador de permiso para agregar permisos de ejecución solo
si el archivo es un directorio o si la ejecución ya está configurada para usuario, grupo u otro.

En la siguiente lista, se muestran algunos ejemplos para cambiar los permisos con el método
simbólico:

Elimine el permiso de lectura y escritura para el grupo y otros en el archivo document.pdf:

[user@host ~]$ chmod go-rw document.pdf

Agregue un permiso de ejecución para todos en el archivo myscript.sh:

[user@host ~]$ chmod a+x myscript.sh

Puede usar el comando chmod con la opción -R para establecer permisos de manera recursiva en
los archivos, en todo el árbol de directorios. Por ejemplo, el siguiente comando agrega de manera
recursiva permisos de lectura, escritura y ejecución para los miembros del grupo que poseen el
directorio myfolder y los archivos y directorios dentro de este.

[user@host ~]$ chmod -R g+rwx /home/user/myfolder

También puede usar el comando chmod con la opción -R y la opción -X para establecer permisos
simbólicamente. Con el comando chmod, opción X, puede establecer el permiso de ejecución
(búsqueda) en los directorios de modo que se pueda acceder a su contenido, sin cambiar los
permisos en la mayoría de los archivos. Sin embargo, tenga cuidado con la opción X porque si un
archivo tiene un permiso de ejecución establecido, la opción X establece el permiso de ejecución
especificado también en ese archivo.

Por ejemplo, el siguiente comando establece de manera recursiva el acceso de lectura y de


escritura en el directorio demodir y todos sus procesos adicionales para el propietario del grupo,

220 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

pero aplica permisos de ejecución de grupo solo a directorios y archivos que ya tienen permisos de
ejecución establecidos para usuario, grupo u otros.

[root@host opt]# chmod -R g+rwX demodir

Cómo cambiar los permisos con el método octal


Puede usar el comando chmod para cambiar los permisos de archivo con el método octal en lugar
del método simbólico. En el siguiente ejemplo, el carácter # representa un dígito.

chmod ### file|directory

Al usar el método octal, puede representar los permisos con un número octal de tres dígitos
(o cuatro, al establecer permisos avanzados). Un octal de un único dígito puede representar
cualquier valor de 0 a 7.

En la representación de permisos octal de tres dígitos, cada dígito representa un nivel de acceso,
de izquierda a derecha: usuario, grupo y otros. Para determinar cada dígito:

• Comience con 0.
• Para agregar permisos de lectura para este nivel de acceso, agregue 4.
• Para agregar permisos de escritura, agregue 2.
• Para agregar permisos de ejecución, agregue 1.

En el siguiente diagrama, se ilustra cómo los sistemas interpretan el valor de permiso octal 644.

Figura 7.1: Representación visual del método octal

Los administradores experimentados a menudo usan permisos octales para implementar en


archivos únicos o coincidentes y proporcionan un control total de permisos.

En la siguiente lista, se muestran algunos ejemplos para cambiar los permisos con el método octal:

Establezca permisos de lectura y escritura para el usuario, permiso de lectura para el grupo y otros
en el archivo sample.txt:

[user@host ~]$ chmod 644 sample.txt

Establezca permisos de lectura, escritura y ejecución para usuario, permisos de lectura y ejecución
para grupo y ningún permiso para otros en el directorio sampledir:

[user@host ~]$ chmod 750 sampledir

RH124-RHEL9.0-es-5-20230516 221
capítulo 7 | Control de acceso a los archivos

Cambio de la propiedad de grupo o de usuario de un


archivo o directorio
El usuario es propietario de un archivo que crea. De manera predeterminada, los archivos nuevos
son propiedad del grupo, que es el grupo principal del usuario que crea el archivo. En Red Hat
Enterprise Linux, el grupo principal de un usuario suele ser un grupo privado que solamente tiene
a ese usuario como miembro. Para otorgar acceso a un archivo según la membresía de grupo, es
posible que sea necesario cambiar el grupo que es propietario del archivo.

Solo el usuario root puede cambiar el usuario que es propietario de un archivo. Sin embargo, el
propietario del archivo y el usuario root pueden establecer la propiedad del grupo. El usuario
root puede otorgar propiedad del archivo a cualquier grupo, pero solo los usuarios regulares
pueden cambiar la propiedad del grupo del archivo si son miembros del grupo de destino.

Puede cambiar la propiedad del archivo con el comando chown (cambiar propietario). Por
ejemplo, para otorgarle propiedad del archivo app.conf al usuario student, use el siguiente
comando:

[root@host ~]# chown student app.conf

El comando chown con la opción -R cambia recursivamente la propiedad de un árbol de


directorios completo. El siguiente comando otorga propiedad del directorio Pictures y de todos
los archivos y subdirectorios incluidos en él al usuario student:

[root@host ~]# chown -R student Pictures

El comando chown también se puede usar para cambiar el propietario del grupo de un archivo,
anteponiendo el nombre del grupo con dos puntos (:). Por ejemplo, el siguiente comando cambia
la propiedad del grupo del directorio Pictures a admins:

[root@host ~]# chown :admins Pictures

Puede usar el comando chown para cambiar el propietario y el grupo al mismo tiempo. Para ello,
puede usar la sintaxis propietario:grupo. Por ejemplo, para cambiar la propiedad del directorio
Pictures al usuario visitor y el grupo a guests, use el siguiente comando:

[root@host ~]# chown visitor:guests Pictures

En lugar de usar el comando chown, algunos usuarios cambian la propiedad del grupo usando el
comando chgrp. Este comando funciona de manera similar a chown, excepto que solo puede
usarlo para cambiar la propiedad del grupo y no se requieren los dos puntos (:) antes del nombre
del grupo.

222 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

Importante
Puede encontrar una sintaxis alternativa chown que separa al propietario y al grupo
con un punto en lugar de dos puntos:

[root@host ~]# chown owner.group filename

Red Hat recomienda no usar esta sintaxis y usar siempre dos puntos. Debido a que
un punto es un carácter válido en un nombre de usuario, un comando chown puede
malinterpretar su intención. El comando puede interpretar el usuario y el grupo
como un nombre de archivo. En su lugar, solo use dos puntos cuando configure el
usuario y el grupo al mismo tiempo.

Referencias
Páginas del manual: ls(1), chmod(1), chown(1) y chgrp(1)

RH124-RHEL9.0-es-5-20230516 223
capítulo 7 | Control de acceso a los archivos

Ejercicio Guiado

Gestión de permisos del sistema de


archivos desde la línea de comandos
En este ejercicio, usa los permisos del sistema de archivos para crear un directorio en el que
todos los miembros de un grupo particular puedan agregar y eliminar archivos.

Resultados
• Crear un directorio de colaboración al que puedan acceder todos los miembros de un
grupo.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start perms-cli

Instrucciones
1. En workstation, inicie sesión en servera con el usuario student y cambie al usuario
root.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#

2. Cree el directorio /home/consultants.

[root@servera ~]# mkdir /home/consultants

3. Cambie la propiedad del directorio consultants a consultants.

[root@servera ~]# chown :consultants /home/consultants

4. Modifique los permisos del grupo consultants para permitir que los miembros del grupo
creen y eliminen archivos en el directorio /home/consultants.
Los permisos actuales deben impedir que otros accedan a los archivos. Debe establecer los
permisos adecuados.

224 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

4.1. Verifique que los permisos del grupo consultants permitan que los miembros del
grupo creen y eliminen archivos en el directorio /home/consultants.
Tenga en cuenta que el grupo consultants actualmente no tiene permiso de
escritura.

[root@servera ~]# ls -ld /home/consultants


drwxr-xr-x. 2 root consultants 6 Mar 1 12:08 /home/consultants

4.2. Agregue permiso de escritura al grupo consultants. Use el método simbólico para
establecer los permisos adecuados.

[root@servera ~]# chmod g+w /home/consultants


[root@servera ~]# ls -ld /home/consultants
drwxrwxr-x. 2 root consultants 6 Mar 1 13:21 /home/consultants

4.3. Impida que otros accedan a los archivos del directorio /home/consultants. Use el
método octal para establecer los permisos adecuados.

[root@servera ~]# chmod 770 /home/consultants


[root@servera ~]# ls -ld /home/consultants
drwxrwx---. 2 root consultants 6 Mar 1 12:08 /home/consultants/

5. Salga de la shell root y cambie al usuario consultant1. La contraseña es redhat.

[root@servera ~]# exit


logout
[student@servera ~]$ su - consultant1
Password: redhat
[consultant1@servera ~]$

6. Diríjase al directorio /home/consultants y cree un archivo llamado consultant1.txt.

6.1. Cambie al directorio /home/consultants.

[consultant1@servera ~]$ cd /home/consultants

6.2. Cree un archivo vacío denominado consultant1.txt.

[consultant1@servera consultants]$ touch consultant1.txt

7. Enumere las propiedades de grupo y de usuario predeterminadas del nuevo archivo y sus
permisos.

[consultant1@servera consultants]$ ls -l consultant1.txt


-rw-rw-r--. 1 consultant1 consultant1 0 Mar 1 12:53 consultant1.txt

8. Asegúrese de que todos los miembros del grupo consultants puedan editar el archivo
consultant1.txt. Cambie la propiedad del grupo del archivo consultant1.txt a
consultants.

RH124-RHEL9.0-es-5-20230516 225
capítulo 7 | Control de acceso a los archivos

8.1. Use el comando chown para cambiar la propiedad del grupo del archivo
consultant1.txt a consultants.

[consultant1@servera consultants]$ chown :consultants consultant1.txt

8.2. Enumere la nueva propiedad del archivo consultant1.txt.

[consultant1@servera consultants]$ ls -l consultant1.txt


-rw-rw-r--. 1 consultant1 consultants 0 Mar 1 12:53 consultant1.txt

9. Salga de la shell y cambie al usuario consultant2. La contraseña es redhat.

[consultant1@servera consultants]$ exit


logout
[student@servera ~]$ su - consultant2
Password: redhat
[consultant2@servera ~]$

10. Diríjase al directorio /home/consultants. Asegúrese de que el usuario consultant2


puede agregar contenido al archivo consultant1.txt.

10.1. Cambie al directorio /home/consultants. Agregue text al archivo


consultant1.txt.

[consultant2@servera ~]$ cd /home/consultants/


[consultant2@servera consultants]$ echo "text" >> consultant1.txt

10.2. Verifique que el texto esté presente en el archivo consultant1.txt.

[consultant2@servera consultants]$ cat consultant1.txt


text

10.3. Regrese al sistema workstation con el usuario student.

[consultant2@servera consultants]$ exit


logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish perms-cli

Esto concluye la sección.

226 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

Gestión de permisos predeterminados y


acceso a archivos

Objetivos
Controlar los permisos predeterminados de los archivos creados por los usuarios, explicar el
efecto de los permisos especiales y usar permisos especiales y permisos predeterminados para
configurar el propietario del grupo de archivos creados en un directorio.

Permisos especiales
Los permisos especiales son un cuarto tipo de permiso, además del usuario básico, grupo y otros
tipos. Como su nombre lo indica, estos permisos especiales proporcionan funciones adicionales
relacionadas con el acceso más allá de lo que permiten los tipos de permisos básicos. En esta
sección, se describe el impacto de los permisos especiales, que se resumen en la siguiente tabla.

Efectos de los permisos especiales en archivos y directorios

Permiso Efecto en los archivos Efecto en los directorios

u+s (suid) El archivo se ejecuta con No hay efectos.


el usuario propietario del
archivo, no con el usuario
que lo ejecutó.

g+s (sgid) El archivo se ejecuta como Los archivos creados en el directorio han
el grupo propietario. establecido al propietario del grupo para
que coincida con el propietario del grupo del
directorio.

o+t (sticky) No hay efectos. Los usuarios con acceso de escritura en el


directorio solo pueden eliminar los archivos
de los que son propietarios, pero no pueden
eliminar ni forzar el guardado de archivos
cuyos propietarios sean otros usuarios.

El permiso setuid en un archivo ejecutable significa que los comandos se ejecutan con el usuario
que es propietario de ese archivo, en lugar de con el usuario que ejecutó el comando. Un ejemplo
de este caso es el comando passwd:

[user@host ~]$ ls -l /usr/bin/passwd


-rwsr-xr-x. 1 root root 35504 Jul 16 2010 /usr/bin/passwd

En una larga lista, puede identificar los permisos setuid con una minúscula s, donde
normalmente esperaría ver el carácter x (el propietario ejecuta los permisos). Si el propietario no
posee permisos de ejecución, este carácter será reemplazado por una S mayúscula.

El permiso especial setgid en un directorio significa que los archivos creados en el directorio
heredarán la propiedad de grupos del directorio, en lugar de heredarla del usuario que la creó.
Esta función generalmente se usa en directorios colaborativos grupales para poder cambiar

RH124-RHEL9.0-es-5-20230516 227
capítulo 7 | Control de acceso a los archivos

automáticamente un archivo del grupo privado predeterminado al grupo compartido, o si los


archivos de un directorio deben pertenecer siempre a un grupo específico. Un ejemplo de este
comportamiento es el directorio /run/log/journal:

[user@host ~]$ ls -ld /run/log/journal


drwxr-sr-x. 3 root systemd-journal 60 May 18 09:15 /run/log/journal

Si setgid se establece en un archivo ejecutable, significa que los comandos se ejecutan con el
grupo que es propietario del archivo, no con el usuario que ejecutó el comando. Esta condición es
similar a la forma en que funciona setuid. Un ejemplo de este caso es el comando locate:

[user@host ~]$ ls -ld /usr/bin/locate


-rwx--s--x. 1 root slocate 47128 Aug 12 17:17 /usr/bin/locate

En una larga lista, puede identificar los permisos setgid con una s minúscula, donde
normalmente esperaría ver el carácter x (el grupo ejecuta los permisos). Si el grupo no posee
permisos de ejecución, este carácter será reemplazado por una S mayúscula.

Finalmente, el sticky bit para un directorio establece una restricción especial en la eliminación
de archivos. Solo el propietario del archivo (y el usuario root) puede borrar archivos dentro del
directorio. Un ejemplo es el directorio /tmp:

[user@host ~]$ ls -ld /tmp


drwxrwxrwt. 39 root root 4096 Feb 8 20:52 /tmp

En una larga lista, puede identificar los permisos sticky con una minúscula t, donde normalmente
esperaría ver el carácter x (otros ejecutan los permisos). Si otros no tienen permisos de ejecución,
este carácter será reemplazado por una T mayúscula.

Establecer permisos especiales


• Simbólico: setuid = u+s; setgid = g+s; sticky = o+t
• Octal: En el cuarto dígito anterior añadido; setuid = 4; setgid = 2; sticky = 1

Ejemplos de permisos especiales


Agregue el bit setgid en el directorio example mediante el uso del método simbólico:

[user@host ~]# chmod g+s example

Elimine el bit setuid en el directorio example mediante el uso del método simbólico:

[user@host ~]# chmod u-s example

Establezca el bit setgid y agregue permisos de lectura/escritura/ejecución para el usuario y


grupo, sin acceso para otros, en el directorio example con el método octal:

[user@host ~]# chmod 2770 example

Elimine el bit setgid y agregue permisos de lectura/escritura/ejecución para el usuario y grupo,


sin acceso para otros, en el directorio example con el método octal: Tenga en cuenta que debe

228 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

agregar un 0 adicional al comienzo del valor de permisos al eliminar permisos especiales mediante
el uso del método octal:

[user@host ~]# chmod 0770 example

Permisos predeterminados de archivos


Al crearse, se asignan permisos iniciales a un archivo. Dos factores afectan estos permisos
iniciales. En primer lugar, si está creando un archivo o directorio regulares. El segundo es el umask
actual, que significa máscara de creación de archivos de usuario.

Si crea un directorio, sus permisos octales iniciales son 0777 (drwxrwxrwx). Si crea un
archivo regular, sus permisos octales iniciales son 0666 (-rw-rw-rw-). Siempre debe agregar
explícitamente el permiso de ejecución a un archivo regular. Este paso dificulta que un atacante
ponga en peligro un sistema, cree un archivo malicioso y lo ejecute.

Además, la sesión de shell establece un umask para restringir aún más los permisos iniciales de
un archivo. El unmask es una máscara de bits octal usada para borrar los permisos de archivos
y directorios nuevos creados por el proceso. Si se establece un bit en el umask, el permiso
correspondiente se elimina en los archivos nuevos. Por ejemplo, el umask 0002 borra el bit de
escritura para otros usuarios. Los ceros iniciales indican que los permisos especiales, de usuario y
de grupo no están borrados. Un umask de 0077 borra los permisos de todo el grupo y de otros de
los archivos creados recientemente.

El comando umask sin argumentos muestra el valor actual del umask de shell:

[user@host ~]$ umask


0022

Use el comando umask con un argumento octal único para cambiar el umask de la shell actual. El
argumento debe ser un valor octal que se corresponda con el nuevo valor del umask. Puede omitir
los ceros iniciales en el umask. Por ejemplo, umask 077 es lo mismo que umask 0077.

Los valores unmask predeterminados del sistema para usuarios de shell de Bash se definen
en los archivos /etc/login.defs y /etc/bashrc. Los usuarios pueden anular los valores
predeterminados del sistema en sus archivos .bash_profile o .bashrc en sus directorios de
inicio.

RH124-RHEL9.0-es-5-20230516 229
capítulo 7 | Control de acceso a los archivos

Importante
En Red Hat Enterprise Linux 8 y versiones anteriores, si la cuenta de un usuario
tiene un UID de 200 o más y el nombre de usuario y el nombre de grupo principal
de la cuenta son los mismos, el unmask predeterminado es 0002. De lo contrario, la
máscara de usuario predeterminada es 0022.

Red Hat Enterprise Linux 9 está en proceso de cambiar esto para que todas las
cuentas tengan una máscara de usuario de 0022. En RHEL 9.0 y 9.1, cuando inicia
una shell de inicio de sesión, su unmask es 0022. Sin embargo, cuando inicia una
shell interactiva sin inicio de sesión (por ejemplo, cuando inicia gnome-terminal
en la IU gráfica), su máscara de usuario es 0002 si el UID de su cuenta es 200 o
mayor y su grupo principal tiene el mismo nombre que su cuenta de usuario. Este
unmask predeterminado se espera que cambie en futuras versiones de Red Hat
Enterprise Linux 9, de modo que el unmask se establezca de forma predeterminada
en 0022 en todas las circunstancias.

El problema de Bugzilla https://bugzilla.redhat.com/show_bug.cgi?id=2062601 es el


seguimiento de este cambio en el comportamiento de RHEL 9.

Efecto de la utilidad umask en los permisos


En el siguiente ejemplo, se explica cómo el umask afecta los permisos de los archivos y directorios.
Observe los permisos predeterminados de umask para archivos y directorios en la shell actual.

Importante
Los siguientes ejemplos suponen que el unmask de la shell se ha establecido en
0022.

Si crea un archivo regular, sus permisos octales iniciales son 0666 (000 110 110 110, en
representación binaria). Luego, la máscara de usuario 0022 (000 000 010 010) deshabilita el bit
de permiso de escritura para el grupo y otros. El propietario tiene tanto permiso de lectura como
de escritura en los archivos y ambos grupos y otros tienen permiso de lectura (000 110 100 100).

Figura 7.2: Ejemplo de cálculo de umask en un archivo

[user@host ~]$ umask


0022
[user@host ~]$ touch default.txt
[user@host ~]$ ls -l default.txt
-rw-r--r--. 1 user user 0 May 9 01:54 default.txt

Si crea un directorio, sus permisos octales iniciales son 0777 (000 111 111 111). Luego, la máscara de
usuario 0022 (000 000 010 010) deshabilita el bit de permiso de escritura para el grupo y otros.

230 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

El propietario tiene permiso de lectura, escritura y ejecución en los directorios y ambos grupos y
otros tienen permiso de lectura y ejecución (000 111 101 101).

Figura 7.3: Ejemplo de cálculo de umask en un directorio

[user@host ~]$ umask


0022
[user@host ~]$ mkdir default
[user@host ~]$ ls -ld default
drwxr-xr-x. 2 user user 0 May 9 01:54 default

Al establecer el valor de umask en 0, los permisos del archivo para otros cambian de lectura a
lectura y escritura. Los permisos del directorio para otros cambian de lectura y ejecución a lectura,
escritura y ejecución.

[user@host ~]$ umask 0


[user@host ~]$ touch zero.txt
[user@host ~]$ ls -l zero.txt
-rw-rw-rw-. 1 user user 0 May 9 01:54 zero.txt
[user@host ~]$ mkdir zero
[user@host ~]$ ls -ld zero
drwxrwxrwx. 2 user user 0 May 9 01:54 zero

Para enmascarar todos los permisos de archivos y directorios para otros, establezca el valor de
umask en 007.

[user@host ~]$ umask 007


[user@host ~]$ touch seven.txt
[user@host ~]$ ls -l seven.txt
-rw-rw----. 1 user user 0 May 9 01:55 seven.txt
[user@host ~]$ mkdir seven
[user@host ~]$ ls -ld seven
drwxrwx---. 2 user user 0 May 9 01:54 seven

Un umask de 027 garantiza que los nuevos archivos tengan permisos de lectura y escritura para
el usuario y permisos de lectura para el grupo. Los nuevos directorios tienen permiso de lectura y
ejecución para el grupo y no tienen permisos para otros.

RH124-RHEL9.0-es-5-20230516 231
capítulo 7 | Control de acceso a los archivos

[user@host ~]$ umask 027


[user@host ~]$ touch two-seven.txt
[user@host ~]$ ls -l two-seven.txt
-rw-r-----. 1 user user 0 May 9 01:55 two-seven.txt
[user@host ~]$ mkdir two-seven
[user@host ~]$ ls -ld two-seven
drwxr-x---. 2 user user 0 May 9 01:54 two-seven

Cambio de permisos predeterminados


En Red Hat Enterprise Linux 9, el archivo /etc/login.defs establece la máscara de usuario
predeterminada para los usuarios. De forma predeterminada, la línea UMASK especifica que la
máscara de usuario predeterminada es 0022.

En Red Hat Enterprise Linux 9.0 y 9.1, este archivo solo afecta a las shells de inicio de sesión. Si
inicia una nueva ventana de terminal o inicia una shell interactiva sin inicio de sesión de alguna otra
manera, la configuración en /etc/bashrc aún se aplica. Para estos shells, si la UID de la cuenta
es 200 o más y el nombre de usuario y el nombre de grupo principal son los mismos, se le asignará
una máscara de usuario de 0002. De lo contrario, el umask es 0022.

El usuario root puede cambiar la máscara de usuario predeterminada para las shells sin inicio de
sesión interactivas agregando el script de inicio de shell local-umask.sh en el directorio /etc/
profile.d/. En el siguiente ejemplo, se muestra el archivo local-umask.sh:

[root@host ~]# cat /etc/profile.d/local-umask.sh


# Overrides default umask configuration asda sda
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 007
else
umask 022
fi

En el ejemplo anterior, se establece la máscara de usuario en 0007 para usuarios con un UID
mayor que 199 y con un nombre de usuario y un nombre de grupo primario iguales, y en 0022 para
todos los demás. (Se pueden omitir los ceros iniciales). Para establecer unmask en 0022 para
todos, puede crear ese archivo con el siguiente contenido:

# Overrides default umask configuration


umask 022

La máscara de usuario actual de una shell se aplica hasta que cierre la sesión de la shell y vuelva a
iniciarla o hasta que la cambie manualmente con el comando umask.

Referencias
Páginas del manual: bash(1), ls(1), chmod(1) y umask(1)

232 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

Ejercicio Guiado

Gestión de permisos predeterminados y


acceso a archivos
En este ejercicio, controlará los permisos de los archivos creados en un directorio mediante
el uso de la configuración de umask y el permiso setgid.

Resultados
• Crear un directorio compartido en el que el grupo operators pasa automáticamente a
ser propietario de nuevos archivos.

• Probar diversos valores de configuración de umask.

• Ajustar los permisos predeterminados para usuarios específicos.

• Verifique el cambio.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start perms-default

Instrucciones
1. Inicie sesión en el sistema servera con el usuario student.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$

2. Cambie al usuario operator1 con redhat como contraseña.

[student@servera ~]$ su - operator1


Password: redhat
[operator1@servera ~]$

3. Mencione el valor de umask predeterminado del usuario operator1.

[operator1@servera ~]$ umask


0022

RH124-RHEL9.0-es-5-20230516 233
capítulo 7 | Control de acceso a los archivos

4. Cree un directorio /tmp/shared. En el directorio /tmp/shared, cree un archivo


defaults. Observe los permisos predeterminados.

4.1. Cree el directorio /tmp/shared. Enumere los permisos del nuevo directorio.

[operator1@servera ~]$ mkdir /tmp/shared


[operator1@servera ~]$ ls -ld /tmp/shared
drwxr-xr-x. 2 operator1 operator1 6 Feb 4 14:06 /tmp/shared

4.2. Cree un archivo defaults en el directorio /tmp/shared.

[operator1@servera ~]$ touch /tmp/shared/defaults

4.3. Enumere los permisos del nuevo archivo.

[operator1@servera ~]$ ls -l /tmp/shared/defaults


-rw-r--r--. 1 operator1 operator1 0 Feb 4 14:09 /tmp/shared/defaults

5. Cambie la propiedad del directorio /tmp/shared al grupo operators. Confirme la nueva


propiedad y los permisos.

5.1. Cambie la propiedad del directorio /tmp/shared al grupo operators.

[operator1@servera ~]$ chown :operators /tmp/shared

5.2. Enumere los permisos del directorio /tmp/shared.

[operator1@servera ~]$ ls -ld /tmp/shared


drwxr-xr-x. 2 operator1 operators 22 Feb 4 14:09 /tmp/shared

5.3. Cree un archivo group en el directorio /tmp/shared. Enumere los permisos del
archivo.

[operator1@servera ~]$ touch /tmp/shared/group


[operator1@servera ~]$ ls -l /tmp/shared/group
-rw-r--r--. 1 operator1 operator1 0 Feb 4 17:00 /tmp/shared/group

nota
El propietario del grupo del archivo /tmp/shared/group no es operators, sino
operator1.

6. Asegúrese de que los archivos creados en el directorio /tmp/shared sean propiedad del
grupo operators.

6.1. Establezca el ID de grupo al grupo operators para el directorio /tmp/shared.

[operator1@servera ~]$ chmod g+s /tmp/shared

6.2. Cree un archivo ops_db.txt en el directorio /tmp/shared.

234 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

[operator1@servera ~]$ touch /tmp/shared/ops_db.txt

6.3. Verifique que el grupo operators es el propietario del grupo para el nuevo archivo.

[operator1@servera ~]$ ls -l /tmp/shared/ops_db.txt


-rw-r--r--. 1 operator1 operators 0 Feb 4 16:11 /tmp/shared/ops_db.txt

7. Cree un archivo ops_net.txt en el directorio /tmp/shared. Registre la propiedad y los


permisos. Cambie el umask para el usuario operator1. Cree un archivo ops_prod.txt.
Registre la propiedad y los permisos del archivo ops_prod.txt.

7.1. Cree un archivo ops_net.txt en el directorio /tmp/shared.

[operator1@servera ~]$ touch /tmp/shared/ops_net.txt

7.2. Enumere los permisos del archivo ops_net.txt.

[operator1@servera ~]$ ls -l /tmp/shared/ops_net.txt


-rw-r--r--. 1 operator1 operators 5 Feb 0 15:43 /tmp/shared/ops_net.txt

7.3. Cambie el umask para el usuario operator1 a 027. Confirme el cambio.

[operator1@servera ~]$ umask 027


[operator1@servera ~]$ umask
0027

7.4. Cree un archivo ops_prod.txt en el directorio /tmp/shared/. Verifique que


los archivos creados recientemente tengan acceso de solo lectura para el grupo
operators y sin acceso para otros usuarios.

[operator1@servera ~]$ touch /tmp/shared/ops_prod.txt


[operator1@servera ~]$ ls -l /tmp/shared/ops_prod.txt
-rw-r-----. 1 operator1 operators 0 Feb 0 15:56 /tmp/shared/ops_prod.txt

8. Abra una nueva ventana de terminal e inicie sesión en servera como operator1.

[student@workstation ~]$ ssh operator1@servera


...output omitted...
[operator1@servera ~]$

9. Enumere el valor de umask para operator1.

[operator1@servera ~]$ umask


0022

10. Cambie el valor predeterminado de umask para el usuario operator1. El nuevo valor
de umask prohíbe el acceso a los usuarios que no pertenezcan al grupo. Confirme que el
umask presenta cambios.

RH124-RHEL9.0-es-5-20230516 235
capítulo 7 | Control de acceso a los archivos

10.1. Cambie el valor predeterminado de umask para el usuario operator1 a 007.

[operator1@servera ~]$ echo "umask 007" >> ~/.bashrc


[operator1@servera ~]$ cat ~/.bashrc
# .bashrc

# Source global definitions


if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
...output omitted...
umask 007

10.2. Cierre la sesión y vuelva a iniciar sesión con el usuario operator1. Confirme que el
cambio sea permanente.

[operator1@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$ ssh operator1@servera
...output omitted...
[operator1@servera ~]$ umask
0007

11. Cree un archivo ops_prod2.txt en el directorio /tmp/shared/. Verifique que los


archivos creados recientemente tengan acceso de lectura y escritura para el grupo
operators y que no tengan acceso para otros usuarios debido a la nueva máscara de
usuario de 007.

[operator1@servera ~]$ touch /tmp/shared/ops_prod2.txt


[operator1@servera ~]$ ls -l /tmp/shared/ops_prod2.txt
-rw-rw----. 1 operator1 operators 0 Feb 0 15:56 /tmp/shared/ops_prod2.txt

12. En servera, cierre todas las shells de usuario operator1 y student. Regrese al sistema
workstation con el usuario student.

Advertencia
Si no sale de todas las shells operator1, el script de finalización fallará.

[operator1@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

236 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

[student@workstation ~]$ lab finish perms-default

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 237
capítulo 7 | Control de acceso a los archivos

Trabajo de laboratorio

Control de acceso a los archivos


En este trabajo de laboratorio, configura permisos en los archivos y configura un directorio
que los usuarios de un grupo particular pueden usar para compartir archivos en el sistema de
archivos local.

Resultados
• Crear un directorio donde los usuarios puedan trabajar de forma conjunta en los archivos.

• Crear archivos que se asignan automáticamente a la propiedad del grupo.

• Crear archivos a los que no se pueda acceder fuera del grupo.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start perms-review

Instrucciones
1. Inicie sesión en serverb con el usuario student. Ejecute el comando sudo -i en el
prompt de shell para convertirse en el usuario root. Use student como contraseña del
usuario student.
2. Cree un directorio /home/techdocs.
3. Cambie la propiedad del directorio /home/techdocs al grupo techdocs.
4. Verifique que los usuarios en el grupo techdocs no puedan crear archivos en el directorio /
home/techdocs.
5. Establezca permisos en el directorio /home/techdocs. En el directorio /home/techdocs,
configure setgid (2), permisos de lectura/escritura/ejecución (7) para el propietario/
usuario y grupo, y ningún permiso (0) para otros usuarios.
6. Verifique que los permisos hayan sido establecidos correctamente.
El grupo techdocs ahora tiene permiso de escritura.
7. Confirme que los usuarios en el grupo techdocs ahora pueden crear y editar archivos en
el directorio /home/techdocs. Los usuarios que no forman parte del grupo techdocs no
pueden editar ni crear archivos en el directorio /home/techdocs. Los usuarios tech1 y
tech2 están en el grupo techdocs. El usuario database1 no está en ese grupo.
8. Modifique el archivo /etc/login.defs para ajustar la máscara de usuario predeterminada
para las shells de inicio de sesión. Los usuarios normales deben tener una configuración de
umask que permita al usuario y al grupo crear, escribir y ejecutar archivos y directorios, y
evitar que otros usuarios vean, modifiquen o ejecuten nuevos archivos y directorios.

238 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade perms-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish perms-review

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 239
capítulo 7 | Control de acceso a los archivos

Solución

Control de acceso a los archivos


En este trabajo de laboratorio, configura permisos en los archivos y configura un directorio
que los usuarios de un grupo particular pueden usar para compartir archivos en el sistema de
archivos local.

Resultados
• Crear un directorio donde los usuarios puedan trabajar de forma conjunta en los archivos.

• Crear archivos que se asignan automáticamente a la propiedad del grupo.

• Crear archivos a los que no se pueda acceder fuera del grupo.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start perms-review

Instrucciones
1. Inicie sesión en serverb con el usuario student. Ejecute el comando sudo -i en el
prompt de shell para convertirse en el usuario root. Use student como contraseña del
usuario student.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#

2. Cree un directorio /home/techdocs.

2.1. Use el comando mkdir para crear un directorio /home/techdocs.

[root@serverb ~]# mkdir /home/techdocs

3. Cambie la propiedad del directorio /home/techdocs al grupo techdocs.

3.1. Use el comando chown para cambiar la propiedad del grupo para el directorio /home/
techdocs al grupo techdocs.

[root@serverb ~]# chown :techdocs /home/techdocs

240 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

4. Verifique que los usuarios en el grupo techdocs no puedan crear archivos en el directorio /
home/techdocs.

4.1. Use el comando su para cambiar al usuario tech1.

[root@serverb ~]# su - tech1


[tech1@serverb ~]$

4.2. Cree un archivo techdoc1.txt en el directorio /home/techdocs. Este paso debería


fallar.
Si bien el directorio /home/techdocs es propiedad del grupo techdocs y tech1 es
parte del grupo techdocs, no es posible crear un archivo en ese directorio. La razón es
porque el grupo techdocs no tiene permiso de escritura.

[tech1@serverb ~]$ touch /home/techdocs/techdoc1.txt


touch: cannot touch '/home/techdocs/techdoc1.txt': Permission denied

4.3. Enumere los permisos del directorio.

[tech1@serverb ~]$ ls -ld /home/techdocs/


drwxr-xr-x. 2 root techdocs 6 Feb 5 16:05 /home/techdocs/

5. Establezca permisos en el directorio /home/techdocs. En el directorio /home/techdocs,


configure setgid (2), permisos de lectura/escritura/ejecución (7) para el propietario/
usuario y grupo, y ningún permiso (0) para otros usuarios.

5.1. Salga de la shell del usuario tech1.

[tech1@serverb ~]$ exit


logout
[root@serverb ~]#

5.2. Establezca el permiso del grupo para el directorio /home/techdocs. Configure


setgid: permisos de lectura, escritura y ejecución para el propietario y el grupo, y
ningún permiso para otros usuarios.

[root@serverb ~]# chmod 2770 /home/techdocs

6. Verifique que los permisos hayan sido establecidos correctamente.

[root@serverb ~]# ls -ld /home/techdocs


drwxrws---. 2 root techdocs 6 Feb 4 18:12 /home/techdocs/

El grupo techdocs ahora tiene permiso de escritura.


7. Confirme que los usuarios en el grupo techdocs ahora pueden crear y editar archivos en
el directorio /home/techdocs. Los usuarios que no forman parte del grupo techdocs no
pueden editar ni crear archivos en el directorio /home/techdocs. Los usuarios tech1 y
tech2 están en el grupo techdocs. El usuario database1 no está en ese grupo.

7.1. Cambie al usuario tech1. Cree un archivo techdoc1.txt en el directorio /home/


techdocs. Agregue texto al archivo /home/techdocs/techdoc1.txt. Salga de la
shell del usuario tech1.

RH124-RHEL9.0-es-5-20230516 241
capítulo 7 | Control de acceso a los archivos

[root@serverb ~]# su - tech1


[tech1@serverb ~]$ touch /home/techdocs/techdoc1.txt
[tech1@serverb ~]$ ls -l /home/techdocs/techdoc1.txt
-rw-r--r--. 1 tech1 techdocs 0 Feb 5 16:42 /home/techdocs/techdoc1.txt
[tech1@serverb ~]$ echo "This is the first tech doc."
> /home/techdocs/techdoc1.txt
[tech1@serverb ~]$ exit
logout
[root@serverb ~]#

7.2. Cambie al usuario tech2. Muestre el contenido del archivo /home/techdocs/


techdoc1.txt. Cree un archivo techdoc2.txt en el directorio /home/techdocs.
Salga de la shell del usuario tech2.

[root@serverb ~]# su - tech2


[tech2@serverb ~]$ cd /home/techdocs
[tech2@serverb techdocs]$ cat techdoc1.txt
This is the first tech doc.
[tech2@serverb techdocs]$ touch /home/techdocs/techdoc2.txt
[tech2@serverb techdocs]$ ls -l
total 4
-rw-r--r--. 1 tech1 techdocs 28 Feb 5 17:43 techdoc1.txt
-rw-r--r--. 1 tech2 techdocs 0 Feb 5 17:45 techdoc2.txt
[tech2@serverb techdocs]$ exit
logout
[root@serverb ~]#

7.3. Cambie al usuario database1. Muestre el contenido del archivo /home/techdocs/


techdoc1.txt. Recibe un mensaje Permission Denied. Verifique que el usuario
database1 no tenga acceso al archivo. Salga de la shell del usuario database1.
Ingrese el siguiente comando largo echo en una sola línea:

[root@serverb ~]# su - database1


[database1@serverb ~]$ cat /home/techdocs/techdoc1.txt
cat: /home/techdocs/techdoc1.txt: Permission denied
[database1@serverb ~]$ ls -l /home/techdocs/techdoc1.txt
ls: cannot access '/home/techdocs/techdoc1.txt': Permission denied
[database1@serverb ~]$ exit
logout
[root@serverb ~]#

8. Modifique el archivo /etc/login.defs para ajustar la máscara de usuario predeterminada


para las shells de inicio de sesión. Los usuarios normales deben tener una configuración de
umask que permita al usuario y al grupo crear, escribir y ejecutar archivos y directorios, y
evitar que otros usuarios vean, modifiquen o ejecuten nuevos archivos y directorios.

8.1. Determine el umask del usuario student. Cambie a la shell de inicio de sesión
student. Salga de la shell cuando termine.

242 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

[root@serverb ~]# su - student


[student@serverb ~]$ umask
0022
[student@serverb ~]$ exit
logout
[root@serverb ~]#

8.2. Edite el archivo /etc/login.defs y establezca una máscara de usuario de 007. El


archivo /etc/login.defs ya contiene una definición de umask. Busque el archivo y
actualícelo con el valor adecuado.

[root@serverb ~]# cat /etc/login.defs


...output omitted...
UMASK 007
...output omitted...

8.3. Con el usuario student, verifique que el umask global cambie a 007.

[root@serverb ~]# exit


logout
[student@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$ ssh student@serverb
...output omitted...
[student@serverb ~]$ umask
0007

8.4. Regrese al sistema workstation con el usuario student.

[student@serverb ~]$ exit


logout
Connection to serverb closed.
[student@workstation ~]$

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade perms-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish perms-review

RH124-RHEL9.0-es-5-20230516 243
capítulo 7 | Control de acceso a los archivos

Esto concluye la sección.

244 RH124-RHEL9.0-es-5-20230516
capítulo 7 | Control de acceso a los archivos

Resumen
• Los permisos de propiedad de archivos tienen tres categorías. Un archivo es propiedad de
un usuario, un único grupo y otros usuarios. Se aplicarán los permisos más específicos. Los
permisos de usuario anulan los permisos de grupo, y los permisos de grupo anulan los permisos
de otros.

• El comando ls con la opción -l expande la lista del archivo para incluir tanto los permisos de un
archivo como su propiedad.

• El comando chmod cambia los permisos de archivo desde la línea de comandos.

• El comando chmod puede usar uno de dos métodos para representar permisos: simbólico u
octal.

• El comando chown cambia la propiedad del archivo. El comando chown con la opción -R
cambia recursivamente la propiedad de un árbol de directorios.

• El comando umask sin argumentos muestra el valor actual de umask de la shell. Todos los
procesos del sistema tienen un umask.

• Los valores de la máscara de usuario predeterminados para Bash se definen en el archivo /etc/
login.defs y pueden verse afectados por la configuración de los archivos /etc/profile y /
etc/bashrc, los archivos en /etc/profile.d o los archivos de inicialización de la shell de su
cuenta.

• Los permisos especiales suid, sgid y sticky proporcionan funciones adicionales


relacionadas con el acceso a los archivos.

RH124-RHEL9.0-es-5-20230516 245
246 RH124-RHEL9.0-es-5-20230516
capítulo 8

Monitoreo y gestión de
procesos Linux
Meta Evaluar y controlar los procesos que se ejecutan en
un sistema Red Hat Enterprise Linux.

Objetivos • Determinar el estado, el uso de recursos y la


propiedad de los programas en ejecución en un
sistema para controlarlos.
• Usar el control de trabajo Bash para gestionar
múltiples procesos iniciados desde la misma
sesión de terminal.
• Usar comandos para finalizar procesos y
comunicarse con ellos, definir las características
de un proceso daemon y detener sesiones y
procesos de usuario.
• Definir el promedio de carga y determinar los
procesos del servidor que consumen muchos
recursos.

Secciones • Estados del proceso y ciclo de vida (y


cuestionario)
• Control de trabajos (y ejercicio guiado)
• Finalización de procesos (y ejercicio guiado)
• Monitoreo de actividades del proceso (y
ejercicio guiado)

Trabajo de Monitoreo y gestión de procesos Linux


laboratorio

RH124-RHEL9.0-es-5-20230516 247
capítulo 8 | Monitoreo y gestión de procesos Linux

Estados del proceso y ciclo de vida

Objetivos
Determinar el estado, el uso de recursos y la propiedad de los programas en ejecución en un
sistema para controlarlos.

Definición de un proceso
Un proceso es una instancia de un programa ejecutable que se inició y se encuentra en
funcionamiento. Desde el momento en que se crea un proceso, consta de los siguientes ítems:

• Un espacio de direcciones que incluye la memoria asignada


• Propiedades de seguridad, que incluyen credenciales y privilegios de propiedad
• Uno o más subprocesos de ejecución de código de programa
• Un estado del proceso

El entorno de un proceso es una lista de información que incluye los siguientes ítems:

• Variables locales y globales


• Un contexto de programación actual
• Recursos asignados del sistema, como descriptores de archivos y puertos de red

Un proceso principal existente duplica su propio espacio de direcciones, que se conoce


como elevación del proceso para crear una estructura de proceso secundaria. Se asigna una
identificación de proceso (PID) única a cada proceso nuevo para su rastreo y por motivos de
seguridad. La PID y el ID del proceso principal (PPID) son elementos del entorno del proceso
nuevo. Cualquier proceso puede crear un proceso adicional. Todos los procesos derivan del primer
proceso de sistemas, systemd, en un sistema Red Hat.

Figura 8.1: Ciclo de vida del proceso

A través del proceso de bifurcación, un proceso adicional hereda identidades de seguridad,


descriptores de archivos actuales y anteriores, privilegios de recursos y puertos, variables de
entorno y código de programa. Luego, un proceso adicional puede ejecutar su propio código de
programa.

Normalmente, un proceso principal duerme cuando se ejecuta el proceso adicional y establece


una solicitud de espera para que se señale cuando finalice el proceso adicional. Después de que el
proceso adicional sale, cierra o descarta sus recursos y su entorno, y deja un recurso zombie, que
es una entrada en la tabla de procesos. El proceso principal, que se señala como activo una vez
que finaliza el proceso adicional, limpia la tabla de procesos de la entrada del proceso adicional y

248 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

libera el último recurso del proceso adicional. El proceso principal continúa con la ejecución de su
propio código de programa.

Descripción de los estados del proceso


En un sistema operativo de funciones múltiples, cada CPU (o núcleo de CPU) puede trabajar
en un proceso por vez. Mientras se ejecuta un proceso, sus requisitos inmediatos en cuanto a
asignación de recursos y tiempo de la CPU cambian. Los procesos reciben un estado, que cambia
en la medida en que las circunstancias así lo exijan.

En el siguiente diagrama y la siguiente tabla, se describen los estados de los procesos de Linux en
detalle.

Figura 8.2: Estados de los procesos de Linux

Estados de los procesos de Linux

Nombre Indicador
Nombre y descripción del estado definido por el kernel

En R TASK_RUNNING: El proceso se está ejecutando en una CPU o se


ejecución encuentra en espera de su ejecución. El proceso puede estar ejecutando
rutinas del usuario o rutinas del kernel (llamadas del sistema); también
puede estar en cola y listo cuando esté en el estado En ejecución (o
Ejecutable).

En espera S TASK_INTERRUPTIBLE: El proceso se encuentra en espera de que se


dé cierta condición: una solicitud de hardware, el acceso a un recurso
del sistema o una señal. Cuando un evento o una señal cumplen con la
condición, el proceso regresa al estado En ejecución.

D TASK_UNINTERRUPTIBLE: Este proceso también se encuentra En


espera, pero a diferencia del estado S, no responde a las señales. Solo
se usa cuando la interrupción del proceso puede dar lugar a un estado
imprevisto del dispositivo.

RH124-RHEL9.0-es-5-20230516 249
capítulo 8 | Monitoreo y gestión de procesos Linux

Nombre Indicador
Nombre y descripción del estado definido por el kernel

K TASK_KILLABLE: Igual al estado D ininterrumpido, solo que modificado


para permitir que la tarea en espera responda a la señal de anulación
(salida completa). Las utilidades suelen mostrar procesos anulables
como el estado D.

I TASK_REPORT_IDLE: Un subconjunto del estado D. El kernel no


cuenta estos procesos cuando calcula el promedio de carga. Se
utiliza para subprocesos de kernel. Se establecen los indicadores
TASK_UNINTERRUPTABLE y TASK_NOLOAD. De manera similar a
TASK_KILLABLE, también es un subconjunto del estado D. Acepta
señales fatales.

Detenido T TASK_STOPPED: El proceso se ha Detenido, generalmente porque


otro usuario u otro proceso lo señalizó. Otra señal puede hacer que el
proceso continúe (se reanude) y regrese al estado En ejecución.

T TASK_TRACED: Un proceso que se está depurando también se


encuentra temporalmente detenido y comparte el mismo indicador de
estado T.

Zombie Z EXIT_ZOMBIE: Un proceso adicional señala su proceso principal cuando


finaliza. Se liberan todos los recursos, menos la identidad del proceso
(PID).

X EXIT_DEAD: Cuando el proceso principal limpia (obtiene) la estructura


del proceso adicional restante, el proceso se libera completamente. Este
estado no puede observarse en utilidades de listas de procesos.

Importancia de los estados del proceso


Al solucionar problemas de un sistema, es importante comprender cómo se comunica el kernel
con los procesos y cómo los procesos se comunican entre sí. El sistema asigna un estado a cada
proceso nuevo. La columna S del comando top o la columna STAT del comando ps muestra el
estado de cada proceso. En un sistema de una sola CPU, solo se puede ejecutar un proceso a la
vez. Es posible ver varios procesos con un estado de R. Sin embargo, no todos los procesos se
ejecutan consecutivamente; algunos de ellos están en estado de espera.

[user@host ~]$ top


PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2259 root 20 0 270856 40316 8332 S 0.3 0.7 0:00.25 sssd_kcm
1 root 20 0 171820 16140 10356 S 0.0 0.3 0:01.62 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
...output omitted...

[user@host ~]$ ps aux


USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
...output omitted...
root 2 0.0 0.0 0 0 ? S 11:57 0:00 [kthreadd]
student 3448 0.0 0.2 266904 3836 pts/0 R+ 18:07 0:00 ps aux
...output omitted...

250 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

Use señales para suspender, detener, reanudar, finalizar o interrumpir procesos. Los procesos
pueden captar señales del kernel, otros procesos y otros usuarios en el mismo sistema. Las señales
se analizan posteriormente en este capítulo.

Lista de procesos
El comando ps se usa para elaborar una lista con información detallada de los procesos actuales.

• La identificación del usuario (UID) que determina los privilegios del proceso
• La identificación del proceso (PID) única
• Cantidad de CPU usada y tiempo real transcurrido
• Cantidad de memoria asignada
• La ubicación del proceso stdout, conocida como terminal de control
• El estado del proceso actual

Importante
La versión de Linux del comando ps admite los siguientes formatos de opciones:

• Opciones UNIX (POSIX), que pueden agruparse y deben estar precedidas por un
guion
• Opciones BSD, que pueden agruparse y no deben usarse con un guion
• Opciones extensas GNU, que están precedidas por dos guiones

Por ejemplo, el comando ps -aux no es lo mismo que el comando ps aux.

La combinación común del comando ps con la opción aux muestra todos los procesos, incluidos
los procesos sin un terminal de control. Una lista extensa (opciones lax) proporciona más
detalles y da resultados más rápido al evitar las búsquedas de nombre de usuario. La sintaxis de
UNIX similar usa las opciones -ef para la visualización de todos los procesos. En los siguientes
ejemplos, los subprocesos programados del kernel se muestran entre paréntesis en la parte
superior de la lista.

[user@host ~]$ ps aux


USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.1 0.2 171820 16140 ? Ss 16:47 0:01 /usr/lib/
systemd/systemd ...
root 2 0.0 0.0 0 0 ? S 16:47 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 16:47 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 16:47 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< 16:47 0:00 [kworker/0:0H-
events_highpri]
...output omitted...
[user@host ~]$ ps lax
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1 0 20 0 171820 16140 - Ss ? 0:01 /usr/lib/
systemd/systemd ...
1 0 2 0 20 0 0 0 - S ? 0:00 [kthreadd]
1 0 3 2 0 -20 0 0 - I< ? 0:00 [rcu_gp]
1 0 4 2 0 -20 0 0 - I< ? 0:00 [rcu_par_gp]
1 0 6 2 0 -20 0 0 - I< ? 0:00 [kworker/0:0H-
events_highpri]
...output omitted...
[user@host ~]$ ps -ef

RH124-RHEL9.0-es-5-20230516 251
capítulo 8 | Monitoreo y gestión de procesos Linux

UID PID PPID C STIME TTY TIME CMD


root 1 0 0 16:47 ? 00:00:01 /usr/lib/systemd/systemd ...
root 2 0 0 16:47 ? 00:00:00 [kthreadd]
root 3 2 0 16:47 ? 00:00:00 [rcu_gp]
root 4 2 0 16:47 ? 00:00:00 [rcu_par_gp]
root 6 2 0 16:47 ? 00:00:00 [kworker/0:0H-events_highpri]
...output omitted...

De manera predeterminada, el comando ps sin opciones selecciona todos los procesos con la
identificación de usuario efectivo (EUID) del usuario actual y selecciona los procesos que están
asociados con la terminal en la que se ejecuta el comando. Los procesos zombies se enumeran
con la etiqueta exiting o defunct.

Puede usar el comando ps con la opción --forest para mostrar los procesos en formato de
árbol para que pueda ver las relaciones entre el proceso principal y los procesos adicionales.

La salida predeterminada del comando ps se ordena por número de ID de proceso. A primera


vista, puede parecer que la salida usa un orden cronológico, pero el kernel vuelve a usar los ID de
procesos, por lo que el orden está menos estructurado de lo que parece. Use el comando ps con
las opciones -O o --sort para ordenar la salida. El orden de visualización coincide con el de la
tabla de procesos del sistema, que vuelve a usar las filas cuando los procesos finalizan.

Referencias
info libc signal (GNU C Library Reference Manual)

• Sección 24: Manejo de señales

info libc processes (GNU C Library Reference Manual)

• Sección 26: Procesos

Páginas del manual: ps(1), signal(7)

252 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

Cuestionario

Estados del proceso y ciclo de vida


Elija las respuestas correctas para las siguientes preguntas:

1. ¿Qué estado representa un proceso que se ha detenido o suspendido?


a. D
b. R
c. S
d. T
e. Z

2. ¿Qué estado representa un proceso que ha liberado todos sus recursos excepto su
PID?
a. D
b. R
c. S
d. T
e. Z

3. ¿Qué proceso usa un recurso principal para duplicar su espacio de dirección y crear un
proceso adicional?
a. exec
b. fork
c. zombie
d. syscall
e. reap

4. ¿Qué estado representa un proceso que está inactivo hasta que se cumple alguna
condición?
a. D
b. R
c. S
d. T
e. Z

RH124-RHEL9.0-es-5-20230516 253
capítulo 8 | Monitoreo y gestión de procesos Linux

Solución

Estados del proceso y ciclo de vida


Elija las respuestas correctas para las siguientes preguntas:

1. ¿Qué estado representa un proceso que se ha detenido o suspendido?


a. D
b. R
c. S
d. T
e. Z

2. ¿Qué estado representa un proceso que ha liberado todos sus recursos excepto su
PID?
a. D
b. R
c. S
d. T
e. Z

3. ¿Qué proceso usa un recurso principal para duplicar su espacio de dirección y crear un
proceso adicional?
a. exec
b. fork
c. zombie
d. syscall
e. reap

4. ¿Qué estado representa un proceso que está inactivo hasta que se cumple alguna
condición?
a. D
b. R
c. S
d. T
e. Z

254 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

Control de trabajos

Objetivos
Usar el control de trabajo Bash para gestionar múltiples procesos iniciados desde la misma sesión
de terminal.

Descripción de trabajos y sesiones


Con la característica de la shell control de trabajos, pueden ejecutarse y gestionarse múltiples
comandos desde una sola instancia de shell.

Un trabajo está asociado con cada tubería ingresada en un prompt de shell. Todos los procesos
en esa tubería son parte del trabajo y son miembros del mismo grupo de procesos. Puede
considerarse a una tubería mínima como un solo comando que se ingresa en el prompt de shell
para crear un trabajo con un solo miembro.

Solo un trabajo por vez puede leer entradas y señales generadas por el teclado desde una ventana
de terminal específica. Los procesos que son parte de ese trabajo son procesos en primer plano
de dicha terminal de control.

Un proceso en segundo plano de dicho terminal de control es cualquier otro trabajo asociado con
ese terminal. Los procesos en segundo plano de un terminal no pueden leer entradas ni recibir
interrupciones generadas por el teclado desde el terminal, pero pueden escribir en el terminal.
Un trabajo en segundo plano puede detenerse (suspenderse) o puede estar ejecutándose. Si
un trabajo que se está ejecutando en segundo plano intenta leer desde el terminal, se suspende
automáticamente.

Cada terminal es su propia sesión, y puede tener un proceso en primer plano y cualquier cantidad
de procesos en segundo plano. Un trabajo que se ejecuta en su propia sesión pertenece a su
terminal de control.

El comando ps muestra el nombre del dispositivo del terminal de control en la columna TTY.
Algunos procesos, como daemons del sistema, son iniciados por el sistema y no desde un terminal
de control. Estos procesos no son miembros de un trabajo y no pueden colocarse en primer plano.
El comando ps muestra un signo de pregunta (?) en la columna TTY para estos procesos.

Realización de trabajos en segundo plano


Cualquier comando o tubería puede iniciarse en segundo plano si se anexa el signo ampersand (&)
al comando. La shell Bash muestra un número de trabajo (exclusivo de la sesión) y el identificador
de proceso del proceso adicional nuevo. La shell no espera que finalice el proceso adicional, sino
que muestra el prompt de shell.

[user@host ~]$ sleep 10000 &


[1] 5947
[user@host ~]$

Cuando una línea de comandos que contiene una tubería (|) se envía a un segundo plano, se
muestra el PID del último comando de la tubería. Todos los procesos de la tubería son miembros
de ese trabajo.

RH124-RHEL9.0-es-5-20230516 255
capítulo 8 | Monitoreo y gestión de procesos Linux

[user@host ~]$ example_command | sort | mail -s "Sort output" &


[1] 5998

Use el comando jobs para mostrar la lista de trabajos para la sesión de la shell.

[user@host ~]$ jobs


[1]+ Running sleep 10000 &
[user@host ~]$

Use el comando fg para traer un trabajo en segundo plano al primer plano. Use el formato
(%jobNumber) para especificar el proceso en primer plano.

[user@host ~]$ fg %1
sleep 10000

En el ejemplo anterior, el comando sleep se está ejecutando en primer plano en el terminal de


control. La shell se encuentra en espera de que se retire el proceso adicional.

Para enviar un proceso en primer plano a segundo plano, presione primero la solicitud de
suspensión (Ctrl+z) en el terminal. El trabajo se colocará en segundo plano y se suspenderá.

[user@host ~]$ sleep 10000


^Z
[1]+ Stopped sleep 10000
[user@host ~]$

El comando ps j muestra información relacionada con los trabajos. Use el comando ps j para
buscar procesos e información de la sesión.

• La PID es la única ID de proceso del proceso.


• La PPID es el PID del proceso principal de este proceso, el proceso que lo comenzó (bifurcó).
• La PGID es el identificador de proceso del líder del grupo de procesos, generalmente el primer
proceso en la tubería del trabajo.
• La SID es el identificador de proceso del líder de sesión, que (para un trabajo) es generalmente
la shell interactiva que se está ejecutando en su terminal de control.

En el próximo ejemplo, el comando sleep está suspendido actualmente y su estado de proceso


es T.

[user@host ~]$ ps j
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
2764 2768 2768 2768 pts/0 6377 Ss 1000 0:00 /bin/bash
2768 5947 5947 2768 pts/0 6377 T 1000 0:00 sleep 10000
2768 6377 6377 2768 pts/0 6377 R+ 1000 0:00 ps j

Use el comando bg con el ID de trabajo para comenzar a ejecutar el proceso suspendido.

[user@host ~]$ bg %1
[1]+ sleep 10000 &

256 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

La shell emite una advertencia al usuario que intente salir de una ventana de terminal (sesión) con
trabajos suspendidos. Si el usuario vuelve a intentar salir de inmediato, los trabajos suspendidos se
anulan.

nota
En los ejemplos anteriores, el signo + indica que este trabajo es el trabajo
predeterminado actual. Si un comando de control de trabajo se usa sin el argumento
%jobNumber, la acción se realiza en el trabajo predeterminado. El signo - indica el
trabajo anterior que se convertirá en el trabajo predeterminado cuando finalice el
trabajo predeterminado actual.

Referencias
Página de información Bash (The GNU Bash Reference Manual)
https://www.gnu.org/software/bash/manual

• Sección 7: Control de trabajos

Páginas del manual: bash(1), builtins(1), ps(1) y sleep(1)

RH124-RHEL9.0-es-5-20230516 257
capítulo 8 | Monitoreo y gestión de procesos Linux

Ejercicio Guiado

Control de trabajos
En este ejercicio, usará el control de trabajos para iniciar, suspender y mover varios procesos
al primer plano y al segundo plano.

Resultados
• Usar el control de trabajos para suspender y reiniciar los procesos de usuario.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start processes-control

Instrucciones
1. En la máquina workstation, abra dos ventanas de terminal, una al lado de la otra. En esta
sección, estos dos terminales se denominan izquierda y derecha. En cada terminal, inicie
sesión en la máquina servera con el usuario student.

[student@workstation ~]$ ssh student@servera


[student@servera ~]$

2. En la shell de terminal izquierda, cree el directorio /home/student/bin. En el directorio /


home/student/bin, cree un script de shell denominado control. Cambie los permisos
del script para que sea ejecutable.

2.1. Cree el directorio /home/student/bin.

[student@servera ~]$ mkdir /home/student/bin

2.2. En el directorio /home/student/bin, cree un script denominado control. Para


ingresar al modo interactivo Vim, pulse la tecla i. Use el comando :wq para guardar el
archivo y salir.

[student@servera ~]$ vim /home/student/bin/control


#!/bin/bash
while true; do
echo -n "$@ " >> ~/control_outfile
sleep 1
done

258 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

nota
El script control se ejecuta hasta que el proceso se termine. El script adjunta
argumentos de línea de comandos al archivo ~/control_outfile una vez por
segundo.

2.3. Haga el archivo control ejecutable.

[student@servera ~]$ chmod +x /home/student/bin/control

3. Ejecute el script control. El script anexa continuamente la palabra "técnico" y un espacio


al archivo ~/control_outfile a intervalos de un segundo.

[student@servera ~]$ control technical

4. En la shell de terminal derecha, verifique que el nuevo proceso se escriba en el archivo /


home/student/control_outfile.

[student@servera ~]$ tail -f ~/control_outfile


technical technical technical technical
...output omitted...

5. En la shell de terminal izquierda, presione Ctrl+z para suspender el proceso en ejecución.


La shell devuelve el ID de trabajo entre corchetes. En la shell de terminal derecha, confirme
que la salida del proceso esté detenida.

^Z
[1]+ Stopped control technical
[student@servera ~]$

technical technical technical technical


...no further output...

6. En la shell de terminal izquierda, vea la salida del comando jobs. Recuerde que el signo
+ indica el trabajo predeterminado. Reinicie el trabajo en segundo plano. En la shell de
terminal derecha, verifique que la salida del proceso esté de nuevo activa.

6.1. Ver la lista de trabajos.

[student@servera ~]$ jobs


[1]+ Stopped control technical

6.2. Reinicie el trabajo control en segundo plano.

[student@servera ~]$ bg
[1]+ control technical &

6.3. Verifique que el trabajo control se esté ejecutando nuevamente.

RH124-RHEL9.0-es-5-20230516 259
capítulo 8 | Monitoreo y gestión de procesos Linux

[student@servera ~]$ jobs


[1]+ Running control technical &

6.4. En la shell de terminal derecha, confirme que el comando tail está produciendo la
salida.

...output omitted...
technical technical technical technical technical technical technical technical

7. En la shell de terminal izquierda, inicie dos procesos control más para anexar al archivo
~/output. Use el comando del signo especial (&) para iniciar los procesos en segundo
plano. Reemplace technical con documents y, luego, con database. Reemplazar los
argumentos ayuda a diferenciar los tres procesos.

[student@servera ~]$ control documents &


[2] 6579
[student@servera ~]$ control database &
[3] 6654

8. En la shell de terminal izquierda, use el comando jobs para ver los tres procesos en
ejecución. En la shell de terminal derecha, verifique que los tres procesos se estén
adjuntando al archivo.

[student@servera ~]$ jobs


[1] Running control technical &
[2]- Running control documents &
[3]+ Running control database &

...output omitted...
technical documents database technical documents database technical documents
database technical documents database
...output omitted...

9. Suspenda el proceso control technical. Confirme que esté suspendido. Finalice el


proceso control documents y confirme que ha sido terminado.

9.1. En la shell de terminal izquierda, ponga en primer plano el proceso control


technical. Presione Ctrl+z para suspender el proceso. Verifique que el proceso
esté suspendido.

[student@servera ~]$ fg %1
control technical
^Z
[1]+ Stopped control technical
[student@servera ~]$ jobs
[1]+ Stopped control technical
[2] Running control documents &
[3]- Running control database &

260 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

9.2. En la shell de terminal derecha, verifique que el proceso control technical ya no


está enviando la salida.

database documents database documents database


...no further output...

9.3. En la shell de terminal izquierda, ejecute el proceso control documents en primer


plano. Presione Ctrl+c para finalizar el proceso. Verifique que el proceso haya
terminado.

[student@servera ~]$ fg %2
control documents
^C
[student@servera ~]$ jobs
[1]+ Stopped control technical
[3]- Running control database &

9.4. En la shell de terminal derecha, verifique que el proceso control documents ya no


está enviando la salida.

...output omitted...
database database database database database database database database
...no further output...

10. En la shell de terminal izquierda, vea los trabajos restantes. Los trabajos suspendidos tiene
el estado T. Los otros trabajos en segundo plano están inactivos y tienen el estado S.

[student@servera ~]$ ps jT
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
27277 27278 27278 27278 pts/1 28702 Ss 1000 0:00 -bash
27278 28234 28234 27278 pts/1 28702 T 1000 0:00 /bin/bash /home/student/
bin/control technical
27278 28251 28251 27278 pts/1 28702 S 1000 0:00 /bin/bash /home/student/
bin/control database
28234 28316 28234 27278 pts/1 28702 T 1000 0:00 sleep 1
28251 28701 28251 27278 pts/1 28702 S 1000 0:00 sleep 1
27278 28702 28702 27278 pts/1 28702 R+ 1000 0:00 ps jT

11. En la shell de terminal izquierda, vea los trabajos actuales. Finalice el proceso control
database y confirme que ha sido terminado.

[student@servera ~]$ jobs


[1]+ Stopped control technical
[3]- Running control database &

Use el comando fg con el ID de trabajo para ejecutar el proceso control database


en primer plano. Presione Ctrl+c para finalizar el proceso. Verifique que el proceso haya
terminado.

RH124-RHEL9.0-es-5-20230516 261
capítulo 8 | Monitoreo y gestión de procesos Linux

[student@servera ~]$ fg %3
control database
^C
[student@servera ~]$ jobs
[1]+ Stopped control technical

12. En la shell de terminal derecha, use el comando, use el comando Ctrl+c para detener el
comando tail. Elimine el archivo ~/control_outfile.

...output omitted...
^C
[student@servera ~]$ rm ~/control_outfile

13. Cierre el terminal adicional. Regrese al sistema workstation con el usuario student.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish processes-control

Esto concluye la sección.

262 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

Finalización de procesos

Objetivos
Usar comandos para finalizar procesos y comunicarse con ellos, definir las características de un
proceso daemon y detener sesiones y procesos de usuario.

Control de procesos con señales


Una señal es la interrupción de software que se envía a un proceso. Indica eventos de informe a un
programa que está en ejecución. Los eventos que generan una señal pueden ser un error, evento
externo (una solicitud de entrada o salida o un temporizador vencido), o el uso explícito de un
comando emisor de señal o secuencia de teclado.

En la siguiente tabla, se enumeran las señales fundamentales usadas por los administradores del
sistema para la administración de procesos de rutina. Puede referirse a las señales ya sea por su
nombre abreviado (HUP) o nombre propio (SIGHUP).

Señales fundamentales de gestión de procesos

Señal Nombre Definición

1 HUP Hangup : Se usa para informar la finalización del proceso de control de


un terminal. Además, solicita que se reinicie el proceso (volver a cargar la
configuración) sin finalización.

2 INT Keyboard interrupt : Provoca la finalización del programa. Puede


bloquearse o manipularse. Enviado al presionar la secuencia de teclas INTR
(Interrumpir) (Ctrl+c).

3 QUIT Keyboard quit : Es similar a SIGINT, pero añade el volcado de un


proceso en la finalización. Se envía cuando se presiona la secuencia de
teclas QUIT (Ctrl+\).

9 KILL Kill, unblockable : Provoca la finalización abrupta del programa. No


se puede bloquear, ignorar ni manipular; sistemáticamente es grave.

15 TERM Terminate : Provoca la finalización del programa. A diferencia de SIGKILL,


predeterminado puede bloquearse, ignorarse o manipularse. La forma "limpia" de solicitar
la finalización de un programa; permite que el programa complete las
operaciones esenciales y la autolimpieza antes de la finalización.

18 CONT Continue : Se envía a un proceso para que se reinicie, en caso de que


esté detenido. No puede bloquearse. Aún si se manipula, reinicia siempre el
proceso.

19 STOP Stop, unblockable : Suspende el proceso. No puede bloquearse o


manipularse.

RH124-RHEL9.0-es-5-20230516 263
capítulo 8 | Monitoreo y gestión de procesos Linux

Señal Nombre Definición

20 TSTP Keyboard stop : A diferencia de SIGSTOP, puede bloquearse, ignorarse


o manipularse. Enviado al presionar una secuencia de teclas de suspensión
(Ctrl+z).

nota
Los números de señal varían en las distintas plataformas de hardware de Linux, pero
los nombres y los significados están estandarizados. Se recomienda usar nombres
de señales en lugar de números al realizar la señalización. Los números analizados
en esta sección son para los sistemas con arquitectura x86_64.

Cada señal tiene una acción predeterminada que, por lo general, es una de las siguientes:

• Term : Provoca que un programa finalice (se cierre) inmediatamente.


• Core : Provoca que un programa guarde una imagen de la memoria (volcado central) y que, a
continuación, finalice.
• Stop : Provoca que un programa deje de ejecutarse (se suspenda) y espere para continuar (se
reinicie).

Los programas reaccionan ante señales de eventos esperadas mediante la implementación de


rutinas de controlador que ignoren, reemplacen o amplíen la acción predeterminada de una señal.

Envío de señales mediante una solicitud explícita


Puede indicar el proceso en primer plano actual mediante la escritura de una secuencia de control
de teclado para suspender (Ctrl+z), finalizar (Ctrl+c) o realizar un volcado central (Ctrl+\)
del proceso. Sin embargo, usará comandos emisores de señales para enviar señales a un proceso
en segundo plano de una sesión diferente.

Puede especificar las señales por nombre (por ejemplo, con las opciones -HUP o -SIGHUP) o
por número (con la opción -1 relacionada). Los usuarios pueden finalizar sus procesos, pero se
necesitan privilegios de root para finalizar procesos que son propiedad de otros usuarios.

El comando kill usa un número PID para enviar una señal a un proceso. A pesar de su nombre,
el comando kill puede usarse para enviar cualquier señal y no solo aquellas para finalizar
programas. Puede usar el comando kill con la opción -l para enumerar los nombres y números
de todas las señales disponibles.

[user@host ~]$ kill -l


1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
...output omitted...
[user@host ~]$ ps aux | grep job
5194 0.0 0.1 222448 2980 pts/1 S 16:39 0:00 /bin/bash /home/user/bin/control job1
5199 0.0 0.1 222448 3132 pts/1 S 16:39 0:00 /bin/bash /home/user/bin/control job2
5205 0.0 0.1 222448 3124 pts/1 S 16:39 0:00 /bin/bash /home/user/bin/control job3
5430 0.0 0.0 221860 1096 pts/1 S+ 16:41 0:00 grep --color=auto job
[user@host ~]$ kill 5194
[user@host ~]$ ps aux | grep job

264 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

user 5199 0.0 0.1 222448 3132 pts/1 S 16:39 0:00 /bin/bash /home/
user/bin/control job2
user 5205 0.0 0.1 222448 3124 pts/1 S 16:39 0:00 /bin/bash /home/
user/bin/control job3
user 5783 0.0 0.0 221860 964 pts/1 S+ 16:43 0:00 grep --color=auto
job
[1] Terminated control job1
[user@host ~]$ kill -9 5199
[user@host ~]$ ps aux | grep job
user 5205 0.0 0.1 222448 3124 pts/1 S 16:39 0:00 /bin/bash /home/
user/bin/control job3
user 5930 0.0 0.0 221860 1048 pts/1 S+ 16:44 0:00 grep --color=auto
job
[2]- Killed control job2
[user@host ~]$ kill -SIGTERM 5205
user 5986 0.0 0.0 221860 1048 pts/1 S+ 16:45 0:00 grep --color=auto job
[3]+ Terminated control job3

Control de procesos específicos


Use el comando pkill para enviar una señal a uno o más procesos que coincidan con los criterios
de selección. Los criterios de selección pueden ser un nombre de comando, un proceso que es
propiedad de un usuario específico o todos los procesos del sistema.

Los procesos y las sesiones pueden señalizarse en forma individual o colectiva. Para finalizar todos
los procesos de un usuario, use el comando pkill.

Debido a que el proceso inicial en una sesión de inicio de sesión (líder de sesión) está diseñado
para manipular las solicitudes de finalización de sesión e ignorar las señales de teclado
involuntarias, la finalización de los procesos y shells de inicio de sesión de un usuario requiere de la
señal SIGKILL.

Primero, use el comando pgrep para identificar los números de PID que desea eliminar. Este
comando funciona de manera similar al comando pkill, incluida la mayoría de las mismas
opciones, excepto que el comando pgrep enumera los procesos en lugar de eliminarlos.

Use el comando pgrep con la opción -l para enumerar los nombres de los procesos y sus ID. Use
cualquiera de los comandos con la opción -u para especificar el ID del usuario propietario de los
procesos.

[root@host ~]# pgrep -l -u bob


6964 bash
6998 sleep
6999 sleep
7000 sleep
[root@host ~]# pkill -SIGKILL -u bob
[root@host ~]# pgrep -l -u bob

Cuando los procesos que requieren atención están en la misma sesión de inicio de sesión, es
probable que no sea necesario finalizar todos los procesos de un usuario. Use el comando w para
determinar la terminal de control para la sesión y, a continuación, finalice solo los procesos con
hagan referencia a la misma ID de terminal.

RH124-RHEL9.0-es-5-20230516 265
capítulo 8 | Monitoreo y gestión de procesos Linux

A menos que se especifique SIGKILL, el líder de sesión (en este caso, la shell de inicio de sesión
Bash) manipula y supera de forma correcta la solicitud de finalización, pero finaliza todos los
demás procesos de sesión.

Use la opción -t para hacer coincidir los procesos con un ID de terminal específico.

[root@host ~]# pgrep -l -u bob


7391 bash
7426 sleep
7427 sleep
7428 sleep
[root@host ~]# w -u bob
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
bob tty3 18:37 5:04 0.03s 0.03s -bash
[root@host ~]# pkill -t tty3
[root@host ~]# pgrep -l -u bob
7391 bash
[root@host ~]# pkill -SIGKILL -t tty3
[root@host ~]# pgrep -l -u bob
[root@host ~]#

Importante
Los administradores suelen usar SIGKILL.

Siempre es grave porque la señal SIGKILL no puede manipularse ni ignorarse.


Sin embargo, obliga a la finalización sin permitir que el proceso terminado
ejecute rutinas de autolimpieza. Red Hat recomienda enviar primero SIGTERM, a
continuación intentar con SIGINT y, solo si falla en ambos casos, volver a intentar
con SIGKILL.

Puede aplicar el mismo proceso selectivo de finalización con las relaciones de proceso principal
y adicional. Use el comando pstree para visualizar un árbol de proceso para el sistema o un solo
usuario. Use el PID del proceso principal para finalizar todos los procesos secundarios creados.
Esta vez, la shell de inicio de sesión Bash principal sobrevive porque la señal se dirige solo a sus
procesos secundarios.

[root@host ~]# pstree -p bob


bash(8391)─┬─sleep(8425)
├─sleep(8426)
└─sleep(8427)
[root@host ~]# pkill -P 8391
[root@host ~]# pgrep -l -u bob
bash(8391)
[root@host ~]# pkill -SIGKILL -P 8391
[root@host ~]# pgrep -l -u bob
bash(8391)

Señalamiento de múltiples procesos


El comando killall puede señalar varios procesos según su nombre de comando.

266 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

[user@host ~]$ ps aux | grep job


5194 0.0 0.1 222448 2980 pts/1 S 16:39 0:00 /bin/bash /home/user/bin/
control job1
5199 0.0 0.1 222448 3132 pts/1 S 16:39 0:00 /bin/bash /home/user/bin/
control job2
5205 0.0 0.1 222448 3124 pts/1 S 16:39 0:00 /bin/bash /home/user/bin/
control job3
5430 0.0 0.0 221860 1096 pts/1 S+ 16:41 0:00 grep --color=auto job
[user@host ~]$ killall control
[1] Terminated control job1
[2]- Terminated control job2
[3]+ Terminated control job3
[user@host ~]$

Terminación de trabajos en segundo plano


Para finalizar trabajos en segundo plano, use el comando kill y especifique el número de trabajo.

Use el comando jobs para encontrar el número de trabajo del proceso que desea finalizar.

[user@host ~]$ jobs


[1]- Running sleep 500 &
[2]+ Running sleep 1000 &
[user@host ~]$

Termine un trabajo específico con el comando kill. Anteponga un prefijo al número de trabajo
con el signo de porcentaje (%).

[user@host ~]$ kill -SIGTERM %1


[user@host ~]$ jobs
[2]+ Running sleep 1000 &

Usuarios de cierre de sesión administrativo


Es posible que deba cerrar la sesión de otros usuarios por diversos motivos. Algunos escenarios
posibles: el usuario cometió una infracción de seguridad; el usuario puede haber abusado de
los recursos; el usuario puede tener un sistema que no responde; o el usuario tiene acceso
inadecuado a los materiales. En estos casos, debe finalizar su sesión mediante el uso de señales
de forma administrativa.

Primero, para cerrar la sesión de un usuario, identifique la sesión de inicio de sesión que se
finalizará. Use el comando w para enumerar los inicios de sesión de usuario y los procesos actuales
en ejecución. Observe las columnas TTY y FROM para determinar las sesiones a cerrar.

Todas las sesiones de inicio de sesión de usuario están asociadas a un dispositivo terminal (TTY).
Si el nombre del dispositivo es pts/N, se trata de un pseudoterminal asociado con una ventana
de terminal gráfica o sesión remota de inicio de sesión. Si es ttyN, el usuario se encuentra en una
consola del sistema, consola alternativa u otro dispositivo terminal conectado directamente.

RH124-RHEL9.0-es-5-20230516 267
capítulo 8 | Monitoreo y gestión de procesos Linux

[user@host ~]$ w
12:43:06 up 27 min, 5 users, load average: 0.03, 0.17, 0.66
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty2 12:26 14:58 0.04s 0.04s -bash
bob tty3 12:28 14:42 0.02s 0.02s -bash
user pts/1 desktop.example.com 12:41 2.00s 0.03s 0.03s w
[user@host ~]$

Averigüe cuánto tiempo un usuario estuvo en el sistema con la hora de inicio de sesión. Los
recursos de CPU consumidos por los trabajos actuales, incluidas las tareas en segundo plano y los
procesos adicionales, se encuentran en la columna JCPU para cada sesión. El consumo de CPU del
proceso de primer plano actual está en la columna PCPU.

Referencias
Páginas del manual: kill(1), killall(1), pgrep(1), pkill(1), pstree(1),
signal(7) y w(1)

Para efectuar lecturas complementarias, consulte Signal Handling en


https://www.gnu.org/software/libc/manual/pdf/libc.pdf#Signal%20Handling

Para efectuar lecturas complementarias, consulte Processes en


https://www.gnu.org/software/libc/manual/pdf/libc.pdf#Processes

268 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

Ejercicio Guiado

Finalización de procesos
En este ejercicio, usa señales para gestionar y detener procesos.

Resultados
• Iniciar y detener varios procesos de shell.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start processes-kill

Instrucciones
1. En la máquina workstation, abra dos ventanas de terminal, una al lado de la otra. En
esta sección, estas terminales se denominan izquierda y derecha. En cada terminal, use el
comando ssh para iniciar sesión en la máquina servera con el usuario student.

[student@workstation ~]$ ssh student@servera


[student@servera ~]$

2. En la shell de terminal izquierda, cree el directorio /home/student/bin. Cree el script


de shell instance en el nuevo directorio. Cambie los permisos del script para que sea
ejecutable.

2.1. Cree el directorio /home/student/bin.

[student@servera ~]$ mkdir /home/student/bin

2.2. Cree el archivo de script instance en el directorio /home/student/bin. Presione


la tecla i para ingresar al modo interactivo Vim. El archivo debe tener el siguiente
contenido, como se muestra. Use el comando :wq para guardar el archivo.

[student@servera ~]$ cd /home/student/bin


[student@servera bin]$ vim /home/student/bin/instance
#!/bin/bash
while true; do
echo -n "$@ " >> ~/instance_outfile
sleep 5
done

RH124-RHEL9.0-es-5-20230516 269
capítulo 8 | Monitoreo y gestión de procesos Linux

nota
El script instance se ejecuta hasta que el proceso se termine. Adjunta argumentos
de línea de comandos al archivo ~/instance_outfile una vez cada 5 segundos.

2.3. Haga el archivo de script instance ejecutable.

[student@servera ~]$ chmod +x /home/student/bin/instance

3. En la shell de terminal izquierda, cambie al directorio /home/student/bin/. Inicie


tres procesos con el archivo de script instance, pasando los argumentos network,
interface y connection. Inicie los procesos en segundo plano.

[student@servera bin]$ instance network &


[1] 3460
[student@servera bin]$ instance interface &
[2] 3482
[student@servera bin]$ instance connection &
[3] 3516

4. En la shell de terminal derecha, verifique que los tres procesos se estén adjuntando al
archivo /home/student/instance_outfile.

[student@servera ~]$ tail -f ~/instance_outfile


network interface network connection interface network connection interface
network
...output omitted...

5. En la shell de terminal izquierda, enumere los trabajos existentes.

[student@servera bin]$ jobs


[1] Running instance network &
[2]- Running instance interface &
[3]+ Running instance connection &

6. Use señales para suspender el proceso instance network. Verifique que el proceso
instance network esté configurado como Stopped. Verifique que el proceso network
ya no anexe contenido al archivo ~/instance_output.

6.1. Detenga el proceso instance network. Verifique que el proceso esté detenido.

[student@servera bin]$ kill -SIGSTOP %1


[1]+ Stopped instance network
[student@servera bin]$ jobs
[1]+ Stopped instance network
[2] Running instance interface &
[3]- Running instance connection &

6.2. En la shell de terminal derecha, vea la salida del comando tail. Confirme que la
palabra network ya no esté anexada al archivo ~/instance_outfile.

270 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

...output omitted...
interface connection interface connection interface connection interface

7. En la shell de terminal izquierda, finalice el proceso instance interface. Verifique que


el proceso instance interface haya desaparecido. Confirme que la salida del proceso
instance interface ya no esté anexada al archivo ~/instance_outfile.

7.1. Finalice el proceso instance interface. Verifique que el proceso haya terminado.

[student@servera bin]$ kill -SIGTERM %2


[student@servera bin]$ jobs
[1]+ Stopped instance network
[2] Terminated instance interface
[3]- Running instance connection &

7.2. En la shell de terminal derecha, vea la salida del comando tail. Confirme que la
palabra interface ya no esté anexada al archivo ~/instance_outfile.

...output omitted...
connection connection connection connection connection connection connection
connection

8. En la shell de terminal izquierda, reanude el proceso instance network. Verifique que el


proceso instance network esté configurado como Running. Confirme que la salida del
proceso instance network no esté anexada al archivo ~/instance_outfile.

8.1. Reanude el proceso instance network. Compruebe que el proceso tenga el


estado Running.

[student@servera bin]$ kill -SIGCONT %1


[student@servera bin]$ jobs
[1]+ Running instance network &
[3]- Running instance connection &

8.2. En la shell de terminal derecha, vea la salida del comando tail. Verifique que la
palabra network esté anexada al archivo ~/instance_outfile.

...output omitted...
network connection network connection network connection network connection
network connection

9. En la shell de terminal izquierda, finalice los dos trabajos restantes. Verifique que no queden
trabajos y que se haya detenido la salida.

9.1. Finalice el proceso instance network. A continuación, finalice el proceso


instance connection.

RH124-RHEL9.0-es-5-20230516 271
capítulo 8 | Monitoreo y gestión de procesos Linux

[student@servera bin]$ kill -SIGTERM %1


[student@servera bin]$ kill -SIGTERM %3
[1]+ Terminated instance network
[student@servera bin]$ jobs
[3]+ Terminated instance connection

10. En la shell de terminal izquierda, enumere los procesos que se están ejecutando en todas
las shells de terminales abiertas. Finalice los procesos tail. Verifique que los procesos ya
no estén en funcionamiento.

10.1. Enumere todos los procesos en ejecución actuales. Refine la búsqueda para ver solo
tail líneas.

[student@servera bin]$ ps -ef | grep tail


student 4581 31358 0 10:02 pts/0 00:00:00 tail -f instance_outfile
student 4869 2252 0 10:33 pts/1 00:00:00 grep --color=auto tail

10.2. Finalice el proceso tail. Verifique que los procesos ya no estén ejecutándose.

[student@servera bin]$ pkill -SIGTERM tail


[student@servera bin]$ ps -ef | grep tail
student 4874 2252 0 10:36 pts/1 00:00:00 grep --color=auto tail

10.3. En la shell de terminal derecha, verifique que el comando tail ya no se está


ejecutando.

...output omitted...
network connection network connection network connection Terminated
[student@servera ~]$

11. Cierre el terminal adicional. Regrese al sistema workstation con el usuario student.

[student@servera bin]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish processes-kill

Esto concluye la sección.

272 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

Monitoreo de la actividad de procesos

Objetivos
Definir el promedio de carga y determinar los procesos del servidor que consumen muchos
recursos.

Descripción del promedio de carga


El promedio de carga es una medida que proporciona el kernel de Linux para representar la carga
percibida del sistema durante un periodo de tiempo. Puede usarse como un indicador aproximado
de cuántas solicitudes de recursos del sistema están pendientes y para determinar si la carga del
sistema aumenta o disminuye.

El kernel recoge la cantidad de carga actual cada cinco segundos en función de la cantidad de
procesos en estados ejecutables e ininterrumpidos. Este número se acumula y se informa como un
promedio móvil exponencial en los últimos 1, 5 y 15 minutos.

Cálculo del promedio de carga


El promedio de carga representa la carga del sistema percibida durante un período de tiempo.
Linux determina la carga promedio al informar cuántos procesos están listos para ejecutarse en
una CPU y cuántos procesos están esperando que se complete la E/S del disco o de la red.

• La cantidad de carga es un promedio en ejecución de la cantidad de procesos que están listos


para ejecutarse (estado en proceso R) o la cantidad de procesos que están esperando a que
finalice la E/S (estado en proceso D).

• Algunos sistemas UNIX solo tienen en cuenta el uso de la CPU o la longitud de la cola de
ejecución para indicar la carga del sistema. Linux también incluye el uso del disco o de la
red porque el uso elevado de estos recursos puede tener un impacto tan significativo en el
rendimiento del sistema como la carga de la CPU. Para promedios altos de carga con actividad
mínima de CPU, se debe examinar la actividad del disco y de la red.

El promedio de carga es una medida aproximada de cuántos procesos están actualmente


esperando a que se complete una solicitud antes de ejecutar otra tarea. La solicitud puede ser
tiempo de CPU para ejecutar el proceso. Como alternativa, la solicitud puede ser para que se
complete una operación crítica de E/S del disco, y el proceso no se puede ejecutar en la CPU
hasta que la solicitud se complete, incluso si la CPU está inactiva. De cualquier manera, la carga
del sistema se ve afectada, y el sistema parece funcionar más lentamente porque los procesos
están esperando para ejecutarse.

Interpretación de los valores del promedio de carga


El comando uptime es una forma de mostrar el promedio de carga actual. Imprime la hora
actual, cuánto tiempo ha estado funcionando la máquina, cuántas sesiones de usuario se están
ejecutando y el promedio de carga actual.

[user@host ~]$ uptime


15:29:03 up 14 min, 2 users, load average: 2.92, 4.48, 5.20

RH124-RHEL9.0-es-5-20230516 273
capítulo 8 | Monitoreo y gestión de procesos Linux

Los tres valores del promedio de carga representan la carga durante los últimos 1, 5 y 15 minutos.
Indica si la carga del sistema parece estar subiendo o bajando.

Si el promedio de carga aumenta principalmente debido a procesos que están esperando a la


CPU, puede calcular el valor de carga aproximado por CPU para determinar si el sistema está
experimentando una espera significativa.

Use el comando lscpu para determinar la cantidad de CPU presentes en un sistema.

En el siguiente ejemplo, el sistema es un sistema de un solo socket de doble núcleo con dos
hyperthreads por núcleo. Linux tratará esta configuración de CPU como un sistema de cuatro CPU
para fines de programación.

[user@host ~]$ lscpu


Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
...output omitted...

Imagine por un momento que la única contribución a la cantidad de carga proviene de procesos
que necesitan tiempo de CPU. Puede entonces dividir los valores promedios de carga que se
muestran por el número de CPU lógicas en el sistema. Un valor por debajo de 1 indica uso de
recursos adecuado y tiempos de espera mínimos. Un valor por encima de 1 indica saturación de
recursos y cierto retraso en el procesamiento.

# From lscpu, the system has four logical CPUs, so divide by 4:


# load average: 2.92, 4.48, 5.20
# divide by number of logical CPUs: 4 4 4
# ---- ---- ----
# per-CPU load average: 0.73 1.12 1.30
#
# This system's load average appears to be decreasing.
# With a load average of 2.92 on four CPUs, all CPUs were in use ~73% of the time.
# During the last 5 minutes, the system was overloaded by ~12%.
# During the last 15 minutes, the system was overloaded by ~30%.

Una cola de CPU inactiva tiene una cantidad de carga de 0. Cada proceso que espera a una CPU
agrega un recuento de 1 a la cantidad de carga. Si un proceso se está ejecutando en una CPU, la
cantidad de carga es 1 y el recurso (la CPU) está en uso, pero no hay solicitudes en espera. Si ese
proceso se está ejecutando durante un minuto entero, su contribución al promedio de carga de un
minuto será 1.

Sin embargo, los procesos en suspensión ininterrumpida para E/S críticas debido a un disco o
recurso de red ocupados se incluyen también en el recuento y aumentan el promedio de carga.
Si bien no es una indicación del uso de la CPU, estos procesos se agregan al recuento de la cola
porque esperan recursos y no pueden ejecutarse en una CPU hasta que obtienen esos recursos.
Esta métrica sigue siendo una carga del sistema debido a las limitaciones de recursos que están
haciendo que los procesos no se ejecuten.

274 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

Hasta que no se produce una saturación del recurso, un promedio de carga se mantiene por
debajo de 1, dado que las tareas rara vez se encuentran en las colas de espera. El promedio de
carga solo aumenta cuando la saturación del recurso provoca que las solicitudes se mantengan en
cola y sean contadas por la rutina del cálculo de carga. Cuando el uso del recurso se aproxima al
100 %, cada solicitud adicional comienza a experimentar un tiempo de espera del servicio.

Monitoreo del proceso en tiempo real


El comando top es una vista dinámica de los procesos del sistema, que muestra un encabezado
del resumen seguido de un proceso o lista de hilos. A diferencia del resultado estático del
comando ps, el comando top continuamente se actualiza a un intervalo configurable y ofrece
capacidades de reorganización, ordenado y resaltado de columnas. Puede realizar cambios
persistentes en la configuración de top. Las columnas de salida predeterminadas top son las
siguientes:

• El ID del proceso (PID).

• El nombre de usuario del propietario del proceso (USER).

• La memoria virtual (VIRT) es toda la memoria que usa el proceso, incluido el conjunto residente,
las librerías compartidas y cualquier página de memoria asignada o intercambiada (etiquetado
como VSZ en el comando ps).

• La memoria residente (RES) es la memoria física que usa el proceso, incluido cualquier objeto
residente compartido (etiquetado como RSS en el comando ps).

• El estado del proceso (S) puede ser uno de los siguientes estados:
– D = Suspensión ininterrumpida
– R = En ejecución o ejecutable
– S = En espera
– T = Detenido o en seguimiento
– Z = Zombie

• El tiempo de CPU (TIME) es el tiempo total de procesamiento desde que comenzó el proceso.
Se puede alternar para incluir el tiempo acumulativo de todos los procesos adicionales.

• El nombre del comando de proceso (COMMAND).

Pulsaciones de tecla fundamentales en el comando top

Clave Propósito

?oh Ayudar en pulsaciones de tecla interactiva.

l, t, m Alternar entre carga, subprocesos y líneas de encabezado de la memoria.

1 Alternar mostrando CPU individuales o un resumen de todas las CPU en el


encabezado.

s Cambiar la tasa de actualización (pantalla) en segundos decimales (como 0.5,


1, 5).

b Alternar resaltado reverso para procesos Running; solo negrita de manera


predeterminada.

Shift+b Permite el uso de negrita en la visualización, en el encabezado y en los


procesos En ejecución.

RH124-RHEL9.0-es-5-20230516 275
capítulo 8 | Monitoreo y gestión de procesos Linux

Clave Propósito

Shift+h Alternar subprocesos; mostrar resumen del proceso o subprocesos


individuales.

u, Shift+u Filtrar por cualquier nombre de usuario (eficaz, real).

Shift+m Ordenar procesos enumerados por uso de memoria, en orden decreciente.

Shift+p Ordenar procesos enumerados por uso del procesador, en orden decreciente.

k Eliminar un proceso. Cuando recibe un aviso, ingresar PID, luego signal.

r Ejecute el comando renice para un proceso. Cuando recibe un aviso, ingresar


PID, luego nice_value.

Shift+w Escribir (guardar) la configuración actual de lo mostrado para usarse en el


próximo reinicio de top.

q Salir.

f Gestione las columnas al habilitar o deshabilitar los campos. También puede


configurar el campo de ordenamiento para top.

nota
Las teclas s, k y r no están disponibles cuando el comando top se inicia en un
modo seguro.

Referencias
Páginas del manual: ps(1), top(1), uptime(1) y w(1)

276 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

Ejercicio Guiado

Monitoreo de la actividad de procesos


En este ejercicio, usa el comando top para examinar dinámicamente los procesos en
ejecución y controlarlos.

Resultados
• Gestionar procesos en tiempo real.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start processes-monitor

Instrucciones
1. En la máquina workstation, abra dos ventanas de terminal, una al lado de la otra. En esta
sección, estas terminales se denominan izquierda y derecha. En cada terminal, inicie sesión
en la máquina servera con el usuario student.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$

2. En la shell de terminal izquierda, cree el directorio /home/student/bin. Cree un script


de shell denominado monitor en el nuevo directorio para generar una carga artificial de la
CPU. Haga el archivo de script monitor ejecutable.

2.1. Cree el directorio /home/student/bin.

[student@servera ~]$ mkdir /home/student/bin

2.2. Cree el archivo de script en el directorio /home/student/bin con el contenido


mostrado.

[student@servera ~]$ vim /home/student/bin/monitor


#!/bin/bash
while true; do
var=1
while [[ var -lt 60000 ]]; do
var=$(($var+1))

RH124-RHEL9.0-es-5-20230516 277
capítulo 8 | Monitoreo y gestión de procesos Linux

done
sleep 1
done

nota
El script monitor se ejecuta hasta que el proceso se termine. Genera carga
artificial de CPU al realizar sesenta mil cálculos de suma. Después de generar la
carga de CPU, se inactiva durante un segundo, restablece la variable y se repite.

2.3. Haga el archivo monitor ejecutable.

[student@servera ~]$ chmod a+x /home/student/bin/monitor

3. En la shell de terminal derecha, ejecute el comando top. Cambie el tamaño de la ventana


para ver el contenido del comando.

[student@servera ~]$ top


top - 12:13:03 up 11 days, 58 min, 3 users, load average: 0.00, 0.00, 0.00
Tasks: 113 total, 2 running, 111 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1829.4 total, 1377.3 free, 193.9 used, 258.2 buff/cache
MiB Swap: 1024.0 total, 1024.0 free, 0.0 used. 1476.1 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


5861 root 20 0 0 0 0 I 0.3 0.0 0:00.71 kworker/1:3-
events
6068 student 20 0 273564 4300 3688 R 0.3 0.2 0:00.01 top
1 root 20 0 178680 13424 8924 S 0.0 0.7 0:04.03 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
...output omitted...

4. En la shell de terminal izquierda, determine la cantidad de CPU lógicas de esta máquina


virtual.

[student@servera ~]$ lscpu


Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
...output omitted...

5. En la shell de terminal izquierda, ejecute una sola instancia del archivo ejecutable monitor
en segundo plano.

[student@servera ~]$ monitor &


[1] 6071

6. En la shell de terminal derecha, monitoree el comando top. Presione las teclas l, t y m


en forma individual para alternar la carga, los subprocesos y las líneas del encabezado de

278 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

memoria. Después de observar este comportamiento, asegúrese de que se muestren todos


los encabezados.

7. Anote el ID de proceso (PID) para el proceso monitor. Observe el porcentaje de CPU para
el proceso, que se espera que sea alrededor del 15 % o el 25 %.

[student@servera ~]$ top


PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
071 student 20 0 222448 2964 2716 S 18.7 0.2 0:27.35 monitor
...output omitted...

Observe los promedios de carga. El valor promedio de carga de un minuto actualmente es


inferior a 1. El valor observado puede estar afectado por la contención del recurso desde
otra máquina virtual o el host virtual.

top - 12:23:45 up 11 days, 1:09, 3 users, load average: 0.21, 0.14, 0.05

8. En la shell de terminal izquierda, ejecute una segunda instancia del archivo ejecutable
monitor en segundo plano.

[student@servera ~]$ monitor &


[2] 6498

9. En la shell de terminal derecha, anote el ID de proceso (PID) para el segundo proceso de


monitor. Observe el porcentaje de CPU para el proceso, que también se espera que sea
entre el 15 % y el 25 %.

[student@servera ~]$ top


PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6071 student 20 0 222448 2964 2716 S 19.0 0.2 1:36.53 monitor
6498 student 20 0 222448 2996 2748 R 15.7 0.2 0:16.34 monitor
...output omitted...

Observe de nuevo el promedio de carga de un minuto, que todavía es inferior a 1. Espere al


menos un minuto para que el cálculo se adapte a la carga de trabajo nueva.

top - 12:27:39 up 11 days, 1:13, 3 users, load average: 0.36, 0.25, 0.11

10. En la shell de terminal izquierda, ejecute una tercera instancia del archivo ejecutable
monitor en segundo plano.

[student@servera ~]$ monitor &


[3] 6881

RH124-RHEL9.0-es-5-20230516 279
capítulo 8 | Monitoreo y gestión de procesos Linux

11. En la shell de terminal derecha, anote el ID de proceso (PID) para el tercer proceso de
monitor. Observe el porcentaje de CPU para el proceso que se espera que sea entre el
15 % y el 25 %.

[student@servera ~]$ top


PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6881 student 20 0 222448 3032 2784 S 18.6 0.2 0:11.48 monitor
6498 student 20 0 222448 2996 2748 S 15.6 0.2 0:47.86 monitor
6071 student 20 0 222448 2964 2716 S 18.1 0.2 2:07.86 monitor

Para que el promedio de carga sea superior a 1, debe iniciar más procesos de monitor.
La configuración del aula tiene dos CPU, por lo que solo tres procesos no son suficientes
para alterarla. Inicie tres procesos monitor más en segundo plano. Observe de nuevo el
promedio de carga de un minuto, que ahora se espera que sea superior a 1. Espere al menos
un minuto para que el cálculo se adapte a la carga de trabajo nueva.

[student@servera ~]$ monitor &


[4] 10708
[student@servera ~]$ monitor &
[5] 11122
[student@servera ~]$ monitor &
[6] 11338

top - 12:42:32 up 11 days, 1:28, 3 users, load average: 1.23, 2.50, 1.54

12. Una vez que haya finalizado de observar los valores promedio de carga, finalice cada uno de
los procesos monitor desde el comando top.

12.1. En la terminal de shell derecha, presione k para observar el prompt que está debajo
de los encabezados y arriba de las columnas.

...output omitted...
PID to signal/kill [default pid = 11338]

12.2. El prompt elige los procesos monitor en la parte superior de la lista. Presione Enter
para finalizar el proceso.

...output omitted...
Send pid 11338 signal [15/sigterm]

12.3. Presione Enter de nuevo para confirmar la señal SIGTERM 15.


Verifique que el proceso seleccionado ya no esté presente en el comando top. Si el
PID existe, repita estos pasos para finalizar los procesos y sustituya la señal SIGKILL
9 cuando se le solicite.

6498 student 20 0 222448 2996 2748 R 22.9 0.2 5:31.47 monitor


6881 student 20 0 222448 3032 2784 R 21.3 0.2 4:54.47 monitor
11122 student 20 0 222448 2984 2736 R 15.3 0.2 2:32.48 monitor
6071 student 20 0 222448 2964 2716 S 15.0 0.2 6:50.90 monitor
10708 student 20 0 222448 3032 2784 S 14.6 0.2 2:53.46 monitor

280 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

13. Repita el paso anterior para cada instancia del proceso monitor restante. Verifique que no
quede ningún proceso monitor en el comando top.

14. En la shell de terminal derecha, presione q para salir del comando top. Cierre el terminal
derecho.

15. Regrese a la máquina workstation con el usuario student.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish processes-monitor

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 281
capítulo 8 | Monitoreo y gestión de procesos Linux

Trabajo de laboratorio

Monitoreo y gestión de procesos Linux


En este trabajo de laboratorio, localiza y gestiona los procesos que usan la mayoría de los
recursos en un sistema.

Resultados
• Gestionar procesos con top como herramienta de gestión de procesos.

Antes De Comenzar
Inicie sesión en workstation como student con la contraseña student.

En workstation, ejecute el comando lab start processes-review. Este comando


ejecuta un script de inicio para determinar si el host serverb es accesible en la red.

[student@workstation ~]$ lab start processes-review

Instrucciones
1. En workstation, abra dos ventanas de terminal una al lado de la otra. En esta sección,
estas terminales se denominan izquierda y derecha. En cada ventana de terminal, inicie
sesión en serverb con el usuario student.
Cree el script process101 en el directorio /home/student/bin. El script process101
genera una carga de CPU artificial.

#!/bin/bash
while true; do
var=1
while [[ var -lt 50000 ]]; do
var=$(($var+1))
done
sleep 1
done

2. En la shell de terminal derecha, ejecute la utilidad top.


3. En la shell de terminal izquierda, determine la cantidad de CPU lógicas de la máquina virtual.
Ejecute el script process101 en segundo plano.
4. En la shell de terminal derecha, observe la pantalla de top. Observe el ID del proceso (PID)
y vea el porcentaje de CPU que usa el proceso process101. El porcentaje de CPU que usa
el proceso debe oscilar entre el 10 % y el 15 %. Alterne la visualización de la utilidad top entre
cargas, subprocesos y memoria. Regrese a la pantalla de uso de CPU de la utilidad top.
5. Desactive el uso de negrita en la pantalla. Guarde esta configuración para volver a usarla
cuando se reinicie top. Confirme que los cambios están guardados.
6. Copie el script process101 en un nuevo archivo process102 y aumente la carga de CPU
artificial a cien mil en el nuevo script. Inicie el proceso process102 en segundo plano.

282 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

7. En la shell de terminal derecha, verifique que el proceso se está ejecutando y que usa la
mayoría de los recursos de la CPU. La carga debe ser del 25 % al 35 %.
8. El promedio de carga es inferior a 1. Copie process101 a un nuevo script denominado
process103. Incremente el recuento de sumas a ochocientos mil. Inicie process103 en
segundo plano. Confirme que el promedio de carga sea superior a 1. El promedio de carga
puede tardar unos minutos en cambiar.
9. En la shell de terminal izquierda, cambie al usuario root. Suspenda el proceso process101.
Enumere los trabajos restantes. Observe que el estado del proceso process101 ahora es T.
10. Reanude el proceso process101.
11. Finalice process101, process102 y process103 desde la línea de comandos. Verifique
que los procesos ya no se muestren en top.
12. Detenga los procesos y regrese a la máquina workstation.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade processes-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish processes-review

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 283
capítulo 8 | Monitoreo y gestión de procesos Linux

Solución

Monitoreo y gestión de procesos Linux


En este trabajo de laboratorio, localiza y gestiona los procesos que usan la mayoría de los
recursos en un sistema.

Resultados
• Gestionar procesos con top como herramienta de gestión de procesos.

Antes De Comenzar
Inicie sesión en workstation como student con la contraseña student.

En workstation, ejecute el comando lab start processes-review. Este comando


ejecuta un script de inicio para determinar si el host serverb es accesible en la red.

[student@workstation ~]$ lab start processes-review

Instrucciones
1. En workstation, abra dos ventanas de terminal una al lado de la otra. En esta sección,
estas terminales se denominan izquierda y derecha. En cada ventana de terminal, inicie
sesión en serverb con el usuario student.
Cree el script process101 en el directorio /home/student/bin. El script process101
genera una carga de CPU artificial.

#!/bin/bash
while true; do
var=1
while [[ var -lt 50000 ]]; do
var=$(($var+1))
done
sleep 1
done

1.1. En workstation, abra dos ventanas de terminal una al lado de la otra. En cada
terminal, use el comando ssh para iniciar sesión en la máquina serverb con el usuario
student.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$

1.2. En la shell de terminal izquierda, cree el directorio /home/student/bin.

[student@serverb ~]$ mkdir /home/student/bin

284 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

1.3. En la shell de terminal izquierda, cree el script process101. Presione la tecla i para
ingresar al modo interactivo Vim. Escriba :wq para guardar el archivo.

[student@serverb ~]$ vim /home/student/bin/process101


#!/bin/bash
while true; do
var=1
while [[ var -lt 50000 ]]; do
var=$(($var+1))
done
sleep 1
done

1.4. Haga el script process101 ejecutable.

[student@serverb ~]$ chmod +x /home/student/bin/process101

2. En la shell de terminal derecha, ejecute la utilidad top.

2.1. Modifique el tamaño de la ventana para que sea lo más alta posible.

[student@serverb ~]$ top


top - 17:02:43 up 42 min, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1774.8 total, 1420.7 free, 206.3 used, 147.8 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1417.3 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


1 root 20 0 105972 17592 10292 S 0.0 1.0 0:01.30 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-
event+
...output omitted...

3. En la shell de terminal izquierda, determine la cantidad de CPU lógicas de la máquina virtual.


Ejecute el script process101 en segundo plano.

3.1. Verifique la cantidad de CPU lógicas.

[student@serverb ~]$ grep "model name" /proc/cpuinfo | wc -l


2

3.2. Cambie al directorio /home/student/bin. Ejecute el script process101 en


segundo plano.

[student@serverb ~]$ cd /home/student/bin


[student@serverb bin]$ process101 &
[1] 1161

RH124-RHEL9.0-es-5-20230516 285
capítulo 8 | Monitoreo y gestión de procesos Linux

4. En la shell de terminal derecha, observe la pantalla de top. Observe el ID del proceso (PID)
y vea el porcentaje de CPU que usa el proceso process101. El porcentaje de CPU que usa
el proceso debe oscilar entre el 10 % y el 15 %. Alterne la visualización de la utilidad top entre
cargas, subprocesos y memoria. Regrese a la pantalla de uso de CPU de la utilidad top.

4.1. Presione Shift+m.

top - 17:11:24 up 51 min, 2 users, load average: 0.16, 0.07, 0.02


Tasks: 118 total, 1 running, 117 sleeping, 0 stopped, 0 zombie
%Cpu(s): 7.8 us, 0.7 sy, 0.0 ni, 91.2 id, 0.0 wa, 0.2 hi, 0.2 si, 0.0 st
MiB Mem : 1774.8 total, 1419.5 free, 207.4 used, 147.9 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1416.2 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


761 root 20 0 340412 41416 17888 S 0.0 2.3 0:00.44 firewalld
780 root 20 0 474344 30704 13508 S 0.0 1.7 0:00.62 tuned
736 polkitd 20 0 2577132 24592 18320 S 0.0 1.4 0:00.07 polkitd
767 root 20 0 471864 18992 16416 S 0.0 1.0 0:00.15 NetworkManager
1 root 20 0 105972 17592 10292 S 0.0 1.0 0:01.30 systemd
...output omitted...
1161 student 20 0 222652 3888 3432 S 12.3 0.2 0:54.81 process101
...output omitted...

nota
Cuando la utilidad top cambia al modo de memoria, el proceso process101 ya no
es el primer proceso. Puede presionar Shift+p para volver al uso de la CPU.

4.2. Presione m para mostrar más detalles de la memoria.

top - 17:16:14 up 56 min, 2 users, load average: 0.20, 0.12, 0.04


Tasks: 118 total, 1 running, 117 sleeping, 0 stopped, 0 zombie
%Cpu(s): 7.5 us, 0.8 sy, 0.0 ni, 91.5 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
MiB Mem : 19.9/1774.8 [|||||||||| ]
MiB Swap: 0.0/0.0 [ ]

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


761 root 20 0 340412 41416 17888 S 0.0 2.3 0:00.44 firewalld
780 root 20 0 474344 30704 13508 S 0.0 1.7 0:00.66 tuned
736 polkitd 20 0 2577132 24592 18320 S 0.0 1.4 0:00.07 polkitd
767 root 20 0 471864 18992 16416 S 0.0 1.0 0:00.15 NetworkManager
1 root 20 0 105972 17592 10292 S 0.0 1.0 0:01.30 systemd
1068 student 20 0 21652 13144 10128 S 0.0 0.7 0:00.08 systemd
1114 root 20 0 19332 11928 9648 S 0.0 0.7 0:00.02 sshd
...output omitted...
1161 student 20 0 222652 3888 3432 S 11.0 0.2 1:35.17 process101
...output omitted...

4.3. Presione t.

top - 17:21:43 up 1:01, 2 users, load average: 0.23, 0.18, 0.09


Tasks: 121 total, 1 running, 120 sleeping, 0 stopped, 0 zombie
%Cpu(s): 7.5/1.0 8[||||| ]

286 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

MiB Mem : 20.1/1774.8 [|||||||||||| ]


MiB Swap: 0.0/0.0 [ ]

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


761 root 20 0 340412 41416 17888 S 0.0 2.3 0:00.44 firewalld
780 root 20 0 474344 30704 13508 S 0.0 1.7 0:00.70 tuned
736 polkitd 20 0 2577132 24592 18320 S 0.0 1.4 0:00.07 polkitd
767 root 20 0 471864 18992 16416 S 0.0 1.0 0:00.17 NetworkManager
1 root 20 0 105972 17592 10292 S 0.0 1.0 0:01.31 systemd
1068 student 20 0 21652 13144 10128 S 0.0 0.7 0:00.08 systemd
1114 root 20 0 19332 11928 9648 S 0.0 0.7 0:00.02 sshd
668 root 20 0 33656 11892 8728 S 0.0 0.7 0:00.10 systemd-udevd
1064 root 20 0 19328 11780 9504 S 0.0 0.6 0:00.03 sshd
...output omitted...
1155 student 20 0 225976 4400 3656 R 0.0 0.2 0:01.31 top
...output omitted...

4.4. Presione Shift+p para cambiar al uso de la CPU.

top - 17:23:33 up 1:03, 2 users, load average: 0.17, 0.17, 0.09


Tasks: 121 total, 1 running, 120 sleeping, 0 stopped, 0 zombie
%Cpu(s): 7.3/0.8 8[|||||| ]
MiB Mem : 20.2/1774.8 [||||||||||||| ]
MiB Swap: 0.0/0.0 [ ]

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


1161 student 20 0 222652 3888 3432 S 15.6 0.2 2:09.61 process101
1 root 20 0 105972 17592 10292 S 0.0 1.0 0:01.31 systemd
...output omitted...

5. Desactive el uso de negrita en la pantalla. Guarde esta configuración para volver a usarla
cuando se reinicie top. Confirme que los cambios están guardados.

5.1. Presione Shift+b para desactivar el uso de negrita.

top - 17:29:12 up 1:09, 2 users, load average: 0.17, 0.15, 0.10


Tasks: 117 total, 2 running, 115 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.6/0.7 6[|||| ]
MiB Mem : 20.4/1774.8 [|||||||||||||| ]
MiB Swap: 0.0/0.0 [ ]

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


1161 student 20 0 222652 3888 3432 R 12.0 0.2 2:57.18 process101
1 root 20 0 105972 17592 10292 S 0.0 1.0 0:01.31 systemd
...output omitted...

5.2. Presione Shift+w para guardar esta configuración. La configuración predeterminada


se almacena en el archivo toprc en el directorio /home/student/.config/
procps. En la shell de terminal izquierda, confirme que el archivo toprc existe.

[student@serverb bin]$ ls -l /home/student/.config/procps/toprc


-rw-rw-r--. 1 student student 966 Feb 18 19:45 /home/student/.config/procps/toprc

RH124-RHEL9.0-es-5-20230516 287
capítulo 8 | Monitoreo y gestión de procesos Linux

5.3. En la shell de terminal derecha, salga de top y, luego, reinícielo. Confirme que la nueva
pantalla usa la configuración guardada.

top - 17:51:48 up 1:31, 2 users, load average: 0.09, 0.12, 0.09


Tasks: 119 total, 1 running, 118 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.0/0.5 5[||| ]
MiB Mem : 20.0/1774.8 [||||||||||||| ]
MiB Swap: 0.0/0.0 [ ]

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


1161 student 20 0 222652 3888 3432 S 10.6 0.2 6:08.76 process101
1 root 20 0 105972 17592 10292 S 0.0 1.0 0:01.33 systemd
...output omitted...

6. Copie el script process101 en un nuevo archivo process102 y aumente la carga de CPU


artificial a cien mil en el nuevo script. Inicie el proceso process102 en segundo plano.

6.1. En la shell de terminal izquierda, copie process101 a process102.

[student@serverb bin]$ cp process101 process102

6.2. Edite el script process102 e incremente los problemas de suma de cincuenta mil a
cien mil. Ingrese al modo interactivo mediante el uso de i. Escriba :wq para guardar el
archivo y salir.

[student@serverb bin]$ vim process102


#!/bin/bash
while true; do
var=1
while [[ var -lt 100000 ]]; do
var=$(($var+1))
done
sleep 1
done

6.3. Inicie el proceso process102 en segundo plano.

[student@serverb bin]$ process102 &


[2] 4023

6.4. Verifique que ambos procesos se ejecutan en segundo plano.

[student@serverb bin]$ jobs


[1]- Running process101 &
[2]+ Running process102 &

7. En la shell de terminal derecha, verifique que el proceso se está ejecutando y que usa la
mayoría de los recursos de la CPU. La carga debe ser del 25 % al 35 %.

7.1. En la shell de terminal derecha, confirme que el proceso se está ejecutando. La carga
debe ser del 25 % al 35 %.

288 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

top - 18:04:54 up 1:44, 2 users, load average: 0.37, 0.24, 0.13


Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie
%Cpu(s): 18.1 us, 2.0 sy, 0.0 ni, 79.7 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
MiB Mem : 1774.8 total, 1374.3 free, 210.1 used, 190.4 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1410.7 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


4023 student 20 0 222652 3980 3524 S 22.3 0.2 0:32.94 process102
1161 student 20 0 222652 3888 3432 S 17.7 0.2 7:59.52 process101
1 root 20 0 105972 17592 10292 S 0.0 1.0 0:01.33 systemd
...output omitted...

nota
Si no ve los procesos process101 y process102 en la parte superior de la lista
de procesos, presione Shift+p para garantizar que la utilidad top ordene la salida
según el uso de la CPU.

8. El promedio de carga es inferior a 1. Copie process101 a un nuevo script denominado


process103. Incremente el recuento de sumas a ochocientos mil. Inicie process103 en
segundo plano. Confirme que el promedio de carga sea superior a 1. El promedio de carga
puede tardar unos minutos en cambiar.

8.1. En la shell de terminal derecha, verifique que el promedio de carga sea inferior a 1.

top - 18:12:49 up 1:52, 2 users, load average: 0.45, 0.38, 0.24


...output omitted...

8.2. En la shell de terminal izquierda, copie process101 a un nuevo script process103.

[student@serverb bin]$ cp process101 process103

8.3. En la shell de terminal izquierda, edite el script process103. Incremente el recuento


de sumas a ochocientos mil. Ingrese al modo interactivo con la tecla i. Escriba :wq
para guardar el archivo y salir.

[student@serverb bin]$ vim process103


#!/bin/bash
while true; do
var=1
while [[ var -lt 800000 ]]; do
var=$(($var+1))
done
sleep 1
done

8.4. Inicie el proceso process103 en segundo plano. El uso de la CPU oscila entre el 60 %
y 85 %.

[student@serverb bin]$ process103 &


[3] 5172

RH124-RHEL9.0-es-5-20230516 289
capítulo 8 | Monitoreo y gestión de procesos Linux

8.5. Verifique que los tres trabajos se ejecutan en segundo plano.

[student@serverb bin]$ jobs


[1] Running process101 &
[2]- Running process102 &
[3]+ Running process103 &

8.6. En la shell de terminal derecha, verifique que el promedio de carga sea superior a 1. La
carga puede tardar unos minutos en aumentar.

top - 18:16:07 up 1:56, 2 users, load average: 1.11, 0.77, 0.45


...output omitted...

9. En la shell de terminal izquierda, cambie al usuario root. Suspenda el proceso process101.


Enumere los trabajos restantes. Observe que el estado del proceso process101 ahora es T.

9.1. Cambie al usuario root.

[student@serverb bin]$ su -
Password: redhat

9.2. Suspenda el proceso process101.

[root@serverb ~]# pkill -SIGSTOP process101

9.3. En la shell de terminal derecha, confirme que el proceso process101 ya no se está


ejecutando.

top - 18:19:17 up 1:59, 2 users, load average: 0.92, 0.83, 0.50


Tasks: 123 total, 3 running, 118 sleeping, 1 stopped, 1 zombie
%Cpu(s): 42.9 us, 4.0 sy, 0.0 ni, 52.8 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st
MiB Mem : 1774.8 total, 1368.4 free, 215.5 used, 190.8 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1405.2 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


5172 student 20 0 222652 3900 3448 R 66.4 0.2 3:25.81 process103
4023 student 20 0 222652 3980 3524 R 26.9 0.2 4:07.89 process102
1 root 20 0 105972 17592 10292 S 0.0 1.0 0:01.34 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
...output omitted...

9.4. En la shell de terminal izquierda, vea los trabajos restantes.

290 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

[root@serverb ~]# ps jT
...output omitted...
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1117 1118 1118 1118 pts/1 5778 Ss 1000 0:00 -bash
1118 1161 1161 1118 pts/1 5778 T 1000 10:00 /bin/bash /home/student/bin/
process101
1118 4023 4023 1118 pts/1 5778 S 1000 4:19 /bin/bash /home/student/bin/
process102
1118 5172 5172 1118 pts/1 5778 S 1000 3:59 /bin/bash /home/student/bin/
process103
...output omitted...

Tenga en cuenta que process101 tiene un estado de T. Esto significa que el proceso
está actualmente suspendido.

10. Reanude el proceso process101.

10.1. En la shell de terminal izquierda, reanude el proceso process101.

[root@serverb ~]# pkill -SIGCONT process101

10.2. En la shell de terminal derecha, verifique que el proceso se está ejecutando.

top - 18:24:18 up 2:04, 2 users, load average: 1.06, 0.96, 0.65


Tasks: 125 total, 2 running, 123 sleeping, 0 stopped, 0 zombie
%Cpu(s): 48.3 us, 4.3 sy, 0.0 ni, 47.2 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
MiB Mem : 1774.8 total, 1368.6 free, 215.2 used, 191.0 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1405.5 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


5172 student 20 0 222652 3900 3448 R 72.0 0.2 7:02.30 process103
4023 student 20 0 222652 3980 3524 S 22.0 0.2 5:23.52 process102
1161 student 20 0 222652 3888 3432 S 11.0 0.2 10:00.92 process101
...output omitted...

11. Finalice process101, process102 y process103 desde la línea de comandos. Verifique


que los procesos ya no se muestren en top.

11.1. En la shell de terminal izquierda, finalice process101, process102 y process103.

[root@serverb ~]# pkill process101


[root@serverb ~]# pkill process102
[root@serverb ~]# pkill process103

11.2. En la shell de terminal derecha, verifique que los procesos ya no aparecen en top.

top - 18:25:12 up 2:05, 2 users, load average: 0.93, 0.95, 0.67


Tasks: 117 total, 1 running, 116 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1774.8 total, 1369.8 free, 214.0 used, 191.0 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1406.7 avail Mem

RH124-RHEL9.0-es-5-20230516 291
capítulo 8 | Monitoreo y gestión de procesos Linux

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND


767 root 20 0 471864 18992 16416 S 0.3 1.0 0:00.26
NetworkManager
1 root 20 0 105972 17592 10292 S 0.0 1.0 0:01.34 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
...output omitted...

12. Detenga los procesos y regrese a la máquina workstation.

12.1. Cierre sesión en el usuario root y cierre el terminal.

[root@serverb ~]# exit


logout
[1] Terminated process101
[2] Terminated process102
[3]- Terminated process103

12.2. En la shell de terminal derecha, presione q para salir de top. Regrese al sistema
workstation con el usuario student.

[student@serverb ~]$ exit


logout
Connection to serverb closed.
[student@workstation ~]$

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade processes-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish processes-review

Esto concluye la sección.

292 RH124-RHEL9.0-es-5-20230516
capítulo 8 | Monitoreo y gestión de procesos Linux

Resumen
• Un proceso es una instancia en ejecución de un programa ejecutable. A los procesos se les
asigna un estado, que pueden ser: en ejecución, en espera, detenido o zombie. Se usa el
comando ps para enumerar los procesos.

• Cada terminal tiene su propia sesión y puede tener un proceso en primer plano y procesos en
segundo plano independientes. El comando jobs muestra los procesos dentro de una sesión de
terminal.

• Una señal es una interrupción de software que informa eventos a un programa en ejecución. Los
comandos kill, pkill y killall usan señales para controlar los procesos.

• El promedio de carga es una estimación de cuán ocupado está el sistema. Para mostrar los
valores promedio de carga, puede usar los comandos top, uptime o w.

RH124-RHEL9.0-es-5-20230516 293
294 RH124-RHEL9.0-es-5-20230516
capítulo 9

Control de servicios y daemons


Meta Controlar y monitorear los servicios de red y los
daemons del sistema con el servicio systemd.

Objetivos • Enumerar daemons del sistema y servicios


de red iniciados por el servicio systemd y las
unidades socket.
• Controlar los daemons del sistema y los
servicios de red con el comando systemctl.

Secciones • Identificación de procesos del sistema iniciados


en forma automática (y ejercicio guiado)
• Control de servicios del sistema (y ejercicio
guiado)

Trabajo de Control de servicios y daemons


laboratorio

RH124-RHEL9.0-es-5-20230516 295
capítulo 9 | Control de servicios y daemons

Identificación de procesos del sistema


iniciados en forma automática

Objetivos
Enumerar daemons del sistema y los servicios de red iniciados por el servicio systemd y las
unidades socket.

Introducción al daemon del sistema


El daemon systemd gestión el proceso de inicio para Linux, incluido el inicio del servicio y la
gestión de servicios en general. El daemon systemd activa los recursos del sistema, los daemons
del servidor y otros procesos, tanto en el momento del arranque como en un sistema que está en
funcionamiento.

Los daemons son procesos que esperan o se ejecutan en segundo plano y realizan diversas tareas.
Generalmente, los daemons se inician automáticamente en el momento del arranque y continúan
ejecutándose hasta que se apaga el sistema o usted los detiene manualmente. Por convención, los
nombres de los demonios terminan con d.

Un servicio en el sentido de systemd a menudo se refiere a uno o más daemons. Sin embargo,
iniciar o detener un servicio puede cambiar el estado del sistema una vez, sin dejar un proceso
daemon en ejecución después (denominado oneshot).

En Red Hat Enterprise Linux, el primer proceso que se inicia (PID1) es el daemon systemd, que
aporta estas funciones:

• Capacidades de paralelización (inicio de múltiples servicios de forma simultánea), que


aumentan la velocidad de arranque de un sistema.
• Inicio a pedido de los daemons sin necesidad de otro servicio.
• Gestión automática de dependencias del servicio, que puede evitar largos tiempos de espera.
Por ejemplo, un servicio que depende de una red no intenta iniciarse hasta que la red esté
disponible.
• Método para realizar el seguimiento de los procesos relacionados en forma conjunta con el uso
de los grupos de control de Linux.

Descripción de las unidades de servicio


Una systemd unidad es un concepto abstracto para definir objetos que el sistema sabe gestionar.

Las unidades están representadas por archivos de configuración, denominados archivos de unidad
que encapsulan información sobre los servicios del sistema, los sockets de escucha y otros objetos
relevantes para el sistema de inicio systemd.

Una unidad tiene un nombre y un tipo de unidad. El nombre proporciona una identidad única a la
unidad. El tipo de unidad permite agrupar unidades con otros tipos de unidades similares.

El daemon systemd usa unidades para gestionar diferentes tipos de objetos:

• Las unidades de servicio tienen una extensión .service y representan servicios del sistema.
Puede usar unidades de servicio para iniciar los daemons usados con más frecuencia, como un
servidor web.

296 RH124-RHEL9.0-es-5-20230516
capítulo 9 | Control de servicios y daemons

• Las unidades de socket tienen una extensión .socket y representan sockets de comunicación
entre procesos (IPC) que systemd debe monitorear. Si un cliente se conecta al socket, el
gerente systemd iniciará un daemon y le pasará la conexión. Puede usar unidades socket para
demorar el inicio de un servicio en el momento del arranque y para iniciar servicios usados con
menos frecuencia a pedido.

• Las unidades de ruta tienen una extensión .path y se usan para demorar la activación de un
servicio hasta que ocurra un cambio en el sistema de archivos específico. Puede usar unidades
de ruta para servicios que usan directorios de cola, como un sistema de impresión.

Para gestionar unidades, use el comando systemctl. Por ejemplo, el comando systemctl -t
help permite visualizar los tipos de unidad disponibles. El comando systemctl puede abreviar
los nombres de las unidades, las entradas de árbol de proceso y las descripciones de unidad.

Enumeración de unidades de servicio


Use el comando systemctl para analizar el estado actual del sistema. Por ejemplo, el siguiente
comando enumera y ordena las páginas de todas las unidades de servicio cargadas actualmente.

[root@host ~]# systemctl list-units --type=service


UNIT LOAD ACTIVE SUB DESCRIPTION
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
chronyd.service loaded active running NTP client/server
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
...output omitted...

En este ejemplo, la opción --type=service limita el tipo de unidades systemd a unidades de


servicio. La salida tiene las siguientes columnas:

UNIT
El nombre de la unidad de servicio.

LOAD
Si el daemon systemd analizó adecuadamente la configuración de la unidad y cargó la unidad
en la memoria.

ACTIVE
El estado de activación de alto nivel de la unidad. Esta información indica si la unidad se inició
de forma satisfactoria.

SUB
El estado de activación de bajo nivel de la unidad. Esta información proporciona datos más
detallados sobre la unidad. La información varía según el tipo de unidad, el estado y cómo se
ejecuta la unidad.

DESCRIPTION
La descripción breve de la unidad.

De manera predeterminada, el comando systemctl list-units --type=service enumera


solamente las unidades de servicio con estados de activación active (activos). La opción
systemctl list-units --all enumera todas las unidades de servicio, independientemente
de los estados de activación. Use la opción --state= para filtrar los valores en los campos LOAD,
ACTIVE o SUB.

RH124-RHEL9.0-es-5-20230516 297
capítulo 9 | Control de servicios y daemons

[root@host ~]# systemctl list-units --type=service --all


UNIT LOAD ACTIVE SUB DESCRIPTION
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing ...
auth-rpcgss-module.service loaded inactive dead Kernel Module ...
chronyd.service loaded active running NTP client/server
cpupower.service loaded inactive dead Configure CPU power ...
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
● display-manager.service not-found inactive dead display-manager.service
...output omitted...

El comando systemctl sin ningún argumento enumera las unidades que están cargadas y
activas.

[root@host ~]# systemctl


UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary...
sys-devices-....device loaded active plugged Virtio network...
sys-subsystem-net-devices-ens3.deviceloaded active plugged Virtio network...
...output omitted...
-.mount loaded active mounted Root Mount
boot.mount loaded active mounted /boot
...output omitted...
systemd-ask-password-plymouth.path loaded active waiting Forward Password...
systemd-ask-password-wall.path loaded active waiting Forward Password...
init.scope loaded active running System and Servi...
session-1.scope loaded active running Session 1 of...
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing...
chronyd.service loaded active running NTP client/server
crond.service loaded active running Command Scheduler
...output omitted...

El comando systemctl con la opción list-units muestra las unidades que el servicio
systemd intenta analizar y cargar en la memoria. Esta opción no muestra los servicios que están
instalados pero no habilitados. Puede usar el comando systemctl con la opción list-unit-
files para ver el estado de todos los archivos de unidad instalados:

[root@host ~]# systemctl list-unit-files --type=service


UNIT FILE STATE VENDOR PRESET
arp-ethers.service disabled disabled
atd.service enabled enabled
auditd.service enabled enabled
auth-rpcgss-module.service static -
autovt@.service alias -
blk-availability.service disabled disabled
...output omitted...

En la salida del comando systemctl list-unit-files, algunas entradas comunes para


el campo STATE son enabled, disabled, static y masked. Todos los valores STATE se
enumeran en las páginas del manual de comandos systemctl.

298 RH124-RHEL9.0-es-5-20230516
capítulo 9 | Control de servicios y daemons

Visualización de los estados de servicio


Vea el estado de una unidad con el comando systemctl status name.type. Si se omite el
tipo de unidad, el comando espera una unidad de servicio con ese nombre.

[root@host ~]# systemctl status sshd.service


● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset:
enabled)
Active: active (running) since Mon 2022-03-14 05:38:12 EDT; 25min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1114 (sshd)
Tasks: 1 (limit: 35578)
Memory: 5.2M
CPU: 64ms
CGroup: /system.slice/sshd.service
└─1114 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Mar 14 05:38:12 workstation systemd[1]: Starting OpenSSH server daemon...


Mar 14 05:38:12 workstation sshd[1114]: Server listening on 0.0.0.0 port 22.
Mar 14 05:38:12 workstation sshd[1114]: Server listening on :: port 22.
Mar 14 05:38:12 workstation systemd[1]: Started OpenSSH server daemon.
...output omitted...

Algunos campos de la salida del comando systemctl con la opción status:

Información de la unidad de servicio

Campo Descripción

Loaded Si la unidad de servicio está cargada en la memoria

Active Si la unidad de servicio se está ejecutando y, de ser así, por cuánto tiempo
lo ha hecho

Docs Dónde encontrar más información sobre el servicio

Main PID El ID de proceso principal del servicio, incluido el nombre del comando

Status Más información sobre el servicio

Process Más información sobre los procesos relacionados

CGroup Más información sobre los grupos de control relacionados

No todos estos campos están siempre presentes en la salida del comando.

Las palabras clave en la salida del estado indican el estado del servicio:

RH124-RHEL9.0-es-5-20230516 299
capítulo 9 | Control de servicios y daemons

Estados de servicio en la salida de systemctl

Palabra clave Descripción

loaded Se procesa el archivo de configuración de la unidad.

active (running) El servicio se está ejecutando con procesos continuos.

active (exited) El servicio completó correctamente la configuración de una sola vez.

active (waiting) El servicio está en ejecución, pero a la espera de un evento.

inactive El servicio no se está ejecutando.

enabled El servicio se inicia en el momento del arranque.

disabled El servicio no está configurado para iniciarse en el momento del arranque.

static El servicio no puede habilitarse, pero puede iniciarse por una unidad
habilitada en forma automática.

nota
El comando systemctl status NAME reemplaza al comando service NAME
status que se usaba en Red Hat Enterprise Linux 6 y versiones anteriores.

Verificación del estado de un servicio


El comando systemctl verifica los estados específicos de un servicio. Por ejemplo, use el
comando systemctl con la opción is-active para verificar que la unidad de servicio se
encuentre activa (en ejecución):

[root@host ~]# systemctl is-active sshd.service


active

El comando devuelve el estado de la unidad de servicio, el cual generalmente es active o


inactive.

Ejecute el comando systemctl con la opción is-enabled para verificar si una unidad de
servicio está habilitada para iniciarse automáticamente durante el arranque del sistema:

[root@host ~]# systemctl is-enabled sshd.service


enabled

El comando informa si la unidad de servicio está habilitada para iniciarse en el momento del
arranque y el estado generalmente es enabled o disabled.

Para verificar si la unidad falló durante el arranque, ejecute el comando systemctl con la opción
is-failed:

[root@host ~]# systemctl is-failed sshd.service


active

300 RH124-RHEL9.0-es-5-20230516
capítulo 9 | Control de servicios y daemons

El comando informa active si el servicio está ejecutándose correctamente o failed si se ha


producido un error durante el arranque. Si la unidad se detuvo, devuelve unknown o inactive.

Para enumerar todas las unidades que han presentado un error, ejecute el comando systemctl
--failed --type=service.

Referencias
Páginas del manual systemd(1), systemd.unit(5), systemd.service(5),
systemd.socket(5) y systemctl(1)

Para obtener más información, consulte el capítulo Managing Services with systemd
de la Red Hat Enterprise Linux 9 Configuring Basic System Settings Guide en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/
html-single/configuring_basic_system_settings/managing-services-with-
systemd_configuring-basic-system-settings#managing-services-with-
systemd_configuring-basic-system-settings

RH124-RHEL9.0-es-5-20230516 301
capítulo 9 | Control de servicios y daemons

Ejercicio Guiado

Identificación de procesos del sistema


iniciados en forma automática
En este ejercicio, enumerará las unidades de servicio instaladas e identificará qué servicios
están actualmente habilitados y activos en un servidor.

Resultados
• Enumerar las unidades de servicio instaladas.

• Identificar los servicios activos y habilitados en el sistema.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start services-identify

Instrucciones
1. Use el comando ssh para iniciar sesión en la máquina servera con el usuario student.

[student@workstation ~]$ ssh student@servera


[student@servera ~]$

2. Enumere todas las unidades de servicio instaladas en la máquina servera.

[student@servera ~]$ systemctl list-units --type=service


UNIT LOAD ACTIVE SUB DESCRIPTION
atd.service loaded active running Deferred execution scheduler
auditd.service loaded active running Security Auditing Service
chronyd.service loaded active running NTP client/server
crond.service loaded active running Command Scheduler
dbus-broker.service loaded active running D-Bus System Message Bus
...output omitted...

Presione q para salir del comando.

3. Enumere todas las unidades socket, activas e inactivas, en la máquina servera.

[student@servera ~]$ systemctl list-units --type=socket --all


UNIT LOAD ACTIVE SUB DESCRIPTION
dbus.socket loaded active running D-Bus System Message Bus Socket

302 RH124-RHEL9.0-es-5-20230516
capítulo 9 | Control de servicios y daemons

dm-event.socket loaded active listening Device-mapper event daemon FIFOs


lvm2-lvmpolld.socket loaded active listening LVM2 poll daemon socket
...output omitted...

LOAD = Reflects whether the unit definition was properly loaded.


ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
13 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.

4. Explore el estado del servicio chronyd. Puede usar este servicio para la sincronización del
protocolo de tiempo en red (NTP).

4.1. Muestre el estado del servicio chronyd. Observe el ID del proceso de todos los
daemons activos.

[student@servera ~]$ systemctl status chronyd


● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor
preset: enabled)
Active: active (running) since Mon 2022-03-14 05:38:15 EDT; 1h 16min ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Process: 728 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/
SUCCESS)
Main PID: 747 (chronyd)
Tasks: 1 (limit: 10800)
Memory: 3.7M
CPU: 37ms
CGroup: /system.slice/chronyd.service
└─747 /usr/sbin/chronyd -F 2

Mar 14 05:38:15 servera.lab.example.com systemd[1]: Starting NTP client/server...


Mar 14 05:38:15 servera.lab.example.com chronyd[747]: chronyd version 4.1 starting
(+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH
+IPV6 +DEBUG)
Mar 14 05:38:15 servera.lab.example.com chronyd[747]: commandkey directive is no
longer supported
Mar 14 05:38:15 servera.lab.example.com chronyd[747]: generatecommandkey directive
is no longer supported
Mar 14 05:38:15 servera.lab.example.com chronyd[747]: Frequency -11.870 +/- 1.025
ppm read from /var/lib/chrony/drift
Mar 14 05:38:15 servera.lab.example.com chronyd[747]: Loaded seccomp filter (level
2)
Mar 14 05:38:15 servera.lab.example.com systemd[1]: Started NTP client/server.
Mar 14 05:38:23 servera.lab.example.com chronyd[747]: Selected source
172.25.254.254

Presione q para salir del comando.

4.2. Confirme que el daemon chronyd se está ejecutando usando su ID de proceso. En


el comando anterior, la salida del ID del proceso asociado con el servicio chronyd es
747. El ID del proceso puede diferir en su sistema.

RH124-RHEL9.0-es-5-20230516 303
capítulo 9 | Control de servicios y daemons

[student@servera ~]$ ps -p 747


PID TTY TIME CMD
747 ? 00:00:00 chronyd

5. Explore el estado del servicio sshd. Puede usar este servicio para una comunicación
cifrada segura entre sistemas.

5.1. Determine si el servicio sshd está habilitado para que se inicie en el arranque del
sistema.

[student@servera ~]$ systemctl is-enabled sshd


enabled

5.2. Determine si el servicio sshd está activo sin mostrar toda la información de estado.

[student@servera ~]$ systemctl is-active sshd


active

5.3. Muestre el estado del servicio sshd.

[student@servera ~]$ systemctl status sshd


● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset:
enabled)
Active: active (running) since Mon 2022-03-14 05:38:16 EDT; 1h 19min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 784 (sshd)
Tasks: 1 (limit: 10800)
Memory: 6.7M
CPU: 82ms
CGroup: /system.slice/sshd.service
└─784 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Mar 14 05:38:16 servera.lab.example.com systemd[1]: Starting OpenSSH server


daemon...
Mar 14 05:38:16 servera.lab.example.com sshd[784]: Server listening on 0.0.0.0
port 22.
Mar 14 05:38:16 servera.lab.example.com sshd[784]: Server listening on :: port 22.
Mar 14 05:38:16 servera.lab.example.com systemd[1]: Started OpenSSH server daemon.
Mar 14 06:51:36 servera.lab.example.com sshd[1090]: Accepted publickey for student
from 172.25.250.9 port 53816 ssh2: RSA SHA256:M8ikhcEDm2tQ95Z0o7ZvufqEixCFCt
+wowZLNzNlBT0
Mar 14 06:51:36 servera.lab.example.com sshd[1090]: pam_unix(sshd:session):
session opened for user student(uid=1000) by (uid=0)

Presione q para salir del comando.

6. Enumere los estados habilitados y deshabilitados de todas las unidades de servicio.

304 RH124-RHEL9.0-es-5-20230516
capítulo 9 | Control de servicios y daemons

[student@servera ~]$ systemctl list-unit-files --type=service


UNIT FILE STATE VENDOR PRESET
arp-ethers.service disabled disabled
atd.service enabled enabled
auditd.service enabled enabled
auth-rpcgss-module.service static -
autovt@.service alias -
blk-availability.service disabled disabled
bluetooth.service enabled enabled
chrony-wait.service disabled disabled
chronyd.service enabled enabled
...output omitted...

Presione q para salir del comando.

7. Regrese al sistema workstation con el usuario student.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish services-identify

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 305
capítulo 9 | Control de servicios y daemons

Control de servicios del sistema

Objetivos
Controlar los daemons del sistema y los servicios de red con systemctl.

Iniciar y detener servicios


Puede iniciar, detener o recargar servicios manualmente para actualizar el servicio, actualizar el
archivo de configuración, desinstalar el servicio o administrar manualmente un servicio que se usa
con poca frecuencia.

Use el comando systemctl status para verificar el estado del servicio y saber si el servicio
está ejecutándose o está detenido.

[root@host ~]# systemctl status sshd.service


● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset:
enabled)
Active: active (running) since Wed 2022-03-23 11:58:18 EDT; 2min 56s ago
...output omitted...

A continuación, use el comando systemctl start con el usuario root (con el comando sudo
si es necesario). Si ejecuta el comando systemctl start con el nombre del servicio solamente
(sin el tipo de servicio), el servicio systemd busca archivos .service.

[root@host ~]# systemctl start sshd

Para detener un servicio en ejecución, use el comando systemctl con la opción stop. En los
siguientes ejemplos, se muestra cómo detener el servicio sshd.service:

[root@host ~]# systemctl stop sshd.service

Reiniciar y recargar servicios


Cuando reinicia un servicio en ejecución, el servicio primero se detiene y, luego, se inicia
nuevamente. Al reiniciar el servicio, el nuevo proceso obtiene un nuevo ID durante el arranque y,
por lo tanto, se modifica el ID del proceso. Para reiniciar un servicio en ejecución, use el comando
systemctl con la opción restart. En los siguientes ejemplos, se muestra cómo reiniciar el
servicio sshd:

[root@host ~]# systemctl restart sshd.service

Algunos servicios pueden recargar sus archivos de configuración sin requerir un reinicio, lo que
se denomina recarga de servicio. La recarga de un servicio no cambia el ID del proceso asociado
con diversos procesos del servicio. Para volver a cargar un servicio en ejecución, use el comando
systemctl con la opción reload. En el siguiente ejemplo, se muestra cómo volver a cargar el
servicio sshd.service después de modificar la configuración:

306 RH124-RHEL9.0-es-5-20230516
capítulo 9 | Control de servicios y daemons

[root@host ~]# systemctl reload sshd.service

En caso de que no esté seguro de si el servicio cuenta con la funcionalidad para volver a cargar los
cambios del archivo de configuración, use el comando systemctl con la opción reload-or-
restart. El comando vuelve a cargar los cambios de configuración si la función de recarga está
disponible. De lo contrario, el comando reinicia el servicio para implementar los nuevos cambios de
configuración:

[root@host ~]# systemctl reload-or-restart sshd.service

Enumeración de dependencias de la unidad


Algunos servicios requieren que otros servicios se ejecuten primero, lo que hace que se creen
dependencias de los otros servicios. Otros servicios se inician solo a demanda, en lugar de hacerlo
en el arranque. En ambos casos, los comandos systemd y systemctl inician los servicios según
sea necesario, ya sea para resolver la dependencia o para iniciar un servicio que se usa con poca
frecuencia. Por ejemplo, si el servicio de impresión (CUPS) no se está ejecutando, y se coloca
un archivo en el directorio de la cola de impresión, el sistema iniciará los daemons o comandos
relacionados con CUPS para ejecutar la tarea de impresión.

[root@host ~]# systemctl stop cups.service


Warning: Stopping cups, but it can still be activated by:
cups.path
cups.socket

Sin embargo, para detener todos los servicios de impresión en un sistema, debe detener las tres
unidades. Al deshabilitar el servicio, se deshabilitarán las dependencias.

Con el comando systemctl list-dependencies UNIT, se visualiza una asignación de


jerarquía de las dependencias para iniciar la unidad de servicio. Para enumerar dependencias
inversas (unidades que dependen de la unidad especificada), use la opción --reverse con el
comando.

[root@host ~]# systemctl list-dependencies sshd.service


sshd.service
● ├─system.slice
● ├─sshd-keygen.target
● │ ├─sshd-keygen@ecdsa.service
● │ ├─sshd-keygen@ed25519.service
● │ └─sshd-keygen@rsa.service
● └─sysinit.target
...output omitted...

Enmascarar servicios y quitar máscara de servicios


En ocasiones, es posible que algunos servicios instalados en su sistema entren en conflicto unos
con otros. Por ejemplo, existen muchas formas de gestionar los servidores de correo (los servicios
postfix y sendmail ). Enmascarar un servicio evita que un administrador inicie accidentalmente
un servicio que se encuentra en conflicto con otros servicios. El enmascaramiento crea un enlace
en los directorios de configuración al archivo /dev/null, el cual impide que el servicio se inicie.
Para enmascarar un servicio, use el comando systemctl con la opción mask.

RH124-RHEL9.0-es-5-20230516 307
capítulo 9 | Control de servicios y daemons

[root@host ~]# systemctl mask sendmail.service


Created symlink /etc/systemd/system/sendmail.service → /dev/null.

Luego, verifique el estado del servicio con el comando systemctl list-unit-files:

[root@host ~]# systemctl list-unit-files --type=service


UNIT FILE STATE
...output omitted...
sendmail.service masked
...output omitted...

El intento de iniciar una unidad de servicio enmascarada falla y arroja la siguiente salida:

[root@host ~]# systemctl start sendmail.service


Failed to start sendmail.service: Unit sendmail.service is masked.

Use el comando systemctl unmask para desenmascarar la unidad de servicio.

[root@host ~]# systemctl unmask sendmail


Removed /etc/systemd/system/sendmail.service.

Importante
Usted, u otro archivo de unidad, pueden iniciar manualmente un servicio
deshabilitado, pero no se inicia automáticamente en el arranque. Un servicio
enmascarado no se inicia de forma manual ni automática.

Habilitar servicios para que se inicien o se detengan en


el arranque
El inicio de un servicio en un sistema en funcionamiento no garantiza que el servicio se inicie
automáticamente cuando se vuelva a arrancar el sistema. De manera similar, detener un servicio
en un sistema en funcionamiento no evita que se reinicie cuando se vuelva a arrancar el sistema. Si
crea enlaces en los directorios de configuración de systemd, habilita la opción para que el servicio
se inicie en el arranque. Puede crear o eliminar estos enlaces mediante el comando systemctl
con la opción enable o disable.

[root@root ~]# systemctl enable sshd.service


Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/
lib/systemd/system/sshd.service.

Este comando crea un enlace simbólico desde el archivo de la unidad de servicio, normalmente
en el directorio /usr/lib/systemd/system, que se conecta con la ubicación en el disco
donde el comando systemd busca archivos, que se encuentran en el directorio /etc/systemd/
system/TARGETNAME.target.wants. La habilitación de un servicio no inicia el servicio en la
sesión actual. Para iniciar el servicio y habilitarlo para que se inicie automáticamente durante el
arranque, ejecute los comandos systemctl start y systemctl enable, o use el comando
systemctl enable --now equivalente.

308 RH124-RHEL9.0-es-5-20230516
capítulo 9 | Control de servicios y daemons

[root@root ~]# systemctl enable --now sshd.service


Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/
lib/systemd/system/sshd.service.

Para deshabilitar el servicio para que no se inicie automáticamente, use el comando systemctl
disable que quita el enlace simbólico creado al habilitar un servicio. La desactivación de un
servicio no detiene el servicio si se está ejecutando actualmente. Para deshabilitar y detener un
servicio, puede ejecutar ambos comandos systemctl stop y systemctl disable, o use el
comando equivalente systemctl disable --now.

[root@host ~]# systemctl disable --now sshd.service


Removed /etc/systemd/system/multi-user.target.wants/sshd.service.

Para verificar si el servicio está habilitado o deshabilitado, use el comando systemctl is-
enabled.

[root@host ~]# systemctl is-enabled sshd.service


enabled

Resumen de comandos systemctl


Puede iniciar y detener los servicios en un sistema en funcionamiento, y habilitarlos o
deshabilitarlos para que se inicien automáticamente durante el proceso de arranque.

Comandos útiles para la gestión de servicios

Comando Tarea

systemctl status UNIT Ver información detallada sobre el estado de


una unidad.

systemctl stop UNIT Detener un servicio en un sistema en


funcionamiento.

systemctl start UNIT Iniciar un servicio en un sistema en


funcionamiento.

systemctl restart UNIT Reiniciar un servicio en un sistema en


funcionamiento.

systemctl reload UNIT Volver a cargar el archivo de configuración de


un servicio en ejecución.

systemctl mask UNIT Deshabilitar el inicio (tanto manual como


durante el proceso de arranque) de un
servicio.

systemctl unmask UNIT Poner un servicio enmascarado a disposición.

systemctl enable UNIT Configurar un servicio para que se inicie


durante el proceso de arranque. Use la opción
--now para iniciar también el servicio.

RH124-RHEL9.0-es-5-20230516 309
capítulo 9 | Control de servicios y daemons

Comando Tarea

systemctl disable UNIT Deshabilitar el inicio de un servicio durante


el proceso de arranque. Use la opción --now
para detener también el servicio.

Referencias
Páginas del manual systemd(1), systemd.unit(5), systemd.service(5),
systemd.socket(5) y systemctl(1)

Para obtener más información, consulte el capítulo Managing System Services with
systemctl de la Red Hat Enterprise Linux 9 Configuring Basic System Settings Guide
en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-
single/configuring_basic_system_settings/index#managing-system-services-with-
systemctl_configuring-basic-system-settings

310 RH124-RHEL9.0-es-5-20230516
capítulo 9 | Control de servicios y daemons

Ejercicio Guiado

Control de servicios del sistema


En este ejercicio, usará el comando systemctl para detener, iniciar, reiniciar, recargar,
habilitar y deshabilitar los servicios systemd.

Resultados
• Usar el comando systemctl para controlar los servicios systemd.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start services-control

Instrucciones
1. Inicie sesión en la máquina servera con el usuario student y cambie al usuario root.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#

2. Reinicie y recargue el servicio sshd y observe los resultados.

2.1. Muestre el estado del servicio sshd. Tenga en cuenta el ID del proceso del daemon
sshd. Presione q para salir del comando.

[root@servera ~]# systemctl status sshd


● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset:
enabled)
Active: active (running) since Thu 2022-05-19 04:04:45 EDT; 16min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 784 (sshd)
Tasks: 1 (limit: 10799)
Memory: 6.6M
...output omitted...

2.2. Reinicie el servicio sshd y visualice el estado. En este ejemplo, el ID de proceso del
daemon cambia de 784 a 1193. Presione q para salir del comando.

RH124-RHEL9.0-es-5-20230516 311
capítulo 9 | Control de servicios y daemons

[root@servera ~]# systemctl restart sshd


[root@servera ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset:
enabled)
Active: active (running) since Thu 2022-05-19 04:21:40 EDT; 5s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1193 (sshd)
Tasks: 1 (limit: 10799)
Memory: 1.7M
...output omitted...

2.3. Vuelva a cargar el servicio sshd y visualice el estado. El ID del proceso del daemon no
se modifica. Presione q para salir del comando.

[root@servera ~]# systemctl reload sshd


[root@servera ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset:
enabled)
Active: active (running) since Thu 2022-05-19 04:21:40 EDT; 52s ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 1201 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/
SUCCESS)
Main PID: 1193 (sshd)
Tasks: 1 (limit: 10799)
Memory: 1.7M
...output omitted...

3. Verifique que el servicio chronyd se esté ejecutando. Presione q para salir del comando.

[root@servera ~]# systemctl status chronyd


● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor
preset: enabled)
Active: active (running) since Thu 2022-05-19 04:04:44 EDT; 19min ago
...output omitted...

4. Detenga el servicio chronyd y visualice el estado. Presione q para salir del comando.

[root@servera ~]# systemctl stop chronyd


[root@servera ~]# systemctl status chronyd
○ chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor
preset: enabled)
Active: inactive (dead) since Thu 2022-05-19 04:24:59 EDT; 4s ago
...output omitted...

312 RH124-RHEL9.0-es-5-20230516
capítulo 9 | Control de servicios y daemons

May 19 04:24:59 servera.lab.example.com systemd[1]: Stopping NTP client/server...


May 19 04:24:59 servera.lab.example.com systemd[1]: chronyd.service: Deactivated
successfully.
May 19 04:24:59 servera.lab.example.com systemd[1]: Stopped NTP client/server.

5. Determine si el servicio chronyd está habilitado para que se inicie en el arranque del
sistema.

[root@servera ~]# systemctl is-enabled chronyd


enabled

6. Reinicie la máquina servera y, a continuación, visualice el estado del servicio chronyd.

[root@servera ~]# systemctl reboot


Connection to servera closed by remote host.
Connection to servera closed.
[student@workstation ~]$

Inicie sesión con el usuario student en la máquina servera y cambie al usuario root.
Visualice el estado del servicio chronyd. Presione q para salir del comando.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]# systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor
preset: enabled)
Active: active (running) since Thu 2022-05-19 04:27:12 EDT; 40s ago
...output omitted...

7. Inhabilite el servicio chronyd para que no se inicie en el arranque del sistema y, luego,
visualice el estado del servicio. Presione q para salir del comando.

[root@servera ~]# systemctl disable chronyd


Removed /etc/systemd/system/multi-user.target.wants/chronyd.service.
[root@servera ~]# systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor
preset: enabled)
Active: active (running) since Thu 2022-05-19 04:27:12 EDT; 2min 48s ago
...output omitted...

RH124-RHEL9.0-es-5-20230516 313
capítulo 9 | Control de servicios y daemons

8. Reinicie servera y, a continuación, visualice el estado del servicio chronyd.

[root@servera ~]# systemctl reboot


Connection to servera closed by remote host.
Connection to servera closed.
[student@workstation ~]$

Inicie sesión con el usuario student en servera y visualice el estado del servicio
chronyd. Presione q para salir del comando.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$ systemctl status chronyd
○ chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor
preset: enabled)
Active: inactive (dead)
Docs: man:chronyd(8)
man:chrony.conf(5)

9. Regrese al sistema workstation con el usuario student.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish services-control

Esto concluye la sección.

314 RH124-RHEL9.0-es-5-20230516
capítulo 9 | Control de servicios y daemons

Trabajo de laboratorio

Control de servicios y daemons


En este trabajo de laboratorio, configura varios servicios para habilitarlos o deshabilitarlos,
iniciarlos o detenerlos, según la especificación que se le proporcione.

Resultados
• Habilitar, deshabilitar, iniciar y detener servicios.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start services-review

Instrucciones
1. Use el comando ssh para iniciar sesión en la máquina serverb con el usuario student. En
la máquina serverb, inicie el servicio psacct.
2. Configure el servicio psacct para que se inicie en el arranque del sistema.
3. Detenga el servicio rsyslog.
4. Configure el servicio rsyslog para que no se inicie en el momento de arranque del sistema.
5. Reinicie la máquina serverb antes de evaluar el trabajo de laboratorio.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade services-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish services-review

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 315
capítulo 9 | Control de servicios y daemons

Solución

Control de servicios y daemons


En este trabajo de laboratorio, configura varios servicios para habilitarlos o deshabilitarlos,
iniciarlos o detenerlos, según la especificación que se le proporcione.

Resultados
• Habilitar, deshabilitar, iniciar y detener servicios.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start services-review

Instrucciones
1. Use el comando ssh para iniciar sesión en la máquina serverb con el usuario student. En
la máquina serverb, inicie el servicio psacct.

1.1. Inicie sesión en la máquina serverb con el usuario student y cambie al usuario root.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#

1.2. Verifique el estado del servicio psacct. El servicio psacct está en estado inactivo
y deshabilitado. El estado deshabilitado confirma que el servicio no se inicia en el
momento del arranque.

[root@serverb ~]# systemctl status psacct


○ psacct.service - Kernel process accounting
Loaded: loaded (/usr/lib/systemd/system/psacct.service; disabled; vendor
preset: disabled)
Active: inactive (dead)

1.3. Inicie el servicio psacct.

[root@serverb ~]# systemctl start psacct

1.4. Verifique que el servicio psacct se esté ejecutando.

316 RH124-RHEL9.0-es-5-20230516
capítulo 9 | Control de servicios y daemons

[root@serverb ~]# systemctl is-active psacct


active

2. Configure el servicio psacct para que se inicie en el arranque del sistema.

2.1. Habilite el servicio psacct para que se inicie en el arranque del sistema.

[root@serverb ~]# systemctl enable psacct


Created symlink /etc/systemd/system/multi-user.target.wants/psacct.service → /usr/
lib/systemd/system/psacct.service.

2.2. Verifique que el servicio psacct esté habilitado para iniciarse en el arranque del
sistema.

[root@serverb ~]# systemctl is-enabled psacct


enabled

3. Detenga el servicio rsyslog.

3.1. Verifique el estado del servicio rsyslog. Tenga en cuenta que el servicio rsyslog
está en ejecución y habilitado para iniciarse en el momento del arranque. Presione q
para salir del comando.

[root@serverb ~]# systemctl status rsyslog


● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor
preset: enabled)
Active: active (running) since Thu 2022-05-19 04:04:43 EDT; 38min ago
...output omitted...

3.2. Detenga el servicio rsyslog.

[root@serverb ~]# systemctl stop rsyslog

3.3. Verifique que el servicio rsyslog se encuentre detenido.

[root@serverb ~]# systemctl is-active rsyslog


inactive

4. Configure el servicio rsyslog para que no se inicie en el momento de arranque del sistema.

4.1. Deshabilite el servicio rsyslog para que no se inicie en el momento de arranque del
sistema.

[root@serverb ~]# systemctl disable rsyslog


Removed /etc/systemd/system/multi-user.target.wants/rsyslog.service.

4.2. Verifique que el servicio rsyslog no se inicie durante el proceso de arranque.

RH124-RHEL9.0-es-5-20230516 317
capítulo 9 | Control de servicios y daemons

[root@serverb ~]# systemctl is-enabled rsyslog


disabled

5. Reinicie la máquina serverb antes de evaluar el trabajo de laboratorio.

[root@serverb ~]# systemctl reboot


Connection to serverb closed by remote host.
Connection to serverb closed.
[student@workstation ~]$

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade services-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish services-review

Esto concluye la sección.

318 RH124-RHEL9.0-es-5-20230516
capítulo 9 | Control de servicios y daemons

Resumen
• La utilidad systemd proporciona un método para activar los recursos del sistema, los daemons
del servidor y otros procesos, tanto en el momento del arranque como en un sistema que está
en funcionamiento.

• Se usa systemctl para iniciar, detener, volver a cargar, habilitar y deshabilitar servicios.

• Use la utilidad systemd para gestionar unidades de servicio, unidades de socket y unidades de
ruta.

• Use el comando systemctl status para determinar el estado de los daemons del sistema y
los servicios de red iniciados por systemd.

• El comando systemctl list-dependencies enumera todas las unidades de servicio de las


que depende una unidad de servicio específica.

• La utilidad systemd puede enmascarar una unidad de servicio para que no se ejecute ni
siquiera para dar respuesta a las dependencias.

RH124-RHEL9.0-es-5-20230516 319
320 RH124-RHEL9.0-es-5-20230516
capítulo 10

Configuración y seguridad de
SSH
Meta Configurar un servicio seguro de línea de
comandos en sistemas remotos con OpenSSH.

Objetivos • Iniciar sesión en un sistema remoto y ejecutar


comandos con ssh.
• Configurar una cuenta de usuario para usar
autenticación basada en claves para iniciar
sesión en sistemas remotos de forma segura y
sin una contraseña.
• Deshabilitar los inicios de sesión directos como
root y la autenticación basada en contraseñas
para el servicio OpenSSH.

Secciones • Acceso a la línea de comandos remota con SSH


(y ejercicio guiado)
• Configuración de autenticación basada en
claves de SSH (y ejercicio guiado)
• Personalización de la configuración del servicio
OpenSSH (y ejercicio guiado)

Trabajo de Configuración y seguridad de SSH


laboratorio

RH124-RHEL9.0-es-5-20230516 321
capítulo 10 | Configuración y seguridad de SSH

Acceso a la línea de comandos remota


con SSH

Objetivos
Iniciar sesión en un sistema remoto y ejecutar comandos con ssh.

Descripción de Secure Shell


El paquete OpenSSH proporciona el protocolo Secure Shell o SSH en Red Hat Enterprise Linux.
Con el protocolo SSH, los sistemas pueden comunicarse de forma cifrada y segura a través de una
red insegura.

Use el comando ssh para crear una conexión segura a un sistema remoto, autenticarse como un
usuario específico y obtener una sesión de shell interactiva en el sistema remoto. El comando ssh
puede ejecutar una sesión en un sistema remoto sin ejecutar una shell interactiva.

Ejemplos de Secure Shell


El siguiente comando ssh inicia sesión en el servidor remoto hosta con el mismo nombre de
usuario que el usuario local actual. En este ejemplo, el sistema remoto le solicita que se autentique
con la contraseña de usuario developer1.

[developer1@host ~]$ ssh hosta


developer1@hosta's password: redhat
...output omitted...
[developer1@hosta ~]$

Use el comando exit para cerrar sesión en el sistema remoto.

[developer1@hosta ~]$ exit


logout
Connection to hosta closed.
[developer1@host ~]$

El siguiente comando ssh inicia sesión en el servidor remoto hosta con el nombre de usuario
developer2. El sistema remoto le solicita que se autentique con la contraseña de usuario
developer2.

[developer1@host ~]$ ssh developer2@hosta


developer2@hosta's password: shadowman
...output omitted...
[developer2@hosta ~]$

El siguiente comando ssh ejecuta el comando hostname en el sistema remoto hosta con el
usuario developer2 sin acceder a la shell interactiva remota.

322 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

[developer1@host ~]$ ssh developer2@hosta hostname


developer2@hosta's password: shadowman
hosta.lab.example.com
[developer1@host ~]$

Este comando muestra el resultado en el terminal del sistema local.

Identificación de usuarios remotos


El comando w muestra una lista de usuarios actualmente con sesión en el sistema. También
muestra la ubicación del sistema remoto y los comandos que ejecutó el usuario.

[developer1@host ~]$ ssh developer1@hosta


developer1@hosta's password: redhat
[developer1@hosta ~]$ w
16:13:38 up 36 min, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
developer2 pts/0 172.25.250.10 16:13 7:30 0.01s 0.01s -bash
developer1 pts/1 172.25.250.10 16:24 3.00s 0.01s 0.00s w
[developer2@hosta ~]$

En la salida, se muestra que el usuario developer2 ha iniciado sesión en el sistema en el


pseudoterminal 0 a las 16:13 el día de hoy desde el host con la dirección IP 172.25.250.10
y que ha estado inactivo en el prompt de shell durante siete minutos y treinta segundos. En la
salida, también se muestra que el usuario developer1 ha iniciado sesión en el sistema en el
pseudoterminal 1 y que ha estado inactivo durante tres segundos tras ejecutar el comando w.

Claves de host SSH


SSH asegura la comunicación a través del cifrado con clave pública. Cuando un cliente SSH se
conecta a un servidor SSH, el servidor le envía una copia de su clave pública al cliente antes de
que este inicie sesión. Esta clave se usa con el fin de establecer el cifrado seguro para el canal de
comunicación y autenticar el sistema del cliente.

Cuando un usuario ejecuta el comando ssh para conectarse a un servidor SSH, el comando
verifica si tiene una copia de la clave pública del servidor en sus archivos de hosts locales
conocidos. La clave puede estar preconfigurada en el archivo /etc/ssh/ssh_known_hosts, o
el usuario puede tener el archivo ~/.ssh/known_hosts que contiene la clave en su directorio de
inicio.

Si el cliente tiene una copia de la clave, el comando ssh comparará la clave de los archivos de
hosts conocidos para ese servidor con el que recibió. Si las claves no coinciden, el cliente supone
que el tráfico de red al servidor está comprometido y solicita al usuario que confirme si desea
continuar o interrumpir la conexión.

Comprobación estricta de la clave del host


El parámetro StrictHostKeyChecking se establece en el archivo ~/.ssh/config específico
del usuario, en el archivo /etc/ssh/ssh_config de todo el sistema o especificando la opción -
o StrictHostKeyChecking= del comando ssh.

• Si el parámetro StrictHostKeyChecking se establece en yes, el comando ssh siempre


interrumpe la conexión SSH cuando las claves públicas no coinciden.

RH124-RHEL9.0-es-5-20230516 323
capítulo 10 | Configuración y seguridad de SSH

• Si el parámetro StrictHostKeyChecking se establece en no, el comando ssh habilita la


conexión y agrega la clave del host de destino al archivo ~/.ssh/known_hosts.

Si la clave SSH del host de destino cambió desde la última vez que se conectó a ella, el comando
ssh solicita su confirmación para iniciar sesión y aceptar la nueva clave.

Si acepta la nueva clave, se guarda una copia de la clave pública en el archivo ~/.ssh/
known_hosts para confirmar automáticamente la identidad del servidor en las conexiones
posteriores.

nota
Red Hat recomienda establecer el parámetro StrictHostKeyChecking en yes
en el archivo específico del usuario ~/.ssh/config o en el archivo de todo el
sistema /etc/ssh/ssh_config para que el comando ssh siempre interrumpa la
conexión SSH si las claves públicas no coinciden.

[developer1@host ~]$ ssh hostb


The authenticity of host 'hostb (172.25.250.12)' can't be established.
ECDSA key fingerprint is SHA256:qaS0PToLrqlCO2XGklA0iY7CaP7aPKimerDoaUkv720.
Are you sure you want to continue connecting (yes/no)? no
[developer1@host ~]$

Verifique la huella digital de la clave de host SSH del servidor de destino con el comando ssh-
keygen. En este ejemplo, el comando ssh-keygen se ejecuta en el servidor de destino hostb.

El comando ssh-keygen muestra la huella digital de la clave para que pueda compararla con la
salida del comando ssh y verificar que la clave es válida. Utilice las opciones -lf para enumerar la
huella digital de la clave pública en el archivo de clave pública predeterminado del host.

Debido a que no puede conectarse a través de SSH, debe verificar la huella digital de la clave del
host de destino iniciando sesión localmente. Use un método de comunicación fuera de banda para
compartir claves públicas, como una llamada telefónica o una videoconferencia.

[developer1@hostb ~]$ ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub


256 SHA256:qaS0PToLrqlCO2XGklA0iY7CaP7aPKimerDoaUkv720 root@server (ECDSA)

Después de verificar la clave en el host de destino, puede aceptar la clave y conectarse al host de
destino.

[developer1@host ~]$ ssh hostb


The authenticity of host 'hostb (172.25.250.12)' can't be established.
ECDSA key fingerprint is SHA256:qaS0PToLrqlCO2XGklA0iY7CaP7aPKimerDoaUkv720.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hostb,172.25.250.12' (ECDSA) to the list of known
hosts.
developer1@hostb's password: redhat
...output omitted...
[developer1@hostb ~]$

324 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

Gestión de claves de hosts conocidas para SSH


La información sobre los sistemas remotos conocidos y sus claves se almacena en los siguientes
lugares:

• El archivo /etc/ssh/ssh_known_hosts de todo el sistema.

• El archivo ~/.ssh/known_hosts en el directorio de inicio de cada usuario.

El archivo /etc/ssh/ssh_known_hosts es un archivo de todo el sistema que almacena las


claves públicas para los hosts conocidos por el sistema. Debe crear y gestionar este archivo, ya sea
manualmente o mediante algún método automatizado, como el uso de Ansible o un script que use
la utilidad ssh-keyscan.

Es posible que la clave pública de un servidor haya cambiado porque la clave se perdió debido a
una falla en el disco duro o se reemplazó por alguna razón legítima. En ese caso, para iniciar sesión
correctamente en ese sistema, el archivo /etc/ssh/ssh_known_hosts debe modificarse para
reemplazar la entrada de clave pública anterior con la nueva clave pública.

Si se conecta a un sistema remoto y la clave pública de ese sistema no está en el archivo /etc/
ssh/ssh_known_hosts, el cliente SSH busca la clave en el archivo ~/.ssh/known_hosts.

Cada entrada de clave de host conocida consta de una línea que contiene tres campos:

• El primer campo es una lista de nombres de host y direcciones IP que comparten la clave
pública.

• El segundo campo es el algoritmo de cifrado que se usa para la clave.

• El último campo es la clave en sí.

[developer1@host ~]$ cat ~/.ssh/known_hosts


server1 ssh-ed25519
AAAAC3NzaC1lZDI1NTE5AAAAIOmiLKMExRnsS1g7OTxMsOmgHuUSGQBUxHhuUGcv19uT
server1 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC8WDOooY+rh6NPa9yhLsNQXBqcQknTL/
WSd3zPvHLLd7KaC4IiEUxnwbfLBit8tRcirbQFxO20Am
...output omitted...

Solución de problemas de la clave de host


Si la dirección IP o la clave pública del sistema remoto cambian y usted intenta conectarse a ese
sistema nuevamente a través de SSH, el cliente SSH detecta que la entrada de clave para ese
sistema en el archivo ~/.ssh/known_hosts ya no es válida. Un mensaje de advertencia indica
que la identificación del host remoto ha cambiado y que debe modificar la entrada de la clave.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:hxttxb/qVi1/ycUU2wXF6mfGH++Ya7WYZv0r+tIkg4I.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.

RH124-RHEL9.0-es-5-20230516 325
capítulo 10 | Configuración y seguridad de SSH

Offending ECDSA key in /home/user/.ssh/known_hosts:12


ECDSA host key for server1.example.com has changed and you have requested strict
checking.
Host key verification failed.

Si no sabe por qué ha cambiado la clave, verifique la nueva huella digital de la clave, ya que esta
clave podría ser un ataque real a su red. Use un método fuera de banda para la verificación, como
hablar con el administrador de sistemas del sistema objetivo.

Si sabe por qué ha cambiado la clave, por ejemplo, un cambio de dirección IP, resuelva este
problema eliminando la entrada de clave relevante del archivo ~/.ssh/known_hosts y, a
continuación, vuelva a conectarse al sistema para recibir la nueva entrada de clave.

El número de línea de la entrada de clave relevante se especifica en el mensaje de advertencia.


También puede buscar y eliminar la entrada de clave relevante ejecutando el siguiente comando:

[developer1@host ~]$ ssh-keygen -R remotesystemname -f ~/.ssh/known_hosts


# Host remotesystemname found: line 12
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old

Referencias
Páginas del manual: ssh(1), w(1) y hostname(1)

Para obtener más información, consulte Using Secure Communications Between


Two Systems with OpenSSH en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-
single/securing_networks/assembly_using-secure-communications-between-two-
systems-with-openssh_securing-networks

326 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

Ejercicio Guiado

Acceso a la línea de comandos remota


En este ejercicio, inicia sesión en un sistema remoto como usuarios diferentes y ejecuta los
comandos.

Resultados
• Iniciar sesión en un sistema remoto.

• Ejecutar comandos con OpenSSH secure shell.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start ssh-access

Instrucciones
1. Desde workstation, abra una sesión de SSH en la máquina servera con el usuario
student.

[student@workstation ~]$ ssh student@servera


[student@servera ~]$

2. Abra una sesión de SSH en la máquina serverb con el usuario student. Acepte la clave
de host. Use la contraseña student cuando se le solicite la contraseña para el usuario
student en la máquina serverb.

[student@servera ~]$ ssh student@serverb


The authenticity of host 'serverb (172.25.250.11)' can't be established.
ED25519 key fingerprint is SHA256:h/hEJa/anxp6AP7BmB5azIPVbPNqieh0oKi4KWOTK80.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'serverb' (ED25519) to the list of known hosts.
student@serverb's password: student
...output omitted...
[student@serverb ~]$

El comando ssh registra la clave de host en el archivo /home/student/.ssh/


known_hosts en la máquina servera para identificar la máquina serverb. El usuario
student inició la conexión SSH desde la máquina servera. Si el archivo /home/
student/.ssh/known_hosts no existe, se crea junto con la nueva entrada en él. El

RH124-RHEL9.0-es-5-20230516 327
capítulo 10 | Configuración y seguridad de SSH

comando ssh no se puede ejecutar correctamente si el host remoto tiene otra clave que no
es la que está registrada.

3. Muestre los usuarios que actualmente han iniciado sesión en la máquina serverb. Se
indica que el usuario student ha iniciado sesión en el sistema desde el host con una
dirección IP 172.25.250.10, que corresponde a la máquina servera en la red del aula.

[student@serverb ~]$ w --from


03:39:04 up 16 min, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
student pts/0 172.25.250.10 20:40 1.00s 0.01s 0.00s w --from

4. Salga de la shell del usuario student en la máquina serverb.

[student@serverb ~]$ exit


logout
Connection to serverb closed.
[student@servera ~]$

5. Abra una sesión de SSH en la máquina serverb con el usuario root. Use redhat como
contraseña para el usuario root. El comando no le pidió que aceptara la clave de host
porque esta se encontró entre los hosts conocidos. Si la identidad de la máquina serverb
cambia, OpenSSH le solicita que desafíe la nueva clave de host.

[student@servera ~]$ ssh root@serverb


root@serverb's password: redhat
...output omitted...
[root@serverb ~]#

6. Ejecute el comando w para mostrar los usuarios que actualmente han iniciado sesión en la
máquina serverb. El resultado indica que el usuario root ha iniciado sesión en el sistema
desde el host con una dirección IP 172.25.250.10, que corresponde a la máquina
servera en la red del aula.

[root@serverb ~]# w --from


03:46:05 up 23 min, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 172.25.250.10 20:44 1.00s 0.02s 0.00s w --from

7. Salga de la shell del usuario root en la máquina serverb.

[root@serverb ~]# exit


logout
Connection to serverb closed.
[student@servera ~]$

328 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

8. Elimine el archivo /home/student/.ssh/known_hosts de la máquina servera. Esta


operación hace que ssh pierda las identidades registradas de los sistemas remotos.

[student@servera ~]$ rm /home/student/.ssh/known_hosts

Las claves de host pueden cambiar por razones legítimas: quizás la máquina remota se
reinstaló o se reemplazó debido a una falla del hardware. Por lo general, es aconsejable
eliminar la entrada de clave solo para el host particular en el archivo known_hosts. Dado
que este archivo particular known_hosts tiene solo una entrada, puede eliminar todo el
archivo.

9. Abra una sesión de SSH en la máquina serverb con el usuario student. Si se le solicita,
acepte la clave de host. Use student cuando se le solicite la contraseña para el usuario
student en la máquina serverb.

[student@servera ~]$ ssh student@serverb


The authenticity of host 'serverb (172.25.250.11)' can't be established.
ED25519 key fingerprint is SHA256:h/hEJa/anxp6AP7BmB5azIPVbPNqieh0oKi4KWOTK80.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'serverb' (ED25519) to the list of known hosts.
student@serverb's password: student
...output omitted...
[student@serverb ~]$

El comando ssh le solicitó que confirmara si deseaba aceptar o rechazar la clave de host
porque no pudo encontrar una para el host remoto.

10. Salga de la shell del usuario student en la máquina serverb y confirme que una instancia
nueva de known_hosts existe en la máquina servera.

[student@serverb ~]$ exit


logout
Connection to serverb closed.
[student@servera ~]$ ls -l /home/student/.ssh/known_hosts
-rw-------. 1 student student 819 Mar 24 03:47 /home/student/.ssh/known_hosts

11. Confirme si la nueva instancia del archivo known_hosts tiene la clave de host de
la máquina serverb. La siguiente salida del comando es un ejemplo; su salida de
workstation puede diferir .

[student@servera ~]$ cat /home/student/.ssh/known_hosts


...output omitted...
serverb ecdsa-sha2-nistp256 AAAAB3NzaC1yc2EAAAADAQ...
...output omitted...

12. Ejecute de forma remota el comando hostname en la máquina serverb sin acceder a la
shell interactiva.

[student@servera ~]$ ssh student@serverb hostname


student@serverb's password: student
serverb.lab.example.com

RH124-RHEL9.0-es-5-20230516 329
capítulo 10 | Configuración y seguridad de SSH

13. Regrese al sistema workstation con el usuario student.

[student@servera ~]$ exit


logout
Connection to servera closed.

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish ssh-access

Esto concluye la sección.

330 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

Configurar autenticación basada en


claves de SSH

Objetivos
Configurar una cuenta de usuario para usar autenticación basada en claves para iniciar sesión en
sistemas remotos de forma segura y sin una contraseña.

Autenticación basada en claves de SSH


Puede configurar su cuenta para el acceso sin contraseña a los servidores SSH que tienen
habilitada la autenticación basada en claves, que se basa en el cifrado de clave pública (PKI).

Para preparar su cuenta, genere un par de archivos de claves relacionados criptográficamente.


Una clave es privada y solo la tiene usted. La segunda clave es su clave pública relacionada, que
no es secreta. La clave privada actúa como su credencial de autenticación y debe almacenarse de
forma segura. La clave pública se copia en su cuenta en servidores a los que accederá de forma
remota, y verifica el uso de su clave privada.

Cuando inicia sesión en su cuenta en un servidor remoto, el servidor remoto usa su clave pública
para cifrar un mensaje de desafío y enviarlo a su cliente SSH. Su cliente SSH debe demostrar
que puede descifrar este mensaje, lo que demuestra que tiene la clave privada asociada. Si esta
verificación se realiza correctamente, su solicitud es de confianza y se le permite el acceso sin
proporcionar una contraseña.

Las contraseñas se pueden aprender o robar fácilmente, pero las claves privadas almacenadas de
forma segura son más difíciles de comprometer.

Generación de claves SSH


Use el comando ssh-keygen para crear un par de claves. De manera predeterminada, el
comando ssh-keygen guarda sus claves privadas y públicas en los archivos ~/.ssh/id_rsa y
~/.ssh/id_rsa.pub, pero puede especificar un nombre diferente.

[user@host ~]$ ssh-keygen


Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): Enter
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase): Enter
Enter same passphrase again: Enter
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vxutUNPio3QDCyvkYm1 user@host.lab.example.com
The key's randomart image is:
+---[RSA 2048]----+
| |
| . . |
| o o o |
| . = o o . |
| o + = S E . |

RH124-RHEL9.0-es-5-20230516 331
capítulo 10 | Configuración y seguridad de SSH

| ..O o + * + |
|.+% O . + B . |
|=*oO . . + * |
|++. . +. |
+----[SHA256]-----+

Puede elegir proporcionar una frase de contraseña a ssh-keygen, que se usa para cifrar su clave
privada. Se recomienda usar una frase de contraseña, de modo que su clave privada no pueda ser
usada por alguien que acceda a ella. Si establece una frase de contraseña, debe ingresar la frase
de contraseña cada vez que use la clave privada. La frase de contraseña se usa localmente para
descifrar su clave privada antes de usarla, a diferencia de su contraseña, que debe enviarse en
texto sin cifrar a través de la red para su uso.

Puede usar el administrador de claves ssh-agent localmente, que almacena en caché su frase
de contraseña al usarla por primera vez en una sesión de inicio de sesión, y luego proporciona la
frase de contraseña para todos los usos posteriores de clave privada en la misma sesión de inicio
de sesión. Este comando ssh-agent se analiza más adelante en esta sección.

En el siguiente ejemplo, se crea una clave privada protegida con frase de contraseña con la clave
pública.

[user@host ~]$ ssh-keygen -f .ssh/key-with-pass


Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): your_passphrase
Enter same passphrase again: your_passphrase
Your identification has been saved in .ssh/key-with-pass.
Your public key has been saved in .ssh/key-with-pass.pub.
The key fingerprint is:
SHA256:w3GGB7EyHUry4aOcNPKmhNKS7dl1YsMVLvFZJ77VxAo user@host.lab.example.com
The key's randomart image is:
+---[RSA 2048]----+
| . + =.o ... |
| = B XEo o. |
| . o O X =.... |
| = = = B = o. |
|= + * * S . |
|.+ = o + . |
| + . |
| |
| |
+----[SHA256]-----+

El comando ssh-keygen con la opción -f especifica los archivos en los que se guardan las
claves. En el ejemplo anterior, el comando ssh-keygen guardó el par de claves en los archivos /
home/user/.ssh/key-with-pass y /home/user/.ssh/key-with-pass.pub.

332 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

Advertencia
Durante el uso del nuevo comando ssh-keygen, si especifica el nombre de
un par de archivos de claves existente, incluido el par id_rsa predeterminado,
sobrescribirá ese par de claves existente, que solo se puede restaurar si tiene una
copia de seguridad (backup) de esos archivos. Al sobrescribir un par de claves, se
pierde la clave privada original que se requiere para acceder a las cuentas que ha
configurado con la clave pública correspondiente en los servidores remotos.

Si no puede restaurar su clave privada local, pierde el acceso a los servidores


remotos hasta que distribuya su nueva clave pública para reemplazar la clave pública
anterior en cada servidor. Cree siempre copias de seguridad de sus claves en caso
de que se sobrescriban o se pierdan.

Las claves SSH generadas se guardan de modo predeterminado en el subdirectorio .ssh de su


directorio de inicio. Para funcionar correctamente, la clave privada debe ser legible y escribible
solo por el usuario al que pertenece (permisos octales 600). La clave pública no es segura y
cualquier persona en el sistema también puede leerla (permisos octales 644).

Compartir la clave pública


Para configurar su cuenta remota para el acceso, copie su clave pública en el sistema remoto.
El comando ssh-copy-id copia la clave pública del par de claves SSH en el sistema remoto.
Puede especificar una clave pública específica con el comando ssh-copy-id o usar el archivo
predeterminado ~/.ssh/id_rsa.pub.

[user@host ~]$ ssh-copy-id -i .ssh/key-with-pass.pub user@remotehost


/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/
id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter
out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted
now it is to install the new keys
user@remotehost's password: redhat
Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'user@remotehost'"


and check to make sure that only the key(s) you wanted were added.

Luego de colocar la clave pública, pruebe el acceso remoto con la clave privada correspondiente.
Si la configuración es correcta, accede a su cuenta en el sistema remoto sin que se le solicite la
contraseña de su cuenta. Si no especifica un archivo de clave privada, el comando ssh usa el
archivo predeterminado ~/.ssh/id_rsa si existe.

Importante
Si configuró una frase de contraseña para proteger su clave privada, SSH solicitará
la frase de contraseña en el primer uso. Sin embargo, si la autenticación de la clave
se realiza correctamente, no se le solicita la contraseña de su cuenta.

RH124-RHEL9.0-es-5-20230516 333
capítulo 10 | Configuración y seguridad de SSH

[user@host ~]$ ssh -i .ssh/key-with-pass user@remotehost


Enter passphrase for key '.ssh/key-with-pass': your_passphrase
...output omitted...
[user@remotehost ~]$

Autenticación no interactiva con el administrador de claves


Si cifra su clave privada con una frase de contraseña, debe ingresar la frase de contraseña cada
vez que use la clave privada para la autenticación. Sin embargo, puede configurar el administrador
de claves ssh-agent para almacenar frases de contraseña en caché. Luego, cada vez que use
SSH, el administrador de claves ssh-agent le proporcionará la frase de contraseña. El uso de
un administrador de claves es conveniente y puede mejorar la seguridad dado que proporciona
menos oportunidades para que otras personas observen su frase de contraseña.

El administrador de claves ssh-agent se puede configurar para que se inicie automáticamente al


iniciar sesión. El entorno de escritorio gráfico GNOME puede iniciar y configurar automáticamente
el administrador de claves ssh-agent. Si inicia sesión en un entorno de texto, debe iniciar el
programa ssh-agent manualmente para cada sesión. Inicie el programa ssh-agent con el
siguiente comando:

[user@host ~]$ eval $(ssh-agent)


Agent pid 10155

Cuando inicia manualmente el comando ssh-agent, ejecuta comandos de shell adicionales


para establecer variables de entorno que se necesitan para usar con el comando ssh-add.
Puede cargar manualmente su frase de contraseña de clave privada en el gestor de claves con el
comando ssh-add.

Los siguientes comandos de ejemplo ssh-add agregan las claves privadas del archivo ~/.ssh/
id_rsa predeterminado y después de un archivo ~/.ssh/key-with-pass:

[user@host ~]$ ssh-add


Identity added: /home/user/.ssh/id_rsa (user@host.lab.example.com)
[user@host ~]$ ssh-add .ssh/key-with-pass
Enter passphrase for .ssh/key-with-pass: your_passphrase
Identity added: .ssh/key-with-pass (user@host.lab.example.com)

El siguiente comando ssh usa el archivo de clave privada predeterminado para acceder a su
cuenta en un servidor SSH remoto:

[user@host ~]$ ssh user@remotehost


Last login: Mon Mar 14 06:51:36 2022 from host.example.com
[user@remotehost ~]$

El siguiente comando ssh usa la clave privada ~/.ssh/key-with-pass para acceder a su


cuenta en el servidor remoto. La clave privada en este ejemplo se descifró previamente y se
agregó al gestor de claves ssh-agent, por lo que el comando ssh no le solicita la frase de
contraseña para descifrar la clave privada.

334 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

[user@host ~]$ ssh -i .ssh/key-with-pass user@remotehost


Last login: Mon Mar 14 06:58:43 2022 from host.example.com
[user@remotehost ~]$

Cuando cierra sesión en una sesión que usó un administrador de claves ssh-agent, todas las
frases de contraseña almacenadas en caché se borran de la memoria.

Solución de problemas básicos de conexión SSH


SSH puede parecer complejo cuando el acceso remoto mediante la autenticación de par de claves
no se realiza correctamente. El comando ssh proporciona tres niveles de detalle con las opciones
-v, -vv y -vvv que respectivamente proporcionan cantidades cada vez mayores de información
de depuración durante el uso del comando ssh.

En el siguiente ejemplo, se demuestra la información provista cuando se usa la opción de nivel de


detalle más baja:

[user@host ~]$ ssh -v user@remotehost


OpenSSH_8.7p1, OpenSSL 3.0.1 14 Dec 2021
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Reading configuration data /etc/ssh/ssh_config.d/01-training.conf
debug1: /etc/ssh/ssh_config.d/01-training.conf line 1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config.d/50-redhat.conf
...output omitted...
debug1: Connecting to remotehost [192.168.1.10] port 22.
debug1: Connection established.
...output omitted...
debug1: Authenticating to remotehost:22 as 'user'
...output omitted...
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-
mic,password
...output omitted...
debug1: Next authentication method: publickey
debug1: Offering public key: /home/user/.ssh/id_rsa RSA
SHA256:hDVJjD7xrUjXGZVRJQixxFV6NF/ssMjS6AuQ1+VqUc4
debug1: Server accepts key: /home/user/.ssh/id_rsa RSA
SHA256:hDVJjD7xrUjXGZVRJQixxFV6NF/ssMjS6AuQ1+VqUc4
Authenticated to remotehost ([192.168.1.10]:22) using "publickey".
...output omitted...
[user@remotehost ~]$

Versiones de OpenSSH y OpenSSL.

Archivos de configuración OpenSSH.

Conexión al host remoto.

Intentar autenticar al usuario en el host remoto.

Métodos de autenticación que permite el host remoto.

Intentar autenticar al usuario con la clave SSH.

Uso del archivo de claves /home/user/.ssh/id_rsa para autenticar.

RH124-RHEL9.0-es-5-20230516 335
capítulo 10 | Configuración y seguridad de SSH

Los hosts remotos aceptan la clave SSH.

Si un intento de método de autenticación falla, un servidor SSH remoto fallará a otros métodos
de autenticación permitidos hasta que se prueben todos los métodos disponibles. En el siguiente
ejemplo, se demuestra un acceso remoto con una clave SSH que falla, pero luego el servidor SSH
ofrece autenticación de contraseña que se realiza correctamente.

[user@host ~]$ ssh -v user@remotehost


...output omitted...
debug1: Next authentication method: publickey
debug1: Offering public key: /home/user/.ssh/id_rsa RSA
SHA256:bsB6l5R184zvxNlrcRMmYd32oBkU1LgQj09dUBZ+Z/k
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-
mic,password
...output omitted...
debug1: Next authentication method: password
user@remotehost's password: password
Authenticated to remotehost ([172.25.250.10]:22) using "password".
...output omitted...
[user@remotehost ~]$

Configuración del cliente SSH


Puede crear el archivo ~/.ssh/config para preconfigurar las conexiones SSH. Dentro del
archivo de configuración, puede especificar parámetros de conexión, como usuarios, claves y
puertos para hosts específicos. Este archivo elimina la necesidad de especificar manualmente los
parámetros de los comandos cada vez que se conecta a un host. Considere el siguiente archivo
~/.ssh/config, que preconfigura dos conexiones de host con diferentes usuarios y claves:

[user@host ~]$ cat ~/.ssh/config


host servera
HostName servera.example.com
User usera
IdentityFile ~/.ssh/id_rsa_servera

host serverb
HostName serverb.example.com
User userb
IdentityFile ~/.ssh/id_rsa_serverb

Referencias
Páginas del manual: ssh-keygen(1), ssh-copy-id(1), ssh-agent(1) y ssh-
add(1)

336 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

Ejercicio Guiado

Configurar autenticación basada en


claves de SSH
En este ejercicio, configura un usuario para realizar una autenticación basada en claves para
SSH.

Resultados
• Generar un par de claves SSH sin protección de frase de contraseña.

• Generar un par de claves SSH con protección de frase de contraseña.

• Realizar la autenticación con claves SSH sin frase de contraseña y mediante claves SSH
protegidas con frase de contraseña.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start ssh-configure

Instrucciones
1. Inicie sesión en la máquina serverb con el usuario student.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$

2. Cambie al usuario operator1 en la máquina serverb. Use redhat como la contraseña.

[student@serverb ~]$ su - operator1


Password: redhat
[operator1@serverb ~]$

3. Genere un conjunto de claves SSH. No ingrese una frase de contraseña.

[operator1@serverb ~]$ ssh-keygen


Generating public/private rsa key pair.
Enter file in which to save the key (/home/operator1/.ssh/id_rsa): Enter
Created directory '/home/operator1/.ssh'.
Enter passphrase (empty for no passphrase): Enter
Enter same passphrase again: Enter

RH124-RHEL9.0-es-5-20230516 337
capítulo 10 | Configuración y seguridad de SSH

Your identification has been saved in /home/operator1/.ssh/id_rsa.


Your public key has been saved in /home/operator1/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:JainiQdnRosC+xXh operator1@serverb.lab.example.com
The key's randomart image is:
+---[RSA 3072]----+
|E+*+ooo . |
|.= o.o o . |
|o.. = . . o |
|+. + * . o . |
|+ = X . S + |
| + @ + = . |
|. + = o |
|.o . . . . |
|o o.. |
+----[SHA256]-----+

4. Envíe la clave pública del par de claves SSH al usuario operator1 en la máquina servera,
con redhat como contraseña.

[operator1@serverb ~]$ ssh-copy-id operator1@servera


/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/
operator1/.ssh/id_rsa.pub"
The authenticity of host 'servera (172.25.250.10)' can't be established.
ED25519 key fingerprint is SHA256:h/hEJa/anxp6AP7BmB5azIPVbPNqieh0oKi4KWOTK80.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter
out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted
now it is to install the new keys
operator1@servera's password: redhat

Number of key(s) added: 1

Now try logging in to the machine, with: "ssh 'operator1@servera'"


and check to make sure that only the key(s) you wanted were added.

5. Ejecute el comando hostname en la máquina servera de forma remota usando el


comando ssh sin acceder a la shell interactiva remota.

[operator1@serverb ~]$ ssh operator1@servera hostname


servera.lab.example.com

El comando ssh anterior no le solicita una contraseña porque usa la clave privada sin frase
de contraseña correspondiente a la clave pública exportada para realizar la autenticación
con el usuario operator1 en la máquina servera.
Este enfoque no es seguro, ya que cualquier persona que tenga acceso al archivo de clave
privada puede iniciar sesión en la máquina servera con el usuario operator1.
En el siguiente paso de este ejercicio, hará que su clave privada sea más segura cifrándola y
protegiendo el acceso mediante la adición de una frase de contraseña.

338 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

6. Genere otro conjunto de claves SSH con el nombre predeterminado y sin una frase de
contraseña y sobrescriba los archivos de claves SSH generados anteriormente. Intente
conectarse a la máquina servera con las nuevas claves SSH. El comando ssh solicita
una contraseña, ya que no puede autenticarse con la clave SSH. Ejecute nuevamente el
comando ssh con la opción -v (detallado) para verificarlo.
Envíe la nueva clave pública del par de claves SSH al usuario operator1 en la máquina
servera para reemplazar la clave pública anterior. Use la contraseña redhat para el
usuario operator1 en la máquina servera. Ejecute el comando hostname en la máquina
servera de forma remota usando el comando ssh sin acceder a la shell interactiva remota
para comprobar que esté funcionando otra vez.

6.1. Vuelva a generar otro conjunto de claves SSH con el nombre predeterminado y
sin una frase de contraseña y sobrescriba los archivos de claves SSH generados
anteriormente.

[operator1@serverb ~]$ ssh-keygen


Generating public/private rsa key pair.
Enter file in which to save the key (/home/operator1/.ssh/id_rsa): Enter
/home/operator1/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): Enter
Enter same passphrase again: Enter
Your identification has been saved in /home/operator1/.ssh/id_rsa
Your public key has been saved in /home/operator1/.ssh/id_rsa.pub
...output omitted...

6.2. Intente conectarse a la máquina servera con las nuevas claves SSH. El comando
ssh solicita una contraseña, ya que no puede autenticarse con la clave SSH.
Presione Ctrl+c para salir del comando ssh cuando se le solicite una contraseña.
Ejecute nuevamente el comando ssh con la opción -v (detallado) para verificarlo.
Presione Ctrl+c nuevamente para salir del comando ssh cuando se le solicite una
contraseña.

[operator1@serverb ~]$ ssh operator1@servera hostname


operator1@servera's password: ^C
[operator1@serverb ~]$ ssh -v operator1@servera hostname
OpenSSH_8.7p1, OpenSSL 3.0.1 14 Dec 2021
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Reading configuration data /etc/ssh/ssh_config.d/01-training.conf
...output omitted...
debug1: Next authentication method: publickey
debug1: Offering public key: /home/operator1/.ssh/id_rsa RSA
SHA256:ad597Zf64xckV26xht8bjQbzqSPuOXQPXksGEWVsP80
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-
mic,password
debug1: Trying private key: /home/operator1/.ssh/id_dsa
debug1: Trying private key: /home/operator1/.ssh/id_ecdsa
debug1: Trying private key: /home/operator1/.ssh/id_ecdsa_sk
debug1: Trying private key: /home/operator1/.ssh/id_ed25519
debug1: Trying private key: /home/operator1/.ssh/id_ed25519_sk
debug1: Trying private key: /home/operator1/.ssh/id_xmss
debug1: Next authentication method: password
operator1@servera's password: ^C

RH124-RHEL9.0-es-5-20230516 339
capítulo 10 | Configuración y seguridad de SSH

6.3. Envíe la nueva clave pública del par de claves SSH al usuario operator1 en la
máquina servera para reemplazar la clave pública anterior. Use la contraseña
redhat para el usuario operator1 en la máquina servera. Ejecute el comando
hostname en la máquina servera de forma remota usando el comando ssh sin
acceder a la shell interactiva remota para comprobar que esté funcionando otra vez.

[operator1@serverb ~]$ ssh-copy-id operator1@servera


...output omitted...
operator1@servera's password: redhat

Number of key(s) added: 1

Now try logging in to the machine, with: "ssh 'operator1@servera'"


and check to make sure that only the key(s) you wanted were added.
[operator1@serverb ~]$ ssh operator1@servera hostname
servera.lab.example.com

7. Genere otro conjunto de claves SSH protegidas con frase de contraseña. Guarde la clave
como /home/operator1/.ssh/key2. Use redhatpass como la frase de contraseña de
la clave privada.

[operator1@serverb ~]$ ssh-keygen -f .ssh/key2


Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): redhatpass
Enter same passphrase again: redhatpass
Your identification has been saved in .ssh/key2.
Your public key has been saved in .ssh/key2.pub.
The key fingerprint is:
SHA256:OCtCjfPm5QrbPBgqb operator1@serverb.lab.example.com
The key's randomart image is:
+---[RSA 3072]----+
|O=X* |
|OB=. |
|E*o. |
|Booo . |
|..= . o S |
| +.o o |
|+.oo+ o |
|+o.O.+ |
|+ . =o. |
+----[SHA256]-----+

8. Envíe la clave pública del par de claves protegidas con frase de contraseña al usuario
operator1 en la máquina servera. El comando no le solicita una contraseña porque
usa la clave pública de la clave privada sin frase de contraseña que exportó a la máquina
servera en el paso anterior

[operator1@serverb ~]$ ssh-copy-id -i .ssh/key2.pub operator1@servera


/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/key2.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter
out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted
now it is to install the new keys

340 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

Number of key(s) added: 1

Now try logging in to the machine, with: "ssh 'operator1@servera'"


and check to make sure that only the key(s) you wanted were added.

9. Ejecute el comando hostname en la máquina servera de forma remota usando el


comando ssh. Use la clave /home/operator1/.ssh/key2 como el archivo de identidad.
Ingrese la frase de contraseña redhatpass que definió para la clave privada en el paso
anterior.
El comando le solicita la frase de contraseña que usó para proteger la clave privada del
par de claves SSH. Si un atacante obtiene acceso a la clave privada, no podrá usarla
para acceder a otros sistemas porque la clave privada está protegida con una frase
de contraseña. El comando ssh usa una frase de contraseña diferente del usuario
operator1 en la máquina servera, por lo que los usuarios deben conocer ambas frases
de contraseña.

[operator1@serverb ~]$ ssh -i .ssh/key2 operator1@servera hostname


Enter passphrase for key '.ssh/key2': redhatpass
servera.lab.example.com

Use el programa ssh-agent, como en el siguiente paso, para evitar escribir de forma
interactiva la frase de contraseña al iniciar sesión con SSH. El uso del programa ssh-
agent resulta más conveniente y más seguro cuando los administradores inician sesión en
sistemas remotos con regularidad.

10. Ejecute el programa ssh-agent en la shell Bash y agregue la clave privada protegida con
frase de contraseña (/home/operator1/.ssh/key2) del par de claves SSH a la sesión
de shell.
El comando inicia el programa ssh-agent y configura esta sesión de shell para usarla.
Luego, use el comando ssh-add para proporcionar la clave privada desbloqueada al
programa ssh-agent.

[operator1@serverb ~]$ eval $(ssh-agent)


Agent pid 1729
[operator1@serverb ~]$ ssh-add .ssh/key2
Enter passphrase for .ssh/key2: redhatpass
Identity added: .ssh/key2 (operator1@serverb.lab.example.com)

11. Ejecute el comando hostname en la máquina servera de forma remota sin acceder a la
shell interactiva remota. Use la clave /home/operator1/.ssh/key2 como el archivo de
identidad.
El comando no le solicita que ingrese la frase de contraseña de forma interactiva.

[operator1@serverb ~]$ ssh -i .ssh/key2 operator1@servera hostname


servera.lab.example.com

RH124-RHEL9.0-es-5-20230516 341
capítulo 10 | Configuración y seguridad de SSH

12. Abra otro terminal en la máquina workstation e inicie sesión en la máquina serverb con
el usuario student.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$

13. En la máquina serverb, cambie al usuario operator1 e inicie sesión de forma remota en
la máquina servera. Use la clave /home/operator1/.ssh/key2 como el archivo de
identidad para realizar la autenticación por medio de claves SSH.

13.1. Use el comando su para cambiar al usuario operator1. Use redhat como
contraseña para el usuario operator1.

[student@serverb ~]$ su - operator1


Password: redhat
[operator1@serverb ~]$

13.2. Inicie sesión en la máquina servera con el usuario operator1.


}El comando le solicita ingresar la frase de contraseña de manera interactiva porque
no invoca la conexión SSH desde la misma shell que usó para iniciar el programa
ssh-agent.

[operator1@serverb ~]$ ssh -i .ssh/key2 operator1@servera


Enter passphrase for key '.ssh/key2': redhatpass
...output omitted...
[operator1@servera ~]$

14. Salga y cierre todos los terminales adicionales y regrese a la máquina workstation.

14.1. Salga y cierre las ventanas de terminal extra. El comando exit hizo que saliera de
la shell del usuario operator1, finalizando la sesión de la shell donde ssh-agent
estaba activo, y volviera a la shell del usuario student en la máquina serverb.

[operator1@servera ~]$ exit


logout
Connection to servera closed.
[operator1@serverb ~]$

14.2. Regrese al sistema workstation con el usuario student.

[operator1@serverb ~]$ exit


logout
[student@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$

342 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish ssh-configure

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 343
capítulo 10 | Configuración y seguridad de SSH

Personalización de la configuración del


servicio OpenSSH

Objetivos
Deshabilitar los inicios de sesión directos como root y la autenticación basada en contraseñas
para el servicio OpenSSH.

Configuración del servidor OpenSSH


El daemon sshd proporciona el servicio OpenSSH. Puede configurar el servicio editando el
archivo /etc/ssh/sshd_config.

La configuración predeterminada del servidor OpenSSH funciona bien para varios casos de uso.
Sin embargo, es posible que desee realizar algunos cambios para fortalecer la seguridad de su
sistema. Es posible que desee prohibir el inicio de sesión remoto directo en la cuenta root, y es
posible que desee prohibir la autenticación basada en contraseña (a favor de la autenticación de
clave privada SSH).

Prohibir al superusuario el inicio de sesión


Es una buena práctica prohibir el acceso directo a la cuenta de usuario root desde sistemas
remotos. Algunos riesgos de permitir el inicio de sesión directo con el usuario root incluyen los
siguientes casos:

• El nombre de usuario root existe en cada sistema Linux de manera predeterminada; por lo
tanto, un posible atacante solo tiene que adivinar la contraseña en lugar de una combinación de
nombre de usuario y contraseña válidos. Este escenario reduce la complejidad para un atacante.

• El usuario root tiene privilegios sin restricciones, por lo que su grado de vulnerabilidad puede
generar un daño importantísimo en el sistema.

• Desde una perspectiva de auditoría, puede ser difícil rastrear qué usuario autorizado inició
sesión con el usuario root e hizo cambios. Si los usuarios deben iniciar sesión como un
usuario regular y cambiar a la cuenta root, puede ver un evento de registro para proporcionar
responsabilidad.

Importante
A partir de Red Hat Enterprise Linux 9, el parámetro PermitRootLogin se
establece en el valor prohibit-password de forma predeterminada. Este valor
impone el uso de autenticación basada en claves en lugar de contraseñas para
iniciar sesión con el usuario root y reduce el riesgo de ataques de fuerza bruta.

El servidor OpenSSH usa la configuración PermitRootLogin en el archivo /etc/ssh/


sshd_config para permitir o prohibir a los usuarios que inicien sesión en el sistema con el usuario
root como en el siguiente ejemplo:

PermitRootLogin yes

344 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

Si el parámetro PermitRootLogin se establece en el valor yes, cualquiera puede iniciar sesión


con el usuario root de forma remota. Para evitar esta situación, defina el valor en no. Como
alternativa, para evitar la autenticación basada en contraseñas, pero permitir la autenticación
basada en claves privadas para root, establezca el parámetro PermitRootLogin en without-
password.

El servidor SSH (sshd) debe recargarse para aplicar cualquier cambio.

[root@host ~]# systemctl reload sshd

Prohibir la autenticación basada en contraseña para SSH


El hecho de permitir solo inicios de sesión mediante clave privada en la línea de comandos remota
tiene ventajas:

• Los atacantes no pueden usar ataques de adivinación de contraseñas para acceder de forma
remota a cuentas conocidas en el sistema.

• Con las claves privadas protegidas con frase de contraseña, un atacante necesita tanto la
frase de contraseña como una copia de la clave privada. Con las contraseñas, un atacante solo
necesita la contraseña.

• Mediante el uso de claves privadas protegidas con frase de contraseña junto con ssh-agent,
la frase de contraseña se ingresa y se expone con menos frecuencia y el inicio de sesión es más
conveniente para el usuario.

El servidor OpenSSH usa el parámetro PasswordAuthentication en el archivo /etc/ssh/


sshd_config para controlar si los usuarios pueden usar la autenticación basada en contraseñas
cuando inician sesión en el sistema.

PasswordAuthentication yes

El valor predeterminado yes para el parámetro PasswordAuthentication en el archivo /etc/


ssh/sshd_config hace que el servidor SSH permita a los usuarios emplear la autenticación
basada en contraseñas cuando inician sesión. El valor no para PasswordAuthentication evita
que los usuarios empleen la autenticación basada en contraseñas.

Siempre que cambie el archivo /etc/ssh/sshd_config, debe volver a cargar el servicio sshd
para que se apliquen los cambios.

Importante
Si desactiva la autenticación basada en contraseña para ssh, debe asegurarse que
el archivo ~/.ssh/authorized_keys del usuario en el servidor remoto se rellene
con su clave pública, para que puedan iniciar sesión.

Referencias
Páginas del manual ssh(1), sshd_config(5)

RH124-RHEL9.0-es-5-20230516 345
capítulo 10 | Configuración y seguridad de SSH

Ejercicio Guiado

Personalización de la configuración del


servicio OpenSSH
En este ejercicio, deshabilita los inicios de sesión directos como root y la autenticación
basada en contraseñas para el servicio OpenSSH en uno de sus servidores.

Resultados
• Deshabilitar los inicios de sesión directos como root en ssh.

• Deshabilitar la autenticación basada en contraseñas para usuarios remotos que se


conectan a través de SSH.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando garantiza que estén disponibles todos los recursos requeridos.

[student@workstation ~]$ lab start ssh-customize

Instrucciones
1. Desde workstation, abra una sesión de SSH en la máquina serverb con el usuario
student.

[student@workstation ~]$ ssh student@serverb


[student@serverb ~]$

2. Use el comando su para cambiar al usuario operator2 en la máquina serverb. Use


redhat como contraseña para el usuario operator2.

[student@serverb ~]$ su - operator2


Password: redhat
[operator2@serverb ~]$

3. Use el comando ssh-keygen para generar claves SSH. No introduzca ninguna frase de
contraseña para las claves.

[operator2@serverb ~]$ ssh-keygen


Generating public/private rsa key pair.
Enter file in which to save the key (/home/operator2/.ssh/id_rsa): Enter
Created directory '/home/operator2/.ssh'.
Enter passphrase (empty for no passphrase): Enter
Enter same passphrase again: Enter
Your identification has been saved in /home/operator2/.ssh/id_rsa.

346 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

Your public key has been saved in /home/operator2/.ssh/id_rsa.pub.


The key fingerprint is:
SHA256:LN5x1irX0OWxgyd/qhATNgZWOtLUj16EZkM1JHkCR+I
operator2@serverb.lab.example.com
The key's randomart image is:
+---[RSA 3072]----+
| *=+ |
| = =O.o. |
| . Eo=B o |
| o +.=o+ o |
| . S..= = |
| . o +. + . |
| . o + . . .|
| o . o |
| ... |
+----[SHA256]-----+

4. Use el comando ssh-copy-id para enviar la clave pública del par de claves SSH al
usuario operator2 en la máquina servera. Use redhat como contraseña para el usuario
operator2 en servera.

[operator2@serverb ~]$ ssh-copy-id operator2@servera


/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/
operator2/.ssh/id_rsa.pub"
The authenticity of host 'servera (172.25.250.10)' can't be established.
ED25519 key fingerprint is SHA256:h/hEJa/anxp6AP7BmB5azIPVbPNqieh0oKi4KWOTK80.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter
out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted
now it is to install the new keys
operator2@servera's password: redhat
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'operator2@servera'"
and check to make sure that only the key(s) you wanted were added.

5. Confirme que pueda iniciar sesión correctamente en la máquina servera con el usuario
operator2 por medio de las claves SSH.

5.1. Abra una sesión de SSH en la máquina servera con el usuario operator2.

[operator2@serverb ~]$ ssh operator2@servera


...output omitted...
[operator2@servera ~]$

El comando ssh anterior usó claves SSH para la autenticación.

5.2. Cierre sesión en la máquina servera.

[operator2@servera ~]$ exit


logout
Connection to servera closed.

RH124-RHEL9.0-es-5-20230516 347
capítulo 10 | Configuración y seguridad de SSH

6. Confirme que pueda iniciar sesión correctamente en la máquina servera con el usuario
root y la contraseña redhat.

6.1. Abra una sesión de SSH en la máquina servera con el usuario root y la contraseña
redhat.

[operator2@serverb ~]$ ssh root@servera


root@servera's password: redhat
...output omitted...
[root@servera ~]#

El comando ssh anterior usó la contraseña del superusuario para la autenticación


porque las claves SSH no existen para el superusuario.

6.2. Cierre sesión en la máquina servera.

[root@servera ~]# exit


logout
Connection to servera closed.
[operator2@serverb ~]$

7. Confirme que pueda iniciar sesión correctamente en la máquina servera con el usuario
operator3 y la contraseña redhat.

7.1. Abra una sesión de SSH en la máquina servera con el usuario operator3 y la
contraseña redhat.

[operator2@serverb ~]$ ssh operator3@servera


operator3@servera's password: redhat
...output omitted...
[operator3@servera ~]$

El comando ssh anterior usó la contraseña del usuario operator3 para la


autenticación porque las claves SSH no existen para el usuario operator3.

7.2. Cierre sesión en la máquina servera.

[operator3@servera ~]$ exit


logout
Connection to servera closed.
[operator2@serverb ~]$

8. Configure el servicio sshd en la máquina servera para evitar que los usuarios inicien
sesión con el usuario root. Use la contraseña redhat para el superusuario cuando sea
necesario.

8.1. Abra una sesión de SSH en la máquina servera con el usuario operator2 con las
claves SSH.

[operator2@serverb ~]$ ssh operator2@servera


...output omitted...
[operator2@servera ~]$

348 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

8.2. En la máquina servera, cambie al usuario root. Use redhat como contraseña para
el usuario root.

[operator2@servera ~]$ su -
Password: redhat
[root@servera ~]#

8.3. Establezca PermitRootLogin en no en el archivo /etc/ssh/sshd_config


y vuelva a cargar el servicio sshd. Puede usar el comando vim /etc/ssh/
sshd_config para editar el archivo de configuración del servicio sshd.

...output omitted...
PermitRootLogin no
...output omitted...
[root@servera ~]# systemctl reload sshd

8.4. Abra otro terminal en workstation y abra una sesión de SSH en la máquina
serverb con el usuario operator2. Desde la máquina serverb, intente iniciar
sesión en la máquina servera con el usuario root. Este comando debería fallar
porque ha deshabilitado el inicio de sesión del usuario root mediante SSH en el paso
anterior.

nota
Para su comodidad, el inicio de sesión sin contraseña ya está configurado entre
workstation y serverb en el entorno del aula.

[student@workstation ~]$ ssh operator2@serverb


...output omitted...
[operator2@serverb ~]$ ssh root@servera
root@servera's password: redhat
Permission denied, please try again.
root@servera's password: redhat
Permission denied, please try again.
root@servera's password: redhat
root@servera: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

Por defecto, el comando ssh intenta realizar la autenticación por medio de la


autenticación basada en claves primero y, luego, si ese método falla, mediante la
autenticación basada en contraseñas.

9. Configure el servicio sshd en la máquina servera para permitir que los usuarios realicen la
autenticación por medio de claves SSH solamente, en lugar de usar sus contraseñas.

9.1. Regrese al primer terminal que tiene la shell del usuario root activa en la máquina
servera. Establezca el parámetro PasswordAuthentication en no en el archivo
/etc/ssh/sshd_config y vuelva a cargar el servicio sshd. Puede usar el comando
vim /etc/ssh/sshd_config para editar el archivo de configuración del servicio
sshd.

RH124-RHEL9.0-es-5-20230516 349
capítulo 10 | Configuración y seguridad de SSH

...output omitted...
PasswordAuthentication no
...output omitted...
[root@servera ~]# systemctl reload sshd

9.2. Vaya al segundo terminal con la shell activa del usuario operator2 en la máquina
serverb e intente iniciar sesión en la máquina servera con el usuario operator3.
Este comando debería fallar porque las claves SSH no están configuradas para el
usuario operator3 y el servicio sshd en la máquina servera no permite el uso de
contraseñas para la autenticación.

[operator2@serverb ~]$ ssh operator3@servera


operator3@servera: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

nota
Para mayor granularidad, puede usar las opciones explícitas -o
PubkeyAuthentication=no y -o PasswordAuthentication=yes con el
comando ssh. Luego, puede anular los valores predeterminados del comando
ssh y comprobar con seguridad que el comando anterior falla en función de la
configuración que haya ajustado en el archivo /etc/ssh/sshd_config en el paso
anterior.

9.3. Regrese al primer terminal que tiene la shell del usuario root activa en la máquina
servera. Verifique que PubkeyAuthentication esté habilitado en el archivo /
etc/ssh/sshd_config. Puede usar el comando vim /etc/ssh/sshd_config
para ver el archivo de configuración del servicio sshd.

...output omitted...
#PubkeyAuthentication yes
...output omitted...

La línea PubkeyAuthentication contiene comentarios. Las líneas comentadas


indican los valores predeterminados de un parámetro. La autenticación de clave
pública de SSH está activa de forma predeterminada, como lo indica la línea
comentada.

9.4. Regrese al segundo terminal con la shell activa del usuario operator2 en la máquina
serverb e intente iniciar sesión en la máquina servera con el usuario operator2.
Este comando debería obtener un resultado satisfactorio porque las claves SSH
están configuradas para que el usuario operator2 inicie sesión en la máquina
servera desde la máquina serverb.

[operator2@serverb ~]$ ssh operator2@servera


...output omitted...
[operator2@servera ~]$

9.5. Desde el segundo terminal, salga de la shell del usuario operator2 en las máquinas
servera y serverb.

350 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

[operator2@servera ~]$ exit


logout
Connection to servera closed.
[operator2@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$

9.6. Cierre el segundo terminal en la máquina workstation.

[student@workstation ~]$ exit

9.7. Desde el primer terminal, salga de la shell del usuario root en la máquina servera.

[root@servera ~]# exit


logout

9.8. Desde el primer terminal, salga de la shell del usuario operator2 en las máquinas
servera y serverb.

[operator2@servera ~]$ exit


logout
Connection to servera closed.
[operator2@serverb ~]$ exit
logout
[student@serverb ~]$

9.9. Cierre la sesión de serverb y regrese a la shell del usuario student en


workstation.

[student@serverb ~]$ exit


logout
Connection to serverb closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish ssh-customize

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 351
capítulo 10 | Configuración y seguridad de SSH

Trabajo de laboratorio

Configuración y seguridad de SSH


En este trabajo de laboratorio, configura la autenticación basada en claves para los
usuarios y deshabilita los inicios de sesión directos como root y la autenticación basada en
contraseñas para todos los usuarios del servicio OpenSSH en uno de sus servidores.

Resultados
• Realizar una autenticación con claves SSH.

• Evitar que los usuarios inicien sesión directamente con el usuario root en el servicio ssh.

• Evitar que los usuarios inicien sesión en el sistema con la autenticación basada en
contraseñas de SSH.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start ssh-review

Instrucciones
1. Desde la máquina workstation, inicie sesión en la máquina servera con el usuario
student.
2. Cambie al usuario production1 en la máquina servera. Ingrese la contraseña redhat.
3. Genere claves SSH sin frase de contraseña para el usuario production1 en la máquina
servera.
4. Envíe la clave pública del par de claves SSH al usuario production1 en la máquina
serverb.
5. Confirme que el usuario production1 pueda iniciar sesión correctamente en la máquina
serverb por medio de las claves SSH.
6. Configure el servicio sshd en serverb para evitar que los usuarios inicien sesión con el
usuario root. Use redhat como la contraseña root.
7. Configure el servicio sshd en la máquina serverb para permitir que los usuarios realicen la
autenticación por medio de claves SSH solamente, en lugar de usar sus contraseñas.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

352 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

[student@workstation ~]$ lab grade ssh-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish ssh-review

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 353
capítulo 10 | Configuración y seguridad de SSH

Solución

Configuración y seguridad de SSH


En este trabajo de laboratorio, configura la autenticación basada en claves para los
usuarios y deshabilita los inicios de sesión directos como root y la autenticación basada en
contraseñas para todos los usuarios del servicio OpenSSH en uno de sus servidores.

Resultados
• Realizar una autenticación con claves SSH.

• Evitar que los usuarios inicien sesión directamente con el usuario root en el servicio ssh.

• Evitar que los usuarios inicien sesión en el sistema con la autenticación basada en
contraseñas de SSH.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start ssh-review

Instrucciones
1. Desde la máquina workstation, inicie sesión en la máquina servera con el usuario
student.

[student@workstation ~]$ ssh student@servera


[student@servera ~]$

2. Cambie al usuario production1 en la máquina servera. Ingrese la contraseña redhat.

[student@servera ~]$ su - production1


Password: redhat
[production1@servera ~]$

3. Genere claves SSH sin frase de contraseña para el usuario production1 en la máquina
servera.

[production1@servera ~]$ ssh-keygen


Generating public/private rsa key pair.
Enter file in which to save the key (/home/production1/.ssh/id_rsa): Enter
Created directory '/home/production1/.ssh'.
Enter passphrase (empty for no passphrase): Enter
Enter same passphrase again: Enter
Your identification has been saved in /home/production1/.ssh/id_rsa.

354 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

Your public key has been saved in /home/production1/.ssh/id_rsa.pub.


The key fingerprint is:
SHA256:MCQ8nXClDFSlJV0i5IouUzlzFrbsdz+jO8ZIMeSTOuQ
production1@servera.lab.example.com
The key's randomart image is:
+---[RSA 3072]----+
| o==B==.. |
| oB+*.. |
| o+B. |
| =.+*o |
| *o*. +S |
| o *E . |
|o . .o.o. |
| o ...+.o |
| .o+.o |
+----[SHA256]-----+

4. Envíe la clave pública del par de claves SSH al usuario production1 en la máquina
serverb.

[production1@servera ~]$ ssh-copy-id production1@serverb


/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/
production1/.ssh/id_rsa.pub"
The authenticity of host 'serverb (172.25.250.11)' can't be established.
ED25519 key fingerprint is SHA256:h/hEJa/anxp6AP7BmB5azIPVbPNqieh0oKi4KWOTK80.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter
out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted
now it is to install the new keys
production1@serverb's password: redhat
Number of key(s) added: 1

Now try logging in to the machine, with: "ssh 'production1@serverb'"


and check to make sure that only the key(s) you wanted were added.

5. Confirme que el usuario production1 pueda iniciar sesión correctamente en la máquina


serverb por medio de las claves SSH.

[production1@servera ~]$ ssh production1@serverb


...output omitted...
[production1@serverb ~]$

6. Configure el servicio sshd en serverb para evitar que los usuarios inicien sesión con el
usuario root. Use redhat como la contraseña root.

6.1. Cambie al usuario root en la máquina serverb.

[production1@serverb ~]$ su -
Password: redhat
[root@serverb ~]#

RH124-RHEL9.0-es-5-20230516 355
capítulo 10 | Configuración y seguridad de SSH

6.2. Establezca el parámetro PermitRootLogin en no en el archivo /etc/ssh/


sshd_config y vuelva a cargar el servicio sshd. Edite el parámetro activo sin
comentarios y no un ejemplo comentado.

...output omitted...
PermitRootLogin no
...output omitted...
[root@serverb ~]# systemctl reload sshd.service

6.3. Abra otro terminal en la máquina workstation e inicie sesión en la máquina servera
con el usuario production1. Desde servera, intente iniciar sesión en la máquina
serverb con el usuario root. Este comando debería fallar porque ha deshabilitado el
inicio de sesión del usuario root mediante SSH.
El comando se cerró después de tres intentos fallidos de iniciar sesión en la máquina
servera con el usuario root. De manera predeterminada, el comando ssh prefiere
usar claves SSH para la autenticación, y si no encuentra las claves necesarias del
usuario, solicita la contraseña del usuario para la autenticación.

nota
Para comodidad del curso, el inicio de sesión root sin contraseña ya está
configurado entre workstation y servera en el entorno del aula. Sin embargo,
esta configuración es muy insegura y no se recomienda para ningún entorno de
producción.

[student@workstation ~]$ ssh production1@servera


...output omitted...
[production1@servera ~]$ ssh root@serverb
root@serverb's password: redhat
Permission denied, please try again.
root@serverb's password: redhat
Permission denied, please try again.
root@serverb's password: redhat
root@serverb: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
[production1@servera ~]$

7. Configure el servicio sshd en la máquina serverb para permitir que los usuarios realicen la
autenticación por medio de claves SSH solamente, en lugar de usar sus contraseñas.

7.1. Regrese al primer terminal que tiene la shell root activa en la máquina serverb.
Establezca el parámetro PasswordAuthentication en no en el archivo /etc/
ssh/sshd_config y vuelva a cargar el servicio sshd. Edite el parámetro activo sin
comentarios y no un ejemplo comentado.

...output omitted...
PasswordAuthentication no
...output omitted...
[root@serverb ~]# systemctl reload sshd

7.2. Vaya al segundo terminal con la shell activa production1 en la máquina servera
e intente iniciar sesión en la máquina serverb con el usuario production2. Este
comando debería fallar porque las claves SSH no están configuradas para el usuario

356 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

production2 y el servicio sshd en la máquina serverb no permite el uso de


contraseñas para la autenticación.

[production1@servera ~]$ ssh production2@serverb


production2@serverb: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

nota
Para mayor granularidad, puede usar las opciones explícitas
ssh y -o PubkeyAuthentication=no con el comando -o
PasswordAuthentication=yes. Con estas opciones, puede anular los valores
predeterminados del comando ssh y establecer con seguridad si el comando
anterior falla en función de la configuración que haya ajustado en el archivo /etc/
ssh/sshd_config en el paso anterior.

7.3. Regrese al primer terminal que tiene la shell root activa en la máquina serverb.
Verifique que PubkeyAuthentication esté habilitado en el archivo /etc/ssh/
sshd_config.

[root@serverb ~]$ cat /etc/ssh/sshd_config


...output omitted...
#PubkeyAuthentication yes
...output omitted...

La línea PubkeyAuthentication contiene comentarios. Las líneas comentadas


indican los valores predeterminados de un parámetro. La autenticación de clave pública
de SSH está activa de forma predeterminada, como lo indica la línea comentada.

7.4. Regrese al segundo terminal con la shell activa production1 en la máquina servera
e intente iniciar sesión en la máquina serverb con el usuario production1. Este
comando debería obtener un resultado satisfactorio porque las claves SSH están
configuradas para que el usuario production1 pueda iniciar sesión en la máquina
serverb desde la máquina servera.

[production1@servera ~]$ ssh production1@serverb


...output omitted...
[production1@serverb ~]$

7.5. Salga y cierre el terminal adicional.

[production1@serverb ~]$ exit


logout
Connection to serverb closed.
[production1@servera ~]$ exit
logout
[student@workstation ~]$ exit

7.6. Regrese al sistema workstation con el usuario student.

[production1@serverb ~]$ exit


logout
Connection to serverb closed.

RH124-RHEL9.0-es-5-20230516 357
capítulo 10 | Configuración y seguridad de SSH

[production1@servera ~]$ exit


logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade ssh-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish ssh-review

Esto concluye la sección.

358 RH124-RHEL9.0-es-5-20230516
capítulo 10 | Configuración y seguridad de SSH

Resumen
• Con el comando ssh, los usuarios pueden acceder de manera segura a los sistemas remotos
con el protocolo SSH.

• Un sistema cliente almacena las identidades de los servidores remotos en los archivos ~/.ssh/
known_hosts y /etc/ssh/ssh_known_hosts.

• SSH admite la autenticación basada en contraseñas y en claves.

• El comando ssh-keygen genera un par de claves SSH para la autenticación. El comando ssh-
copy-id exporta la clave pública a sistemas remotos.

• El servicio sshd implementa el protocolo SSH en los sistemas de Red Hat Enterprise Linux.

• Configure los ajustes avanzados de SSH en el archivo de configuración /etc/ssh/


sshd_config.

• Una práctica recomendada para configurar sshd es deshabilitar los inicios de sesión remotos
como root y requerir la autenticación de clave pública en lugar de la autenticación basada en
contraseña.

RH124-RHEL9.0-es-5-20230516 359
360 RH124-RHEL9.0-es-5-20230516
capítulo 11

Gestión de redes
Meta Configurar las interfaces de red y la configuración
en servidores Red Hat Enterprise Linux.

Objetivos • Conceptos fundamentales de direccionamiento


y enrutamiento de redes para un servidor
• Probar e inspeccionar la configuración de red
actual con las utilidades de la línea de comando.
• Gestionar los parámetros de configuración de
red con el comando nmcli.
• Modificar la configuración de la red mediante la
edición de los archivos de configuración.
• Configurar el nombre de host estático del
servidor y su resolución de nombre, y probar los
resultados.

Secciones • Descripción de conceptos de redes (y


cuestionario)
• Validación de la configuración de red (y
ejercicio guiado)
• Configuración de redes desde la línea de
comandos (y ejercicio guiado)
• Edición de los archivos de configuración de red
(y ejercicio guiado)
• Configuración de nombres de host y resolución
de nombre (y ejercicio guiado)

Trabajo de Gestión de redes


laboratorio

RH124-RHEL9.0-es-5-20230516 361
capítulo 11 | Gestión de redes

Describir conceptos de redes

Objetivos
Describir conceptos fundamentales de direccionamiento y enrutamiento de redes para un servidor

Modelo de red TCP/IP


El modelo de red TCP/IP es un conjunto de cuatro capas de protocolos de comunicación que
describe cómo se empaquetan, se direccionan, se transmiten, se enrutan y se reciben las
comunicaciones de datos entre computadoras a través de una red.

El protocolo se especifica mediante RFC 1122, Requirements for Internet Hosts - Communication
Layers.

A continuación se muestran las cuatro capas del modelo de red TCP/IP:

• Aplicación

Cada aplicación tiene especificaciones para que los clientes y los servidores puedan
comunicarse en las plataformas. Entre los protocolos comunes se incluyen SSH, HTTPS (web
segura), NFS o CIFS (uso compartido de archivo) y SMTP (envío de correo electrónico).

• Transporte

TCP y UDP son protocolos de transporte. TCP es una confiable comunicación orientada a la
conexión, mientras que UDP es un protocolo de datagramas sin conexión. Los protocolos de
aplicaciones pueden usar puertos TCP o UDP. En el archivo /etc/services, encontrará una
lista de puertos conocidos y registrados.

Cuando un paquete se envía por la red, la combinación del puerto de servicio y la dirección
IP forma un socket. Cada paquete tiene un socket de origen y un socket de destino. Esta
información puede usarse al realizar tareas de monitoreo y filtrado del tráfico de red.

• Internet

La capa de Internet, o capa de red, transporta datos desde el host de origen hasta el host de
destino. Los protocolos IPv4 e IPv6 son protocolos de capa de Internet. Cada host tiene una
dirección IP y un prefijo que se usan para determinar direcciones de red. Los enrutadores se
usan para conectar redes.

• Enlace

La capa de enlace, o acceso a medios, proporciona la conexión a medios físicos. Los tipos
de redes más comunes son Ethernet (802.3) cableada y Wi-Fi (802.11) inalámbrica. Cada
dispositivo físico tiene una dirección de Control de Acceso a los Medios (MAC), también
conocida como dirección de hardware, para identificar el destino de paquetes en el segmento
de red local.

362 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Figura 11.1: Comparación de los modelos de red TCP/IP y OSI

Descripción de nombres de interfaces de red


Cada puerto de red en un sistema tiene un nombre, que usted usa para configurarlo e identificarlo.

Versiones anteriores de Red Hat Enterprise Linux usaban nombres como eth0, eth1 y eth2 para
cada interfaz de red. El nombre de la interfaz eth0 fue el primer puerto de red detectado por el
sistema operativo; eth1 fue la segunda interfaz y así sucesivamente. Sin embargo, a medida que
se agregaban y eliminaban dispositivos, el mecanismo que los detectaba y los nombraba podía
cambiar el nombre que recibía cada interfaz. Además, el estándar PCIe no garantiza el orden en
el que se detectan los dispositivos PCIe durante el inicio, lo que podría cambiar la denominación
del dispositivo inesperadamente debido a las variaciones durante el inicio del dispositivo o del
sistema.

En Red Hat Enterprise Linux 7 y versiones posteriores, el sistema de nombres predeterminado


genera nombres que son consistentes en los reinicios. En lugar de basarse en el orden de
detección, la asignación de nombres de la interfaz de red se basa en la información del firmware, la
topología del bus PCI y el tipo de dispositivo de red.

Los nombres de la interfaz de red comienzan con el tipo de interfaz:

• Las interfaces de Ethernet comienzan con en.


• Las interfaces WLAN comienzan con wl.
• Las interfaces WWAN comienzan con ww.

El resto del nombre de la interfaz después del tipo se basa en la información del firmware del
servidor o se determina por la ubicación del dispositivo en la topología PCI.

• oN indica un dispositivo integrado con un índice N único del firmware del servidor. El nombre
eno1 es el dispositivo Ethernet integrado 1.

RH124-RHEL9.0-es-5-20230516 363
capítulo 11 | Gestión de redes

• sN indica un dispositivo en la ranura PCI hotplug N. Por ejemplo, ens3 es una tarjeta Ethernet
en la ranura PCI hotplug 3.

• pMsN indica un dispositivo PCI en el bus M en la ranura N. Una interfaz wlp4s0 es una tarjeta
WLAN en el bus PCI 4 en la ranura 0. Si la tarjeta es un dispositivo multifunción (como una
tarjeta Ethernet con varios puertos o un dispositivo con Ethernet más alguna otra función),
puede ver fN al nombre del dispositivo. Una interfaz enp0s1f0 es la función 0 de la tarjeta
Ethernet en el bus 0 en la ranura 1. También puede haber una segunda interfaz llamada
enp0s1f1 que es la función 1 de ese mismo dispositivo.

La asignación de nombres persistente significa que cuando se establece el nombre para una
interfaz de red en el sistema, el nombre de la interfaz no cambia, incluso si agrega o elimina
hardware. Un comportamiento de asignación de nombres persistente es que un sistema con una
sola interfaz generar un nombre de dispositivo usando un esquema de información de hardware y
no se espera que use el esquema de asignación de nombres del kernel eth0.

Redes IPv4
Aunque actualmente IPv4 sigue siendo el esquema de direccionamiento más común en las redes
empresariales, IPv6 ha superado el uso de IPv4 en las redes móviles. Necesita un conocimiento
básico de las redes IPv4 para gestionar las redes en sus servidores.

Direcciones IPv4
Una dirección IPv4 es un número de 32 bits, expresado en decimales como cuatro octetos de 8
bits cuyo valor varía entre 0 y 255, separado por puntos. La dirección se divide en dos partes: el
prefijo de red y el número de host. El prefijo de red identifica una subred física o virtual única. El
número de host identifica un host específico en la subred. Todos los hosts en la misma subred
tienen el mismo prefijo de red y pueden comunicarse entre sí directamente sin un enrutador. Una
puerta de enlace de red conecta diferentes redes y un enrutador de red generalmente funciona
como puerta de enlace para una subred.

nota
Una subred es un segmento de una red más grande, y el uso del término depende
del contexto. Una red IP se divide en varios segmentos de red más pequeños. Por
lo general, el segmento se refiere a la capa de enlace física o virtual, mientras que
la subred se refiere al direccionamiento lógico de la capa de red para el segmento
correspondiente.

Además, dividir en subredes una dirección de red grande asignada la subdivide en


varios segmentos de red más pequeños. En esta sección IPv4, se presentan las
direcciones de red que se implementan como subredes individuales. La próxima
sección de IPv6 incluye otro contexto, donde las redes grandes se dividen en
subredes múltiples.

En la especificación IPv4 original, los prefijos de red permitidos eran uno de los tres tamaños fijos
para paquetes de unidifusión que tienen un solo origen y destino. El prefijo de red puede ser de 8
bits (clase A), 16 bits (clase B) o 24 bits (clase C). Hoy en día, la cantidad de bits en el prefijo de
red es variable, lo que significa que el prefijo puede ser cualquier número en el rango admitido y
esta nueva especificación se denomina enrutamiento entre dominios sin clase (CIDR). Si bien las
clases de dirección fija ya no están en uso, muchos profesionales de redes aún se refieren a redes
con prefijos de red de 8, 16 o 24 bits que usan la designación original de clase A, B o C.

364 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Una máscara de red (netmask) es una máscara binaria cuya longitud indica cuántos bits
pertenecen al prefijo de red que identifica la subred. Debido a que una dirección IPv4 siempre
tiene una longitud de 32 bits, una subred con una máscara de red más larga tiene menos bits
disponibles para identificar hosts, lo que significa menos hosts posibles. Una subred con una
máscara de red más corta tiene más bits disponibles para identificar hosts, lo que significa más
hosts posibles y una subred más grande.

Las máscaras de red se expresan en una de dos formas, que se usan de forma rutinaria. La primera
forma, conocida como notación CIDR, agrega una barra oblicua (/) y un número entero hasta 32
que indica la cantidad de bits en la máscara binaria. La segunda notación muestra el número de
bits en la máscara binaria como cuatro octetos de 8 bits en formato decimal.

Máscaras de red y subredes IPv4


La cantidad de direcciones de host disponibles en una subred depende del tamaño del prefijo
de red. Por ejemplo, un prefijo de red de /24 deja 8 bits, o 255 direcciones de host posibles en la
subred. Un prefijo de red de /16 deja 16 bits, o 65536 direcciones de host posibles en la subred.

• La dirección de red para una subred es la dirección más baja posible en una subred, donde el
número de host es todo ceros binarios.
• La dirección de difusión para una subred es la dirección más alta posible en una subred, donde el
número de host es todo binario, y es una dirección especial para transmitir paquetes a todos los
hosts de la subred.
• La dirección de la puerta de enlace para una subred puede ser cualquier número de host único
en la subred, pero generalmente se establece en el primer número de host disponible, que
es un número binario de todos los ceros, excepto un '1' en el último bit. Esta convención de
numeración de puerta de enlace no es obligatoria y las subredes que no necesitan comunicación
externa no establecen una puerta de enlace de red.

Las siguientes figuras ilustran cómo se usan una dirección IP y una máscara de red para calcular
el prefijo de red y el número de host para una subred. Realice un cálculo AND binario en el
que cada bit en la dirección IP y máscara de red sea binaria y se compare cada bit con su bit
correspondiente en la dirección P y máscara de red hasta la longitud del prefijo. En un cálculo
AND, ambos bits deben ser un '1' para que el resultado sea un '1', y todas las demás combinaciones
dan como resultado 0. Realice un cálculo OR binario en los bits restantes en el número de host,
donde cualquiera de los bits puede ser un '1' para que el resultado sea un '1'. En un cálculo OR
binario, solo dos bits '0' dan como resultado un '0'.

Figura 11.2: Cálculo de la máscara de red IPv4 para una red pequeña

RH124-RHEL9.0-es-5-20230516 365
capítulo 11 | Gestión de redes

Figura 11.3: Cálculo de la máscara de red IPv4 para una red grande

Ejemplos de cálculos de red


En el siguiente ejemplo, identifique la máscara de red primero y luego realice los cálculos binarios.
Una máscara de red de /24 significa que los 24 bits principales de la dirección definen la dirección
de red (192.168.1.0). En este escenario, hay 8 bits, o 254 direcciones, disponibles para el
direccionamiento de host.

Dirección IPv4 de 192.168.1.107/24

Prefijo de red /24 o 11111111.11111111.11111111.00000000


255.255.255.0

Dirección de host 192.168.1.107 11000000.10101000.00000001.01101011

Dirección de red 192.168.1.0 11000000.10101000.00000001.00000000

Rango de 192.168.1.1 - 11000000.10101000.00000001.00000001 a


direcciones para 192.168.1.254 11000000.10101000.00000001.11111110
hosts en subred

Dirección de 192.168.1.255 11000000.10101000.00000001.11111111


difusión

En el siguiente ejemplo, una máscara de red /19 es un prefijo de red válido que usa solo un octeto
parcial. Las máscaras de red de longitud variable permiten subredes con una cantidad diferente
de hosts que las máscaras de red de octetos completos. Los 13 bits restantes, u 8190 direcciones,
están disponibles para el direccionamiento de host.

Dirección IPv4 de 172.16.181.23/19

Prefijo de red /19 o 11111111.11111111.11100000.00000000


255.255.224.0

Dirección de host 172.16.181.23 10101100.00010000.10110101.00010111

Dirección de red 172.16.160.0 10101100.00010000.10100000.00000000

Rango de 172.16.160.1 - 10101100.00010000.10100000.00000001 a


direcciones para 172.16.191.254 10101100.00010000.10111111.11111110
hosts en subred

366 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Dirección de 172.16.191.255 10101100.00010000.10111111.11111111


difusión

En el siguiente ejemplo, /8 indica una red grande. Solo el primer octeto se usa para el prefijo
de red (10.0.0.0). Los 24 bits restantes, o 16,777,214 direcciones, están disponibles para el
direccionamiento de host. La dirección de difusión 10.255.255.255 es la última dirección de la
red.

Dirección IPv4 de 10.1.1.18/8

Prefijo de red /8 o 255.0.0.0 11111111.00000000.00000000.00000000

Dirección de host 10.1.1.18 00001010.00000001.00000001.00010010

Dirección de red 10.0.0.0 00001010.00000000.00000000.00000000

Rango de 10.0.0.1 - 00001010.00000000.00000000.00000001 a


direcciones para 10.255.255.254 00001010.11111111.11111111.11111110
hosts en subred

Dirección de 10.255.255.255 00001010.11111111.11111111.11111111


difusión

Rutas IPv4
Los paquetes de red se mueven de un host a otro en una subred y a través de enrutadores de
una red a otra. Cada host tiene una tabla de enrutamiento, que determina qué interfaz de red
es correcta para enviar paquetes a redes particulares. Una entrada de la tabla de enrutamiento
enumera la red de destino, la interfaz de red que se debe usar y la dirección IP del enrutador que
reenviará el paquete en su destino final. La entrada de la tabla de enrutamiento que coincide con
el prefijo de red de la dirección de destino se usa para enrutar el paquete. Si varias entradas son
válidas para la dirección de destino, se usa la entrada con el prefijo más largo.

Si la red de destino no coincide con una entrada más específica, el paquete se enruta con la
entrada predeterminada 0.0.0.0/0. Esta ruta predeterminada apunta al enrutador de la puerta
de enlace en una subred local a la que puede acceder el host.

Cuando un enrutador recibe paquetes que no están dirigidos a sí mismo, el enrutador reenvía
el tráfico en función de su propia tabla de enrutamiento. El reenvío puede enviar el paquete
directamente al host de destino si este enrutador está en la subred de destino, o reenviar
nuevamente el paquete a la red de otro enrutador. El reenvío de paquetes en los enrutadores
continúa hasta que el paquete alcanza la red y el host de destino solicitados.

RH124-RHEL9.0-es-5-20230516 367
capítulo 11 | Gestión de redes

Figura 11.4: Ejemplo de topología de red

Ejemplo de tabla de enrutamiento para la máquina hostb

Destino Interfaz Enrutador (si es necesario)

192.168.5.0/24 enp0s1f0

192.168.6.0/24 enp0s2f0

172.17.0.0/16 enp0s1f0 192.168.5.1

0.0.0.0/0 (predeterminado) enp0s1f0 192.168.5.1

Considere el diagrama de red y la tabla de enrutamiento de red anteriores.

• El tráfico de red desde la máquina hostb a cualquier host en la red 192.168.6.0/24 se


transmite directamente a través de la interfaz enp0s2f0.

– Este tráfico se debe a que la máquina hostb tiene una interfaz conectada a esa red y es la
coincidencia más cercana a la entrada de la ruta.

• El tráfico de red desde la máquina hostb a un host con la dirección IP 172.17.50.120 usa la
interfaz enp0s1f0 porque el tráfico coincide con la tercera entrada en la tabla de enrutamiento.

– La máquina hostb no tiene una interfaz conectada directamente a esta red, por lo que
este tráfico se envía al enrutador del siguiente salto con la dirección 192.168.5.1, que es
accesible a través de la interfaz enp0s1f0. A continuación, el tráfico se reenvía a su destino.

– Debido a que la máquina hostb no tiene una interfaz conectada directamente a la red
172.17.0.0/16, alguien con conocimiento de la topología de la red debe agregar esta
entrada de ruta a la tabla de enrutamiento.

• El tráfico de red con un destino que no coincide con ninguna entrada en la tabla de
enrutamiento se envía a la ruta predeterminada. La ruta predeterminada, designada por
0.0.0.0/0, se muestra en la cuarta entrada.

– Por ejemplo, todo el tráfico de la máquina hostb a Internet se reenvía al enrutador del
siguiente salto con la dirección 192.168.5.1 que es accesible a través de la interfaz
enp0s1f0. A continuación, el tráfico se reenvía a su destino.

Configuración de la ruta y la dirección IPv4


Un servidor puede establecer automáticamente su configuración de red IPv4 al comunicarse con
un servidor DHCP. Un cliente DHCP local consulta la subred mediante un protocolo de capa de

368 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

enlace para localizar un servidor DHCP o proxy, y negocia el uso de una dirección única y otras
configuraciones para un período de concesión específico. El cliente debe solicitar periódicamente
la renovación de la concesión (lease) para mantener el uso de la configuración de red asignada.

Como alternativa, puede configurar un servidor para usar una configuración estática de la red. La
configuración de red estática se lee desde los archivos de configuración locales. La configuración
que use debe ser adecuada para su subred. Coordine con su administrador de red para evitar
conflictos con otros servidores en las mismas subredes.

Redes IPv6
IPv6 está diseñado para ampliar en gran medida el número total de direcciones de dispositivos
disponibles. IPv6 se usa tanto en redes empresariales como para comunicaciones móviles. La
mayoría, si no todos, los proveedores de servicios de Internet (ISP) usan ampliamente IPv6 para la
asignación a equipos internos y para la asignación dinámica de dispositivos de clientes.

IPv6 también se puede usar en paralelo con IPv4 en un modelo de pila doble. Una sola interfaz de
red puede tener ambas direcciones IPv4 o IPv6. De forma predeterminada, Red Hat Enterprise
Linux opera en un modo de pila doble.

Direcciones IPv6
Una dirección IPv6 es un número de 128 bits que, en general, se expresa en ocho grupos
separados por dos puntos de cuatro cuartetos (medio byte) hexadecimales. Cada cuarteto
representa cuatro bits de la dirección IPv6, por lo que cada grupo representa 16 bits de la dirección
IPv6.

2001:0db8:0000:0010:0000:0000:0000:0001

Para simplificar la escritura de direcciones IPv6, no son necesarios los ceros a la izquierda en un
grupos separado por dos puntos. Sin embargo, se debe escribir al menos un dígito hexadecimal en
cada grupo separado por dos puntos.

2001:db8:0:10:0:0:0:1

Dado que las direcciones con largas cadenas de ceros son habituales, uno o más grupos de ceros
consecutivos pueden combinarse con exactamente un bloque de dos caracteres :: con dos
puntos.

2001:db8:0:10::1

La dirección IPv6 2001:db8::0010:0:0:0:1, aunque es una representación válida, es una


forma menos conveniente de escribir la dirección de ejemplo. Esta representación diferente puede
confundir a los administradores que son nuevos en IPv6. En la siguiente lista, se muestran algunos
consejos para escribir direcciones que se puedan leer de manera consistente:

• Suprima los ceros a la izquierda en un grupo.

• Use un bloque de dos puntos :: para acortar la dirección tanto como sea posible.

• Si una dirección contiene dos grupos de ceros consecutivos, de igual longitud, acorte los grupos
de ceros situados más a la izquierda a :: y los grupos más a la derecha a :0: para cada grupo.

• Aunque está permitido, no use :: para acortar un grupo único de ceros. Use :0: en su lugar, y
guarde :: para grupos de ceros consecutivos.

RH124-RHEL9.0-es-5-20230516 369
capítulo 11 | Gestión de redes

• Use siempre letras minúsculas para los caracteres hexadecimales de la a a la f.

Importante
Al incluir un puerto de red TCP o UDP después de una dirección IPv6, encierre
siempre la dirección IPv6 entre corchetes de manera que el puerto no parezca
formar parte de la dirección.

[2001:db8:0:10::1]:80

Subredes IPv6
Una dirección de monodifusión IPv6 normal se divide en dos partes: el prefijo de red y la ID de
la interfaz. El prefijo de red identifica la subred. Dos interfaces de red en la misma subred no
pueden tener el mismo ID de la interfaz: el ID de la interfaz identifica una interfaz en particular en
la subred.

A diferencia de IPv4, IPv6 tiene una máscara de subred estándar, /64, que se usa para casi todas
las direcciones normales. En este caso, una mitad de la dirección de 128 bits es el prefijo de red y
la otra mitad es el ID de la interfaz. Con 64 bits para direcciones de host, una sola subred podría
contener, en teoría, 2^64 hosts.

En general, el proveedor de red asignará un prefijo más corto a una organización, como /48. Esto
permite que el resto de la parte de red quede libre para asignar subredes (siempre de longitud/64
como máximo) de ese prefijo asignado. Por ejemplo, cuando se asigna un prefijo de asignación
/48, hay 16 bits disponibles para hasta 65536 subredes.

Figura 11.5: Partes y subredes de la dirección IPv6

Direcciones y redes habituales de IPv6

Dirección o red IPv6 Propósito Descripción

::1/128 localhost El equivalente de IPv6 a la dirección


127.0.0.1/8, establecido en la interfaz de
bucle invertido.

370 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Dirección o red IPv6 Propósito Descripción

:: La dirección no El equivalente de IPv6 a 0.0.0.0. Para


especificada un servicio de red, esto podría indicar que
está escuchando todas las direcciones IP
completamente configuradas.

::/0 La ruta El equivalente de IPv6 de la dirección


predeterminada (la 0.0.0.0/0. La ruta predeterminada en la
Internet IPv6) tabla de enrutamiento coincide con esta red;
el enrutador para esta red es a donde se envía
todo el tráfico cuando no hay una mejor ruta.

2000::/3 Direcciones de La Autoridad de Números Asignados en


monodifusión Internet (IANA) asigna actualmente las
globales direcciones IPv6 "normales" desde este
espacio. Las direcciones incluyen todas las
redes que van desde 2000::/16 hasta
3fff::/16.

fd00::/8 Direcciones locales IPv6 no tiene un equivalente directo del


únicas (RFC 4193) espacio de dirección privada RFC 1918,
aunque este rango de red es cercano. Un
sitio puede usar estas redes para asignar de
manera automática un espacio de dirección IP
enrutable privada dentro de la organización.
Sin embargo, estas redes no se pueden usar
en la Internet global. El sitio debe seleccionar
de manera aleatoria un /48 de este espacio,
pero en general puede generar subredes de la
asignación en redes con /64.

fe80::/10 Direcciones de Todas las interfaces IPv6 configuran


enlace-local automáticamente una dirección monodifusión
de enlace-local que solo funciona en el
vínculo local de la red fe80::/64. Sin
embargo, todo el rango fe80::/10 está
reservado para ser usado en el futuro por
el enlace local. Este tema se analiza en más
detalle posteriormente.

ff00::/8 Multidifusión El equivalente de IPv6 de la dirección


224.0.0.0/4. Multidifusión se usa para
transmitir a varios hosts al mismo tiempo y es
particularmente importante en IPv6 porque
no tiene direcciones de difusión.

Importante
La tabla anterior enumera las asignaciones de direcciones de red que están
reservadas para fines específicos. Estas asignaciones pueden consistir en muchas
redes. Recuerde que las redes IPv6 asignadas desde los espacios de direcciones
de monodifusión global y monodifusión de enlace-local tienen una máscara de red
estándar /64.

RH124-RHEL9.0-es-5-20230516 371
capítulo 11 | Gestión de redes

Una dirección de enlace-local en IPv6 es una dirección no enrutable que el sistema usa solo para
comunicarse con sistemas en el mismo enlace de red. Para asegurarse de que la dirección IP sea
única, el sistema usa un método específico para computar el ID de interfaz de la dirección de
enlace-local.

nota
En un principio, el ID de la interfaz para la dirección de enlace-local IPv6 se creó a
partir de la dirección MAC del dispositivo de red. La exposición de la dirección MAC
como parte de la dirección IPv6 puede causar algunos problemas de seguridad y
privacidad, ya que es posible identificar y seguir una computadora en la red.

De forma predeterminada, en Red Hat Enterprise Linux 9, NetworkManager genera


un ID de interfaz aleatorio pero estable para la interfaz, de acuerdo con el algoritmo
en RFC 7217. Este algoritmo se controla mediante la configuración de la conexión
ipv6.addr-gen-mode que se establece de forma predeterminada en stable-
privacy.

Las extensiones de privacidad de IPv6 (RFC 4941) son una solución diferente a la
misma preocupación y están controladas por diferentes configuraciones, que están
deshabilitadas de manera predeterminada.

Puede usar el comando ip addr show para recuperar la dirección de enlace-local IPv6, como
en el siguiente ejemplo. Agregue la opción -br para obtener una breve lista de direcciones
solamente.

[user@host ~]$ ip addr show dev eth0


3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group
default qlen 1000
link/ether 52:54:00:01:fa:0a brd ff:ff:ff:ff:ff:ff
inet 10.42.0.1/16 brd 10.42.255.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::7418:cf98:c742:3681/64 scope link noprefixroute
valid_lft forever preferred_lft forever

Agregue la opción -br para obtener una breve lista de direcciones IPv4 e IPv6, solamente.

[user@host ~]$ ip -br addr show dev eth0


eth0 UP 10.42.0.1/16 fe80::7418:cf98:c742:3681/64

Para que funcione correctamente, IPv6 se basa en la dirección de enlace-local. La interfaz


mantiene siempre esa dirección incluso cuando asigna una dirección IPv6 enrutable de forma
manual o con un método automatizado.

La multidifusión permite que un sistema envíe tráfico a una dirección IP especial que es recibida
por múltiples sistemas. La multidifusión difiere de la difusión porque los paquetes de difusión
no son enrutables y solo llegan a los hosts de la subred local. Por el contrario, los paquetes de
multidifusión se enrutan a hosts específicos que anunciaron una solicitud para los paquetes de
multidifusión direccionados de forma única. Los paquetes de multidifusión pueden enrutarse
a otras subredes, si todos los enrutadores intermediarios admiten el reenvío de solicitudes de
multidifusión y enrutamiento.

La multidifusión desempeña un rol más importante en IPv6 que en IPv4 ya que no hay una
dirección de difusión en IPv6. La dirección IPv6 ff02::1 es una dirección de multidifusión clave

372 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

que se usa como dirección de enlace-local all-nodes y se comporta como una dirección de
difusión. Puede hacer ping a esta dirección para enviar el tráfico a todos los nodos del enlace.
Las direcciones de multidifusión de ámbito de vínculo (que empiezan con ff02::/8) deben
especificarse con un identificador de ámbito, al igual que una dirección de enlace-local.

[user@host ~]$ ping6 ff02::1%ens3


PING ff02::1%ens3(ff02::1) 56 data bytes
64 bytes from fe80::211:22ff:feaa:bbcc: icmp_seq=1 ttl=64 time=0.072 ms
64 bytes from fe80::200:aaff:fe33:2211: icmp_seq=1 ttl=64 time=102 ms (DUP!)
64 bytes from fe80::bcd:efff:fea1:b2c3: icmp_seq=1 ttl=64 time=103 ms (DUP!)
64 bytes from fe80::211:22ff:feaa:bbcc: icmp_seq=2 ttl=64 time=0.079 ms
...output omitted...

Configuración de dirección IPv6


IPv4 cuenta con dos maneras para configurar las direcciones en las interfaces de red. El
administrador puede configurar las direcciones de red en forma manual en las interfaces o de
manera dinámica con DHCP. IPv6 admite la configuración manual y dos métodos de configuración
dinámica, uno de los cuales es DHCPv6.

Puede seleccionar ID de interfaz para direcciones IPv6 estáticas, similar a IPv4. En IPv4, no se
pueden usar dos direcciones en una red: la dirección más baja, que es la dirección de red y la
dirección más alta, que es la dirección de difusión. En IPv6, se reservan dos ID de interfaz y no se
pueden usar como direcciones de interfaz de host normales:

• El identificador de todos ceros 0000:0000:0000:0000 ("difusión por proximidad de


enrutador de subred") usado por todos los enrutadores del vínculo. Por ejemplo, en la red
2001:db8::/64, la dirección anycast es 2001:db8::.

• Identificadores desde fdff:ffff:ffff:ff80 hasta fdff:ffff:ffff:ffff.

Las negociaciones de concesión (lease) de DHCPv6 funcionan de manera diferente a IPv4 DHCP,
ya que DHCPv6 no tiene una dirección de difusión. Un host envía una solicitud de DHCPv6 desde
su dirección de enlace local hasta el puerto 547/UDP en el grupo de multidifusión de enlace local
ff02::1:2 all-dhcp-servers específico. A continuación, el servidor DHCPv6 puede optar
por enviar una respuesta con la información apropiada al puerto 546/UDP en la dirección de
enlace-local del cliente.

El paquete dhcp en Red Hat Enterprise Linux 9 proporciona soporte para un servidor DHCPv6.

Además de DHCPv6, IPv6 también admite otro método de configuración dinámica, llamado
Autoconfiguración de direcciones sin estado (SLAAC). Para usar SLAAC, un host configura su
interfaz con una dirección de enlace local fe80::/64 y envía una "solicitud de enrutador" al grupo
de multidifusión de enlace-local ff02::2 all-routers. Un enrutador IPv6 en el vínculo local
responde a la dirección de enlace-local del host con un prefijo de red previamente configurado
y, posiblemente, con otra información relevante. El host usa el prefijo de red provisto con un ID
de interfaz construido de la misma manera que para las direcciones de enlace-local. El enrutador
envía, de manera periódica, actualizaciones multidifusión (anuncios de enrutador) para confirmar o
actualizar la información de red proporcionada.

El paquete radvd en Red Hat Enterprise Linux 9 permite que un enrutador IPv6 basado en
Red Hat Enterprise Linux genere SLAAC a través de anuncios de enrutador.

RH124-RHEL9.0-es-5-20230516 373
capítulo 11 | Gestión de redes

Importante
Un sistema Red Hat Enterprise Linux 9 típico que está configurado para direcciones
IPv4 dinámicas mediante DHCP se configura normalmente para IPv6 dinámico
mediante SLAAC. Los hosts con una configuración de IPv6 dinámica pueden
obtener inesperadamente direcciones IPv6 adicionales cuando se agrega un nuevo
enrutador IPv6 a la red.

Algunas implementaciones IPv6 combinan SLAAC y DHCPv6, usan SLAAC para


ofrecer información de la dirección de red, donde DHCPv6 proporciona más
opciones de red, como servidores DNS y dominios de búsqueda.

Nombres de host y direcciones IP


Las direcciones IP no son fáciles de usar en el día a día. Los usuarios generalmente prefieren
trabajar con nombres de host en lugar de cadenas de números. Linux tiene mecanismos de
resolución de nombres para asignar un nombre de host a una dirección IP.

Un método es crear entradas estáticas para cada nombre de host en el archivo /etc/hosts de
cada sistema. Con este método, debe actualizar manualmente cada copia del archivo hosts del
servidor.

Cuando está configurado, puede buscar la dirección para un nombre de host (o un nombre de
host de una dirección) con el servicio de red Sistema de Nombres de Dominio (DNS). DNS es una
red distribuida de servidores que proporciona asignaciones de resolución de nombres. Para que
la resolución de nombres funcione, se debe configurar un host para saber dónde contactar un
servidor de nombres. El servidor de nombres no debe estar en la misma subred, pero el host debe
tener acceso a ella. Una configuración de servidor de nombres generalmente se obtiene a través
de DHCP o mediante la creación de una configuración de dirección estática en el archivo /etc/
resolv.conf. Las siguientes secciones de este capítulo explican cómo configurar la resolución
de nombres.

374 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Referencias
Páginas del manual: services(5), ping(8), biosdevname(1) y udev(7)

Para obtener más información, consulte la Configuring and Managing Networking


Guide en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-
single/configuring_and_managing_networking/index/

Comprensión de los nombres de dispositivos de red predecibles de systemd


https://major.io/2015/08/21/understanding-systemds-predictable-network-device-
names/

Referencias IETF RFC seleccionadas:

RFC2460: Especificación de protocolo de Internet, versión 6 (IPv6)


https://datatracker.ietf.org/doc/html/rfc2460

RFC4291: Arquitectura de direccionamiento IP versión 6


https://datatracker.ietf.org/doc/html/rfc4291

RFC5952: Una recomendación para la representación de texto de dirección


IPv6
https://datatracker.ietf.org/doc/html/rfc5952

RFC4862: Autoconfiguración de direcciones sin estado de IPv6


https://datatracker.ietf.org/doc/html/rfc4862

RFC3315: Protocolo de configuración dinámica de host para IPv6 (DHCPv6)


https://datatracker.ietf.org/doc/html/rfc3315

RFC3736: Servicio de protocolo de configuración dinámica de host libre de


estado (DHCP) para IPv6
https://datatracker.ietf.org/doc/html/rfc3736

RFC4193: Direcciones únicas de monodifusión de IPv6 local


https://datatracker.ietf.org/doc/html/rfc4193

RFC 7217: Un método para generar identificadores de interfaz semánticamente


opacos con la autoconfiguración de direcciones sin estado (SLAAC) IPv6
https://datatracker.ietf.org/doc/html/rfc7217

RFC8415: Protocolo de configuración dinámica de host para IPv6 (DHCPv6)


https://datatracker.ietf.org/doc/html/rfc8415

RH124-RHEL9.0-es-5-20230516 375
capítulo 11 | Gestión de redes

Cuestionario

Describir conceptos de redes


Elija la respuesta correcta para las siguientes preguntas:

1. ¿Cuál es el tamaño, en bits, de una dirección IPv4?


a. 4
b. 8
c. 16
d. 32
e. 64
f. 128

2. ¿Qué término determina cuántos bits iniciales en la dirección IP contribuyen a su


dirección de red?
a. netscope
b. máscara de red
c. subred
d. multidifusión
e. netaddr
f. red

3. ¿Qué dirección representa una dirección de host IPv4 válida en la red 192.168.1.0/24?
a. 192.168.1.188
b. 192.168.1.0
c. 192.168.1.255
d. 192.168.1.256

4. ¿Qué número es el tamaño, en bits, de una dirección IPv6?


a. 4
b. 8
c. 16
d. 32
e. 64
f. 128

376 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

5. ¿Qué dirección no representa una dirección IPv6 válida?


a. 2000:0000:0000:0000:0000:0000:0000:0001
b. 2::1
c. ::
d. ff02::1:0:0
e. 2001:3::7:0:2
f. 2001:db8::7::2
g. 2000::1

6. ¿Qué término se refiere a la capacidad de que un sistema envíe tráfico a una dirección
IP especial que es recibida por múltiples sistemas?
a. netscope
b. máscara de red
c. subred
d. multidifusión
e. netaddr
f. red

RH124-RHEL9.0-es-5-20230516 377
capítulo 11 | Gestión de redes

Solución

Describir conceptos de redes


Elija la respuesta correcta para las siguientes preguntas:

1. ¿Cuál es el tamaño, en bits, de una dirección IPv4?


a. 4
b. 8
c. 16
d. 32
e. 64
f. 128

2. ¿Qué término determina cuántos bits iniciales en la dirección IP contribuyen a su


dirección de red?
a. netscope
b. máscara de red
c. subred
d. multidifusión
e. netaddr
f. red

3. ¿Qué dirección representa una dirección de host IPv4 válida en la red 192.168.1.0/24?
a. 192.168.1.188
b. 192.168.1.0
c. 192.168.1.255
d. 192.168.1.256

4. ¿Qué número es el tamaño, en bits, de una dirección IPv6?


a. 4
b. 8
c. 16
d. 32
e. 64
f. 128

378 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

5. ¿Qué dirección no representa una dirección IPv6 válida?


a. 2000:0000:0000:0000:0000:0000:0000:0001
b. 2::1
c. ::
d. ff02::1:0:0
e. 2001:3::7:0:2
f. 2001:db8::7::2
g. 2000::1

6. ¿Qué término se refiere a la capacidad de que un sistema envíe tráfico a una dirección
IP especial que es recibida por múltiples sistemas?
a. netscope
b. máscara de red
c. subred
d. multidifusión
e. netaddr
f. red

RH124-RHEL9.0-es-5-20230516 379
capítulo 11 | Gestión de redes

Validación de la configuración de red

Objetivos
Probar e inspeccionar la configuración de red actual con las utilidades de la línea de comando.

Recopilación de la información de interfaz de red


El comando ip link enumera todas las interfaces de red disponibles en su sistema. En el
siguiente ejemplo, el servidor tiene tres interfaces de red: lo, que es el dispositivo de bucle
invertido que está conectado al propio servidor, y dos interfaces Ethernet, ens3 y ens4.

[user@host ~]$ ip link show


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT
group default qlen 1000
link/ether 52:54:00:00:00:0a brd ff:ff:ff:ff:ff:ff
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT
group default qlen 1000
link/ether 52:54:00:00:00:1e brd ff:ff:ff:ff:ff:ff

Para configurar una interfaz de red correctamente, debe saber qué interfaz está conectada a
qué red. A menudo, puede obtener la dirección MAC de la interfaz conectada a cada red, ya
sea porque está impresa físicamente en la tarjeta o el servidor, o porque es una máquina virtual
y usted sabe cómo está configurada. La dirección MAC del dispositivo aparece después de
link/ether para cada interfaz. Así que ya sabes que la tarjeta de red con la dirección MAC
52:54:00:00:00:0a es la interfaz de red ens3.

Visualización de las direcciones IP


Use el comando ip para ver la información del dispositivo y de la dirección. Una sola interfaz de
red puede tener varias direcciones IPv4 o IPv6.

[user@host ~]$ ip addr show ens3


2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen
1000
link/ether 52:54:00:00:00:0b brd ff:ff:ff:ff:ff:ff
inet 192.0.2.2/24 brd 192.0.2.255 scope global ens3
valid_lft forever preferred_lft forever
inet6 2001:db8:0:1:5054:ff:fe00:b/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe00:b/64 scope link
valid_lft forever preferred_lft forever

Una interfaz activa está UP.

La cadena link/ether especifica la dirección de hardware (MAC) del dispositivo.

380 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

La cadena inet muestra una dirección IPv4, la longitud del prefijo de red y el alcance.

La cadena inet6 muestra una dirección IPv6, la longitud del prefijo de red y el alcance. Esta
dirección es de alcance global y se usa con normalidad.

Esta cadena inet6 muestra que la interfaz tiene una dirección IPv6 del alcance de vínculo
que solo puede usarse para la comunicación en el vínculo de Ethernet local.

Visualización de estadísticas de rendimiento


El comando ip también puede mostrar estadísticas sobre el rendimiento de la red. Los contadores
para cada interfaz de red pueden identificar la presencia de problemas de red. Los contadores
registran estadísticas para cosas como la cantidad de paquetes recibidos (RX) y transmitidos (TX),
errores de paquetes y paquetes omitidos.

[user@host ~]$ ip -s link show ens3


2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen
1000
link/ether 52:54:00:00:00:0a brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
269850 2931 0 0 0 0
TX: bytes packets errors dropped carrier collsns
300556 3250 0 0 0 0

Comprobación de la conectividad entre hosts


El comando ping prueba la conectividad. El comando continúa ejecutándose hasta que se
presione Ctrl+c, a menos que se indiquen otras opciones para limitar la cantidad de paquetes
enviados.

[user@host ~]$ ping -c3 192.0.2.254


PING 192.0.2.1 (192.0.2.254) 56(84) bytes of data.
64 bytes from 192.0.2.254: icmp_seq=1 ttl=64 time=4.33 ms
64 bytes from 192.0.2.254: icmp_seq=2 ttl=64 time=3.48 ms
64 bytes from 192.0.2.254: icmp_seq=3 ttl=64 time=6.83 ms

--- 192.0.2.254 ping statistics ---


3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.485/4.885/6.837/1.424 ms

El comando ping6 es la versión de IPv6 del comando ping en Red Hat Enterprise Linux. La
diferencia entre estos comandos es que el comando ping6 se comunica a través de IPv6 y toma
direcciones IPv6.

[user@host ~]$ ping6 2001:db8:0:1::1


PING 2001:db8:0:1::1(2001:db8:0:1::1) 56 data bytes
64 bytes from 2001:db8:0:1::1: icmp_seq=1 ttl=64 time=18.4 ms
64 bytes from 2001:db8:0:1::1: icmp_seq=2 ttl=64 time=0.178 ms
64 bytes from 2001:db8:0:1::1: icmp_seq=3 ttl=64 time=0.180 ms
^C
--- 2001:db8:0:1::1 ping statistics ---

RH124-RHEL9.0-es-5-20230516 381
capítulo 11 | Gestión de redes

3 packets transmitted, 3 received, 0% packet loss, time 2001ms


rtt min/avg/max/mdev = 0.178/6.272/18.458/8.616 ms
[user@host ~]$

Cuando hace ping a las direcciones de enlace-local y al grupo multidifusión de todos los nodos de
enlace-local (ff02::1), la interfaz de red que se debe usar debe especificarse explícitamente
con un identificador de zona de alcance (como ff02::1%ens3). Si se omite esta interfaz de red,
se muestra el error de conexión: argumento no válido.

Puede usar el comando ping6 ff02::1 para buscar otros nodos IPv6 en la red local.

[user@host ~]$ ping6 ff02::1%ens4


PING ff02::1%ens4(ff02::1) 56 data bytes
64 bytes from fe80::78cf:7fff:fed2:f97b: icmp_seq=1 ttl=64 time=22.7 ms
64 bytes from fe80::f482:dbff:fe25:6a9f: icmp_seq=1 ttl=64 time=30.1 ms (DUP!)
64 bytes from fe80::78cf:7fff:fed2:f97b: icmp_seq=2 ttl=64 time=0.183 ms
64 bytes from fe80::f482:dbff:fe25:6a9f: icmp_seq=2 ttl=64 time=0.231 ms (DUP!)
^C
--- ff02::1%ens4 ping statistics ---
2 packets transmitted, 2 received, +2 duplicates, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.183/13.320/30.158/13.374 ms
[user@host ~]$
[user@host ~]$ ping6 -c 1 fe80::f482:dbff:fe25:6a9f%ens4
PING fe80::f482:dbff:fe25:6a9f%ens4(fe80::f482:dbff:fe25:6a9f) 56 data bytes
64 bytes from fe80::f482:dbff:fe25:6a9f: icmp_seq=1 ttl=64 time=22.9 ms

--- fe80::f482:dbff:fe25:6a9f%ens4 ping statistics ---


1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 22.903/22.903/22.903/0.000 ms

Las direcciones de enlace-local de IPv6 pueden ser usadas por otros hosts en el mismo vínculo, al
igual que las direcciones normales.

[user@host ~]$ ssh fe80::f482:dbff:fe25:6a9f%ens4


user@fe80::f482:dbff:fe25:6a9f%ens4's password:
Last login: Thu Jun 5 15:20:10 2014 from host.example.com
[user@server ~]$

Solucionar problemas del enrutador


El enrutamiento de la red es complejo y, a veces, el tráfico no se comporta como se espera. Puede
usar diferentes herramientas para diagnosticar problemas del enrutador.

Describir la tabla de enrutamiento


Use el comando ip con la opción route para mostrar información de enrutamiento.

[user@host ~]$ ip route


default via 192.0.2.254 dev ens3 proto static metric 1024
192.0.2.0/24 dev ens3 proto kernel scope link src 192.0.2.2
10.0.0.0/8 dev ens4 proto kernel scope link src 10.0.0.11

382 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Todos los paquetes que estén destinados para la red 10.0.0.0/8 se envían directamente al
destino mediante el dispositivo ens4. Todos los paquetes que estén destinados para la red
192.0.2.0/24 se envían directamente al destino mediante el dispositivo ens3. Todos los demás
paquetes se envían al enrutador predeterminado que está ubicado en 192.0.2.254, y también
mediante el dispositivo ens3.

Use el comando ip con la opción -6 para mostrar la tabla de enrutamiento de IPv6.

[user@host ~]$ ip -6 route


unreachable ::/96 dev lo metric 1024 error -101
unreachable ::ffff:0.0.0.0/96 dev lo metric 1024 error -101
2001:db8:0:1::/64 dev ens3 proto kernel metric 256
unreachable 2002:a00::/24 dev lo metric 1024 error -101
unreachable 2002:7f00::/24 dev lo metric 1024 error -101
unreachable 2002:a9fe::/32 dev lo metric 1024 error -101
unreachable 2002:ac10::/28 dev lo metric 1024 error -101
unreachable 2002:c0a8::/32 dev lo metric 1024 error -101
unreachable 2002:e000::/19 dev lo metric 1024 error -101
unreachable 3ffe:ffff::/32 dev lo metric 1024 error -101
fe80::/64 dev ens3 proto kernel metric 256
default via 2001:db8:0:1::ffff dev ens3 proto static metric 1024

1. La red 2001:db8:0:1::/64 usa la interfaz ens3 (que supuestamente tiene una dirección
en esa red).

2. La red fe80::/64 usa la interfaz ens3 para la dirección de enlace-local. En un sistema con
múltiples interfaces, hay una ruta a la red fe80::/64 en cada interfaz para cada dirección de
enlace-local.

3. La ruta predeterminada a todas las redes en Internet IPv6 (la red ::/0) usa el enrutador en la
red 2001:db8:0:1::ffff y es accesible con el dispositivo ens3.

Rastreo de rutas de tráfico


Para rastrear la ruta que del tráfico de la red para llegar a un host remoto a través de múltiples
enrutadores, use el comando traceroute o tracepath. Estos comandos pueden identificar
si hay un problema con uno de sus enrutadores o con uno intermedio. Ambos comandos usan
paquetes de UDP para realizar el seguimiento de una ruta de forma predeterminada; sin embargo,
muchas redes bloquean el tráfico de UDP e ICMP. El comando traceroute tiene opciones para
realizar el seguimiento de la ruta con paquetes UDP (predeterminado), ICMP (-I) o TCP (-T. En
general, el comando traceroute no está instalado de forma predeterminada.

[user@host ~]$ tracepath access.redhat.com


...output omitted...
4: 71-32-28-145.rcmt.qwest.net 48.853ms asymm 5
5: dcp-brdr-04.inet.qwest.net 100.732ms asymm 7
6: 206.111.0.153.ptr.us.xo.net 96.245ms asymm 7
7: 207.88.14.162.ptr.us.xo.net 85.270ms asymm 8
8: ae1d0.cir1.atlanta6-ga.us.xo.net 64.160ms asymm 7
9: 216.156.108.98.ptr.us.xo.net 108.652ms
10: bu-ether13.atlngamq46w-bcr00.tbone.rr.com 107.286ms asymm 12
...output omitted...

Cada línea del resultado del comando tracepath representa un enrutador o hop por donde pasa
el paquete entre el origen y el destino final. El comando proporciona información adicional para

RH124-RHEL9.0-es-5-20230516 383
capítulo 11 | Gestión de redes

cada hop según esté disponible, que incluye la sincronización en ambos sentidos (RTT) y cualquier
cambio en el tamaño de la unidad de transmisión máxima (MTU). La indicación asymm significa que
el tráfico llegó a ese enrutador regresó de ese enrutador usando diferentes rutas (asimétricas).
Estos enrutadores aquí son para el tráfico saliente, no para el tráfico de retorno.

Los comandos tracepath6 y traceroute -6 son los comandos de IPv6 equivalentes a los
comandos tracepath y traceroute.

[user@host ~]$ tracepath6 2001:db8:0:2::451


1?: [LOCALHOST] 0.091ms pmtu 1500
1: 2001:db8:0:1::ba 0.214ms
2: 2001:db8:0:1::1 0.512ms
3: 2001:db8:0:2::451 0.559ms reached
Resume: pmtu 1500 hops 3 back 3

Solución de problemas en puertos y servicios


Los servicios TCP usan sockets como extremos para la comunicación y se componen de una
dirección IP, protocolo y número de puerto. En general, los servicios están atentos a los puertos
estándares mientras que los clientes usan un puerto disponible en forma aleatoria. Los nombres
más conocidos de puertos estándares están enumerados en el archivo /etc/services.

El comando ss se usa para mostrar las estadísticas del socket. El comando ss reemplaza
la herramienta anterior netstat, que es parte del paquete net-tools, que algunos
administradores de sistemas pueden conocer más, pero que no siempre está instalada.

[user@host ~]$ ss -ta


State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:sunrpc *:*
LISTEN 0 128 *:ssh *:*
LISTEN 0 100 127.0.0.1:smtp :
LISTEN 0 128 *:36889 *:*
ESTAB 0 0 172.25.250.10:ssh 172.25.254.254:59392
LISTEN 0 128 :::sunrpc :::*
LISTEN 0 128 :::ssh :::*
LISTEN 0 100 ::1:smtp :::*
LISTEN 0 128 :::34946 :::*

*:ssh : Puerto usado para SSH está atento a todas las direcciones IPv4. El carácter
de asterisco (*) se usa para indicar todos cuando se hace referencia a los puertos o las
direcciones IPv4.

127.0.0.1:smtp : El puerto usado para SMTP escucha la interfaz de circuito de retorno de


la IPv4 127.0.0.1.

172.25.250.10:ssh : La conexión SSH establecida está en la interfaz 172.25.250.10 y se


origina de un sistema con una dirección de 172.25.254.254.

:::ssh : Puerto usado para SSH está atento a todas las direcciones IPv6. La sintaxis de dos
puntos (::) representa todas las interfaces IPv6.

::1:smtp : El puerto usado para SMTP escucha la interfaz de circuito de retorno ::1 IPv6.

384 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Opciones para ss y netstat

Opción Descripción

-n Muestra números en lugar de nombres para las interfaces y los puertos.

-t Muestra los sockets TCP.

-u Muestra los sockets UDP.

-l Muestra solo los sockets a los que está atento.

-a Muestra todos los sockets (los que escucha y los establecidos).

-p Muestra el proceso de usar los sockets.

-A inet Muestra las conexiones activas (pero no los sockets que se escuchan) para
la familia de direcciones inet. Es decir, ignora los sockets de dominio UNIX
local. Para el comando ss, se muestran las conexiones IPv4 e IPv6. Para
el comando netstat, se muestran solo las conexiones IPv4. (El comando
netstat -A inet6 mostrará las conexiones IPv6 y el comando netstat
-46 mostrará IPv4 e IPv6 al mismo tiempo).

Referencias
Páginas del manual: ip-link(8), ip-address(8), ip-route(8), ip(8), ping(8),
tracepath(8), traceroute(8), ss(8) y netstat(8).

Para obtener más información, consulte la Configuring and Managing Networking


Guide en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-
single/configuring_and_managing_networking/index

RH124-RHEL9.0-es-5-20230516 385
capítulo 11 | Gestión de redes

Ejercicio Guiado

Validación de la configuración de red


En este ejercicio, revisa la configuración de red de uno de sus servidores.

Resultados
• Identificar las interfaces de la red actual y las direcciones de la red.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start net-validate

Instrucciones
1. Use el comando ssh para iniciar sesión en servera con el usuario student. Los sistemas
están configurados para usar claves SSH para la autenticación y acceso sin contraseña para
servera.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$

2. Localice el nombre de la interfaz de red asociado con la dirección Ethernet


52:54:00:00:fa:0a. Registre o recuerde este nombre y utilícelo para reemplazar el
marcador de posición enX en los comandos subsiguientes.

Importante
Los nombres de la interfaz de red están determinados por su tipo de bus y el orden
de detección de los dispositivos durante el arranque. Los nombres de la interfaz de
red varían según la plataforma del curso y el hardware en uso.

En su sistema, localice el nombre de la interfaz (como ens06 o en1p2) asociado


a la dirección Ethernet 52:54:00:00:fa:0a. Use este nombre de interfaz para
reemplazar el marcador de posición enX que se usa a lo largo de este ejercicio.

386 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

[student@servera ~]$ ip link


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enX: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group
default qlen 1000
link/ether 52:54:00:00:fa:0a brd ff:ff:ff:ff:ff:ff

3. Visualice la dirección IP y la máscara de red actuales de todas las interfaces.

[student@servera ~]$ ip -br addr


lo UP 127.0.0.1/8 ::1/128
enX: UP 172.25.250.10/24 fe80::3059:5462:198:58b2/64

4. Visualice las estadísticas correspondientes a la interfaz enX.

[student@servera ~]$ ip -s link show enX


2: enX: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode
DEFAULT group default qlen 1000
link/ether 52:54:00:00:fa:0a brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
89014225 168251 0 154418 0 0
TX: bytes packets errors dropped carrier collsns
608808 6090 0 0 0 0

5. Visualice la información de enrutamiento.

[student@servera ~]$ ip route


default via 172.25.250.254 dev enX proto static metric 100
172.25.250.0/24 dev enX proto kernel scope link src 172.25.250.10 metric 100

6. Verifique que se pueda acceder al enrutador.

[student@servera ~]$ ping -c3 172.25.250.254


PING 172.25.250.254 (172.25.250.254) 56(84) bytes of data.
64 bytes from 172.25.250.254: icmp_seq=1 ttl=64 time=0.196 ms
64 bytes from 172.25.250.254: icmp_seq=2 ttl=64 time=0.436 ms
64 bytes from 172.25.250.254: icmp_seq=3 ttl=64 time=0.361 ms

--- 172.25.250.254 ping statistics ---


3 packets transmitted, 3 received, 0% packet loss, time 49ms
rtt min/avg/max/mdev = 0.196/0.331/0.436/0.100 ms

RH124-RHEL9.0-es-5-20230516 387
capítulo 11 | Gestión de redes

7. Visualice todos los saltos entre el sistema local y el sistema classroom.example.com.

[student@servera ~]$ tracepath classroom.example.com


1?: [LOCALHOST] pmtu 1500
1: bastion.lab.example.com 0.337ms
1: bastion.lab.example.com 0.122ms
2: 172.25.254.254 0.602ms reached
Resume: pmtu 1500 hops 2 back 2

8. Visualice los sockets TCP de escucha en el sistema local.

[student@servera ~]$ ss -lt


State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:sunrpc 0.0.0.0:*
LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:*
LISTEN 0 128 [::]:sunrpc [::]:*
LISTEN 0 128 [::]:ssh [::]:*

9. Regrese al sistema workstation con el usuario student.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish net-validate

Esto concluye la sección.

388 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Configuración de redes desde la línea de


comandos

Objetivos
Gestionar los parámetros de configuración de red con el comando nmcli.

Describir el servicio NetworkManager


El servicio NetworkManager monitorea y gestiona la configuración de red de un sistema. En
el entorno gráfico GNOME, un subprograma del área de notificación muestra la configuración
de red y la información de estado que se recibe del daemon NetworkManager. Puede
interactuar con el servicio NetworkManager a través de la línea de comandos o con herramientas
gráficas. Los archivos de configuración de servicio están almacenados en el directorio /etc/
NetworkManager/system-connections/.

El servicio NetworkManager gestiona de manera dinámica dispositivos y conexiones de red. Un


dispositivo es una interfaz de red física o virtual que proporciona tráfico de red. Una conexión tiene
ajustes de configuración relacionados para un solo dispositivo de red. Una conexión también se
conoce como perfil de red. Cada conexión debe tener un nombre o ID único, que puede coincidir
con el nombre del dispositivo que configura.

Un solo dispositivo puede tener varias configuraciones de conexión y cambiar entre ellas, pero
solo una conexión puede estar activa por dispositivo. Por ejemplo, un dispositivo inalámbrico de
computadora portátil puede configurar una dirección IP fija para su uso en un sitio de trabajo
seguro en una conexión, pero puede configurar una segunda conexión con una dirección
automatizada y una red privada virtual (VPN) para acceder a la misma red de la empresa desde
casa.

Importante
A partir de Red Hat Enterprise Linux 8, los archivos de configuración de formato
ifcfg y el directorio /etc/sysconfig/network-scripts/ están obsoletos.
NetworkManager ahora usa un formato de archivo de clave de estilo INI, que es una
estructura de par de clave-valor para organizar las propiedades. NetworkManager
almacena perfiles de red en el directorio /etc/NetworkManager/system-
connections/. Para compatibilidad con versiones anteriores, las conexiones de
formato ifcfg en el directorio /etc/sysconfig/network-scripts/ aún se
reconocen y cargan.

Visualización de información de redes


Use la utilidad nmcli para crear y editar archivos de conexión desde la línea de comandos. El
comando nmcli device status muestra el estado de todos los dispositivos de red:

RH124-RHEL9.0-es-5-20230516 389
capítulo 11 | Gestión de redes

[user@host ~]$ nmcli dev status


DEVICE TYPE STATE CONNECTION
eno1 ethernet connected eno1
ens3 ethernet connected static-ens3
eno2 ethernet disconnected --
lo loopback unmanaged --

nota
Puede abreviar nmcli objetos y acciones. Por ejemplo, puede abreviar nmcli
device disconnect como nmcli dev dis y abreviar nmcli connection
modify como nmcli con mod. La abreviatura puede ser tan corta como una sola
letra, siempre y cuando use suficientes caracteres para identificar de manera única
el objeto que se debe gestionar.

El comando nmcli connection show muestra una lista de todas las conexiones. Use la opción
--active para enumerar solo las conexiones activas.

[user@host ~]$ nmcli con show


NAME UUID TYPE DEVICE
eno2 ff9f7d69-db83-4fed-9f32-939f8b5f81cd 802-3-ethernet --
static-ens3 72ca57a2-f780-40da-b146-99f71c431e2b 802-3-ethernet ens3
eno1 87b53c56-1f5d-4a29-a869-8a7bdaf56dfa 802-3-ethernet eno1
[user@host ~]$ nmcli con show --active
NAME UUID TYPE DEVICE
static-ens3 72ca57a2-f780-40da-b146-99f71c431e2b 802-3-ethernet ens3
eno1 87b53c56-1f5d-4a29-a869-8a7bdaf56dfa 802-3-ethernet eno1

Adición de una conexión de red


El comando nmcli connection add se usa para agregar conexiones de red. Los datos para
la conexión de red agregada se almacenan en el directorio /etc/NetworkManager/system-
connections/ como un archivo con el sufijo .nmconnection.

El siguiente ejemplo agrega la conexión eno2 del tipo ethernet para la interfaz de red eno2.

[root@host ~]# nmcli con add con-name eno2 \


type ethernet ifname eno2
Connection 'eno2' (8159b66b-3c36-402f-aa4c-2ea933c7a5ce) successfully added

El siguiente ejemplo crea la conexión eno3 del tipo ethernet para la interfaz de red eno3 con
una configuración de red IPv4 estática. Este comando configura la dirección IP 192.168.0.5 con
un prefijo de red de /24 y una puerta de enlace de red de 192.168.0.254. El comando nmcli
connection add falla si el nombre de conexión que intenta agregar existe.

[root@host ~]# nmcli con add con-name eno3 type ethernet ifname eno3 \
ipv4.method manual ipv4.addresses 192.168.0.5/24 ipv4.gateway 192.168.0.254

El siguiente ejemplo crea la conexión eno4 para el dispositivo eno4 con direcciones IPv6 e IPv4
estáticas. Este comando configura la dirección IPv6 2001:db8:0:1::c000:207 con el prefijo
de red /64 y la dirección 2001:db8:0:1::1 como puerta de enlace predeterminada. Este

390 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

comando también configura la dirección IPv4 192.0.2.7 con el prefijo de red /24 y la dirección
192.0.2.1 como puerta de enlace predeterminada.

[root@host ~]# nmcli con add con-name eno4 type ethernet ifname eno4 \
ipv6.addresses 2001:db8:0:1::c000:207/64 ipv6.gateway 2001:db8:0:1::1 \
ipv6.method manual ipv4.addresses 192.0.2.7/24 ipv4.gateway 192.0.2.1 \
ipv4.method manual

Gestión de las conexiones de red


El comando nmcli connection up activa una conexión de red en el dispositivo al que está
unido. La activación de una conexión de red requiere el nombre de la conexión, no el nombre del
dispositivo.

[user@host ~]$ nmcli con show


NAME UUID TYPE DEVICE
static-ens3 72ca57a2-f780-40da-b146-99f71c431e2b 802-3-ethernet --
static-ens5 87b53c56-1f5d-4a29-a869-8a7bdaf56dfa 802-3-ethernet --
[root@host ~]# nmcli con up static-ens3
Connection successfully activated (D-Bus active path: /org/freedesktop/
NetworkManager/ActiveConnection/2)

El comando nmcli device disconnect desconecta el dispositivo de red y cierra la conexión.

[root@host ~]# nmcli dev disconnect ens3

Importante
Use nmcli device disconnect para detener el tráfico en una interfaz de red y
desactivar la conexión.

Debido a que la mayoría de las conexiones habilitan el parámetro autoconnect,


el comando nmcli connection down no es efectivo para detener el tráfico. Si
bien la conexión se desactiva, la conexión automática reactiva inmediatamente la
conexión si el dispositivo está activo y disponible. La conexión automática es un
comportamiento deseado porque mantiene las conexiones a través de cortes de red
temporales.

Al desconectar el dispositivo en la conexión, se fuerza la desconexión de la conexión


hasta que el dispositivo se vuelva a conectar.

Actualización de la configuración de conexión de red


Las conexiones del servicio NetworkManager tienen dos tipos de ajustes. Hay propiedades
de conexión estáticas, configuradas por el administrador y almacenadas en los archivos de
configuración en /etc/NetworkManager/system-connections/*.nmconnection. Las
propiedades de conexión dinámica se solicitan desde un servidor DHCP y no se almacenan de
forma persistente.

Para enumerar la configuración actual de una conexión, use el comando nmcli connection
show. Las configuraciones en minúsculas son propiedades estáticas que el administrador
puede cambiar. Las configuraciones en mayúscula son configuraciones activas que se usan
provisoriamente para esta instancia de la conexión.

RH124-RHEL9.0-es-5-20230516 391
capítulo 11 | Gestión de redes

[root@host ~]# nmcli con show static-ens3


connection.id: static-ens3
connection.uuid: 87b53c56-1f5d-4a29-a869-8a7bdaf56dfa
connection.interface-name: --
connection.type: 802-3-ethernet
connection.autoconnect: yes
connection.timestamp: 1401803453
connection.read-only: no
connection.permissions:
connection.zone: --
connection.master: --
connection.slave-type: --
connection.secondaries:
connection.gateway-ping-timeout: 0
802-3-ethernet.port: --
802-3-ethernet.speed: 0
802-3-ethernet.duplex: --
802-3-ethernet.auto-negotiate: yes
802-3-ethernet.mac-address: CA:9D:E9:2A:CE:F0
802-3-ethernet.cloned-mac-address: --
802-3-ethernet.mac-address-blacklist:
802-3-ethernet.mtu: auto
802-3-ethernet.s390-subchannels:
802-3-ethernet.s390-nettype: --
802-3-ethernet.s390-options:
ipv4.method: manual
ipv4.dns: 192.168.0.254
ipv4.dns-search: example.com
ipv4.addresses: { ip = 192.168.0.2/24,
gw = 192.168.0.254 }
ipv4.routes:
ipv4.ignore-auto-routes: no
ipv4.ignore-auto-dns: no
ipv4.dhcp-client-id: --
ipv4.dhcp-send-hostname: yes
ipv4.dhcp-hostname: --
ipv4.never-default: no
ipv4.may-fail: yes
ipv6.method: manual
ipv6.dns: 2001:4860:4860::8888
ipv6.dns-search: example.com
ipv6.addresses: { ip = 2001:db8:0:1::7/64,
gw = 2001:db8:0:1::1 }
ipv6.routes:
ipv6.ignore-auto-routes: no
ipv6.ignore-auto-dns: no
ipv6.never-default: no
ipv6.may-fail: yes
ipv6.ip6-privacy: -1 (unknown)
ipv6.dhcp-hostname: --
...output omitted...

Use el comando nmcli connection modify para actualizar la configuración de


conexión. Estos cambios se guardan en el archivo /etc/NetworkManager/system-

392 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

connections/name.nmconnection. Consulte la página del manual nm-settings(5) para


conocer las configuraciones disponibles.

Use el siguiente comando para actualizar la conexión static-ens3 para establecer la dirección
IPv4 192.0.2.2/24 y la puerta de enlace predeterminada 192.0.2.254. Use el parámetro
nmcli comando connection.autoconnect para habilitar o deshabilitar automáticamente la
conexión en el arranque del sistema.

[root@host ~]# nmcli con mod static-ens3 ipv4.addresses 192.0.2.2/24 \


ipv4.gateway 192.0.2.254 connection.autoconnect yes

Use el siguiente comando para actualizar la conexión static-ens3 para establecer la dirección
IPv6 2001:db8:0:1::a00:1/64 y la puerta de enlace predeterminada 2001:db8:0:1::1.

[root@host ~]# nmcli con mod static-ens3 ipv6.addresses 2001:db8:0:1::a00:1/64 \


ipv6.gateway 2001:db8:0:1::1

Importante
Para cambiar la configuración de una conexión DHCP para que sea estática,
actualice la configuración de ipv4.method de auto o dhcp a manual. Para
una conexión IPv6, actualice la configuración ipv6.method. Si el método no se
configura correctamente, la conexión puede bloquearse o estar incompleta cuando
se activa, o puede obtener una dirección de DHCP o SLAAC además de la dirección
estática configurada.

Algunas configuraciones pueden tener varios valores. Es posible agregar un valor específico a la
lista o eliminarlo de la configuración de la conexión al agregar un símbolo más (+) o un símbolo
menos (-) al comienzo del nombre de la configuración. Si no se incluye un signo más o menos,
el valor especificado reemplaza la lista actual de la configuración. El siguiente ejemplo agrega el
servidor DNS 2.2.2.2 a la conexión static-ens3.

[root@host ~]# nmcli con mod static-ens3 +ipv4.dns 2.2.2.2

También puede modificar los perfiles de red editando el archivo de configuración de la


conexión en /etc/NetworkManager/system-connections/. Mientras que los comandos
nmcli se comunican directamente con NetworkManager para implementar modificaciones
inmediatamente, las ediciones del archivo de conexión no se implementan hasta que se solicita a
NetworkManager que vuelva a cargar el archivo de configuración. Con la edición manual, puede
crear configuraciones complejas en pasos y, luego, cargar la configuración final cuando esté lista.
El siguiente ejemplo carga todos los perfiles de conexión.

[root@host ~]# nmcli con reload

El siguiente ejemplo carga solo el perfil de conexión eno2 en /etc/NetworkManager/system-


connections/eno2.nmconnection.

[root@host ~]# nmcli con reload eno2

RH124-RHEL9.0-es-5-20230516 393
capítulo 11 | Gestión de redes

Eliminación de una conexión de red


El comando nmcli connection delete elimina una conexión del sistema. Este comando
desconecta el dispositivo y elimina el archivo de configuración de la conexión.

[root@host ~]# nmcli con del static-ens3

Permisos para modificar la configuración de NetworkManager


El usuario root puede usar el comando nmcli para revisar la configuración de la red.

Los usuarios sin privilegios que han iniciado sesión en la consola física o virtual también pueden
realizar la mayoría de los cambios de configuración de red. Si hay una persona en la consola
del sistema, es probable que el sistema se esté usando como una estación de trabajo o una
computadora portátil donde el usuario necesita configurar, activar y desactivar las conexiones. Los
usuarios sin privilegios que inician sesión con ssh deben cambiar al usuario root para cambiar la
configuración de red.

Use el comando nmcli general permissions para ver sus permisos actuales. El siguiente
ejemplo enumera los permisos de NetworkManager del usuario root.

[root@host ~]# nmcli gen permissions


PERMISSION VALUE
org.freedesktop.NetworkManager.checkpoint-rollback yes
org.freedesktop.NetworkManager.enable-disable-connectivity-check yes
org.freedesktop.NetworkManager.enable-disable-network yes
org.freedesktop.NetworkManager.enable-disable-statistics yes
org.freedesktop.NetworkManager.enable-disable-wifi yes
org.freedesktop.NetworkManager.enable-disable-wimax yes
org.freedesktop.NetworkManager.enable-disable-wwan yes
org.freedesktop.NetworkManager.network-control yes
org.freedesktop.NetworkManager.reload yes
org.freedesktop.NetworkManager.settings.modify.global-dns yes
org.freedesktop.NetworkManager.settings.modify.hostname yes
org.freedesktop.NetworkManager.settings.modify.own yes
org.freedesktop.NetworkManager.settings.modify.system yes
org.freedesktop.NetworkManager.sleep-wake yes
org.freedesktop.NetworkManager.wifi.scan yes
org.freedesktop.NetworkManager.wifi.share.open yes
org.freedesktop.NetworkManager.wifi.share.protected yes

El siguiente ejemplo enumera los permisos de NetworkManager del usuario.

[user@host ~]$ nmcli gen permissions


PERMISSION VALUE
org.freedesktop.NetworkManager.checkpoint-rollback auth
org.freedesktop.NetworkManager.enable-disable-connectivity-check no
org.freedesktop.NetworkManager.enable-disable-network no
org.freedesktop.NetworkManager.enable-disable-statistics no
org.freedesktop.NetworkManager.enable-disable-wifi no
org.freedesktop.NetworkManager.enable-disable-wimax no
org.freedesktop.NetworkManager.enable-disable-wwan no
org.freedesktop.NetworkManager.network-control auth
org.freedesktop.NetworkManager.reload auth

394 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

org.freedesktop.NetworkManager.settings.modify.global-dns auth
org.freedesktop.NetworkManager.settings.modify.hostname auth
org.freedesktop.NetworkManager.settings.modify.own auth
org.freedesktop.NetworkManager.settings.modify.system auth
org.freedesktop.NetworkManager.sleep-wake no
org.freedesktop.NetworkManager.wifi.scan auth
org.freedesktop.NetworkManager.wifi.share.open no
org.freedesktop.NetworkManager.wifi.share.protected no

Comandos útiles de NetworkManager


En la siguiente tabla, se enumeran los comandos nmcli clave abordados en esta sección:

Comando Propósito

nmcli dev status Muestra el estado de todas las interfaces de


red arrojado por NetworkManager.

nmcli con show Enumerar todas las conexiones.

nmcli con show name Enumera la configuración actual del nombre


de la conexión.

nmcli con add con-name name Agrega y asigna un nombre a un nuevo perfil
de conexión.

nmcli con mod name Modifica el nombre de la conexión.

nmcli con reload Vuelva a cargar los archivos de configuración,


después de la edición manual de archivos.

nmcli con up name Active el nombre de la conexión.

nmcli dev dis dev Desconecte la interfaz, que también


desactiva la conexión actual.

nmcli con del name Elimine la conexión especificada y su archivo


de configuración.

Referencias
Para obtener más información, consulte el capítulo Getting Started with nmcli en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/
html-single/configuring_and_managing_networking/index#getting-started-with-
nmcli_configuring-and-managing-networking
.

Páginas del manual: NetworkManager(8), nmcli(1), nmcli-examples(5), nm-


settings(5), hostnamectl(1), resolv.conf(5), hostname(5), ip(8) y ip-
address(8).

RH124-RHEL9.0-es-5-20230516 395
capítulo 11 | Gestión de redes

Ejercicio Guiado

Configuración de redes desde la línea de


comandos
En este ejercicio, usará el comando nmcli para configurar la configuración de red.

Resultados
• Actualizar una configuración de conexión de red de DHCP a estática.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start net-configure

Instrucciones
1. Use el comando ssh para iniciar sesión en la máquina servera con el usuario student.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#

2. Visualización de la información de interfaz de red

Importante
Los nombres de la interfaz de red están determinados por su tipo de bus y el orden
de detección de los dispositivos durante el arranque. Los nombres de la interfaz de
red variarán según la plataforma del curso y el hardware en uso.

En su sistema, localice el nombre de la interfaz (como eth1, ens06 o enp0p2)


asociado a la dirección Ethernet 52:54:00:00:fa:0a. Use este nombre de
interfaz para reemplazar el marcador de posición eth0 que se usa a lo largo de este
ejercicio, en caso de ser diferente.

Localice el nombre de la interfaz de red asociado con la dirección Ethernet


52:54:00:00:fa:0a. Registre o recuerde este nombre y utilícelo para reemplazar el
marcador de posición eth0 en los comandos subsiguientes.

396 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

[root@servera ~]# ip link


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode
DEFAULT group default qlen 1000
link/ether 52:54:00:00:fa:0a brd ff:ff:ff:ff:ff:ff
altname enp0s3
altname ens3

3. Use el comando nmcli para ver la configuración de red.

3.1. Use el comando nmcli con show --active para mostrar solo las conexiones
activas.
Su nombre de interfaz de red debe aparecer debajo de la columna DEVICE de los
resultados, y el nombre de la conexión activa para ese dispositivo aparece en la
misma línea debajo de la columna NAME. Este ejercicio asume que la conexión activa
es Wired connection 1. Si el nombre de la conexión activa es diferente, use ese
nombre en lugar de Wired connection 1 para el resto de este ejercicio.

[root@servera ~]# nmcli con show --active


NAME UUID TYPE DEVICE
Wired connection 1 ec3a15fb-2e26-3254-9433-90c66981e924 ethernet eth0

3.2. Muestre todos los parámetros de configuración para la conexión activa.

[root@servera ~]# nmcli con show "Wired connection 1"


connection.id: Wired connection 1
connection.uuid: ec3a15fb-2e26-3254-9433-90c66981e924
connection.stable-id: --
connection.type: 802-3-ethernet
connection.interface-name: eth0
connection.autoconnect: yes
...output omitted...
ipv4.method: manual
ipv4.dns: 172.25.250.220
ipv4.dns-search: lab.example.com,example.com
ipv4.dns-options: --
ipv4.dns-priority: 0
ipv4.addresses: 172.25.250.10/24
ipv4.gateway: 172.25.250.254
...output omitted...
ipv6.method: auto
ipv6.dns: --
ipv6.dns-search: --
ipv6.dns-options: --
ipv6.dns-priority: 0
ipv6.addresses: --
ipv6.gateway: --
ipv6.routes: --
...output omitted...
GENERAL.NAME: Wired connection 1

RH124-RHEL9.0-es-5-20230516 397
capítulo 11 | Gestión de redes

GENERAL.UUID: ec3a15fb-2e26-3254-9433-90c66981e924
GENERAL.DEVICES: eth0
GENERAL.IP-IFACE: eth0
GENERAL.STATE: activated
GENERAL.DEFAULT: yes
...output omitted...

3.3. Muestre el estado del dispositivo.

[root@servera ~]# nmcli dev status


DEVICE TYPE STATE CONNECTION
eth0 ethernet connected Wired connection 1
lo loopback unmanaged --

3.4. Muestre los parámetros de configuración para el dispositivo eth0.

[root@servera ~]# nmcli dev show eth0


GENERAL.DEVICE: eth0
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 52:54:00:00:FA:0A
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: Wired connection 1
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER: on
IP4.ADDRESS[1]: 172.25.250.10/24
IP4.GATEWAY: 172.25.250.254
IP4.ROUTE[1]: dst = 172.25.250.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]: dst = 0.0.0.0/0, nh = 172.25.250.254, mt = 100
IP4.DNS[1]: 172.25.250.220
IP4.SEARCHES[1]: lab.example.com
IP4.SEARCHES[2]: example.com
IP6.ADDRESS[1]: fe80::c38a:ac39:36a1:a43c/64
IP6.GATEWAY: --
IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 1024

4. Cree una conexión estática con la misma dirección IPv4, prefijo de red y puerta de enlace
predeterminada que la conexión activa. Asigne el nombre static-addr a la conexión
nueva.

Advertencia
Dado que el acceso al equipo se logra a través de la conexión de red principal,
configurar los valores incorrectos durante la configuración de red puede hacer que
su equipo no pueda encontrarse. Si no puede encontrar su máquina, use el botón
Reset que está arriba de lo que antes era la pantalla gráfica del equipo e inténtelo
de nuevo.

398 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

[root@servera ~]# nmcli con add con-name static-addr \


ifname eth0 type ethernet ipv4.method manual ipv4.dns 172.25.250.220 \
ipv4.addresses 172.25.250.10/24 ipv4.gateway 172.25.250.254
Connection 'static-addr' (dc519805-48c4-4b31-b9e9-d3631cf9082c) successfully
added.

5. Muestre y active la conexión nueva.

5.1. Visualice todas las conexiones.

[root@servera ~]# nmcli con show


NAME UUID TYPE DEVICE
Wired connection 1 ec3a15fb-2e26-3254-9433-90c66981e924 ethernet eth0
static-addr dc519805-48c4-4b31-b9e9-d3631cf9082c ethernet --

5.2. Visualice las conexiones activas.

[root@servera ~]# nmcli con show --active


NAME UUID TYPE DEVICE
Wired connection 1 ec3a15fb-2e26-3254-9433-90c66981e924 ethernet eth0

5.3. Active la nueva conexión static-addr.

[root@servera ~]# nmcli con up static-addr


Connection successfully activated (D-Bus active path: /org/freedesktop/
NetworkManager/ActiveConnection/2)

5.4. Verifique la nueva conexión activa.

[root@servera ~]# nmcli con show --active


NAME UUID TYPE DEVICE
static-addr dc519805-48c4-4b31-b9e9-d3631cf9082c ethernet eth0

6. Actualice la conexión anterior para que no se inicie en el arranque. Verifique que se use la
conexión static-addr cuando se reinicie el sistema.

6.1. Deshabilite la conexión original para que no se inicie automáticamente en el arranque.

[root@servera ~]# nmcli con mod "Wired connection 1" \


connection.autoconnect no

6.2. Reinicie el sistema.

[root@servera ~]# systemctl reboot


Connection to servera closed by remote host.
Connection to servera closed.
[student@workstation ~]$

RH124-RHEL9.0-es-5-20230516 399
capítulo 11 | Gestión de redes

6.3. Inicie sesión en la máquina servera y verifique que la conexión static-addr sea la
conexión activa.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$ nmcli con show --active
NAME UUID TYPE DEVICE
static-addr dc519805-48c4-4b31-b9e9-d3631cf9082c ethernet eth0

7. Pruebe la conectividad con las direcciones de red nuevas.

7.1. Verifique la dirección IP.

[student@servera ~]$ ip -br addr show eth0


eth0 UP 172.25.250.10/24 fe80::eb21:9a:24de:e8fe/64

7.2. Verifique la puerta de enlace predeterminada.

[student@servera ~]$ ip route


default via 172.25.250.254 dev eth0 proto static metric 100
172.25.250.0/24 dev eth0 proto kernel scope link src 172.25.250.10 metric 100

7.3. Compruebe la dirección DNS.

[student@servera ~]$ ping -c3 172.25.250.220


PING 172.25.250.220 (172.25.250.220) 56(84) bytes of data.
64 bytes from 172.25.250.220: icmp_seq=1 ttl=64 time=0.777 ms
64 bytes from 172.25.250.220: icmp_seq=2 ttl=64 time=0.431 ms
64 bytes from 172.25.250.220: icmp_seq=3 ttl=64 time=0.272 ms

--- 172.25.250.220 ping statistics ---


3 packets transmitted, 3 received, 0% packet loss, time 2045ms
rtt min/avg/max/mdev = 0.272/0.493/0.777/0.210 ms

7.4. Regrese al sistema workstation con el usuario student.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish net-configure

Esto concluye la sección.

400 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Edición de archivos de configuración de


red

Objetivos
Modificar la configuración de la red mediante la edición de los archivos de configuración.

Archivos de configuración de conexión


A partir de Red Hat Enterprise Linux 8, las configuraciones de red se almacenan en el directorio
/etc/NetworkManager/system-connections/. Esta nueva ubicación de configuración usa
el formato de archivo de claves en lugar del formato ifcfg. Sin embargo, las configuraciones
almacenadas anteriormente en /etc/sysconfig/network-scripts/ continúan funcionando.
El directorio /etc/NetworkManager/system-connections/ almacena cualquier cambio con
el comando nmcli con mod name.

Formato de archivo de claves


NetworkManager usa el formato de clave de estilo INI para almacenar perfiles de conexión de
red. Los pares de claves-valores almacenan configuraciones como secciones (grupos). Cada
par de clave/valor de configuración en la sección es una de las propiedades enumeradas en
la especificación de configuración. Este archivo de configuración almacena la mayoría de las
configuraciones en el mismo formato que el formato de estilo INI. Por ejemplo, escribir direcciones
IP como 192.168.0.1/24 es más fácil de leer que como matrices de números enteros.

Si bien la forma recomendada de gestionar perfiles es con el comando nmcli, los usuarios aún
pueden crear o modificar manualmente los archivos de configuración. Después de editar el archivo
de configuración, ejecute el comando nmcli con reload para informar a NetworkManager
acerca de estos cambios.

Comparación de la configuración de NetworkManager y el archivo de formato de archivo de


claves

nmcli con mod *.nmconnection archivo Efecto

ipv4.method manual [ipv4] Las direcciones IPv4 se


configuran de manera
method=manual estática.

ipv4.method auto [ipv4] Busque parámetros de


configuración de un
method=auto servidor DHCPv4. Muestra
direcciones estáticas solo
cuando tiene información de
DHCPv4.

RH124-RHEL9.0-es-5-20230516 401
capítulo 11 | Gestión de redes

nmcli con mod *.nmconnection archivo Efecto

ipv4.addresses [ipv4] Establezca direcciones IPv4


192.0.2.1/24 estáticas y prefijos de red.
address1=192.0.2.1/24 Para más de una dirección de
conexión, la tecla address2
define la segunda dirección y
la tecla address3 define la
tercera dirección.

ipv4.gateway [ipv4] Establezca la puerta de


192.0.2.254 enlace predeterminada.
gateway=192.0.2.254

ipv4.dns 8.8.8.8 [ipv4] Modifique /etc/


resolv.conf para que use
dns=8.8.8.8 este nombre de servidor.

ipv4.dns-search [ipv4] Modifique /etc/


example.com resolv.conf para que use
dns-search=example.com este dominio en la directiva
search.

ipv4.ignore-auto-dns [ipv4] Omita información del


true servidor DNS obtenida del
ignore-auto-dns=true servidor DHCP.

ipv6.method manual [ipv6] Las direcciones IPv6 se


configuran de manera
method=manual estática.

ipv6.method auto [ipv6] Configure los parámetros de


red con SLAAC a partir de
method=auto anuncios del enrutador.

ipv6.method dhcp [ipv6] Configure los parámetros de


red con DHCPv6, pero no
method=dhcp con SLAAC.

ipv6.addresses [ipv6] Establezca direcciones IPv6


2001:db8::a/64 estáticas y prefijos de red.
address1=2001:db8::a/64 Al usar más de una dirección
para una conexión, la tecla
address2 define la segunda
dirección y la tecla address3
define la tercera dirección.

ipv6.gateway [ipv6] Establezca la puerta de


2001:db8::1 enlace predeterminada.
gateway=2001:db8::1

ipv6.dns [ipv6] Modifique /etc/


fde2:6494:1e09:2::d resolv.conf para que use
dns=fde2:6494:1e09:2::d este nombre de servidor.
Igual que IPv4.

402 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

nmcli con mod *.nmconnection archivo Efecto

ipv6.dns-search [ipv6] Modifique /etc/


example.com resolv.conf para que use
dns-search=example.com este dominio en la directiva
search.

ipv6.ignore-auto-dns [ipv6] Omita información del


true servidor DNS obtenida del
ignore-auto-dns=true servidor DHCP.

connection.autoconnect [connection] Activa automáticamente esta


yes conexión durante el arranque.
autoconnect=true

connection.id ens3 [connection] El nombre de esta conexión.

id=Main eth0

connection.interface- [connection] La conexión se limita a la


name ens3 interfaz de red con este
interface-name=ens3 nombre.

802-3-ethernet.mac- [802-3-ethernet] La conexión se limita a la


address … interfaz de red con esta
mac-address= dirección MAC.

Modificación de la configuración de red


También puede configurar la red editando directamente los archivos de configuración de
conexión. Los archivos de configuración de conexión controlan las interfaces de software
para dispositivos de red individuales. En general, estos archivos se denominan /etc/
NetworkManager/system-connections/name.nmconnection, donde name se refiere al
nombre del dispositivo o a la conexión que controla el archivo de configuración.

Según el propósito del perfil de conexión, NetworkManager usa los siguientes directorios para
almacenar los archivos de configuración:

• El directorio /etc/NetworkManager/system-connections/ almacena perfiles


persistentes que el usuario creó y editó. NetworkManager los copia automáticamente en el
directorio /etc/NetworkManager/system-connections/.

• El directorio /run/NetworkManager/system-connections/ almacena perfiles temporales,


que se eliminan automáticamente cuando reinicia el sistema.

• El directorio /usr/lib/NetworkManager/system-connections/ almacena perfiles


inmutables implementados previamente. Cuando edita un perfil de este tipo con la API de
NetworkManager, NetworkManager copia este perfil en el almacenamiento persistente o
temporal.

Contenido del archivo de configuración de muestra para la configuración de IPv4 estática:

[connection]
id=Main eth0
uuid=27afa607-ee36-43f0-b8c3-9d245cdc4bb3
type=802-3-ethernet

RH124-RHEL9.0-es-5-20230516 403
capítulo 11 | Gestión de redes

autoconnect=true

[ipv4]
method=manual

[802-3-ethernet]
mac-address=00:23:5a:47:1f:71

Opciones de configuración IPv4 para el formato de archivo clave

Estática Dinámica Cualquiera de las opciones

[ipv4] method=auto [connection]

address1=172.25.0.10/24 interface-name=ens3

gateway=172.25.0.254 id=Main eth0

dns=172.25.254.254 autoconnect=true

uuid=f3e8(…)ad3e

type=ethernet

Después de modificar los archivos de configuración, ejecute el comando nmcli con reload
para que NetworkManager cargue los cambios de configuración. Si la variable autoconnect se
establece en false en el perfil de conexión, active la conexión manualmente.

[root@host ~]# nmcli con reload


[root@host ~]# nmcli con up "static-ens3"

Referencias
Páginas del manual: nmcli(1), nm-settings(5) y nm-settings-keyfile(5)

Para obtener más información, consulte la Manually Creating NetworkManager


Profiles in Key File Format en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/
html-single/configuring_and_managing_networking/assembly_manually-creating-
networkmanager-profiles-in-key-file-format_configuring-and-managing-
networking

404 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Ejercicio Guiado

Edición de archivos de configuración de


red
En este ejercicio, modifica manualmente los archivos de configuración de red y se asegura
de que la nueva configuración surta efecto.

Resultados
• Configurar direcciones de red adicionales en cada sistema.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start net-edit

Instrucciones
1. En la máquina workstation, use el comando ssh para iniciar sesión en la máquina
servera con el usuario student.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$

2. Localice nombres de interfaz de red con el comando ip link.

Importante
Los nombres de la interfaz de red están determinados por su tipo de bus y el orden
de detección de los dispositivos durante el arranque. Los nombres de la interfaz de
red variarán según la plataforma del curso y el hardware en uso.

Localice el nombre de la interfaz de red asociado con la dirección Ethernet en su sistema.


Registre o recuerde este nombre y utilícelo para reemplazar el marcador de posición enX
en los comandos subsiguientes. La conexión activa se denomina Wired connection
1 y la configuración se encuentra en el archivo /etc/NetworkManager/system-
connections/"Wired connection 1.nmconnection".

RH124-RHEL9.0-es-5-20230516 405
capítulo 11 | Gestión de redes

[student@servera ~]$ ip link


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode
DEFAULT group default qlen 1000
link/ether 52:54:00:00:fa:0a brd ff:ff:ff:ff:ff:ff
altname enp0s3
altname ens3
[student@servera ~]$ nmcli con show --active
NAME UUID TYPE DEVICE
Wired connection 1 a98933fa-25c0-36a2-b3cd-c056f41758fe ethernet eth0
[student@servera ~]$ ls /etc/NetworkManager/system-connections/
'Wired connection 1.nmconnection'

3. En la máquina servera, cambie al usuario root y luego edite el archivo /etc/


NetworkManager/system-connections/"Wired connection 1.nmconnection"
para agregar la dirección 10.0.1.1/24.

3.1. Use el comando sudo -i para cambiar al usuario root.

[student@servera ~]$ sudo -i


[sudo] password for student: student
[root@servera ~]#

3.2. Edite el archivo de configuración. Agregue la dirección 10.0.1.1/24 como la


segunda dirección debajo de la primera dirección en el archivo.

[root@servera ~]# vim /etc/NetworkManager/system-connections/"Wired connection


1.nmconnection"
...output omitted...
[ipv4]
address1=172.25.250.10/24,172.25.250.254
address2=10.0.1.1/24
...output omitted...

4. Active la nueva dirección de red con el comando nmcli.

4.1. Vuelva a cargar los cambios en la configuración para que NetworkManager los lea.

[root@servera ~]# nmcli con reload

4.2. Active la conexión con los cambios.

[root@servera ~]# nmcli con up "Wired connection 1"


Connection successfully activated (D-Bus active path: /org/freedesktop/
NetworkManager/ActiveConnection/2)

5. Verifique que la nueva dirección IP se haya asignado correctamente.

406 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

[root@servera ~]# ip -br addr show eth0


eth0: UP 172.25.250.10/24 10.0.1.1/24 fe80::6fed:5a11:4ad4:1bcf/64

6. Regrese a la máquina workstation con el usuario student.

[root@servera ~]# exit


logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$

7. En la máquina serverb, edite el archivo /etc/NetworkManager/system-


connections/"Wired connection 1.nmconnection" para agregar una dirección
10.0.1.2/24y, luego, cargue la nueva configuración.

7.1. Inicie sesión en la máquina serverb con el usuario student y cambie al usuario
root.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#

7.2. Edite el archivo de configuración. Agregue la dirección 10.0.1.2/24 como la


segunda dirección debajo de la primera dirección en el archivo.

[root@serverb ~]# vim /etc/NetworkManager/system-connections/"Wired connection


1.nmconnection"
address1=172.25.250.11/24,172.25.250.254
address2=10.0.1.2/24

7.3. Vuelva a cargar los cambios en la configuración para que NetworkManager los lea.

[root@serverb ~]# nmcli con reload

7.4. Active la conexión con los cambios.

[root@serverb ~]# nmcli con up "Wired connection 1"


Connection successfully activated (D-Bus active path: /org/freedesktop/
NetworkManager/ActiveConnection/2)

7.5. Verifique que la nueva dirección IP se haya asignado correctamente.

[root@serverb ~]# ip -br addr show eth0


eth0 UP 172.25.250.11/24 10.0.1.2/24 fe80::6be8:6651:4280:892c/64

RH124-RHEL9.0-es-5-20230516 407
capítulo 11 | Gestión de redes

8. Pruebe la conectividad entre las máquinas servera y serverb con las direcciones de red
nuevas.

8.1. Desde la máquina serverb, haga ping a la nueva dirección de la máquina servera.

[root@serverb ~]# ping -c3 10.0.1.1


PING 10.0.1.1 (10.0.1.1) 56(84) bytes of data.
64 bytes from 10.0.1.1: icmp_seq=1 ttl=64 time=1.30 ms
64 bytes from 10.0.1.1: icmp_seq=2 ttl=64 time=0.983 ms
64 bytes from 10.0.1.1: icmp_seq=3 ttl=64 time=0.312 ms

--- 10.0.1.1 ping statistics ---


3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.312/0.864/1.297/0.410 ms

8.2. Regrese a la máquina workstation con el usuario student.

[root@serverb ~]# exit


logout
[student@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$

8.3. Desde la máquina servera, con el usuario student, haga ping a la nueva dirección
de la máquina serverb.

[student@workstation ~]$ ssh student@servera ping -c3 10.0.1.2


PING 10.0.1.2 (10.0.1.2) 56(84) bytes of data.
64 bytes from 10.0.1.2: icmp_seq=1 ttl=64 time=0.876 ms
64 bytes from 10.0.1.2: icmp_seq=2 ttl=64 time=0.310 ms
64 bytes from 10.0.1.2: icmp_seq=3 ttl=64 time=0.289 ms

--- 10.0.1.2 ping statistics ---


3 packets transmitted, 3 received, 0% packet loss, time 2047ms
rtt min/avg/max/mdev = 0.289/0.491/0.876/0.271 ms

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish net-edit

Esto concluye la sección.

408 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Configuración de nombres de host y


resolución de nombre

Objetivos
Configurar el nombre de host estático del servidor y su resolución de nombre, y probar los
resultados.

Actualización del nombre de host del sistema


El comando hostname muestra o modifica provisoriamente el nombre del host totalmente
calificado del sistema.

[root@host ~]# hostname


host.example.com

Especifique un nombre del host estático en el archivo /etc/hostname. Use el comando


hostnamectl para modificar este archivo y ver el nombre del host totalmente calificado del
sistema. Si este archivo no existe, el nombre del host se establece mediante una consulta de DNS
invertida cuando se asigna una dirección IP a la interfaz.

[root@host ~]# hostnamectl hostname host.example.com


[root@host ~]# hostnamectl status
Static hostname: host.example.com
Icon name: computer-vm
Chassis: vm #
Machine ID: ace63d6701c2489ab9c0960c0f1afe1d
Boot ID: 0edf5ba1830c48adbd6babfa08f0b867
Virtualization: kvm
Operating System: Red Hat Enterprise Linux 9.0 (Plow)
CPE OS Name: cpe:/o:redhat:enterprise_linux:9::baseos
Kernel: Linux 5.14.0-70.13.1.el9_0.x86_64
Architecture: x86-64
Hardware Vendor: Red Hat
Hardware Model: OpenStack Compute
[root@host ~]# cat /etc/hostname
host.example.com

Importante
En Red Hat Enterprise Linux 7 y posterior, el nombre de host estático se almacena
en el archivo /etc/hostname. Red Hat Enterprise Linux 6 y versiones anteriores
almacenan el nombre de host como variable en el archivo /etc/sysconfig/
network.

Configuración de la resolución de nombre


El sistema de resolución de nombres se usa para convertir nombres de host en direcciones
IP o viceversa. Determina dónde buscar en función de la configuración del archivo /etc/

RH124-RHEL9.0-es-5-20230516 409
capítulo 11 | Gestión de redes

nsswitch.conf. De manera predeterminada, intenta resolver la consulta usando primero el


archivo /etc/hosts.

[root@host ~]# cat /etc/hosts


127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.254 classroom.example.com
172.25.254.254 content.example.com

El comando getent hosts hostname puede usarse para probar la resolución de nombre del
host con el archivo /etc/hosts. Si no se encuentra una entrada en el archivo /etc/hosts, el
sistema de resolución de nombres usa un servidor de nombres DNS para buscar el nombre de
host. El archivo /etc/resolv.conf controla la forma en que se realiza esta consulta:

• search : Lista de nombres de dominio para probar con un nombre de host corto. Se debe
establecer search o domain en el mismo archivo; si ambos están configurados, solo se aplica la
última entrada. Consulte resolv.conf(5) para obtener más detalles.
• nameserver : La dirección IP de un servidor de nombres que se consultará. Se pueden
proporcionar hasta tres directivas de servidor de nombres para proporcionar copias de
seguridad en caso de que un servidor de nombre no funcione.

[root@host ~]# cat /etc/resolv.conf


# Generated by NetworkManager
domain example.com
search example.com
nameserver 172.25.254.254

NetworkManager usa los parámetros de configuración de DNS en los archivos de configuración de


conexión para actualizar el archivo /etc/resolv.conf. Use el comando nmcli para modificar
las conexiones.

[root@host ~]# nmcli con mod ID ipv4.dns IP


[root@host ~]# nmcli con down ID
[root@host ~]# nmcli con up ID
[root@host ~]# cat /etc/NetworkManager/system-connections/ID
...output omitted...
[ipv4]
...output omitted...
dns=8.8.8.8;
...output omitted...

El comportamiento predeterminado del comando nmcli con mod ID ipv4.dns IP es


reemplazar cualquier parámetro de configuración de DNS anterior con la lista de IP nueva provista.
Un signo más (+) o menos (-) delante del comando nmcli con la opción ipv4.dns agrega o
elimina una entrada individual, respectivamente.

[root@host ~]# nmcli con mod ID +ipv4.dns IP

En el siguiente ejemplo, agregue el servidor DNS con la dirección IP IPv6 de


2001:4860:4860::8888 a la lista de servidores de nombres para usar con la conexión static-
ens3:

410 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

[root@host ~]# nmcli con mod static-ens3 +ipv6.dns 2001:4860:4860::8888

nota
Las configuraciones DNS IPv4 e IPv6 estáticas terminan todas como directivas
nameserver en /etc/resolv.conf. En un sistema de pila doble, mantenga al
menos un servidor de nombres accesible por IPv4 y uno IPv6 en la lista (suponiendo
un sistema de pila doble), en caso de problemas de red con cualquiera de las pilas.

Prueba de resolución de nombres DNS


El comando de host HOSTNAME puede probar la conectividad del servidor DNS.

[root@host ~]# host classroom.example.com


classroom.example.com has address 172.25.254.254
[root@host ~]# host 172.25.254.254
254.254.25.172.in-addr.arpa domain name pointer classroom.example.com.

Importante
DHCP reescribe automáticamente el archivo /etc/resolv.conf cuando se
inician las interfaces, a menos que usted especifique ignore-auto-dns = yes
en el archivo de configuración de interfaz correspondiente en el directorio /etc/
NetworkManager/system-connections/.

Configure esta entrada con el comando nmcli.

[root@host ~]# nmcli con mod "static-ens3" ipv4.ignore-auto-dns yes

Use el comando de dig HOSTNAME para probar la conectividad del servidor DNS.

[root@host ~]# dig classroom.example.com

; <<>> DiG 9.16.23-RH <<>> classroom.example.com


;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3451
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 27

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 947ea2a936353423c3bc0d5f627cc1ae7147460e10d2777c (good)
;; QUESTION SECTION:
;classroom.example.com. IN A

;; ANSWER SECTION:
classroom.example.com. 85326 IN A 172.25.254.254
...output omitted...

RH124-RHEL9.0-es-5-20230516 411
capítulo 11 | Gestión de redes

Los comandos host y dig no ven la configuración en el archivo /etc/hosts. Para probar el
archivo /etc/hosts, use el comando getent hosts HOSTNAME.

[root@host ~]# getent hosts classroom.example.com


172.25.254.254 classroom.example.com

Referencias
Páginas del manual: nmcli(1), hostnamectl(1), hosts(5), getent(1), host(1),
dig(1), getent(1) y resolv.conf(5)

Para obtener más información, consulte la Configuring and Managing Networking


Guide en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-
single/configuring_and_managing_networking/index

412 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Ejercicio Guiado

Configuración de nombres de host y


resolución de nombre
En este ejercicio, configura manualmente el nombre de host estático del sistema, el archivo /
etc/hosts y el sistema de resolución de nombres DNS.

Resultados
• Establecer un nombre de host personalizado.

• Configurar los ajustes de resolución de nombres.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando garantiza que estén disponibles todos los recursos requeridos.

[student@workstation ~]$ lab start net-hostnames

Instrucciones
1. Inicie sesión en servera con el usuario student y cambie al usuario root.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@testa ~]$ sudo -i
[sudo] password for student: student
[root@testa ~]#

2. Visualice la configuración del nombre del host actual.

2.1. Muestre el nombre del host actual.

[root@testa ~]# hostname


testa

2.2. Muestre el estado del nombre del host. El nombre de host persistente configurado
localmente se muestra en el campo Static hostname. El nombre de host de
tiempo de ejecución actual, que se obtiene de los servicios de red DHCP o DNS, se
muestra en el campo Transient hostname.

[root@testa ~]# hostnamectl status


Static hostname: servera.lab.example.com
Transient hostname: testa
Icon name: computer-vm

RH124-RHEL9.0-es-5-20230516 413
capítulo 11 | Gestión de redes

Chassis: vm #
Machine ID: ace63d6701c2489ab9c0960c0f1afe1d
Boot ID: 03bf1d5518bd43b4a25cfe9a18d5a46a
Virtualization: kvm
Operating System: Red Hat Enterprise Linux 9.0 (Plow)
CPE OS Name: cpe:/o:redhat:enterprise_linux:9::baseos
Kernel: Linux 5.14.0-70.13.1.el9_0.x86_64
Architecture: x86-64
Hardware Vendor: Red Hat
Hardware Model: OpenStack Compute

3. Configure un nombre de host estático para que coincida con el nombre del host estático
actual.

3.1. Cambie el nombre de host y el archivo de configuración del nombre de host.

[root@testa ~]# hostnamectl hostname \


servera.lab.example.com

3.2. Visualice el contenido del archivo /etc/hostname que proporciona el nombre del
host al inicio de la red.

[root@testa ~]# cat /etc/hostname


servera.lab.example.com

3.3. Cierre la sesión y vuelva a iniciarla en servera con el usuario student. Cambie al
usuario root para cambiar el símbolo del sistema a fin de mostrar el nombre de host
actualizado.

[root@testa ~]# exit


logout
[student@testa ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$ ssh student@servera
...output omitted...
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#

3.4. Muestre el estado del nombre del host. El nombre de host temporal no se muestra
ahora que se configuró un nombre de host estático.

[root@servera ~]# hostnamectl status


Static hostname: servera.lab.example.com
Icon name: computer-vm
Chassis: vm
Machine ID: 63b272eae8d5443ca7aaa5593479b25f
Boot ID: ef299e0e957041ee81d0617fc98ce5ef
Virtualization: kvm
Operating System: Red Hat Enterprise Linux 9.0 (Plow)
CPE OS Name: cpe:/o:redhat:enterprise_linux:9::baseos

414 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Kernel: Linux 5.14.0-70.el9.x86_64


Architecture: x86-64
Hardware Vendor: Red Hat
Hardware Model: OpenStack Compute

4. Cambie temporalmente el nombre del host a testname.

4.1. Cambie el nombre de host.

[root@servera ~]# hostname testname

4.2. Muestre el nombre del host actual.

[root@servera ~]# hostname


testname

4.3. Visualice el contenido del archivo /etc/hostname que proporciona el nombre del
host al inicio de la red.

[root@servera ~]# cat /etc/hostname


servera.lab.example.com

4.4. Reinicie el sistema.

[root@servera ~]# systemctl reboot


Connection to servera closed by remote host.
Connection to servera closed.
[student@workstation ~]$

4.5. Inicie sesión en servera con el usuario student y cambie al usuario root.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#

4.6. Muestre el nombre del host actual.

[root@servera ~]# hostname


servera.lab.example.com

5. Agregue class como apodo local para el servidor del aula y asegúrese de poder hacer
ping al servidor con ese apodo.

5.1. Busque la dirección IP del servidor classroom.example.com.

[root@servera ~]# host classroom.example.com


classroom.example.com has address 172.25.254.254

RH124-RHEL9.0-es-5-20230516 415
capítulo 11 | Gestión de redes

5.2. Actualice el archivo /etc/hosts para agregar el servidor class para acceder a la
dirección IP 172.25.254.254. En el siguiente ejemplo, se muestra el contenido
esperado del archivo /etc/hosts.

[root@servera ~]# vim /etc/hosts


127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.254 classroom.example.com classroom class

5.3. Busque la dirección IP del servidor class.

[root@servera ~]# host class


Host class not found: 3(NXDOMAIN)
[root@servera ~]# getent hosts class
172.25.254.254 classroom.example.com classroom class

5.4. Use el comando ping para enviar paquetes al servidor class.

[root@servera ~]# ping -c3 class


PING classroom.example.com (172.25.254.254) 56(84) bytes of data.
64 bytes from classroom.example.com (172.25.254.254): icmp_seq=1 ttl=63 time=1.21
ms
64 bytes from classroom.example.com (172.25.254.254): icmp_seq=2 ttl=63 time=0.688
ms
64 bytes from classroom.example.com (172.25.254.254): icmp_seq=3 ttl=63 time=0.559
ms

--- classroom.example.com ping statistics ---


3 packets transmitted, 3 received, 0% packet loss, time 2046ms
rtt min/avg/max/mdev = 0.559/0.820/1.214/0.283 ms

5.5. Regrese al sistema workstation con el usuario student.

[root@servera ~]# exit


logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish net-hostnames

Esto concluye la sección.

416 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Trabajo de laboratorio

Gestión de redes
En este trabajo de laboratorio, configurará los parámetros de red en un servidor Red Hat
Enterprise Linux.

Resultados
• Configurar dos direcciones IPv4 estáticas para la interfaz de red principal.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start net-review

Instrucciones
1. Inicie sesión en la máquina serverb con el usuario student. Cambie al usuario root.
2. Cree una conexión con una configuración de red estática con los parámetros de
configuración que figuran en la tabla.

Parámetro Configuración

Nombre de la conexión lab

Nombre de la interfaz enX (podría variar, use la interfaz con la


dirección MAC 52:54:00:00:fa:0b)

dirección IP 172.25.250.11/24

Dirección de puerta de enlace 172.25.250.254

Dirección DNS 172.25.250.254

3. Configure la nueva conexión para que se inicie automáticamente. Otras conexiones no


deberían iniciarse automáticamente.
4. Modifique la nueva conexión para que también use la dirección IP 10.0.1.1/24.
5. Configure el archivo hosts para que pueda hacer referencia a la dirección IP 10.0.1.1 con
el nombre private.
6. Reinicie el sistema.
7. Verifique que la máquina serverb esté inicializada.

RH124-RHEL9.0-es-5-20230516 417
capítulo 11 | Gestión de redes

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade net-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish net-review

Esto concluye la sección.

418 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

Solución

Gestión de redes
En este trabajo de laboratorio, configurará los parámetros de red en un servidor Red Hat
Enterprise Linux.

Resultados
• Configurar dos direcciones IPv4 estáticas para la interfaz de red principal.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start net-review

Instrucciones
1. Inicie sesión en la máquina serverb con el usuario student. Cambie al usuario root.

1.1. Inicie sesión en la máquina serverb con el usuario student y cambie al usuario root.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#

2. Cree una conexión con una configuración de red estática con los parámetros de
configuración que figuran en la tabla.

Parámetro Configuración

Nombre de la conexión lab

Nombre de la interfaz enX (podría variar, use la interfaz con la


dirección MAC 52:54:00:00:fa:0b)

dirección IP 172.25.250.11/24

Dirección de puerta de enlace 172.25.250.254

Dirección DNS 172.25.250.254

2.1. Determine el nombre de la interfaz y el nombre de la conexión activa actual.

RH124-RHEL9.0-es-5-20230516 419
capítulo 11 | Gestión de redes

Importante
El nombre de la conexión puede variar según la plataforma del curso y el hardware
en uso. La solución asume que el nombre de la interfaz es eth0 y el nombre de la
conexión es System eth0. Busque el nombre de la conexión actual (como System
eth0 o Wired connection 1) que está asociado con la interfaz en la tabla. Use
el nombre de conexión ubicado para reemplazar System eth0 a lo largo de este
ejercicio en caso de ser diferente.

[root@serverb ~]# ip link


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode
DEFAULT group default qlen 1000
link/ether 52:54:00:00:fa:0b brd ff:ff:ff:ff:ff:ff
altname enp0s3
altname ens3
[root@serverb ~]# nmcli con show --active
NAME UUID TYPE DEVICE
System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0

2.2. Cree el perfil de conexión lab basado en la información en la tabla descrita en las
instrucciones. Asocie el perfil con la interfaz de red que aparece en el resultado del
comando ip link anterior.

[root@serverb ~]# nmcli con add con-name lab ifname eth0 type ethernet \
ipv4.method manual ipv4.dns 172.25.250.254 \
ipv4.addresses 172.25.250.11/24 ipv4.gateway 172.25.250.254
Connection 'lab' (d5b4815d-231b-43c0-8565-445e3a07b97a) successfully added.

3. Configure la nueva conexión para que se inicie automáticamente. Otras conexiones no


deberían iniciarse automáticamente.

[root@serverb ~]# nmcli con mod "lab" connection.autoconnect yes


[root@serverb ~]# nmcli con mod "System eth0" connection.autoconnect no

4. Modifique la nueva conexión para que también use la dirección IP 10.0.1.1/24.

[root@serverb ~]# nmcli con mod "lab" +ipv4.addresses 10.0.1.1/24

De forma alternativa, edite el archivo de configuración para agregar la dirección


10.0.1.1/24 como la segunda dirección.

[root@serverb ~]# vim /etc/NetworkManager/system-connections/lab.nmconnection


address2=10.0.1.1/24

5. Configure el archivo hosts para que pueda hacer referencia a la dirección IP 10.0.1.1 con
el nombre private.

420 RH124-RHEL9.0-es-5-20230516
capítulo 11 | Gestión de redes

[root@serverb ~]# echo "10.0.1.1 private" >> /etc/hosts

6. Reinicie el sistema.

[root@serverb ~]# systemctl reboot


Connection to serverb closed by remote host.
Connection to serverb closed.
[student@workstation ~]$

7. Verifique que la máquina serverb esté inicializada.

[student@workstation ~]$ ping -c3 serverb


PING serverb.lab.example.com (172.25.250.11) 56(84) bytes of data.
64 bytes from serverb.lab.example.com (172.25.250.11): icmp_seq=1 ttl=64
time=0.478 ms
64 bytes from serverb.lab.example.com (172.25.250.11): icmp_seq=2 ttl=64
time=0.504 ms
64 bytes from serverb.lab.example.com (172.25.250.11): icmp_seq=3 ttl=64
time=0.513 ms
--- serverb.lab.example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 78ms
rtt min/avg/max/mdev = 0.478/0.498/0.513/0.023 ms

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade net-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish net-review

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 421
capítulo 11 | Gestión de redes

Resumen
• El modelo de red TCP/IP es un conjunto de abstracciones simplificado, de cuatro capas, que
describe cómo los diferentes protocolos interactúan para que los equipos envíen el tráfico de
una máquina a otra a través de Internet.

• IPv4 es el protocolo de red principal en Internet hoy en día.

• IPv6 pretende ser un reemplazo final del protocolo de red IPv4.

• De forma predeterminada, Red Hat Enterprise Linux opera en un modo de pila doble, con
ambos protocolos en paralelo.

• Las rutas de red determinan la interfaz de red correcta para enviar paquetes a una red en
particular.

• El daemon NetworkManager monitorea y gestiona la configuración de la red.

• La herramienta de la línea de comandos nmcli configura los parámetros de red con el daemon
NetworkManager.

• A partir de Red Hat Enterprise Linux 9, la ubicación predeterminada para las configuraciones de
red es el directorio /etc/NetworkManager/system-connections.

• El nombre del host estático del sistema se guarda en el archivo /etc/hostname.

• El comando hostnamectl modifica o ve el estado del nombre de host del sistema y los
parámetros relacionados.

422 RH124-RHEL9.0-es-5-20230516
capítulo 12

Instalación y actualización de
paquetes de software
Meta Descargar, instalar, actualizar y gestionar paquetes
de software de Red Hat y repositorios de paquetes
DNF.

Objetivos • Registrar un sistema para su cuenta de Red Hat


y asignarle derechos para actualizaciones
de software y servicios de soporte mediante
Red Hat Suscription Management.
• Explicar cómo se proporciona el software como
paquetes de RPM e investigar los paquetes
instalados en el sistema con DNF y RPM.
• Buscar, instalar y actualizar paquetes de
software con el comando dnf.
• Habilitar y deshabilitar el uso de repositorios
DNF de terceros o de Red Hat por un servidor.

Secciones • Registro de sistemas para Soporte de Red Hat


(y cuestionario)
• Explicación y revisión de paquetes de software
RPM (y ejercicio guiado)
• Instalación y actualización de paquetes de
software con DNF (y ejercicio guiado)
• Habilitación de repositorios de software DNF (y
ejercicio guiado)

Trabajo de Instalación y actualización de paquetes de


software
laboratorio

RH124-RHEL9.0-es-5-20230516 423
capítulo 12 | Instalación y actualización de paquetes de software

Registro de sistemas para Soporte de


Red Hat

Objetivos
Registrar un sistema para su cuenta de Red Hat y asignarle derechos para actualizaciones de
software y servicios de soporte mediante Red Hat Suscription Management.

Red Hat Subscription Management


Red Hat Subscription Management proporciona herramientas que se pueden usar para que los
equipos tengan derecho a suscripciones de productos, de modo que los administradores puedan
obtener actualizaciones de paquetes de software y buscar información sobre contratos de soporte
y suscripciones usadas por sus sistemas. Las herramientas estándar, como el comando dnf,
pueden obtener paquetes y actualizaciones de software mediante una red de distribución de
contenido provista por la red de entrega de contenidos de Red Hat.

Puede realizar las siguientes tareas principales con las herramientas de Red Hat Subscription
Management:

• Registrar un sistema para asociarlo con la cuenta de Red Hat con una suscripción activa. Con el
administrador de suscripciones, el sistema puede registrarse de forma única en el inventario de
servicios de suscripción. Puede anular el registro del sistema cuando no esté en uso.

• Suscribir un sistema para autorizar las actualizaciones de productos de Red Hat seleccionados.
Las suscripciones tienen niveles específicos de asistencia, fechas de vencimiento y repositorios
predeterminados. Las herramientas se usan para adjuntar en forma automática o seleccionar un
derecho específico.

• Habilite los repositorios para proporcionar paquetes de software. De manera predeterminada,


se habilitan varios repositorios con cada suscripción, pero otros repositorios, como las
actualizaciones o el código de origen, pueden habilitarse o deshabilitarse. Un repositorio es una
ubicación central para almacenar y mantener paquetes de software.

• Revisar y rastrear derechos disponibles o que se consumen. En el portal de clientes de Red Hat,
puede ver la información de suscripción localmente en un sistema específico o para una cuenta
de Red Hat.

Acceso a Contenido Simple


Acceso a Contenido Simple (SCA) es una función de gestión de suscripciones de Red Hat.
Cuando habilita SCA para su organización, el proceso de derechos se simplifica. SCA elimina el
requisito de adjuntar suscripciones en un nivel por sistema. Usted registra sus sistemas, habilita los
repositorios que cada sistema necesita y comienza a instalar paquetes de software.

Acceso a Contenido Simple es una función opcional de Red Hat Satellite Server y Red Hat
Subscription Management. Este curso incluye los comandos de suscripción, según sea necesario,
si aún no ha habilitado SCA.

Suscripción de un sistema con Red Hat Subscription Manager


Existen diferentes opciones para registrar un sistema en el Portal de clientes de Red Hat. Por
ejemplo, puede acceder a una interfaz gráfica mediante una aplicación GNOME o mediante

424 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

la consola web de RHEL, o puede registrar su sistema mediante una herramienta de línea de
comandos.

Para registrar un sistema mediante una aplicación GNOME, inicie la aplicación Red Hat
Subscription Manager desde el menú Activities. Escriba suscripción en el campo Type to
search y haga clic en la aplicación Red Hat Subscription Manager. Cuando se le solicite, ingrese la
contraseña correspondiente para autenticarse. En la ventana Subscriptions, haga clic en Register
para abrir el cuadro de diálogo Register System.

Figura 12.1: Cuadro de diálogo Registrarse en el sistema

Por defecto, los sistemas se registran en el portal del clientes de Red Hat. Proporcione el inicio
de sesión y la contraseña para la cuenta del portal de clientes de Red Hat y haga clic en Register
para registrarse en el sistema. Cuando está registrado, el sistema adjunta automáticamente una
suscripción disponible.

Cierre la ventana Subscriptions después de registrar y asignar el sistema a una suscripción.


El sistema ahora está suscrito y listo para recibir actualizaciones o instalar nuevo software de
acuerdo con la suscripción que está conectada a Red Hat Content Delivery Network.

Suscripción de un sistema con la consola web de RHEL


Para registrar un sistema con la consola web, debe iniciar sesión como usuario privilegiado. Haga
clic en Subscriptions y, luego, en Register:

RH124-RHEL9.0-es-5-20230516 425
capítulo 12 | Instalación y actualización de paquetes de software

Figura 12.2: suscripciones a la consola web.

El cuadro de diálogo Register System en la consola web es similar a la aplicación GNOME.


Proporcione el inicio de sesión y la contraseña para la cuenta del portal de clientes de Red Hat y
haga clic en Register para registrarse en el sistema. Puede instalar un nuevo software o actualizar
el sistema de acuerdo con la suscripción adjunta.

Suscribir un sistema con la línea de comandos


Use el comando subscription-manager para registrar un sistema sin usar un entorno gráfico.
El comando subscription-manager adjunta automáticamente un sistema a las suscripciones
compatibles que mejor coincidan para el sistema.

Registrar un sistema con las credenciales del Portal de clientes de Red Hat con el usuario root:

[root@host ~]# subscription-manager register --username <yourusername>


Registering to: subscription.rhsm.redhat.com:443/subscription
Password: yourpassword
The system has been registered with ID: 1457f7e9-f37e-4e93-960a-c94fe08e1b4f
The registered system name is: host.example.com

Ver las suscripciones disponibles para su cuenta de Red Hat:

[root@host ~]# subscription-manager list --available


-------------------------------------------
Available Subscriptions
-------------------------------------------
...output omitted...

Adjuntar automáticamente una suscripción:

426 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

[root@host ~]# subscription-manager attach --auto


...output omitted...

Como alternativa, adjunte una suscripción de un conjunto (pool) específico de la lista de


suscripciones disponibles:

[root@host ~]# subscription-manager attach --pool=poolID


...output omitted...

Visualizar las suscripciones consumidas:

[root@host ~]# subscription-manager list --consumed


...output omitted...

Eliminar la suscripción de un sistema:

[root@host ~]# subscription-manager unregister


Unregistering from: subscription.rhsm.redhat.com:443/subscription
System has been unregistered.

Claves de activación
Una clave de activación es un archivo de gestión de suscripciones preconfigurado que está
disponible para su uso con Red Hat Satellite Server y la gestión de suscripciones a través
del portal de clientes de Red Hat. Use el comando subscription-manager con claves de
activación para simplificar el registro y la asignación de suscripciones predefinidas. Este método
de registro es beneficioso para automatizar las instalaciones e implementaciones. Para las
organizaciones que habilitan el Acceso Simple a Contenidos, las claves de activación pueden
registrar sistemas y habilitar repositorios sin necesidad de adjuntar suscripciones.

Certificados de derechos
Los certificados digitales almacenan información actual sobre los derechos en el sistema local. El
sistema registrado almacena los certificados de derechos en el directorio /etc/pki.

• Los certificados /etc/pki/product indican los productos de Red Hat instalados.


• Los certificados /etc/pki/consumer identifican la cuenta de Red Hat para el registro.
• Los certificados /etc/pki/entitlement indican cuáles son las suscripciones que están
adjuntadas.

El comando rct inspecciona los certificados y el comando subscription-manager examina las


suscripciones adjuntas en el sistema.

Referencias
Páginas del manual: subscription-manager(8) y rct(8)

Para obtener más información, consulte Registering the System and Managing
Subscriptions en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-
single/configuring_basic_system_settings/assembly_registering-the-system-and-
managing-subscriptions_configuring-basic-system-settings

RH124-RHEL9.0-es-5-20230516 427
capítulo 12 | Instalación y actualización de paquetes de software

Cuestionario

Registro de sistemas para Soporte de


Red Hat
Elija la respuesta correcta para las siguientes preguntas:

1. ¿Qué ítem ayuda a registrar el sistema en Red Hat Subscription Management sin un
nombre de usuario y una contraseña?
a. ID de la organización
b. URL del proxy
c. Claves de activación
d. dnf

2. ¿Qué herramienta GUI se usa para registrar y suscribir un sistema?


a. PackageKit
b. gpk-application
c. Red Hat Subscription Manager
d. gnome-software

3. ¿Qué directorio almacena los certificados para los productos de Red Hat cuando se
usan certificados de derechos?
a. /etc/pki/entitlement
b. /etc/subscription/product
c. /etc/pki/product
d. /etc/certs/pki
e. Ninguna de las opciones anteriores.

428 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

Solución

Registro de sistemas para Soporte de


Red Hat
Elija la respuesta correcta para las siguientes preguntas:

1. ¿Qué ítem ayuda a registrar el sistema en Red Hat Subscription Management sin un
nombre de usuario y una contraseña?
a. ID de la organización
b. URL del proxy
c. Claves de activación
d. dnf

2. ¿Qué herramienta GUI se usa para registrar y suscribir un sistema?


a. PackageKit
b. gpk-application
c. Red Hat Subscription Manager
d. gnome-software

3. ¿Qué directorio almacena los certificados para los productos de Red Hat cuando se
usan certificados de derechos?
a. /etc/pki/entitlement
b. /etc/subscription/product
c. /etc/pki/product
d. /etc/certs/pki
e. Ninguna de las opciones anteriores.

RH124-RHEL9.0-es-5-20230516 429
capítulo 12 | Instalación y actualización de paquetes de software

Explicación y revisión de paquetes de


software RPM

Objetivos
Explicar cómo se proporciona el software como paquetes de RPM e investigar los paquetes
instalados en el sistema con DNF y RPM.

Paquetes de software y RPM


El RPM Package Manager, originalmente desarrollado por Red Hat, ofrece una manera estándar
de colocar software en paquetes para su distribución. Administrar software en forma de paquetes
RPM es mucho más sencillo que trabajar con un software que simplemente se extrajo a un sistema
de archivos desde un archivo. Con los paquetes RPM, los administradores pueden realizar un
seguimiento de los archivos que instala el paquete de software, los archivos que el paquete de
software elimina si lo desinstala y verifica para garantizar que los paquetes de soporte estén
presentes cuando lo instala. La información sobre los paquetes instalados se almacena en una
base de datos de RPM local en su sistema. Todo el software proporcionado por Red Hat para
Red Hat Enterprise Linux se ofrece como un paquete RPM.

Los nombres de los archivos del paquete RPM constan de cuatro elementos (más el sufijo .rpm)
name-version-release.architecture:

Figura 12.3: Elementos de nombre de archivo RPM

• NAME es una o más palabras que describen el contenido (coreutils).

• VERSION es el número de versión del software original (8.32).

• RELEASE es el número de lanzamiento del paquete que se basa en la versión y que es definido
por el empaquetador, que es posible que no sea el desarrollador del software original (31.el9).

• ARCH es la arquitectura del procesador en la que se compila el paquete para su ejecución. El


valor x86_64 indica que este paquete está creado para la versión de 64 bits del conjunto de
instrucciones x86 (a diferencia de aarch64 para ARM de 64 bits, y así sucesivamente).

Los paquetes RPM a menudo se descargan de repositorios. Un repositorio es una ubicación


central para almacenar y mantener paquetes de software RPM.

Solo necesita el nombre del paquete para instalar los paquetes RPM desde los repositorios.

• Si existen varias versiones, RPM Package Manager instala el paquete con el número de versión
más alto.

• Si existen varias versiones de una sola versión, RPM Package Manager instala el paquete con el
número de versión más alto.

Cada paquete RPM es un archivo con los siguientes componentes:

430 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

• Los archivos que el paquete instala en su sistema.

• Información sobre el paquete (metadatos), como el nombre, la versión, el lanzamiento y la


arquitectura; un resumen y una descripción del paquete; determinación de si se necesita instalar
otros paquetes; licencias; un registro de cambio del paquete; y otros detalles.

• Scripts que pueden ejecutarse al instalar, actualizar o eliminar el paquete. Scripts que pueden
ejecutarse al instalar, actualizar o eliminar otros paquetes.

Por lo general, los proveedores de software firman digitalmente paquetes RPM con claves GPG
(GNU Privacy Guard). (Red Hat firma digitalmente todos los paquetes que lanza). El sistema
RPM verifica la integridad del paquete al confirmar que el paquete está firmado con la clave GPG
apropiada. El sistema RPM rechaza la instalación de un paquete si la firma GPG no coincide.

Actualización de software con paquetes RPM


Red Hat genera un paquete RPM completo para actualizar el software. Un administrador que
instala ese paquete obtiene solo la versión más reciente del paquete. No necesita instalar una
versión anterior de un paquete para parchearlo. Para actualizar el software, RPM elimina la
versión anterior del paquete e instala la versión más reciente. Las actualizaciones generalmente
conservan los archivos de configuración, pero el empaquetador de la nueva versión define el
comportamiento exacto.

Por lo general, solo se instala una versión de un paquete a la vez. Si un paquete se crea con
nombres de archivo que no entran en conflicto, puede instalar varias versiones. El paquete
kernel es un ejemplo de instalación de varias versiones de paquetes. Debido a que prueba un
nuevo kernel solo arrancando en ese kernel, el paquete está diseñado para permitir la instalación
de varias versiones. Si el nuevo kernel no arranca, puede volver al kernel anterior.

Análisis de los paquetes RPM


La utilidad rpm es una herramienta de nivel bajo que es útil para obtener información acerca
del contenido de los archivos de paquete y los paquetes instalados. De forma predeterminada,
la herramienta obtiene información de una base de datos local de los paquetes instalados. Use
el comando rpm con la opción -p para obtener información acerca de un archivo de paquete
descargado pero desinstalado. Use esta opción para inspeccionar el contenido del paquete antes
de la instalación.

Recuperar información general sobre paquetes instalados:

• rpm -qa : enumera todos los paquetes instalados.


• rpm -qf FILENAME : determina qué paquete proporciona el FILENAME.

[user@host ~]$ rpm -qf /etc/yum.repos.d


redhat-release-9.1-1.0.el9.x86_64

Obtener información general sobre paquetes específicos:

• rpm -q : detalla la versión del paquete instalada actualmente.

[user@host ~]$ rpm -q dnf


dnf-4.10.0-4.el9.noarch

• rpm -qi : brinda información detallada sobre un paquete.


• rpm -ql : enumera los archivos instalados con el paquete.

RH124-RHEL9.0-es-5-20230516 431
capítulo 12 | Instalación y actualización de paquetes de software

[user@host ~]$ rpm -ql dnf


/usr/bin/dnf
/usr/lib/systemd/system/dnf-makecache.service
/usr/lib/systemd/system/dnf-makecache.timer
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/dnf
...output omitted...

• rpm -qc : enumera los archivos de configuración instalados con el paquete.

[user@host ~]$ rpm -qc openssh-clients


/etc/ssh/ssh_config
/etc/ssh/ssh_config.d/50-redhat.conf

• rpm -qd : enumera los documentos de configuración instalados con el paquete.

[user@host ~]$ rpm -qd openssh-clients


/usr/share/man/man1/scp.1.gz
/usr/share/man/man1/sftp.1.gz
/usr/share/man/man1/ssh-add.1.gz
/usr/share/man/man1/ssh-agent.1.gz
...output omitted...

• rpm -q --scripts : enumera los scripts de la shell que pueden ejecutarse antes o después
de que se instaló o eliminó el paquete.

[user@host ~]$ rpm -q --scripts openssh-server


preinstall scriptlet (using /bin/sh):
getent group sshd >/dev/null || groupadd -g 74 -r sshd || :
getent passwd sshd >/dev/null || \
useradd -c "Privilege-separated SSH" -u 74 -g sshd \
-s /sbin/nologin -r -d /usr/share/empty.sshd sshd 2> /dev/null || :
postinstall scriptlet (using /bin/sh):

if [ $1 -eq 1 ] && [ -x "/usr/lib/systemd/systemd-update-helper" ]; then


# Initial installation
/usr/lib/systemd/systemd-update-helper install-system-units sshd.service
sshd.socket || :
fi
...output omitted...

• rpm -q --changelog : enumera la información de registro de cambios para el paquete.

[user@host ~]$ rpm -q --changelog audit


* Tue Feb 22 2022 Sergio Correia <scorreia@redhat.com> - 3.0.7-101
- Adjust sample-rules dir permissions
Resolves: rhbz#2054432 - /usr/share/audit/sample-rules is no longer readable by
non-root users

* Tue Jan 25 2022 Sergio Correia <scorreia@redhat.com> - 3.0.7-100

432 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

- New upstream release, 3.0.7


Resolves: rhbz#2019929 - capability=unknown-capability(39) in audit messages
...output omitted...

Consulta de archivos de paquete local:

• rpm -qlp : enumera los archivos instalados con el paquete local.

[user@host ~]$ ls -l podman-4.0.0-6.el9.x86_64.rpm


-rw-r--r--. 1 student student 13755101 Mar 22 11:35
podman-4.0.0-6.el9.x86_64.rpm2637-15.el9.x86_64.rpm

[user@host ~]$ rpm -qlp podman-4.0.0-6.el9.x86_64.rpm


/etc/cni/net.d
/etc/cni/net.d/87-podman-bridge.conflist
/usr/bin/podman
...output omitted...

Instalación de paquetes RPM


Use el comando rpm para instalar un paquete RPM que ha descargado en su directorio local.

[root@host ~]# rpm -ivh podman-4.0.0-6.el9.x86_64.rpm


Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
podman-2:4.0.0-6 ################################# [100%]

Advertencia
Tenga cuidado al instalar paquetes de terceros, no solo por el software que pueden
instalar, sino también porque el paquete RPM puede incluir scripts arbitrarios que se
ejecutan con el usuario root durante el proceso de instalación.

Extracción de los paquetes RPM


Use el comando rpm2cpio para extraer archivos de un archivo de paquete RPM sin instalar el
paquete.

El comando rpm2cpio convierte un paquete RPM en un archivo cpio. Una vez que el paquete
RPM se convierte en un archivo cpio, el comando cpio puede extraer una lista de archivos.

Use el comando cpio con la opción -i para extraer archivos de la entrada estándar. Use la opción
-d para crear subdirectorios según sea necesario a partir del directorio de trabajo actual. Use la
opción -v para obtener resultados detallados.

[user@host tmp-extract]$ rpm2cpio httpd-2.4.51-7.el9_0.x86_64.rpm | cpio -idv


./etc/httpd/conf
./etc/httpd/conf.d/autoindex.conf
./etc/httpd/conf.d/userdir.conf
./etc/httpd/conf.d/welcome.conf
./etc/httpd/conf.modules.d

RH124-RHEL9.0-es-5-20230516 433
capítulo 12 | Instalación y actualización de paquetes de software

./etc/httpd/conf.modules.d/00-base.conf
./etc/httpd/conf.modules.d/00-dav.conf
./etc/httpd/conf.modules.d/00-mpm.conf
./etc/httpd/conf.modules.d/00-optional.conf
./etc/httpd/conf.modules.d/00-proxy.conf
./etc/httpd/conf.modules.d/00-systemd.conf
./etc/httpd/conf.modules.d/01-cgi.conf
./etc/httpd/conf.modules.d/README
./etc/httpd/conf/httpd.conf
...output omitted...
9774 blocks
[user@host tmp-extract]$ ls -l
total 1552
drwxr-xr-x. 5 user user 55 Feb 3 15:06 etc
-rw-r--r--. 1 user user 1588633 Feb 3 15:06 httpd-2.4.51-7.el9_0.x86_64.rpm
drwxr-xr-x. 3 user user 19 Feb 3 15:06 run
drwxr-xr-x. 7 user user 70 Feb 3 15:06 usr
drwxr-xr-x. 5 user user 41 Feb 3 15:06 var

Extraiga archivos individuales mediante la especificación de la ruta del archivo:

[user@host ~]$ rpm2cpio httpd-2.4.51-7.el9_0.x86_64.rpm | cpio -id


"*/etc/httpd/conf/httpd.conf"
9774 blocks
[user@host ~]$ ls etc/httpd/conf/
httpd.conf

Use los comandos rpm2cpio y cpio -t para enumerar los archivos en el paquete RPM. Use la
opción -v del comando cpio para obtener resultados detallados.

[student@servera ~]$ rpm2cpio httpd-2.4.51-7.el9_0.x86_64.rpm | cpio -tv


drwxr-xr-x 1 root root 0 Mar 21 2022 ./etc/httpd/conf
-rw-r--r-- 1 root root 2893 Mar 21 2022 ./etc/httpd/conf.d/
autoindex.conf
-rw-r--r-- 1 root root 1252 Mar 21 2022 ./etc/httpd/conf.d/
userdir.conf
-rw-r--r-- 1 root root 653 Mar 21 2022 ./etc/httpd/conf.d/
welcome.conf
drwxr-xr-x 1 root root 0 Mar 21 2022 ./etc/httpd/conf.modules.d
-rw-r--r-- 1 root root 3372 Mar 21 2022 ./etc/httpd/
conf.modules.d/00-base.conf
-rw-r--r-- 1 root root 139 Mar 21 2022 ./etc/httpd/
conf.modules.d/00-dav.conf
-rw-r--r-- 1 root root 948 Mar 21 2022 ./etc/httpd/
conf.modules.d/00-mpm.conf
-rw-r--r-- 1 root root 787 Mar 21 2022 ./etc/httpd/
conf.modules.d/00-optional.conf
-rw-r--r-- 1 root root 1073 Mar 21 2022 ./etc/httpd/
conf.modules.d/00-proxy.conf
-rw-r--r-- 1 root root 88 Mar 21 2022 ./etc/httpd/
conf.modules.d/00-systemd.conf
-rw-r--r-- 1 root root 367 Mar 21 2022 ./etc/httpd/
conf.modules.d/01-cgi.conf

434 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

-rw-r--r-- 1 root root 496 Mar 21 2022 ./etc/httpd/conf.modules.d/


README
-rw-r--r-- 1 root root 12005 Mar 21 2022 ./etc/httpd/conf/httpd.conf
...output omitted...
9774 blocks

Referencias
Páginas del manual rpm(8), rpm2cpio(8), cpio(1) y rpmkeys(8)

RH124-RHEL9.0-es-5-20230516 435
capítulo 12 | Instalación y actualización de paquetes de software

Ejercicio Guiado

Explicación y revisión de paquetes de


software RPM
En este ejercicio, recopila información sobre un paquete de un tercero, extrae los archivos
para su inspección y, luego, lo instala en un servidor.

Resultados
• Instalar en un servidor un paquete que no sea de los repositorios de software.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start software-rpm

Instrucciones
1. Use el comando ssh para iniciar sesión en la máquina servera con el usuario student.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$

2. Ver información del paquete y enumerar archivos en el paquete rhcsa-


script-1.0.0-1.noarch.rpm. También vea el script que se ejecuta cuando se instala o
desinstala el paquete.

2.1. Vea información para el paquete rhcsa-script-1.0.0-1.noarch.rpm.

[student@servera ~]$ rpm -q -p rhcsa-script-1.0.0-1.noarch.rpm -i


Name : rhcsa-script
Version : 1.0.0
Release : 1
Architecture: noarch
Install Date: (not installed)
Group : System
Size : 593
License : GPL
Signature : (none)
Source RPM : rhcsa-script-1.0.0-1.src.rpm
Build Date : Wed 23 Mar 2022 08:24:21 AM EDT
Build Host : localhost

436 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

Packager : Bernardo Gargallo


URL : http://example.com
Summary : RHCSA Practice Script
Description :
A RHCSA practice script.
The package changes the motd.

nota
El paquete anterior modifica el MOTD o "Mensaje del día". Un sistema muestra el
MOTD a los usuarios cuando inician sesión en los sistemas.

2.2. Enumere archivos en el paquete rhcsa-script-1.0.0-1.noarch.rpm.

[student@servera ~]$ rpm -q -p rhcsa-script-1.0.0-1.noarch.rpm -l


/opt/rhcsa-script/mymotd

2.3. También vea el script que se ejecuta cuando se instala o desinstala el paquete
rhcsa-script-1.0.0-1.noarch.rpm.

[student@servera ~]$ rpm -q -p rhcsa-script-1.0.0-1.noarch.rpm --scripts


preinstall scriptlet (using /bin/sh):
if [ "$1" == "2" ]; then
if [ -e /etc/motd.orig ]; then
mv -f /etc/motd.orig /etc/motd
fi
fi
postinstall scriptlet (using /bin/sh):
...output omitted...

3. Extraiga los contenidos del paquete rhcsa-script-1.0.0-1.noarch.rpm en el


directorio /home/student.

3.1. Use los comandos rpm2cpio y cpio -tv para enumerar los archivos en el paquete
rhcsa-script-1.0.0-1.noarch.rpm.

[student@servera ~]$ rpm2cpio rhcsa-script-1.0.0-1.noarch.rpm | cpio -tv


-rw-r--r-- 1 root root 593 Mar 23 08:24 ./opt/rhcsa-script/mymotd
2 blocks

3.2. Extraiga todos los archivos del paquete rhcsa-script-1.0.0-1.noarch.rpm


en el directorio /home/student. Use los comandos rpm2cpio y cpio -idv para
extraer los archivos y crear los directorios principales cuando sea necesario en modo
detallado.

[student@servera ~]$ rpm2cpio rhcsa-script-1.0.0-1.noarch.rpm | cpio -idv


./opt/rhcsa-script/mymotd
2 blocks

3.3. Enumere los archivos en el directorio /home/student/opt para verificar que los
archivos extraídos sean los mismos que los archivos dentro del paquete.

RH124-RHEL9.0-es-5-20230516 437
capítulo 12 | Instalación y actualización de paquetes de software

[student@servera ~]$ ls -lR opt


opt:
total 0
drwxr-xr-x. 2 student student 20 Mar 23 09:22 rhcsa-script

opt/rhcsa-script:
total 4
-rw-r--r--. 1 student student 593 Mar 23 09:22 mymotd

4. Instale el paquete rhcsa-script-1.0.0-1.noarch.rpm. Use el comando sudo para


obtener privilegios de superusuario para instalar el paquete.

4.1. Use el comando sudo rpm -ivh para instalar el paquete RPM rhcsa-
script-1.0.0-1.noarch.rpm.

[student@servera ~]$ sudo rpm -ivh rhcsa-script-1.0.0-1.noarch.rpm


[sudo] password for student: student
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:rhcsa-script-1.0.0-1 ################################# [100%]
[student@servera ~]$

4.2. Use el comando rpm para verificar que el paquete esté instalado correctamente.

[student@servera ~]$ rpm -q rhcsa-script


rhcsa-script-1.0.0-1.noarch

5. Salga de la máquina servera y conéctese nuevamente para probar el nuevo mensaje del
día.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$ ssh student@servera
______ _ _ _ _ _____ _ _
| ___ \ | | | | | | | | |_ _| (_) (_)
| |_/ /___ __| | | |_| | __ _| |_ | |_ __ __ _ _ _ __ _ _ __ __ _
| // _ \/ _` | | _ |/ _` | __| | | '__/ _` | | '_ \| | '_ \ / _` |
| |\ \ __/ (_| | | | | | (_| | |_ | | | | (_| | | | | | | | | | (_| |
\_| \_\___|\__,_| \_| |_/\__,_|\__| \_/_| \__,_|_|_| |_|_|_| |_|\__, |
__/ |
|___/

Activate the web console with: systemctl enable --now cockpit.socket

Register this system with Red Hat Insights: insights-client --register


Create an account or view all your systems at https://red.ht/insights-dashboard
Last login: Wed Mar 23 09:21:26 2022 from 172.25.250.9
[student@servera ~]$

438 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

6. Regrese al sistema workstation con el usuario student.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish software-rpm

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 439
capítulo 12 | Instalación y actualización de paquetes de software

Instalación y actualización de paquetes


de software con DNF

Objetivos
Buscar, instalar y actualizar paquetes de software con el comando dnf.

Gestión de paquetes de software con DNF


DNF (Dandified YUM) reemplazó a YUM como administrador de paquetes en Red Hat Enterprise
Linux 9. Funcionalmente, los comandos DNF son los mismos que los comandos YUM. Por razones
de compatibilidad, los comandos YUM aún existen como enlaces simbólicos a DNF:

[user@host ~]$ ls -l /bin/ | grep yum | awk '{print $9 " " $10 " " $11}'
yum -> dnf-3
yum-builddep -> /usr/libexec/dnf-utils
yum-config-manager -> /usr/libexec/dnf-utils
yum-debug-dump -> /usr/libexec/dnf-utils
yum-debug-restore -> /usr/libexec/dnf-utils
yumdownloader -> /usr/libexec/dnf-utils
yum-groups-manager -> /usr/libexec/dnf-utils

En este curso, trabajará con el comando dnf. Es posible que parte de la documentación haga
referencia al comando yum, pero los archivos son el mismo comando vinculado.

El comando de bajo nivel rpm se puede usar para instalar paquetes, pero no está diseñado
para trabajar con repositorios de paquetes o para resolver dependencias de múltiples fuentes
automáticamente.

DNF mejora la instalación y las actualizaciones de software basadas en RPM. Con el comando
dnf, puede instalar, actualizar, eliminar y obtener información sobre los paquetes de software y
sus dependencias. Puede obtener un historial de transacciones realizadas y trabajar con múltiples
repositorios de software de Red Hat y terceros.

Buscar software con DNF


El comando dnf help muestra información sobre el uso. El comando dnf list muestra los
paquetes instalados y aquellos disponibles.

[user@host ~]$ dnf list 'http*'


Available Packages
http-parser.i686 2.9.4-6.el9 rhel-9.0-for-x86_64-appstream-rpms
http-parser.x86_64 2.9.4-6.el9 rhel-9.0-for-x86_64-appstream-rpms
httpcomponents-client.noarch 4.5.13-2.el9 rhel-9.0-for-x86_64-appstream-rpms
httpcomponents-core.noarch 4.4.13-6.el9 rhel-9.0-for-x86_64-appstream-rpms
httpd.x86_64 2.4.51-5.el9 rhel-9.0-for-x86_64-appstream-rpms
httpd-devel.x86_64 2.4.51-5.el9 rhel-9.0-for-x86_64-appstream-rpms
httpd-filesystem.noarch 2.4.51-5.el9 rhel-9.0-for-x86_64-appstream-rpms
httpd-manual.noarch 2.4.51-5.el9 rhel-9.0-for-x86_64-appstream-rpms
httpd-tools.x86_64 2.4.51-5.el9 rhel-9.0-for-x86_64-appstream-rpms

440 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

El comando dnf search KEYWORD enumera paquetes por palabras claves que se encuentran en
los campos de nombre y resumen solamente. Para buscar paquetes que contienen "servidor web"
en los campos nombre, resumen y descripción, use search all:

[user@host ~]$ dnf search all 'web server'


================== Summary & Description Matched: web server ===================
nginx.x86_64 : A high performance web server and reverse proxy server
pcp-pmda-weblog.x86_64 : Performance Co-Pilot (PCP) metrics from web server logs
========================= Summary Matched: web server ==========================
libcurl.x86_64 : A library for getting files from web servers
libcurl.i686 : A library for getting files from web servers
======================= Description Matched: web server ========================
freeradius.x86_64 : High-performance and highly configurable free RADIUS server
git-instaweb.noarch : Repository browser in gitweb
http-parser.i686 : HTTP request/response parser for C
http-parser.x86_64 : HTTP request/response parser for C
httpd.x86_64 : Apache HTTP Server
mod_auth_openidc.x86_64 : OpenID Connect auth module for Apache HTTP Server
mod_jk.x86_64 : Tomcat mod_jk connector for Apache
mod_security.x86_64 : Security module for the Apache HTTP Server
varnish.i686 : High-performance HTTP accelerator
varnish.x86_64 : High-performance HTTP accelerator
...output omitted...

El comando dnf info PACKAGENAME arroja información detallada sobre un paquete, que incluye
el espacio en disco necesario para la instalación. Por ejemplo, el siguiente comando recupera
información acerca del paquete httpd:

[user@host ~]$ dnf info httpd


Available Packages
Name : httpd
Version : 2.4.51
Release : 5.el9
Architecture : x86_64
Size : 1.5 M
Source : httpd-2.4.51-5.el9.src.rpm
Repository : rhel-9.0-for-x86_64-appstream-rpms
Summary : Apache HTTP Server
URL : https://httpd.apache.org/
License : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
: web server.

El comando dnf provides PATHNAME muestra paquetes que coinciden con el nombre de ruta
especificado (que a menudo, incluye caracteres comodines). Por ejemplo, el siguiente comando
busca paquetes que proporcionan el directorio /var/www/html:

[user@host ~]$ dnf provides /var/www/html


httpd-filesystem-2.4.51-5.el9.noarch : The basic directory layout for the Apache
HTTP Server
Repo : rhel-9.0-for-x86_64-appstream-rpms
Matched from:
Filename : /var/www/html

RH124-RHEL9.0-es-5-20230516 441
capítulo 12 | Instalación y actualización de paquetes de software

Instalar y eliminar software con DNF


El comando dnf install PACKAGENAME obtiene e instala un paquete de software junto con
cualquier tipo de dependencia.

[root@host ~]# dnf install httpd


Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
httpd x86_64 2.4.51-5.el9 rhel-9.0-for-x86_64-appstream-rpms 1.5 M
Installing dependencies:
apr x86_64 1.7.0-11.el9 rhel-9.0-for-x86_64-appstream-rpms 127 k
apr-util x86_64 1.6.1-20.el9 rhel-9.0-for-x86_64-appstream-rpms 98 k
apr-util-bdb x86_64 1.6.1-20.el9 rhel-9.0-for-x86_64-appstream-rpms 15 k
httpd-filesystem noarch 2.4.51-5.el9 rhel-9.0-for-x86_64-appstream-rpms 17 k
httpd-tools x86_64 2.4.51-5.el9 rhel-9.0-for-x86_64-appstream-rpms 88 k
redhat-logos-httpd
noarch 90.4-1.el9 rhel-9.0-for-x86_64-appstream-rpms 18 k
Installing weak dependencies:
apr-util-openssl x86_64 1.6.1-20.el9 rhel-9.0-for-x86_64-appstream-rpms 17 k
mod_http2 x86_64 1.15.19-2.el9 rhel-9.0-for-x86_64-appstream-rpms 153 k
mod_lua x86_64 2.4.51-5.el9 rhel-9.0-for-x86_64-appstream-rpms 63 k

Transaction Summary
================================================================================
Install 10 Packages

Total download size: 2.1 M


Installed size: 5.9 M
Is this ok [y/N]: y
Downloading Packages:
(1/10): apr-1.7.0-11.el9.x86_64.rpm 6.4 MB/s | 127 kB 00:00
(2/10): apr-util-bdb-1.6.1-20.el9.x86_64.rpm 625 kB/s | 15 kB 00:00
(3/10): apr-util-openssl-1.6.1-20.el9.x86_64.rp 1.9 MB/s | 17 kB 00:00
...output omitted...
Total 24 MB/s | 2.1 MB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : apr-1.7.0-11.el9.x86_64 1/10
Installing : apr-util-bdb-1.6.1-20.el9.x86_64 2/10
Installing : apr-util-openssl-1.6.1-20.el9.x86_64 3/10
...output omitted...
Installed:
apr-1.7.0-11.el9.x86_64 apr-util-1.6.1-20.el9.x86_64
apr-util-bdb-1.6.1-20.el9.x86_64 apr-util-openssl-1.6.1-20.el9.x86_64
...output omitted...
Complete!

442 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

El comando dnf update PACKAGENAME obtiene e instala una versión posterior del paquete
especificado, incluidas las dependencias. Generalmente, el proceso intenta preservar los
archivos de configuración, pero en algunos casos, se les cambiará el nombre si el empaquetador
considera que el nombre anterior no funcionará después de la actualización. Si no se especifica el
PACKAGENAME, instala todas las actualizaciones relevantes.

[root@host ~]# dnf update

Dado que un kernel nuevo puede evaluarse solo mediante el inicio en ese kernel, el paquete
soporta específicamente la instalación de múltiples versiones simultáneamente. Si el kernel nuevo
no arranca, el kernel anterior sigue estando disponible. La ejecución del comando dnf update
kernel instala el nuevo kernel. Los archivos de configuración contienen una lista de paquetes que
siempre deben instalarse aunque el administrador solicite una actualización.

Use el comando dnf list kernel para detallar todos los kernel instalados y disponibles. Para
ver el kernel en funcionamiento actualmente, use el comando uname. El comando uname con la
opción -r muestra solamente la versión y el lanzamiento del kernel, y el comando uname con la
opción -a muestra el lanzamiento e información adicional del kernel.

[user@host ~]$ dnf list kernel


Installed Packages
kernel.x86_64 5.14.0-70.el9 @System
[user@host ~]$ uname -r
5.14.0-70.el9.x86_64
[user@host ~]$ uname -a
Linux workstation.lab.example.com 5.14.0-70.el9.x86_64 #1 SMP PREEMPT Thu Feb 24
19:11:22 EST 2022 x86_64 x86_64 x86_64 GNU/Linux

El comando dnf remove PACKAGENAME elimina un paquete de software instalado, incluido


cualquier paquete soportado.

[root@host ~]# dnf remove httpd

Advertencia
El comando dnf remove quita los paquetes enumerados y cualquier paquete que
requiere que se eliminen los paquetes (y los paquetes que requieren esos paquetes,
etc.). Este comando puede dar lugar a una eliminación inesperada de paquetes, por
lo que debe verificar detenidamente la lista de paquetes que se quitarán.

Instalar y eliminar grupos de software con DNF


El comando dnf también representa el concepto de grupos, que son colecciones de software
relacionados e instalados en forma conjunta.

En Red Hat Enterprise Linux 9, el comando dnf puede instalar dos tipos de grupos de paquetes.
Los grupos regulares son colecciones de paquetes. Los grupos de entorno son colecciones de
grupos regulares. Los paquetes o grupos proporcionados por estas colecciones pueden ser
mandatory (deben instalarse si el grupo se instala), default (normalmente se instalan si el
grupo se instala) o optional (no se instalan cuando se instala el grupo a menos que se lo solicite
específicamente).

RH124-RHEL9.0-es-5-20230516 443
capítulo 12 | Instalación y actualización de paquetes de software

Al igual que el comando dnf list, el comando dnf group list muestra los nombres de
grupos instalados y disponibles.

[user@host ~]$ dnf group list


Available Environment Groups:
Server with GUI
Server
Minimal Install
...output omitted...
Available Groups:
Legacy UNIX Compatibility
Console Internet Tools
Container Management
...output omitted...

Algunos grupos se instalan normalmente a través de grupos de entorno y se ocultan de manera


predeterminada. Muestre los grupos ocultos con el comando dnf group list hidden.

El comando dnf group info muestra información relacionada con un grupo. Incluye una lista de
nombres de paquetes obligatorios, predeterminados u opcionales.

[user@host ~]$ dnf group info "RPM Development Tools"


Group: RPM Development Tools
Description: Tools used for building RPMs, such as rpmbuild.
Mandatory Packages:
redhat-rpm-config
rpm-build
Default Packages:
rpmdevtools
Optional Packages:
rpmlint

El comando dnf group install instala un grupo que instala sus paquetes obligatorios y
predeterminados, y los paquetes de los que depende.

[root@host ~]# dnf group install "RPM Development Tools"


...output omitted...
Installing Groups:
RPM Development Tools

Transaction Summary
================================================================================
Install 19 Packages

Total download size: 4.7 M


Installed size: 15 M
Is this ok [y/N]: y
...output omitted...

444 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

Importante
A partir de Red Hat Enterprise Linux 7, el comportamiento de los grupos Yum
cambió para ser tratados como objetos y monitoreados por el sistema. Si un grupo
instalado se actualiza y el repositorio Yum agregó paquetes nuevos obligatorios o
predeterminados al grupo, dichos paquetes nuevos se instalan en la actualización.

RHEL 6 y las versiones anteriores consideran la instalación de un grupo si todos


sus paquetes obligatorios han sido instalados; o, en caso de que no tenga ningún
paquete obligatorio, o si ningún paquete predeterminado u opcional en el grupo
se instaló. A partir de RHEL 7, un grupo se considera instalado solo si se usó yum
group install para su instalación. Puede usar el comando yum group mark
install GROUPNAME para marcar un grupo como instalado, y los paquetes
faltantes y sus dependencias se instalan en la próxima actualización.

Finalmente, RHEL 6 y las versiones anteriores no tenían la forma de dos palabras de


los comandos yum group. Es decir que, en RHEL 6, el comando yum grouplist
existía, pero el comando yum group list equivalente en RHEL 7 y RHEL 8, no.

Visualización del historial de transacciones


Todas las transacciones de instalación y eliminación se registran en el archivo /var/log/
dnf.rpm.log.

[user@host ~]$ tail -5 /var/log/dnf.rpm.log


2022-03-23T16:46:43-0400 SUBDEBUG Installed: python-srpm-macros-3.9-52.el9.noarch
2022-03-23T16:46:43-0400 SUBDEBUG Installed: redhat-rpm-config-194-1.el9.noarch
2022-03-23T16:46:44-0400 SUBDEBUG Installed: elfutils-0.186-1.el9.x86_64
2022-03-23T16:46:44-0400 SUBDEBUG Installed: rpm-build-4.16.1.3-11.el9.x86_64
2022-03-23T16:46:44-0400 SUBDEBUG Installed: rpmdevtools-9.5-1.el9.noarch

El comando dnf history muestra un resumen de transacciones de instalación y eliminación.

[root@host ~]# dnf history


ID | Command line | Date and time | Action(s) | Altered
--------------------------------------------------------------------------------
7 | group install RPM Develop | 2022-03-23 16:46 | Install | 20
6 | install httpd | 2022-03-23 16:21 | Install | 10 EE
5 | history undo 4 | 2022-03-23 15:04 | Removed | 20
4 | group install RPM Develop | 2022-03-23 15:03 | Install | 20
3 | | 2022-03-04 03:36 | Install | 5
2 | | 2022-03-04 03:33 | Install | 767 EE
1 | -y install patch ansible- | 2022-03-04 03:31 | Install | 80

El comando dnf history undo invierte una transacción.

[root@host ~]# dnf history undo 6


...output omitted...
Removing:
apr-util-openssl x86_64 1.6.1-20.el9 @rhel-9.0-for-x86_64-appstream-rpms 24 k
httpd x86_64 2.4.51-5.el9 @rhel-9.0-for-x86_64-appstream-rpms 4.7 M
...output omitted...

RH124-RHEL9.0-es-5-20230516 445
capítulo 12 | Instalación y actualización de paquetes de software

Resumen de los comandos DNF


Los paquetes pueden ubicarse, instalarse, actualizarse y eliminarse por nombre o por grupos de
paquetes.

Tarea: Comando:

Enumerar paquetes instalados y disponibles dnf list [NAME-PATTERN]


por nombre.

Enumerar grupos instalados y disponibles. dnf group list

Buscar un paquete por palabra clave. dnf search KEYWORD

Mostrar detalles de un paquete. dnf info PACKAGENAME

Instalar un paquete. dnf install PACKAGENAME

Instalar un grupo de paquetes. dnf group install GROUPNAME

Actualizar todos los paquetes. dnf update

Eliminar un paquete. dnf remove PACKAGENAME

Mostrar historial de transacciones. dnf history

Gestión de flujos de módulos de paquete con DNF


Tradicionalmente, administrar versiones alternativas del paquete de software de una aplicación y
sus paquetes relacionados significaba mantener diferentes repositorios para cada versión. Para
los desarrolladores que querían la última versión de una aplicación y los administradores que
querían la versión más estable de la aplicación, se obtuvo como resultado una situación tediosa
de administrar. Red Hat simplifica este proceso mediante el uso de una tecnología denominada
modularidad. Con la modularidad, un solo repositorio puede alojar varias versiones del paquete de
una aplicación y sus dependencias.

Introducción a BaseOS y Application Stream


El contenido de Red Hat Enterprise Linux 9 se distribuye a través de dos repositorios de software
principales: BaseOS y Application Stream (AppStream).

El repositorio de BaseOS proporciona el contenido del sistema operativo central para Red Hat
Enterprise Linux como paquetes RPM. Los componentes de BaseOS tienen el mismo ciclo de
vida que el contenido de versiones anteriores de Red Hat Enterprise Linux. El repositorio de
Application Stream proporciona contenido con distintos ciclos de vida como módulos y paquetes
tradicionales.

Application Stream contiene las partes necesarias del sistema, así como una amplia gama de
aplicaciones previamente disponibles como parte de Red Hat Software Collections y otros
productos y programas. Cada flujo de aplicaciones tiene un ciclo de vida que es el mismo que
Red Hat Enterprise Linux 9 o inferior.

Tanto BaseOS como AppStream son una parte necesaria de un sistema Red Hat Enterprise
Linux 9.

El repositorio de Application Stream, contiene dos tipos de contenido: módulos y paquetes RPM
tradicionales. Un módulo describe un conjunto de paquetes RPM que están relacionados. Los

446 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

módulos pueden contener varios flujos para que haya varias versiones de aplicaciones disponibles
para la instalación. Al habilitar un flujo de módulos, el sistema tiene acceso a los paquetes
RPM dentro de ese flujo de módulos. Normalmente, los módulos se organizan en torno a una
versión específica de una aplicación de software o lenguaje de programación. Un módulo típico
contiene paquetes con una aplicación, paquetes con las librerías de dependencia específica de la
aplicación, paquetes con documentación para la aplicación y paquetes con utilidades auxiliares.

Importante
Red Hat Enterprise Linux 9.0 se envía sin módulos. Las versiones futuras de RHEL 9
pueden incluir contenido adicional y versiones de software posteriores como
módulos. Además, a partir de RHEL 9, debe especificar manualmente los flujos de
módulos predeterminados, ya que ya no están definidos de forma predeterminada.
Puede definir flujos de módulos predeterminados con archivos de configuración en
el directorio /etc/dnf/modules.defaults.d/.

Flujos de módulos
Cada módulo tiene uno o más flujos de módulos, que contienen diferentes versiones del
contenido. Cada uno de los flujos recibe actualizaciones de forma independiente. Piense en el
flujo de módulos como un repositorio virtual en el repositorio físico del flujo de aplicaciones.

Para cada módulo, solo puede habilitarse uno de sus flujos, y este flujo proporciona sus paquetes.

Perfiles de módulos
Cada módulo puede tener uno o más perfiles. Un perfil es una lista de paquetes que puede
instalar juntos para un determinado caso de uso, por ejemplo, para un servidor, cliente, desarrollo,
instalación mínima u otro.

La instalación de un perfil de módulo particular simplemente instala un conjunto particular


de paquetes desde el flujo del módulo. Posteriormente puede instalar o desinstalar paquetes
normalmente. Si no especifica un perfil, el módulo instalará su perfil predeterminado.

Gestión de módulos con DNF


Red Hat Enterprise Linux 9 agrega características modulares de Application Stream. Para manejar
el contenido modular, puede usar el comando dnf module. De lo contrario, el comando dnf
funciona con módulos similares a los paquetes regulares.

Consulte la siguiente lista para ver algunos comandos importantes para gestionar módulos:

• dnf module list : enumera los módulos disponibles con el nombre del módulo, el flujo, los
perfiles y un resumen.

• dnf module list module-name : enumera los flujos de módulos para un módulo específico
y recupera su estado.

• dnf module info module-name : muestra los detalles de un módulo, incluidos los perfiles
disponibles y una lista de los paquetes que instala el módulo. La ejecución del comando dnf
module info sin especificar un flujo de módulo enumera los paquetes que se instalan desde
el perfil y el flujo predeterminados. Use el formato module-name:stream para ver un flujo
de módulos específico. Agregue la opción --profile para mostrar información sobre los
paquetes instalados por cada uno de los perfiles del módulo.

• dnf module provides package : muestra qué módulo proporciona un paquete específico.

RH124-RHEL9.0-es-5-20230516 447
capítulo 12 | Instalación y actualización de paquetes de software

Referencias
Páginas del manual: dnf(1) y dnf.conf(5)

Para obtener más información, consulte el capítulo Managing Software Packages de


la Red Hat Enterprise Linux 9 Configuring Basic system Settings Guide en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/
html-single/configuring_basic_system_settings/index#managing-software-
packages_configuring-basic-system-settings

Para obtener más información, consulte el capítulo Distribution of Content in


RHEL 9 de la Red Hat Enterprise Linux 9 Managing Software with the DNF Tool
Guide en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-
single/managing_software_with_the_dnf_tool/index#assembly_distribution-of-
content-in-rhel-9_managing-software-with-the-dnf-tool

Modularidad
https://docs.fedoraproject.org/en-US/modularity/

448 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

Ejercicio Guiado

Instalación y actualización de paquetes


de software con DNF
En este ejercicio, instala y quita paquetes y grupos de paquetes.

Resultados
• Instalar y eliminar paquetes con dependencias.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando garantiza que estén disponibles todos los recursos requeridos.

[student@workstation ~]$ lab start software-dnf

Instrucciones
1. Desde workstation, abra una sesión de SSH en la máquina servera con el usuario
student. Use el comando sudo -i para cambiar al usuario root.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#

2. Busque un paquete específico.

2.1. Intente ejecutar el comando nmap. Se le indicará que no está instalado.

[root@servera ~]# nmap


-bash: nmap: command not found

2.2. Use el comando dnf search para buscar paquetes con nmap como parte de su
nombre o resumen.

[root@servera ~]# dnf search nmap


...output omitted...
========================= Name Exactly Matched: nmap ==========================
nmap.x86_64 : Network exploration tool and security scanner
======================== Name & Summary Matched: nmap =========================
nmap-ncat.x86_64 : Nmap's Netcat replacement

2.3. Use el comando dnf info para obtener más información acerca del paquete nmap.

RH124-RHEL9.0-es-5-20230516 449
capítulo 12 | Instalación y actualización de paquetes de software

[root@servera ~]# dnf info nmap


...output omitted...
Available Packages
Name : nmap
Epoch : 3
Version : 7.91
Release : 10.el9
...output omitted...

3. Use el comando dnf install para instalar el paquete nmap.

[root@servera ~]# dnf install nmap


...output omitted...
Dependencies resolved.
===============================================================================
Package
Arch Version Repository Size
===============================================================================
Installing:
nmap x86_64 3:7.91-10.el9 rhel-9.0-for-x86_64-appstream-rpms 5.6 M

Transaction Summary
===============================================================================
Install 1 Package

Total download size: 5.6 M


Installed size: 24 M
Is this ok [y/N]: y
...output omitted...
Complete!

4. Quite paquetes.

4.1. Use el comando dnf remove para eliminar el paquete nmap, pero responda con no
cuando se le solicite. ¿Cuántos paquetes se quitan?

[root@servera ~]# dnf remove nmap


Dependencies resolved.
===============================================================================
Package
Arch Version Repository Size
===============================================================================
Removing:
nmap x86_64 3:7.91-10.el9 @rhel-9.0-for-x86_64-appstream-rpms 24 M

Transaction Summary
===============================================================================
Remove 1 Package

450 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

Freed space: 24 M
Is this ok [y/N]: n
Operation aborted.

4.2. Use el comando dnf remove para eliminar el paquete tar, pero responda con no
cuando se le solicite. ¿Cuántos paquetes se quitan?

[root@servera ~]# dnf remove tar


...output omitted...
Dependencies resolved.
===============================================================================
Package Arch Version Repository Size
===============================================================================
Removing:
tar x86_64 2:1.34-3.el9 @System 3.0 M
Removing dependent packages:
cockpit x86_64 264-1.el9 @rhel-9.1-for-x86_64-baseos-rpms 57 k
cockpit-system noarch 264-1.el9 @System 3.3 M
...output omitted...

Transaction Summary
===============================================================================
Remove 12 Packages

Freed space: 48 M
Is this ok [y/N]: n
Operation aborted.

5. Recopile información sobre el grupo de componentes de "Herramientas de seguridad" e


instálelo en servera.

5.1. Use el comando dnf group list para enumerar todos los grupos de componentes
disponibles.

[root@servera ~]# dnf group list

5.2. Use el comando dnf group info para obtener más información acerca del grupo
de componentes Security Tools, incluida una lista de paquetes incluidos.

[root@servera ~]# dnf group info "Security Tools"


...output omitted...
Group: Security Tools
Description: Security tools for integrity and trust verification.
Default Packages:
scap-security-guide
Optional Packages:
aide
hmaccalc
openscap
openscap-engine-sce
openscap-utils
scap-security-guide-doc
scap-workbench

RH124-RHEL9.0-es-5-20230516 451
capítulo 12 | Instalación y actualización de paquetes de software

tpm2-tools
tss2
udica

5.3. Use el comando dnf group install para instalar el grupo de componentes
Security Tools.

[root@servera ~]# dnf group install "Security Tools"


...output omitted...
Dependencies resolved.
===============================================================================
Package Arch Version Repository Size
===============================================================================
Installing group/module packages:
scap-security-guide
noarch 0.1.60-5.el9 rhel-9.0-for-x86_64-appstream-rpms 683 k
Installing dependencies:
openscap x86_64 1:1.3.6-3.el9 rhel-9.0-for-x86_64-appstream-rpms 2.0 M
...output omitted...

Transaction Summary
===============================================================================
Install 5 Packages

Total download size: 3.0 M


Installed size: 94 M
Is this ok [y/N]: y
...output omitted...
Installed:
openscap-1:1.3.6-3.el9.x86_64
openscap-scanner-1:1.3.6-3.el9.x86_64
scap-security-guide-0.1.60-5.el9.noarch
xmlsec1-1.2.29-9.el9.x86_64
xmlsec1-openssl-1.2.29-9.el9.x86_64

Complete!

6. Explore el historial y las opciones de anulación del comando dnf.

6.1. Use el comando dnf history para mostrar el historial de dnf reciente.

[root@servera ~]# dnf history


ID | Command line | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
3 | group install Security T | 2022-03-24 15:23 | Install | 6
2 | install nmap | 2022-03-24 15:12 | Install | 1
1 | -y install @base firewal | 2022-03-03 04:47 | Install | 156 EE

En su sistema, es probable que el historial sea diferente.

6.2. Use el comando dnf history info para confirmar que la última transacción sea la
instalación del grupo. En el siguiente comando, reemplace el ID de transacción por el
que se menciona en el paso anterior.

452 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

[root@servera ~]# dnf history info 3


Transaction ID : 3
Begin time : Thu 24 Mar 2022 03:23:56 PM EDT
Begin rpmdb : 7743aed72ac79f632442c9028aafd2499a1591f92a660b3f09219b422ca95f02
End time : Thu 24 Mar 2022 03:23:58 PM EDT (2 seconds)
End rpmdb : 20c4f0215388b7dca9a874260784b1e5cf9bc142da869967269e3d84dd0f789d
User : Student User <student>
Return-Code : Success
Releasever : 9
Command Line : group install Security Tools
Comment :
Packages Altered:
Install openscap-1:1.3.6-3.el9.x86_64 @rhel-9.0-for-x86_64-
appstream-rpms
Install openscap-scanner-1:1.3.6-3.el9.x86_64 @rhel-9.0-for-x86_64-
appstream-rpms
...output omitted...

6.3. Use el comando dnf history undo para eliminar el conjunto de paquetes que
se instalaron cuando se instaló el paquete nmap. En su sistema, busque el ID de
transacción correcto de la salida del comando dnf history y luego, use ese ID en
el siguiente comando.

[root@servera ~]# dnf history undo 2

7. Regrese al sistema workstation con el usuario student.

[root@servera ~]# exit


logout
[student@servera ~]$ exit
Connection to servera closed.
[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish software-dnf

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 453
capítulo 12 | Instalación y actualización de paquetes de software

Habilitar repositorios de software con


DNF

Objetivos
Habilitar y deshabilitar el uso de repositorios DNF de terceros o de Red Hat por un servidor.

Habilitación de repositorios de software de Red Hat


Los sistemas tienen acceso a varios repositorios de Red Hat. El comando dnf repolist all
enumera todos los repositorios disponibles y sus estados:

[user@host ~]$ dnf repolist all


repo id repo name status
rhel-9.0-for-x86_64-appstream-rpms RHEL 9.0 AppStream enabled
rhel-9.0-for-x86_64-baseos-rpms RHEL 9.0 BaseOS enabled

nota
Las suscripciones a Red Hat otorgan acceso a repositorios específicos. En el
pasado, los administradores necesitaban adjuntar suscripciones por sistema. Acceso
a Contenido Simple (SCA) simplifica la forma en que los sistemas acceden a los
repositorios. Con SCA, los sistemas pueden acceder a cualquier repositorio desde
cualquier suscripción que adquiera, sin necesidad de asociar una suscripción. Puede
habilitar SCA en el portal de clientes de Red Hat dentro de My Subscriptions >
Subscription Allocations o en su servidor de Red Hat Satellite.

El comando dnf config-manager puede habilitar o deshabilitar los repositorios. Por ejemplo, el
siguiente comando habilita el repositorio rhel-9-server-debug-rpms:

[user@host ~]$ dnf config-manager --enable rhel-9-server-debug-rpms

Las fuentes que no son de Red Hat proporcionan software a través de repositorios de terceros.
Por ejemplo, Adobe proporciona parte de su software para Linux a través de repositorios DNF. En
un aula Red Hat, el servidor content.example.com aloja repositorios DNF. El comando dnf puede
acceder a los repositorios desde un sitio web, un servidor FTP o el sistema de archivos local.

Puede agregar un repositorio de terceros de dos maneras. Puede crear un archivo .repo en el
directorio /etc/yum.repos.d/ o puede agregar una sección [repository] al archivo /etc/
dnf/dnf.conf. Red Hat recomienda usar archivos .repo y reservar el archivo dnf.conf para
configuraciones de repositorio adicionales. El comando dnf busca ambas ubicaciones de manera
predeterminada; sin embargo, los archivos .repo tienen prioridad. Un archivo .repo contiene la
URL del repositorio, un nombre, si se debe usar GPG para verificar las firmas del paquete y, en ese
caso, la URL que apunta a la clave GPG de confianza.

Agregar repositorios DNF


El comando dnf config-manager también puede agregar repositorios a la máquina. El
siguiente comando crea un archivo .repo mediante el uso de la URL de un repositorio existente.

454 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

[user@host ~]$ dnf config-manager \


--add-repo="https://dl.fedoraproject.org/pub/epel/9/Everything/x86_64/"
Adding repo from: https://dl.fedoraproject.org/pub/epel/9/Everything/x86_64/

El archivo .repo correspondiente está visible en el directorio /etc/yum.repos.d/:

[user@host ~]$ cd /etc/yum.repos.d


[user@host yum.repos.d]$ cat \
dl.fedoraproject.org_pub_epel_9_Everything_x86_64_.repo
[dl.fedoraproject.org_pub_epel_9_Everything_x86_64_]
name=created by dnf config-manager from https://dl.fedoraproject.org/pub/epel/9/
Everything/x86_64/
baseurl=https://dl.fedoraproject.org/pub/epel/9/Everything/x86_64/
enabled=1

El comando rpm usa claves GPG para firmar paquetes e importa claves públicas para verificar
la integridad y autenticidad de los paquetes. El comando dnf usa archivos de configuración del
repositorio para proporcionar las ubicaciones de las claves públicas GPG e importa las claves
para verificar los paquetes. Las claves se almacenan en diversas ubicaciones en el sitio del
repositorio remoto, como http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-9. Los
administradores deberían descargar la clave en un archivo local en lugar que el comando dnf la
recupere de una fuente externa. Por ejemplo, el siguiente archivo .repo usa el parámetro gpgkey
para hacer referencia a una clave local:

[EPEL]
name=EPEL 9
baseurl=https://dl.fedoraproject.org/pub/epel/9/Everything/x86_64/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9

Paquetes de configuración de RPM para repositorios locales


Algunos repositorios proporcionan un archivo de configuración y una clave pública de GPG como
parte del paquete de RPM para simplificar su instalación. Puede importar la clave pública GPG
con el comando rpm --import. El comando dnf install puede descargar e instalar estos
paquetes RPM.

Por ejemplo, el siguiente comando importa la clave pública GPG (EPEL) RPM-GPG-KEY-EPEL-9
e instala el RPM del repositorio RHEL9 Extra Packages for Enterprise Linux (EPEL):

[user@host ~]$ rpm --import \


https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-9
[user@host ~]$ dnf install \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

RH124-RHEL9.0-es-5-20230516 455
capítulo 12 | Instalación y actualización de paquetes de software

Advertencia
Instale la clave GPG de RPM antes de instalar los paquetes firmados para
asegurarse de que los paquetes provengan de una fuente confiable. Si la clave GPG
de RPM no se importa, el comando dnf no puede instalar los paquetes firmados.

El comando dnf con la opción --nogpgcheck ignora las claves GPG que faltan,
pero puede resultar en la instalación de paquetes comprometidos o falsificados.

Los archivos .repo suelen enumeran varias referencias de repositorio en un solo archivo. Cada
referencia de repositorio comienza con un nombre de una sola palabra entre corchetes.

[user@host ~]$ cat /etc/yum.repos.d/epel.repo


[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=
$basearch&infra=$infra&content=$contentdir
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
...output omitted...
[epel-source]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Source
#baseurl=https://download.example/pub/epel/$releasever/Everything/source/tree/
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-
$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1

Para definir un repositorio, pero no buscarlo de forma predeterminada, inserte el parámetro


enabled=0. Si bien el comando dnf config-manager habilita y deshabilita los repositorios
de manera persistente, el comando dnf con las opciones --enablerepo=PATTERN y --
disablerepo=PATTERN habilitan y deshabilitan los repositorios temporalmente mientras se
ejecuta el comando.

Referencias
Páginas del manual: dnf(8), dnf.conf(5) y dnf-config-manager(8)

Para obtener más información, consulte el capítulo Managing Software with the DNF
Tool en la documentación del producto Red Hat Enterprise Linux 9 en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-
single/managing_software_with_the_dnf_tool
.

456 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

Ejercicio Guiado

Habilitar repositorios de software con


DNF
En este ejercicio, configurará su servidor para obtener paquetes desde un repositorio DNF
remoto, luego actualizará o instalará un paquete desde ese repositorio.

Resultados
• Configurar un sistema para obtener actualizaciones de software de un servidor de aula y
actualizar el sistema para usar los paquetes más recientes.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start software-repo

Instrucciones
1. Use el comando ssh para iniciar sesión en el sistema servera con el usuario student.
Use el comando sudo -i para cambiar al usuario root.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#

2. Configure repositorios de software en servera para obtener paquetes personalizados y


actualizaciones desde la siguiente URL:

• Paquetes personalizados en http://content.example.com/rhel9.0/x86_64/


rhcsa-practice/rht

• Actualizaciones de los paquetes personalizados en http://content.example.com/


rhel9.0/x86_64/rhcsa-practice/errata

2.1. Use el comando dnf config-manager para agregar el repositorio de paquetes


personalizado.

[root@servera ~]# dnf config-manager \


--add-repo "http://content.example.com/rhel9.0/x86_64/rhcsa-practice/rht"
Adding repo from: http://content.example.com/rhel9.0/x86_64/rhcsa-practice/rht

RH124-RHEL9.0-es-5-20230516 457
capítulo 12 | Instalación y actualización de paquetes de software

2.2. Examine el archivo de repositorio de software que el comando anterior creó en


el directorio /etc/yum.repos.d. Use el comando vim para editar el archivo y
agregue el parámetro gpgcheck=0 para deshabilitar la comprobación de clave GPG
para el repositorio.

[root@servera ~]# vim \


/etc/yum.repos.d/content.example.com_rhel9.0_x86_64_rhcsa-practice_rht.repo
[content.example.com_rhel9.0_x86_64_rhcsa-practice_rht]
name=created by dnf config-manager from http://content.example.com/rhel9.0/x86_64/
rhcsa-practice/rht
baseurl=http://content.example.com/rhel9.0/x86_64/rhcsa-practice/rht
enabled=1
gpgcheck=0

2.3. Cree el archivo /etc/yum.repos.d/errata.repo para habilitar el repositorio de


actualizaciones con el siguiente contenido:

[rht-updates]
name=rht updates
baseurl=http://content.example.com/rhel9.0/x86_64/rhcsa-practice/errata
enabled=1
gpgcheck=0

2.4. Use el comando dnf repolist all para enumerar todos los repositorios en el
sistema.

[root@servera ~]# dnf repolist all


repo id repo name status
content.example.com_rhel9.0_x86_64_rhcsa-practice_rht created by .... enabled
...output omitted...
rht-updates rht updates enabled

3. Deshabilite el repositorio de software rht-updates e instale el paquete rht-system.

3.1. Use el comando dnf config-manager --disable para deshabilitar el repositorio


rht-updates.

[root@servera ~]# dnf config-manager --disable rht-updates

3.2. Muestre el paquete rht-system y, luego, instálelo.

[root@servera ~]# dnf list rht-system


Available Packages
rht-system.noarch 1.0.0-1 content.example.com_rhel9.0_x86_64_rhcsa-practice_rht
[root@servera ~]# dnf install rht-system
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
rht-system noarch 1.0.0-1 content..._rht 3.7 k
...output omitted...

458 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

Is this ok [y/N]: y
...output omitted...
Installed:
rht-system-1.0.0-1.noarch
Complete!

3.3. Verifique que el paquete rht-system esté instalado y anote el número de versión
del paquete.

[root@servera ~]# dnf list rht-system


Installed Packages
rht-system.noarch 1.0.0-1 @content.example.com_rhel9.0_x86_64_rhcsa-practice_rht

4. Habilite el repositorio de software rht-updates y actualice todos los paquetes de


software relevantes.

4.1. Use dnf config-manager --enable para habilitar el repositorio rht-updates.

[root@servera ~]# dnf config-manager --enable rht-updates

4.2. Use el comando dnf update para actualizar todos los paquetes de software en
servera.

[root@servera ~]# dnf update


Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Upgrading:
rht-system noarch 1.0.0-2 rht-updates 7.5 k
...output omitted...
Is this ok [y/N]: y
...output omitted...
Complete!

4.3. Verifique que el paquete rht-system esté actualizado y anote el número de versión
del paquete.

[root@servera ~]# dnf list rht-system


Installed Packages
rht-system.noarch 1.0.0-2 @rht-updates

5. Salga de servera.

[root@servera ~]# exit


logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation ~]$

RH124-RHEL9.0-es-5-20230516 459
capítulo 12 | Instalación y actualización de paquetes de software

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish software-repo

Esto concluye la sección.

460 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

Trabajo de laboratorio

Instalación y actualización de paquetes


de software
En este trabajo de laboratorio, gestionará repositorios de software, e instalará y actualizará
paquetes de esos repositorios.

Resultados
• Gestionar repositorios de software.

• Instalar y actualizar paquetes desde repositorios.

• Instalar un paquete RPM.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start software-review

Instrucciones
1. En la máquina serverb, configure un repositorio de software para obtener actualizaciones.
Otorgue el nombre errata al repositorio y configure el repositorio en el archivo /etc/
yum.repos.d/errata.repo. Configure el archivo errata.repo para usar el repositorio
http://content.example.com/rhel9.0/x86_64/rhcsa-practice/errata. No
verifique las firmas de GPG.
2. En serverb, instale el paquete rht-system.
3. Por razones de seguridad, la máquina serverb no deberá ser capaz de conectarse a una
impresora de papel. Puede lograrlo al eliminar el paquete cups. Cuando finalice, salga de la
shell root.
4. El script de inicio descarga el paquete rhcsa-script-1.0.0-1.noarch.rpm en el
directorio /home/student en la máquina serverb.
Confirme que el paquete rhcsa-script-1.0.0-1.noarch.rpm esté disponible en
serverb e instálelo con los privilegios de root. Verifique que el paquete esté instalado.
Salga de la máquina serverb.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

RH124-RHEL9.0-es-5-20230516 461
capítulo 12 | Instalación y actualización de paquetes de software

[student@workstation ~]$ lab grade software-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish software-review

Esto concluye la sección.

462 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

Solución

Instalación y actualización de paquetes


de software
En este trabajo de laboratorio, gestionará repositorios de software, e instalará y actualizará
paquetes de esos repositorios.

Resultados
• Gestionar repositorios de software.

• Instalar y actualizar paquetes desde repositorios.

• Instalar un paquete RPM.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start software-review

Instrucciones
1. En la máquina serverb, configure un repositorio de software para obtener actualizaciones.
Otorgue el nombre errata al repositorio y configure el repositorio en el archivo /etc/
yum.repos.d/errata.repo. Configure el archivo errata.repo para usar el repositorio
http://content.example.com/rhel9.0/x86_64/rhcsa-practice/errata. No
verifique las firmas de GPG.

1.1. Inicie sesión en la máquina serverb con el usuario student y cambie al usuario root.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#

1.2. Cree el archivo /etc/yum.repos.d/errata.repo con el siguiente contenido:

[errata]
name=Red Hat Updates
baseurl=http://content.example.com/rhel9.0/x86_64/rhcsa-practice/errata
enabled=1
gpgcheck=0

RH124-RHEL9.0-es-5-20230516 463
capítulo 12 | Instalación y actualización de paquetes de software

2. En serverb, instale el paquete rht-system.

2.1. Enumere los paquetes disponibles para el paquete rht-system.

[root@serverb ~]# dnf list rht-system


Last metadata expiration check: 0:05:27 ago on Wed 27 Apr 2022 05:01:59 AM EDT.
Available Packages
rht-system.noarch 1.0.0-2 errata

2.2. Instale la última versión del paquete rht-system.

[root@serverb ~]# dnf install rht-system


...output omitted...
Total download size: 7.5 k
Installed size: 300
Is this ok [y/N]: y
...output omitted...
Complete!
[root@serverb ~]#

3. Por razones de seguridad, la máquina serverb no deberá ser capaz de conectarse a una
impresora de papel. Puede lograrlo al eliminar el paquete cups. Cuando finalice, salga de la
shell root.

3.1. Indique el paquete cups instalado.

[root@serverb ~]# dnf list cups


Last metadata expiration check: 0:08:02 ago on Wed 27 Apr 2022 05:01:59 AM EDT.
Installed Packages
cups.x86_64 1:2.3.3op2-13.el9 @rhel-9.0-for-x86_64-appstream-rpms
[root@serverb ~]#

3.2. Elimine el paquete cups.

[root@serverb ~]# dnf remove cups.x86_64


...output omitted...
Remove 46 Packages

Freed space: 94 M
Is this ok [y/N]: y
...output omitted...
Complete!

3.3. Salga de la shell root.

[root@serverb ~]# exit


[student@serverb ~]$

4. El script de inicio descarga el paquete rhcsa-script-1.0.0-1.noarch.rpm en el


directorio /home/student en la máquina serverb.

464 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

Confirme que el paquete rhcsa-script-1.0.0-1.noarch.rpm esté disponible en


serverb e instálelo con los privilegios de root. Verifique que el paquete esté instalado.
Salga de la máquina serverb.

4.1. Verifique que el paquete rhcsa-script-1.0.0-1.noarch.rpm no esté disponible


en serverb.

[student@serverb ~]$ rpm -q -p rhcsa-script-1.0.0-1.noarch.rpm -i


Name : rhcsa-script
Version : 1.0.0
Release : 1
Architecture: noarch
Install Date: (not installed)
Group : System
Size : 593
License : GPL
Signature : (none)
Source RPM : rhcsa-script-1.0.0-1.src.rpm
Build Date : Wed 23 Mar 2022 08:24:21 AM EDT
Build Host : localhost
Packager : Bernardo Gargallo
URL : http://example.com
Summary : RHCSA Practice Script
Description :
A RHCSA practice script.
The package changes the motd.

4.2. Instale el paquete rhcsa-script-1.0.0-1.noarch.rpm.

[student@serverb ~]$ sudo dnf install \


rhcsa-script-1.0.0-1.noarch.rpm
[sudo] password for student: student
Last metadata expiration check: 0:11:06 ago on Wed 27 Apr 2022 05:01:59 AM EDT.
Dependencies resolved.
==========================================================================
Package Architecture Version Repository Size
==========================================================================
Installing:
rhcsa-script noarch 1.0.0-1 @commandline 7.5 k

Transaction Summary
==========================================================================
Install 1 Package

Total size: 7.5 k


Installed size: 593
Is this ok [y/N]: y
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1

RH124-RHEL9.0-es-5-20230516 465
capítulo 12 | Instalación y actualización de paquetes de software

Running scriptlet: rhcsa-script-1.0.0-1.noarch 1/1


Installing : rhcsa-script-1.0.0-1.noarch 1/1
Running scriptlet: rhcsa-script-1.0.0-1.noarch 1/1
Verifying : rhcsa-script-1.0.0-1.noarch 1/1

Installed:
rhcsa-script-1.0.0-1.noarch

Complete!

4.3. Verifique que el paquete esté instalado.

[student@serverb ~]$ rpm -q rhcsa-script


rhcsa-script-1.0.0-1.noarch
[student@serverb ~]$

4.4. Regrese al sistema workstation con el usuario student.

[student@serverb ~]$ exit


logout
Connection to serverb closed.
[student@workstation ~]$

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade software-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish software-review

Esto concluye la sección.

466 RH124-RHEL9.0-es-5-20230516
capítulo 12 | Instalación y actualización de paquetes de software

Resumen
• Red Hat Subscription Management proporciona herramientas para que los equipos tengan
derecho a suscripciones de productos, obtengan actualizaciones de paquetes de software y
busquen información sobre contratos de soporte y suscripciones usadas por sus sistemas.

• El software se proporciona como paquetes RPM, para la instalación, la actualización y la


desinstalación del software del sistema.

• El comando rpm puede consultar una base de datos local para proporcionar información sobre
el contenido de los paquetes instalados e instalar archivos de paquetes descargados.

• La utilidad dnf es una herramienta eficaz de la línea de comandos que puede usarse para
instalar, actualizar, eliminar y consultar los paquetes de software.

• Red Hat Enterprise Linux usa Application Streams para proporcionar un solo repositorio que
aloje varias versiones del paquete de una aplicación y sus dependencias.

RH124-RHEL9.0-es-5-20230516 467
468 RH124-RHEL9.0-es-5-20230516
capítulo 13

Acceso a los sistemas de


archivos de Linux
Meta Acceder, revisar y usar los sistemas de archivos
existentes en el almacenamiento conectado a un
servidor Linux.

Objetivos • Identificar un directorio en la jerarquía del


sistema de archivos y el dispositivo donde se
almacena.
• Acceder al contenido de sistemas de archivos
mediante la adición y la eliminación de sistemas
de archivos de la jerarquía de sistemas de
archivos.
• Buscar archivos en sistemas de archivos
montados con los comandos find y locate.

Secciones • Identificación de dispositivos y sistemas de


archivos (y cuestionario)
• Montaje y desmontaje de sistemas de archivos
(y ejercicio guiado)
• Localización de archivos en el sistema (y
ejercicio guiado)

Trabajo de Acceso a los sistemas de archivos de Linux


laboratorio

RH124-RHEL9.0-es-5-20230516 469
capítulo 13 | Acceso a los sistemas de archivos de Linux

Identificación de dispositivos y sistemas


de archivos

Objetivos
Identificar un directorio en la jerarquía del sistema de archivos y el dispositivo donde se almacena.

Conceptos de la administración del almacenamiento


Red Hat Enterprise Linux (RHEL) usa Extents File System (XFS) como sistema de archivos
local predeterminado. RHEL admite el sistema de archivos Extended File System (ext4) para
administrar archivos locales. A partir de RHEL 9, el sistema de archivos Tabla extensible de
asignación de archivos (exFAT) es compatible con el uso de medios extraíbles. En un clúster de
servidores empresariales, los discos compartidos usan el sistema de archivos Global File System 2
(GFS2) para administrar el acceso simultáneo de varios nodos.

Sistemas de archivos y puntos de montaje


Acceder al contenido de un sistema de archivos montándolo en un directorio vacío. Este directorio
se llama punto de montaje. Cuando el directorio esté montado, use el comando ls para enumerar
su contenido. Muchos sistemas de archivos se montan automáticamente cuando se inicia el
sistema.

Un punto de montaje difiere ligeramente de una letra de unidad de Microsoft Windows, donde
cada sistema de archivos es una entidad separada. Los puntos de montaje permiten que varios
dispositivos del sistema de archivos estén disponibles en una única estructura de árbol. Este punto
de montaje es similar a las carpetas montadas en NTFS en Microsoft Windows.

Sistemas de archivos, almacenamiento y dispositivos de


bloque
Un dispositivo de bloque es un archivo que proporciona acceso de bajo nivel a dispositivos de
almacenamiento. Un dispositivo de bloque se debe particionar de manera opcional y puede
montarse un sistema de archivos que se creó antes del dispositivo.

El directorio /dev almacena archivos de dispositivos de bloque, que RHEL crea automáticamente
para todos los dispositivos. En RHEL 9, el primer disco duro SATA, SAS, SCSI o USB detectado se
denomina /dev/sda, el segundo /dev/sdb, y así sucesivamente. Estos nombres representan el
disco duro en su totalidad.

Nomenclatura de dispositivos de bloque

Tipo de dispositivo Patrón de nomenclatura de


dispositivos

Almacenamiento adjunto a SATA/SAS/USB /dev/sda, /dev/sdb, /dev/sdc,…


(unidad SCSI)

virtio-blk almacenamiento paravirtualizado /dev/vda, /dev/vdb, /dev/vdc,…


(VM)

470 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

Tipo de dispositivo Patrón de nomenclatura de


dispositivos

virtio-scsi almacenamiento paravirtualizado /dev/sda, /dev/sdb, /dev/sdc,…


(VM)

Almacenamiento adjunto a NVMe (SSD) /dev/nvme0, /dev/nvme1,…

Almacenamiento SD/MMC/eMMC (tarjetas SD) /dev/mmcblk0, /dev/mmcblk1,…

Particiones del disco


Normalmente, el dispositivo de almacenamiento completo no se crea en un solo sistema de
archivos. Para crear una partición, divida los dispositivos de almacenamiento en fragmentos más
pequeños.

Con las particiones, puede compartimentar un disco; las diferentes particiones pueden
formatearse con diferentes sistemas de archivos o usarse para otros fines. Por ejemplo, una
partición puede contener directorios de inicio de un usuario mientras que otra partición puede
contener registros y datos del sistema. Incluso cuando la partición del directorio de inicio se
cargue con datos, la partición del sistema puede seguir teniendo espacio disponible.

Las particiones son dispositivos de bloque por derecho propio. Por ejemplo, en el primer
almacenamiento adjunto a SATA, la primera partición es el disco /dev/sda1. La segunda
partición del mismo almacenamiento es el disco /dev/sda2. La tercera partición en el tercer
dispositivo de almacenamiento conectado a SATA es el disco /dev/sdc3, y así sucesivamente.
Los dispositivos de almacenamiento paravirtualizados tienen un sistema de nomenclatura similar.
Por ejemplo, en el primer almacenamiento, la primera partición es el disco /dev/vda1. La
segunda partición en el segundo dispositivo de almacenamiento es el disco /dev/vdb2, y así
sucesivamente.

Los nombres del dispositivo SSD adjunto a NVMe nombran sus particiones de manera diferente a
los dispositivos adjuntos a SATA. Para los dispositivos de almacenamiento NVMe, la parte nvmeX
del nombre se refiere al dispositivo, la parte nY se refiere al espacio de nombres y la parte pZ se
refiere a la partición. Por ejemplo, la primera partición para el primer espacio de nombres en el
primer disco es la partición /dev/nvme0n1p1. La tercera partición para el primer nombre de
espacio en el segundo disco es la partición /dev/nvme1n1p3, y así sucesivamente.

Las tarjetas SD o MMC a veces pueden tener un sistema de nombres similar al de los dispositivos
SATA (/dev/sdN). En algunos casos, las tarjetas SD o MMC pueden tener nombres como /dev/
mmcblk0p1, donde la parte mmcblkX del nombre se refiere al dispositivo de almacenamiento y la
parte pY del nombre se refiere al número de partición en ese dispositivo.

Una lista ampliada del archivo de dispositivo /dev/sda1 en la máquina host revela el tipo de
archivo b, que significa un dispositivo de bloque:

[user@host ~]$ ls -l /dev/sda1


brw-rw----. 1 root disk 8, 1 Feb 22 08:00 /dev/sda1

Volúmenes lógicos
Otra manera de organizar discos y particiones es mediante la gestión de volúmenes lógicos (LVM).
Con LVM, es posible agregar dispositivos de bloque en un grupo de volúmenes. El espacio en
disco en el grupo de volúmenes se divide en volúmenes lógicos, que son el equivalente funcional
de una partición que reside en un disco físico.

RH124-RHEL9.0-es-5-20230516 471
capítulo 13 | Acceso a los sistemas de archivos de Linux

El sistema LVM asigna nombres a los grupos de volúmenes y volúmenes lógicos en el momento
de la creación. LVM crea un directorio en el directorio /dev, que coincide con el nombre del grupo
y, luego, crea un enlace simbólico dentro de ese nuevo directorio con el mismo nombre que el
volumen lógico. Ese archivo de volumen lógico está disponible para ser montado. Por ejemplo,
cuando hay un grupo de volúmenes myvg y el volumen lógico mylv están presentes, la ruta
completa al volumen lógico es el archivo /dev/myvg/mylv.

nota
El nombre del dispositivo de volumen lógico mencionado anteriormente se
implementa como un enlace simbólico al archivo de dispositivo usado para acceder
a este, que puede variar entre los arranques. Hay otra forma de nombre de
dispositivo de volumen lógico vinculado desde archivos en el directorio /dev/
mapper, que se usan a menudo como enlaces simbólicos al archivo del dispositivo.

Examen de sistemas de archivos


Use el comando df para mostrar una descripción general de los dispositivos del sistema de
archivos locales y remotos, que incluye el espacio total en disco, el espacio en disco usado, el
espacio libre en disco y el porcentaje de todo el espacio en disco.

En el siguiente ejemplo, se muestran los sistemas de archivos y los puntos de montaje en la


máquina host:

[user@host ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 912584 0 912584 0% /dev
tmpfs 936516 0 936516 0% /dev/shm
tmpfs 936516 16812 919704 2% /run
tmpfs 936516 0 936516 0% /sys/fs/cgroup
/dev/vda3 8377344 1411332 6966012 17% /
/dev/vda1 1038336 169896 868440 17% /boot
tmpfs 187300 0 187300 0% /run/user/1000

La partición muestra que hay dos sistemas de archivos físicos montados en los directorios / y /
boot que comúnmente existen en las máquinas virtuales. Los dispositivos tmpfs y devtmpfs son
sistemas de archivos en la memoria del sistema. Todos los archivos que se escriben en el sistema
de archivos tmpfs o devtmpfs desaparecen después de reiniciar el sistema.

El comando df tiene las opciones -h o -H legibles para mejorar la legibilidad de los tamaños de
los resultados. La opción -h informa en KiB (210 ), MiB (220 ) o GiB (230 ), mientras que la opción
-H informa en unidades SI: KB (103 ), MB (106 ) o GB (109 ). Los fabricantes de discos duros
normalmente usan las unidades SI cuando anuncian sus productos.

Vea los sistemas de archivos en la máquina host con todas las unidades convertidas a formato
legible:

[user@host ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 892M 0 892M 0% /dev
tmpfs 915M 0 915M 0% /dev/shm
tmpfs 915M 17M 899M 2% /run
tmpfs 915M 0 915M 0% /sys/fs/cgroup

472 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

/dev/vda3 8.0G 1.4G 6.7G 17% /


/dev/vda1 1014M 166M 849M 17% /boot
tmpfs 183M 0 183M 0% /run/user/1000

Use el comando du para obtener información más detallada sobre el espacio usado por un árbol
de directorios en particular. El comando du con las opciones -h y -H convierte la salida a formato
legible. El comando du muestra el tamaño de todos los archivos en el árbol de directorios actual
de modo recursivo.

Vea el informe de uso del disco para el directorio /usr/share en la máquina host:

[root@host ~]# du /usr/share


...output omitted...
176 /usr/share/smartmontools
184 /usr/share/nano
8 /usr/share/cmake/bash-completion
8 /usr/share/cmake
356676 /usr/share

Vea el informe sobre el uso del disco en formato legible, para el directorio /usr/share:

[root@host ~]# du -h /usr/share


...output omitted...
176K /usr/share/smartmontools
184K /usr/share/nano
8.0K /usr/share/cmake/bash-completion
8.0K /usr/share/cmake
369M /usr/share

Referencias
Páginas del manual: df(1), du(1)

RH124-RHEL9.0-es-5-20230516 473
capítulo 13 | Acceso a los sistemas de archivos de Linux

Cuestionario

Identificación de dispositivos y sistemas


de archivos
Elija las respuestas correctas para las siguientes preguntas:

1. ¿Cuál es el nombre del archivo de dispositivo de un disco duro SATA completo en el


directorio /dev?
a. /dev/vda
b. /dev/sda1
c. /dev/vg_install/lv_home
d. /dev/sda

2. ¿Qué comando muestra los sistemas de archivos con los puntos de montaje?
a. du -H
b. df
c. du
d. ls

3. ¿Qué comando muestra el informe sobre el uso del disco en formato legible, para el
directorio /home?
a. ls /home
b. df
c. du -h /home
d. du /home

4. ¿Cuál es el nombre del archivo de dispositivo correcto de la tercera partición del


segundo disco virtio-blk conectado a una máquina virtual?
a. /dev/vdb3
b. /dev/vda2
c. /dev/sda3
d. /dev/vda3

5. ¿Qué comando brinda una descripción general sobre los puntos de montaje de
sistemas de archivos y el espacio libre disponible en las unidades SI?
a. df
b. df -h
c. df -H
d. du -h

474 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

Solución

Identificación de dispositivos y sistemas


de archivos
Elija las respuestas correctas para las siguientes preguntas:

1. ¿Cuál es el nombre del archivo de dispositivo de un disco duro SATA completo en el


directorio /dev?
a. /dev/vda
b. /dev/sda1
c. /dev/vg_install/lv_home
d. /dev/sda

2. ¿Qué comando muestra los sistemas de archivos con los puntos de montaje?
a. du -H
b. df
c. du
d. ls

3. ¿Qué comando muestra el informe sobre el uso del disco en formato legible, para el
directorio /home?
a. ls /home
b. df
c. du -h /home
d. du /home

4. ¿Cuál es el nombre del archivo de dispositivo correcto de la tercera partición del


segundo disco virtio-blk conectado a una máquina virtual?
a. /dev/vdb3
b. /dev/vda2
c. /dev/sda3
d. /dev/vda3

5. ¿Qué comando brinda una descripción general sobre los puntos de montaje de
sistemas de archivos y el espacio libre disponible en las unidades SI?
a. df
b. df -h
c. df -H
d. du -h

RH124-RHEL9.0-es-5-20230516 475
capítulo 13 | Acceso a los sistemas de archivos de Linux

Montaje y desmontaje de sistemas de


archivos

Objetivos
Acceder al contenido de sistemas de archivos mediante la adición y la eliminación de sistemas de
archivos de la jerarquía de sistemas de archivos.

Montaje manual de sistemas de archivos


Para acceder al sistema de archivos en un dispositivo de almacenamiento extraíble, debe montar
el dispositivo de almacenamiento. Con el comando mount, el usuario root puede montar un
sistema de archivos manualmente. El primer argumento del comando mount especifica el sistema
de archivos que se debe montar. El segundo argumento especifica el directorio como punto de
montaje en la jerarquía de sistemas de archivos.

Puede montar el sistema de archivos de una de las siguientes maneras con el comando mount:

• Con el nombre del archivo del dispositivo en el directorio /dev.


• Con el UUID, un identificador único universal del dispositivo.

A continuación, identifique el dispositivo para montar, asegúrese de que exista el punto de


montaje y monte el dispositivo en el punto de montaje.

nota
Si monta un sistema de archivos con el comando mount y luego reinicia su sistema,
el sistema de archivos no se vuelve a montar automáticamente. El curso Red Hat
System Administration II (RH134) explica cómo montar sistemas de archivos de
forma persistente con el archivo /etc/fstab.

Identificación del dispositivo de bloque


Un dispositivo de almacenamiento conectable en funcionamiento, ya sea como unidad de
disco duro (HDD) o dispositivo de estado sólido (SSD) o un portadiscos de almacenamiento
USB, pueden conectarse a un puerto diferente cada vez que se conectan a un sistema. Use el
comando lsblk para enumerar los detalles de un dispositivo de bloque especificado o todos los
dispositivos disponibles.

[root@host ~]# lsblk


NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 252:0 0 10G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 200M 0 part /boot/efi
├─vda3 252:3 0 500M 0 part /boot
└─vda4 252:4 0 9.3G 0 part /
vdb 252:16 0 5G 0 disk
vdc 252:32 0 5G 0 disk
vdd 252:48 0 5G 0 disk

476 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

El tamaño de la partición ayuda a identificar el dispositivo cuando se desconoce el nombre de la


partición. Por ejemplo, considerando la salida anterior, si el tamaño de la partición identificada es
de 9.3 GB, monte la partición /dev/vda4.

Montar el sistema de archivos con el nombre de la partición


El siguiente ejemplo monta la partición /dev/vda4 en el punto de montaje /mnt/data.

[root@host ~]# mount /dev/vda4 /mnt/data

El directorio de punto de montaje debe existir antes de montar el sistema de archivos. El directorio
/mnt existe de forma predeterminada para usarse como punto de montaje temporal.

Importante
Si un directorio que se usa como punto de montaje no está vacío, los archivos
existentes están ocultos y no se podrá acceder a ellos cuando se monte allí un
sistema de archivos. Se puede acceder a los archivos originales nuevamente
después de desmontar el sistema de archivos montado.

El orden de detección de dispositivos y la denominación de dispositivos de almacenamiento


pueden cambiar cuando se agregan o eliminan dispositivos en un sistema. Se recomienda usar
un identificador de dispositivo que no cambie para montar sistemas de archivos de manera
consistente.

Montar el sistema de archivos con la partición UUID


Un identificador estable que está asociado con un sistema de archivos es su identificador único
universal (UUID). El UUID se almacena en el superbloque del sistema de archivos y se crea cuando
se crea el sistema de archivos.

El comando lsblk -fp detalla la ruta completa del dispositivo, los UUID y los puntos de
montajes, así como el tipo de sistema de archivos en la partición. El punto de montaje está en
blanco cuando el sistema de archivos no está montado.

[root@host ~]# lsblk -fp


NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
/dev/vda
├─/dev/vda1
├─/dev/vda2 vfat FAT16 7B77-95E7 192.3M 4% /boot/efi
├─/dev/vda3 xfs boot 2d67e6d0-...-1f091bf1 334.9M 32% /boot
└─/dev/vda4 xfs root efd314d0-...-ae98f652 7.7G 18% /
/dev/vdb
/dev/vdc
/dev/vdd

Monte el sistema de archivos por el UUID del sistema de archivos.

[root@host ~]# mount UUID="efd314d0-b56e-45db-bbb3-3f32ae98f652" /mnt/data

RH124-RHEL9.0-es-5-20230516 477
capítulo 13 | Acceso a los sistemas de archivos de Linux

Montaje automático de dispositivos de almacenamiento


extraíbles
Con el entorno de escritorio gráfico, el sistema monta automáticamente medios de
almacenamiento extraíbles cuando se detecta la presencia de medios.

El dispositivo de almacenamiento extraíble se monta en la ubicación /run/


media/USERNAME/LABEL. USERNAME es el nombre del usuario que inició sesión en el
entorno gráfico. LABEL es un identificador, que generalmente es la etiqueta en los medios de
almacenamiento.

Para desconectar de forma segura un dispositivo extraíble, primero desmonte manualmente todos
los sistemas de archivos en el dispositivo.

Desmontaje de sistemas de archivos


Los procedimientos de apagado y reinicio del sistema desmontan todos los sistemas de archivos
automáticamente. Todos los datos del sistema de archivos se vacían en el dispositivo de
almacenamiento para garantizar la integridad de los datos del sistema de archivos.

Advertencia
Los datos del sistema de archivos usan la memoria caché durante el funcionamiento
normal. Debe desmontar los sistemas de archivos de una unidad extraíble antes de
desconectar la unidad. El procedimiento de desmontaje vacía los datos en el disco
antes de liberar la unidad.

Para desmontar un sistema de archivos, el comando umount usa el punto de montaje como
argumento.

[root@host ~]# umount /mnt/data

No se puede desmontar cuando el sistema de archivos montado está en uso. Para que el comando
umount se ejecute correctamente, todos los procesos deben dejar de acceder a los datos en el
punto de montaje.

En el siguiente ejemplo, el comando umount falla porque la shell usa el directorio /mnt/data
como su directorio de trabajo actual y, por lo tanto, genera un mensaje de error.

[root@host ~]# cd /mnt/data


[root@host data]# umount /mnt/data
umount: /mnt/data: target is busy.

El comando lsof enumera todos los archivos abiertos y los procesos que acceden al sistema
de archivos. La lista contribuye a identificar los procesos que actualmente impiden un correcto
desmontaje del sistema de archivos.

[root@host data]# lsof /mnt/data


COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1593 root cwd DIR 253,17 6 128 /mnt/data
lsof 2532 root cwd DIR 253,17 19 128 /mnt/data
lsof 2533 root cwd DIR 253,17 19 128 /mnt/data

478 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

Identifique y espere a que los procesos se completen o envíe la señal SIGTERM o SIGKILL para
finalizarlos. En este caso, basta con cambiar a un directorio en funcionamiento actual que esté
fuera del punto de montaje.

[root@host data]# cd
[root@host ~]# umount /mnt/data

Referencias
Páginas del manual: lsblk(8), mount(8), umount(8) y lsof(8)

RH124-RHEL9.0-es-5-20230516 479
capítulo 13 | Acceso a los sistemas de archivos de Linux

Ejercicio Guiado

Montaje y desmontaje de sistemas de


archivos
En este ejercicio, practica montar y desmontar sistemas de archivos.

Resultados
• Identificar y montar un nuevo sistema de archivos en un punto de montaje especificado;
luego, desmontarlo.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start fs-mount

Instrucciones
1. Inicie sesión en la máquina servera con el usuario student y cambie al usuario root.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$ sudo -i
[sudo] password for student: student
[root@servera ~]#

2. Se ha agregado una nueva partición con un sistema de archivos al disco /dev/vdb en


la máquina servera. Monte la partición disponible recientemente mediante UUID en el
punto de montaje /mnt/part1.

2.1. Cree el directorio /mnt/part1.

[root@servera ~]# mkdir /mnt/part1

2.2. Consulte el UUID del dispositivo /dev/vdb1.

[root@servera ~]# lsblk -fp /dev/vdb


NAME FSTYPE LABEL UUID MOUNTPOINT
/dev/vdb
└─/dev/vdb1 xfs a04c511a-b805-4ec2-981f-42d190fc9a65

2.3. Monte el sistema de archivos mediante el uso del UUID en el directorio /mnt/part1.
Use el UUID /dev/vdb1 de la salida de comando anterior.

480 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

[root@servera ~]# mount \


UUID="a04c511a-b805-4ec2-981f-42d190fc9a65" /mnt/part1

2.4. Verifique que el dispositivo /dev/vdb1 esté montado en el directorio /mnt/part1.

[root@servera ~]# lsblk -fp /dev/vdb


NAME FSTYPE LABEL UUID MOUNTPOINT
/dev/vdb
└─/dev/vdb1 xfs a04c511a-b805-4ec2-981f-42d190fc9a65 /mnt/part1

3. Cambie al directorio /mnt/part1 y cree el testdirsubdirectorio. Cree el archivo /mnt/


part1/testdir/newmount.

3.1. Cambie al directorio /mnt/part1.

[root@servera ~]# cd /mnt/part1

3.2. Cree el directorio /mnt/part1/testdir.

[root@servera part1]# mkdir testdir

3.3. Cree el archivo /mnt/part1/testdir/newmount.

[root@servera part1]# touch testdir/newmount

4. Desmonte el sistema de archivos montado en el directorio /mnt/part1.

4.1. Desmonte el directorio /mnt/part1 cuando la shell está en el directorio /mnt/


part1. El comando umount no puede desmontar el dispositivo.

[root@servera part1]# umount /mnt/part1


umount: /mnt/part1: target is busy.

4.2. Cambie el directorio actual en la shell al directorio /root.

[root@servera part1]# cd
[root@servera ~]#

4.3. Desmonte el directorio /mnt/part1.

[root@servera ~]# umount /mnt/part1

5. Regrese a la máquina workstation con el usuario student.

RH124-RHEL9.0-es-5-20230516 481
capítulo 13 | Acceso a los sistemas de archivos de Linux

[root@servera ~]# exit


logout
[student@servera ~]$ exit
logout
Connection to servera closed.
[student@workstation]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish fs-mount

Esto concluye la sección.

482 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

Localización de archivos en el sistema

Objetivos
Buscar archivos en sistemas de archivos montados con los comandos find y locate.

Búsqueda de archivos
Un administrador de sistemas necesita herramientas para buscar archivos que coincidan con
criterios específicos en el sistema de archivos. En esta sección, se analizan dos comandos que
pueden buscar archivos en la jerarquía de sistemas de archivos:

• El comando locate busca un índice generado previamente para nombres de archivo o rutas de
archivos y arroja los resultados instantáneamente.

• El comando find busca archivos en tiempo real mediante un análisis de la jerarquía de sistemas
de archivos.

Localización de archivos por nombre


El comando locate busca archivos en función del nombre o la ruta al archivo. El comando es
rápido porque busca esta información de la base de datos mlocate. Sin embargo, esta base de
datos no se actualiza en tiempo real y requiere actualizaciones frecuentes para obtener resultados
precisos. Esta función también significa que el comando locate no busca archivos creados desde
la última actualización de la base de datos.

La base de datos locate se actualiza automáticamente todos los días. Sin embargo, el usuario
root puede emitir el comando updatedb para forzar una actualización inmediata.

[root@host ~]# updatedb

El comando locate restringe los resultados para los usuarios sin privilegios. Para ver el nombre
del archivo resultante, el usuario debe tener permiso de búsqueda en el directorio en el que reside
el archivo. Por ejemplo, ubique los archivos que el usuario developer puede leer y que coinciden
con la palabra clave passwd en el nombre o la ruta:

[developer@host ~]$ locate passwd


/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
...output omitted...

El siguiente ejemplo muestra el nombre de archivo o la ruta para una coincidencia parcial con la
consulta de búsqueda:

RH124-RHEL9.0-es-5-20230516 483
capítulo 13 | Acceso a los sistemas de archivos de Linux

[root@host ~]# locate image


/etc/selinux/targeted/contexts/virtual\_image_context
/usr/bin/grub2-mkimage
/usr/lib/sysimage
...output omitted...

El comando locate con la opción -i realiza una búsqueda que distingue entre mayúsculas
y minúsculas. Esta opción devuelve todas las combinaciones posibles de letras mayúsculas y
minúsculas coincidentes:

[developer@host ~]$ locate -i messages


...output omitted...
/usr/share/locale/zza/LC_MESSAGES
/usr/share/makedumpfile/eppic_scripts/ap_messages_3_10_to_4_8.c
/usr/share/vim/vim82/ftplugin/msmessages.vim
...output omitted...

El comando locate con la opción -n limita el número de resultados de búsqueda obtenidos. En


el siguiente ejemplo, se limitan los resultados de búsqueda arrojados por el comando locate a las
primeras cinco coincidencias:

[developer@host ~]$ locate -n 5 passwd


/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
...output omitted...

Búsqueda de archivos en tiempo real


El comando find localiza los archivos mediante una búsqueda en tiempo real en la jerarquía de
sistemas de archivos. Este comando es más lento pero más preciso que el comando locate. El
comando find también puede buscar archivos según criterios que no sean el nombre del archivo,
como los permisos del archivo, el tipo de archivo, su tamaño o la hora de su modificación.

El comando find examina los archivos en el sistema de archivos con la cuenta de usuario que
ejecutó la búsqueda. El usuario que ejecuta el comando find debe tener permiso de lectura y
ejecución en un directorio para examinar su contenido.

El primer argumento para el comando find es el directorio en que se realizará la búsqueda. Si el


comando findomite el argumento del directorio, comienza la búsqueda en el directorio actual y
busca coincidencias en los subdirectorios.

Para buscar archivos por nombre de archivo, use el comando find con la opción -name
FILENAME para devolver la ruta de los archivos que coinciden exactamente con FILENAME.
Por ejemplo, para buscar los archivos sshd_config en el directorio root /, ejecute el siguiente
comando:

[root@host ~]# find / -name sshd_config


/etc/ssh/sshd_config

484 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

nota
En el comando find, las opciones de palabras completas usan un solo guion para
las opciones, a diferencia de un guion doble para la mayoría de los otros comandos
de Linux.

Los comodines están disponibles para buscar el nombre de un archivo y arrojan todos los
resultados que son coincidencias parciales. Con los comodines, es esencial poner entre comillas el
nombre del archivo para evitar que el terminal interprete el comodín.

En el siguiente ejemplo, busque archivos comenzando en el directorio / que finalizan con la


extensión .txt:

[root@host ~]# find / -name '*.txt'


...output omitted...
/usr/share/libgpg-error/errorref.txt
/usr/share/licenses/audit-libs/lgpl-2.1.txt
/usr/share/licenses/pam/gpl-2.0.txt
...output omitted...

Para buscar archivos en el directorio /etc/ que contienen la cadena pass, ejecute el siguiente
comando:

[root@host ~]# find /etc -name '*pass*'


/etc/passwd-
/etc/passwd
/etc/security/opasswd
...output omitted...

Para realizar una búsqueda que no distinga entre mayúsculas y minúsculas de un nombre de
archivo determinado, use el comando find con la opción -iname, seguida del nombre del archivo
que desea buscar. Para buscar archivos con texto que no distinga entre mayúsculas y minúsculas, y
que coincida con la cadena messages, en sus nombres en el directorio root /, ejecute el siguiente
comando:

[root@host ~]# find / -iname '*messages*'


/sys/power/pm_debug_messages
/usr/lib/locale/C.utf8/LC_MESSAGES
/usr/lib/locale/C.utf8/LC_MESSAGES/SYS_LC_MESSAGES
...output omitted...

Búsqueda de archivos en función de la propiedad o los


permisos
El comando find busca archivos en función de la propiedad o los permisos. El comando find con
las opciones -user y -group busca por nombre de usuario y grupo, o por ID de usuario e ID de
grupo.

Para buscar archivos en el directorio /home/developer que es propietario del usuario


developer:

RH124-RHEL9.0-es-5-20230516 485
capítulo 13 | Acceso a los sistemas de archivos de Linux

[developer@host ~]$ find -user developer


.
./.bash_logout
./.bash_profile
...output omitted...

Para buscar archivos en el directorio /home/developer que es propietario del grupo


developer:

[developer@host ~]$ find -group developer


.
./.bash_logout
./.bash_profile
...output omitted...

Para buscar archivos en el directorio /home/developer que es propietario del ID de usuario


1000:

[developer@host ~]$ find -uid 1000


.
./.bash_logout
./.bash_profile
...output omitted...

Para buscar archivos en el directorio /home/developer que es propietario del ID del grupo
1000:

[developer@host ~]$ find -gid 1000


.
./.bash_logout
./.bash_profile
...output omitted...

El comando find con las opciones -user y -group busca archivos donde el propietario del
archivo y el propietario del grupo son diferentes. En el siguiente ejemplo, se enumeran los archivos
que posee el usuario root y con el grupo mail:

[root@host ~]# find / -user root -group mail


/var/spool/mail
...output omitted...

Se usa el comando find con la opción -perm para buscar archivos con una serie de permisos
particulares. Los valores octales definen los permisos con 4, 2 y 1 para leer, escribir y ejecutar. Los
permisos están precedidos por un signo / o - para controlar los resultados de la búsqueda.

Un permiso octal precedido por el signo / coincide con archivos que tengan al menos un permiso
establecido por usuario, grupo u otro, para esa serie de permisos. Un archivo con los permisos r--
r--r-- no coincide con el permiso /222 pero coincide con el permiso rw-r--r--. Un signo -
antes del permiso significa que las tres partes de los permisos deben coincidir. Para el ejemplo
anterior, los archivos con los permisos rw-rw-rw- coinciden. También puede usar el comando
find con la opción -perm para establecer permisos simbólicamente.

486 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

Por ejemplo, los siguientes comandos coinciden con cualquier archivo del directorio /home para el
cual el usuario propietario tiene permisos de lectura, escritura y ejecución, los miembros del grupo
propietario tienen permisos de lectura y escritura, y los demás tienen acceso de solo lectura.
Ambos comandos son equivalentes; el primero usa el método octal para los permisos, mientras
que el segundo usa los métodos simbólicos.

[root@host ~]# find /home -perm 764


...output omitted...
[root@host ~]# find /home -perm u=rwx,g=rw,o=r
...output omitted...

El comando find, opción -ls, es muy conveniente cuando se buscan archivos por permisos, ya
que proporciona información para los archivos, incluidos sus permisos.

[root@host ~]# find /home -perm 764 -ls


26207447 0 -rwxrw-r-- 1 user user 0 May 10 04:29 /home/user/file1

Para buscar archivos respecto de los cuales el usuario tiene al menos permisos de escritura y
ejecución, y el grupo tiene por lo menos permiso de escritura y los demás tienen por lo menos
permiso de lectura, ejecute el siguiente comando:

[root@host ~]# find /home -perm -324


...output omitted...
[root@host ~]# find /home -perm -u=wx,g=w,o=r
...output omitted...

Para buscar archivos para los cuales el usuario tiene permisos de lectura, o el grupo tiene por
lo menos permisos de lectura o los demás tienen por lo menos permiso de escritura, ejecute el
siguiente comando:

[root@host ~]# find /home -perm /442


...output omitted...
[root@host ~]# find /home -perm /u=r,g=r,o=w
...output omitted...

Cuando se usa con los signos / o -, el valor 0 funciona como comodín porque significa cualquier
permiso.

Para buscar cualquier archivo en el directorio /home/developer para el cual los demás tienen al
menos acceso de lectura en la máquina host, ejecute el siguiente comando:

[developer@host ~]$ find -perm -004


...output omitted...
[developer@host ~]$ find -perm -o=r
...output omitted...

Para buscar todos los archivos en el directorio /home/developer donde otros tienen permiso de
escritura, ejecute el siguiente comando:

RH124-RHEL9.0-es-5-20230516 487
capítulo 13 | Acceso a los sistemas de archivos de Linux

[developer@host ~]$ find -perm -002


...output omitted...
[developer@host ~]$ find -perm -o=w
...output omitted...

Buscar archivos según el tamaño


El comando find con la opción -size puede buscar archivos que coincidan con un valor
numérico, y la unidad buscar archivos que coincidan con un tamaño especificado. Use la siguiente
lista para las unidades con el comando find y la opción -size:

• Para kilobytes, use la unidad k con k siempre en minúscula.


• Para megabytes, use la unidad M con M siempre en mayúscula.
• Para gigabytes, use la unidad G con G siempre en mayúscula.

Puede usar los caracteres más + y menos - para incluir archivos que sean más grandes y más
pequeños que el tamaño dado, respectivamente. El siguiente ejemplo muestra una búsqueda de
archivos con un tamaño exacto de 10 megabytes:

[developer@host ~]$ find -size 10M


...output omitted...

Para buscar archivos con un tamaño mayor que 10 gigabytes:

[developer@host ~]$ find -size +10G


...output omitted...

Para buscar archivos con un tamaño menor que 10 kilobytes:

[developer@host ~]$ find -size -10k


...output omitted...

Importante
El comando find con la opción -size redondea todo a unidades individuales. Por
ejemplo, el comando find -size 1M muestra archivos de un tamaño menor que
1 MB porque redondea todos los archivos para arriba a 1 MB.

Búsqueda de archivos en función de la hora de modificación


El comando find con la opción -mmin, seguida de la hora en minutos, busca todos los archivos
de los cuales se ha cambiado su contenido hace n minutos en el pasado. La marca de tiempo del
archivo se redondea hacia abajo y admite valores fraccionarios con el rango +n y -n.

Para buscar todos los archivos con contenido modificado hace 120 minutos:

[root@host ~]# find / -mmin 120


...output omitted...

488 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

El modificador + delante de los minutos busca todos los archivos en el directorio / que cambiaron
hace más de nminutos. Para buscar todos los archivos con contenido modificado hace más de 200
minutos:

[root@host ~]# find / -mmin +200


...output omitted...

El modificador - busca todos los archivos en el directorio / que cambiaron hace menos de
nminutos. El siguiente ejemplo enumera los archivos que cambiaron hace menos de 150 minutos:

[root@host ~]# find / -mmin -150


...output omitted...

Búsqueda de archivos en función del tipo de archivo


El comando find con la opción -type limita el alcance de la búsqueda a un tipo de archivo dado:
Use los siguientes indicadores para limitar el alcance de la búsqueda:

• Para archivos regulares, use el indicador f.


• Para los directorios, use el indicador d.
• Para enlaces blandos, use el indicador l.
• Para dispositivos de bloque, use el indicador b.

Busque en todos los directorios en el directorio /etc:

[root@host ~]# find /etc -type d


/etc
/etc/tmpfiles.d
/etc/systemd
/etc/systemd/system
/etc/systemd/system/getty.target.wants
...output omitted...

Busque en todos los enlaces blandos en el directorio /:

[root@host ~]# find / -type l


...output omitted...

Busque en todos los dispositivos de bloque en el directorio /dev:

[root@host ~]# find /dev -type b


/dev/vda1
/dev/vda

El comando find con la opción -links seguida de un número busca todos los archivos que
tienen un determinado conteo de enlaces duros. El número precedido por un modificador + busca
archivos con un conteo más alto que el conteo de enlaces duros dado. Si el número precede a un
modificador -, la búsqueda se limita a todos los archivos con un conteo de enlaces duros que sea
menor que el número dado.

Busque todos los archivos regulares con más de un enlace duro:

RH124-RHEL9.0-es-5-20230516 489
capítulo 13 | Acceso a los sistemas de archivos de Linux

[root@host ~]# find / -type f -links +1


...output omitted...

Referencias
Páginas del manual: locate(1), updatedb(1), find(8)

490 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

Ejercicio Guiado

Localización de archivos en el sistema


En este ejercicio, buscará archivos específicos en sistemas de archivos montados con los
comandos find y locate.

Resultados
• Buscar archivos con los comandos find y locate.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start fs-locate

Instrucciones
1. En la máquina workstation, use el comando ssh para iniciar sesión en la máquina
servera con el usuario student.

[student@workstation ~]$ ssh student@servera


...output omitted...
[student@servera ~]$

2. Use el comando locate para buscar archivos en la máquina servera.

2.1. Actualice la base de datos locatedb manualmente en la máquina server. Use el


comando sudo updatedb para actualizar la base de datos usada.

[student@servera ~]$ sudo updatedb


[sudo] password for student: student
[student@servera ~]$

2.2. Busque el archivo de configuración logrotate.conf.

[student@servera ~]$ locate logrotate.conf


/etc/logrotate.conf
/usr/share/man/man5/logrotate.conf.5.gz

2.3. Busque el archivo de configuración networkmanager.conf e ignore la distinción


entre mayúsculas y minúsculas.

RH124-RHEL9.0-es-5-20230516 491
capítulo 13 | Acceso a los sistemas de archivos de Linux

[student@servera ~]$ locate -i networkmanager.conf


/etc/NetworkManager/NetworkManager.conf
/etc/dbus-1/system.d/org.freedesktop.NetworkManager.conf
/usr/share/man/man5/NetworkManager.conf.5.gz

3. Use el comando find a fin de realizar búsquedas en tiempo real en la máquina servera de
acuerdo con los siguientes requisitos:

• Enumere todos los archivos en el directorio /var/lib que sean propietario del usuario
chrony.
• Enumere todos los archivos en el directorio /var que sean propietario del usuario root y
del grupo mail.
• Enumere todos los archivos en el directorio /usr/bin que tengan un tamaño superior a
50 KB.
• Enumere todos los archivos en el directorio /home/student que se hayan modificado
en los últimos 120 minutos.
• Enumere todos los archivos del dispositivo de bloque en el directorio /dev.

3.1. Busque todos los archivos en el directorio /var/lib que es propietario del usuario
chrony, con privilegio root.

[student@servera ~]$ sudo find /var/lib -user chrony


[sudo] password for student: student
/var/lib/chrony
/var/lib/chrony/drift

3.2. Busque todos los archivos en el directorio /var que sean propietario del usuario
root y del grupo mail.

[student@servera ~]$ sudo find /var -user root -group mail


/var/spool/mail

3.3. Enumere todos los archivos en el directorio /usr/bin que tengan un tamaño de
archivo superior a 50 KB.

[student@servera ~]$ find /usr/bin -size +50k


/usr/bin/iconv
/usr/bin/locale
/usr/bin/localedef
/usr/bin/cmp
...output omitted...

3.4. Enumere todos los archivos en el directorio /home/student que se hayan


modificado en los últimos 120 minutos.

[student@servera ~]$ find /home/student -mmin -120


/home/student/.bash_logout
/home/student/.bash_profile
/home/student/.bashrc
...output omitted...

492 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

3.5. Enumere todos los archivos del dispositivo de bloque en el directorio /dev.

[student@servera ~]$ find /dev -type b


/dev/vdd
/dev/vdc
/dev/vdb
/dev/vda3
/dev/vda2
/dev/vda1
/dev/vda

4. Regrese a la máquina workstation con el usuario student.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish fs-locate

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 493
capítulo 13 | Acceso a los sistemas de archivos de Linux

Trabajo de laboratorio

Acceso a los sistemas de archivos de


Linux
En este trabajo de laboratorio, monta un sistema de archivos local y busca archivos
específicos en ese sistema de archivos.

Resultados
• Montar un sistema de archivos.

• Generar un informe de uso del disco.

• Buscar archivos en el sistema de archivos local.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start fs-review

Instrucciones
1. En la máquina serverb con el usuario root, identifique el UUID para el dispositivo /dev/
vdb1 y móntelo usando su UUID en el directorio /mnt/freespace.
2. Genere un informe de uso del disco para el directorio /usr/share. Guarde el resultado en
el archivo /mnt/freespace/results.txt.
3. Busque todos los archivos que coincidan con la palabra clave rsyslog.conf y almacene el
resultado en el archivo /mnt/freespace/search1.txt.
4. Almacene en el archivo /mnt/freespace/search2.txt el resultado de la búsqueda
de todos los archivos en el directorio /usr/share que tienen más de 50 MB y menos de
100 MB.
5. Regrese al sistema workstation con el usuario student.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade fs-review

494 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish fs-review

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 495
capítulo 13 | Acceso a los sistemas de archivos de Linux

Solución

Acceso a los sistemas de archivos de


Linux
En este trabajo de laboratorio, monta un sistema de archivos local y busca archivos
específicos en ese sistema de archivos.

Resultados
• Montar un sistema de archivos.

• Generar un informe de uso del disco.

• Buscar archivos en el sistema de archivos local.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start fs-review

Instrucciones
1. En la máquina serverb con el usuario root, identifique el UUID para el dispositivo /dev/
vdb1 y móntelo usando su UUID en el directorio /mnt/freespace.

1.1. Inicie sesión en la máquina serverb con el usuario student y cambie al usuario root.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#

1.2. Consulte el UUID del dispositivo /dev/vdb1.

[root@serverb ~]# lsblk -fp /dev/vdb


NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE%
MOUNTPOINTS
/dev/vdb
└─/dev/vdb1 xfs 44bfb7c8-970c-4d0b-b53d-90ae31cb27ca

1.3. Cree el directorio /mnt/freespace.

496 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

[root@serverb ~]# mkdir /mnt/freespace

1.4. Monte el dispositivo /dev/vdb1 mediante el uso del UUID en el directorio /mnt/
freespace.

[root@serverb ~]# mount UUID="44bfb7c8-970c-4d0b-b53d-90ae31cb27ca" /mnt/freespace

1.5. Verifique que el dispositivo /dev/vdb1 esté montado en el directorio /mnt/


freespace.

[root@serverb ~]# lsblk -fp /dev/vdb1


NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE%
MOUNTPOINTS
/dev/vdb1
xfs 44bfb7c8-970c-4d0b-b53d-90ae31cb27ca 4.9G 1% /
mnt/freespace

2. Genere un informe de uso del disco para el directorio /usr/share. Guarde el resultado en
el archivo /mnt/freespace/results.txt.

[root@serverb ~]# du /usr/share > /mnt/freespace/results.txt

3. Busque todos los archivos que coincidan con la palabra clave rsyslog.conf y almacene el
resultado en el archivo /mnt/freespace/search1.txt.

3.1. Actualice la base de datos locate.

[root@serverb ~]# updatedb

3.2. Use el comando locate para buscar todos los archivos que coincidan con la palabra
clave rsyslog.conf y almacene el resultado en el archivo /mnt/freespace/
search1.txt.

[root@serverb ~]# locate rsyslog.conf > /mnt/freespace/search1.txt

4. Almacene en el archivo /mnt/freespace/search2.txt el resultado de la búsqueda


de todos los archivos en el directorio /usr/share que tienen más de 50 MB y menos de
100 MB.

[root@serverb ~]# find /usr/share -size +50M -size -100M > \


/mnt/freespace/search2.txt

5. Regrese al sistema workstation con el usuario student.

[root@serverb ~]$ exit


logout
[student@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$

RH124-RHEL9.0-es-5-20230516 497
capítulo 13 | Acceso a los sistemas de archivos de Linux

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade fs-review

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish fs-review

Esto concluye la sección.

498 RH124-RHEL9.0-es-5-20230516
capítulo 13 | Acceso a los sistemas de archivos de Linux

Resumen
• Los dispositivos de almacenamiento se representan como un tipo de archivo denominado
dispositivo de bloque.

• El comando df arroja un informe con el espacio en disco total, el espacio en disco usado y el
espacio en disco libre en todos los sistemas de archivos regulares montados.

• El usuario root puede usar el comando mount para montar manualmente un sistema de
archivos.

• Para desmontar correctamente un dispositivo, todos los procesos deben dejar de acceder al
punto de montaje.

• Los dispositivos de almacenamiento extraíbles están montados en el directorio /run/media al


usar el entorno gráfico.

• El comando lsblk enumera los detalles de los dispositivos de bloque, como el tamaño y el
UUID.

• El comando find busca en tiempo real en los sistemas de archivos locales para encontrar
archivos en función de los criterios de búsqueda.

RH124-RHEL9.0-es-5-20230516 499
500 RH124-RHEL9.0-es-5-20230516
capítulo 14

Análisis de servidores y soporte


Meta Investigar y resolver problemas en la interfaz de
administración web, y obtener soporte de Red Hat
para resolver problemas.

Objetivos • Activar la interfaz de administración de la


consola web para administrar y monitorear de
forma remota el rendimiento de un servidor de
Red Hat Enterprise Linux.
• Describir y usar los recursos clave en el
portal de clientes de Red Hat para encontrar
información en la documentación y la base de
conocimientos de Red Hat.
• Usar Red Hat Insights para analizar los
servidores en busca de problemas, corregirlos
o resolverlos, y confirmar que la solución haya
funcionado.

Secciones • Análisis y gestión de servidores remotos (y


ejercicio guiado)
• Creación de un informe de diagnóstico (y
ejercicio guiado)
• Detección y resolución de problemas con
Red Hat Insights (y cuestionario)

RH124-RHEL9.0-es-5-20230516 501
capítulo 14 | Análisis de servidores y soporte

Análisis y gestión de servidores remotos

Objetivos
Activar la interfaz de administración de la consola web para administrar y monitorear de forma
remota el rendimiento de un servidor de Red Hat Enterprise Linux.

Descripción de la consola web


La consola web es una interfaz de gestión web para Red Hat Enterprise Linux. La interfaz está
diseñada para gestionar y monitorear sus servidores y se basa en el servicio Cockpit de código
abierto.

Puede usar la consola web para monitorear los registros del sistema y ver gráficos del rendimiento
del sistema. Además, puede usar su explorador web para cambiar la configuración con
herramientas gráficas en la interfaz de la consola web, que incluye una sesión interactiva de
terminal totalmente funcional.

Habilitación de la consola web


A partir de Red Hat Enterprise Linux 7, se instala la consola web de manera predeterminada en
todas las variantes de instalación, excepto en una instalación mínima. Puede usar el siguiente
comando para instalar la consola web:

[root@host ~]# dnf install cockpit

Luego, habilite e inicie el servicio cockpit.socket, que ejecuta un servidor web. Este paso es
necesario si necesita conectarse al sistema a través de la interfaz web.

[root@host ~]# systemctl enable --now cockpit.socket


Created symlink /etc/systemd/system/sockets.target.wants/cockpit.socket -> /usr/
lib/systemd/system/cockpit.socket.

Si está usando un perfil de firewall personalizado, debe agregar el servicio cockpit a firewalld
para abrir el puerto 9090 en el firewall:

[root@host ~]# firewall-cmd --add-service=cockpit --permanent


success
[root@host ~]# firewall-cmd --reload
success

Inicio de sesión en la consola web


La consola web proporciona su propio servidor web. Inicie su explorador web para iniciar sesión en
la consola web.

Abra https://servername:9090 en su explorador web, donde servername es el nombre de host o


dirección IP de su servidor. La consola web protege la conexión mediante una sesión de Seguridad
de la capa de transporte (TLS). De manera predeterminada, el servicio cockpit instala la consola

502 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

web con un certificado TLS autofirmado. Cuando se conecta a la consola web por primera vez, el
explorador web probablemente muestra una advertencia de seguridad. En la página del manual
cockpit-ws(8), se proporcionan instrucciones sobre cómo reemplazar el certificado TLS con
uno firmado correctamente.

Para iniciar sesión en la consola web, ingrese su nombre de usuario y contraseña en la pantalla de
inicio de sesión. Puede iniciar sesión con el nombre de usuario y la contraseña de cualquier cuenta
local del sistema, incluido el usuario root.

Figura 14.1: Pantalla de inicio de sesión de la consola web

Haga clic en Log In (Siguiente).

Después de iniciar sesión, la consola web muestra el nombre de usuario en el lado izquierdo de la
barra de título. El acceso predeterminado a la consola web es con derechos limitados, como puede
ver en el siguiente botón Limited access y en el mensaje "La consola web se está ejecutando en
modo de acceso limitado".

Figura 14.2: Barra de título del usuario sin privilegios

Si su cuenta está configurada con los privilegios adecuados, puede escalar los privilegios
cambiando a acceso administrativo, haciendo clic en los botones Limited access o Turn on
administrative access. Durante el proceso de aumento de privilegios, debe ingresar su contraseña.
Cuando haya aumentado los privilegios, el botón Limited access cambiará a Administrative
access.

Puede volver al modo de acceso limitado haciendo clic en el botón Administrative access y luego
en el botón Limit access en la ventana emergente que aparece.

Figura 14.3: Barra de título del usuario con privilegios

RH124-RHEL9.0-es-5-20230516 503
capítulo 14 | Análisis de servidores y soporte

Cambiar contraseñas en la consola web


Puede cambiar su propia contraseña cuando está conectado a la consola web. Haga clic en el
botón Accounts en la barra de navegación. Haga clic en la etiqueta de su cuenta para abrir la
página de detalles de la cuenta.

Figura 14.4: Cuentas de usuario

Como usuario sin privilegios, solo puede configurar o restablecer su contraseña y administrar
claves SSH públicas. Para configurar o restablecer su contraseña, haga clic en el botón Set
password.

Figura 14.5: Detalles de la cuenta de usuario

Ingrese su información en los campos Old password, New password y Confirm new password.
Haga clic en el botón Set password para activar la contraseña nueva.

504 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Figura 14.6: Configuración y restablecimiento de contraseñas

Solución de problemas con la consola web


La consola web es una poderosa herramienta de solución de problemas. Puede monitorear las
estadísticas del sistema en tiempo real, inspeccionar los registros del sistema y cambiar a una
sesión de terminal dentro de la consola web para recopilar información adicional de la interfaz de
línea de comandos.

Monitoreo de estadísticas del sistema en tiempo real


Haga clic en el botón Overview en la barra de navegación para ver información sobre el sistema,
como su tipo de hardware, sistema operativo, nombre de host y más. Si ha iniciado sesión como
usuario sin privilegios, verá toda la información, pero no modificará ningún valor. En la siguiente
imagen, se muestra la página Overview.

Figura 14.7: Página de Descripción general del usuario sin privilegios

Haga clic en View details and history en la página Overview para ver detalles del rendimiento
actual del sistema, como la actividad de la CPU, el uso de memoria, las E/S del disco y el uso de la
red.

RH124-RHEL9.0-es-5-20230516 505
capítulo 14 | Análisis de servidores y soporte

Figura 14.8: Indicadores de rendimiento del sistema del usuario sin privilegios

Inspección y filtrado de eventos de Syslog


En la sección Logs de la barra de navegación, se proporciona acceso a herramientas de análisis
para los registros del sistema. Puede usar los menús de desplazamiento en la página para filtrar
los mensajes de registro por un rango de fechas de registro, por nivel de prioridad o ambos. La
consola web usa la fecha actual como predeterminada, pero puede hacer clic en el menú de fecha
y seleccionar un rango de fechas. De manera similar, el menú Priority proporciona opciones que
van desde Debug and above (el nivel más bajo) hasta condiciones de gravedad más específicas,
como Alert and above o Error and above.

Figura 14.9: Selecciones de gravedad de registro

Haga clic en una fila para ver los detalles del informe de registro. En el siguiente ejemplo, observe
la primera fila que informa sobre un mensaje de registro de sudo.

506 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Figura 14.10: Selección de entrada de registro

En el siguiente ejemplo se muestran los detalles que se visualizan en la consola web cuando hace
clic en la fila sudo. Los detalles del informe incluyen la entrada de registro seleccionada (sudo),
la fecha, hora, prioridad y tipo de syslog de la entrada de registro y el nombre de host del sistema
que informó el mensaje de registro.

Figura 14.11: Detalles de la entrada de registro

Ejecución de comandos desde una sesión de terminal


El botón Terminal en la barra de navegación proporciona acceso a una sesión de terminal
totalmente funcional dentro de la interfaz de la consola web. En este terminal de la consola web,
puede ejecutar comandos arbitrarios para gestionar y trabajar con el sistema y para tareas que no
son compatibles con las otras herramientas de la consola web.

En la siguiente imagen, se muestran ejemplos de comandos para recopilar información adicional.


Por ejemplo, enumerar el contenido del directorio /var/log proporciona recordatorios de
los archivos de registro que pueden tener información valiosa. El comando id proporciona
información, como la pertenencia a un grupo, que puede ayudar a solucionar los problemas de
restricciones de acceso a los archivos. El comando ps au proporciona una vista de los procesos
que se ejecutan en el terminal y el usuario asociado con el proceso.

RH124-RHEL9.0-es-5-20230516 507
capítulo 14 | Análisis de servidores y soporte

Figura 14.12: Solución de problemas de sesión de terminal sin privilegios

Creación de informes de diagnóstico


Un informe de diagnóstico es una recopilación de detalles de configuración, información del
sistema e información de diagnóstico de un sistema de Red Hat Enterprise Linux. Los datos
recopilados en el informe incluyen los registros del sistema y la información de depuración que
puede usar para solucionar problemas.

Para generar un informe de diagnóstico, inicie sesión en la consola web como usuario privilegiado.
Haga clic en el botón Diagnostic Reports en la barra de navegación para abrir la página que crea
estos informes. Haga clic en el botón Create report para generar un nuevo informe de diagnóstico.

Figura 14.13: Creación de un informe de diagnóstico

Después de unos minutos, la interfaz, muestra Done! cuando el informe está completo. Haga clic
en el botón Download report para guardar el informe en su sistema local.

508 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Figura 14.14: Descarga de un informe completo

Haga clic en Save File y complete el proceso.

Administración de servicios del sistema con la consola


web
Como usuario privilegiado en la consola web, puede detener, iniciar, habilitar y reiniciar los
servicios del sistema. Además, puede configurar interfaces de red, configurar servicios de firewall,
administrar cuentas de usuario y más.

Opciones de cierre del sistema


En la consola web, puede reiniciar o apagar el sistema. Para acceder a las opciones de energía del
sistema, inicie sesión en la consola web como usuario privilegiado. Haga clic en el botón Overview,
en la barra de navegación, para acceder a las opciones de cierre del sistema.

Desde el menú de arriba a la derecha, seleccione la opción adecuada para reiniciar o apagar un
sistema.

Figura 14.15: Opciones de cierre del sistema

Control de servicios del sistema en ejecución


Puede iniciar, habilitar, deshabilitar y detener servicios con herramientas gráficas en la consola
web. Haga clic en el botón Services en la barra de navegación para acceder a la página inicial
de servicios de la consola web. La página Services muestra la pestaña de servicios del sistema
de manera predeterminada. Puede cambiar a Targets o Sockets haciendo clic en la pestaña
correspondiente. Use la barra de búsqueda o desplácese por la página para seleccionar el servicio
que desea gestionar.

En el siguiente ejemplo, seleccione la fila atd.service para abrir la página de administración de


servicios.

RH124-RHEL9.0-es-5-20230516 509
capítulo 14 | Análisis de servidores y soporte

Figura 14.16: Servicios: vista inicial

Haga clic en los botones Stop, Restart o Disallow running (mask) según corresponda para
administrar el servicio. En esta vista, el servicio ya se está ejecutando. Para ver información
adicional relacionada con el servicio, haga clic en cualquiera de los enlaces seleccionados o
desplácese por los registros de servicio, que se muestran debajo de la sección de administración
de servicios.

Figura 14.17: Servicios: detalles de servicio e interfaz de administración

Configuración de interfaces de red y firewall


Para gestionar las reglas de firewall y las interfaces de red, haga clic en el botón Networking en la
barra de navegación. En el siguiente ejemplo, se muestran cómo recopilar información sobre las
interfaces de red y cómo administrarlas.

510 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Figura 14.18: Redes: vista inicial

Haga clic en el nombre de interfaz adecuado en la sección Interfaces para acceder a la página
de administración. En este ejemplo, la interfaz eth0 está seleccionada. En la parte superior
de la página de administración, se muestra la actividad del tráfico de red para el dispositivo
seleccionado. Desplácese hacia abajo para ver los ajustes de configuración y las opciones de
administración.

Figura 14.19: Redes: detalles de la interfaz

Para modificar o agregar opciones de configuración a una interfaz, haga clic en los enlaces
seleccionados para la configuración deseada. En este ejemplo, el enlace IPv4 muestra una única
dirección IP y máscara de red, 172.25.250.9/24, para la interfaz de red eth0. Para agregar una
dirección IP adicional a la interfaz de red eth0, haga clic en el enlace edit.

RH124-RHEL9.0-es-5-20230516 511
capítulo 14 | Análisis de servidores y soporte

Haga clic en el símbolo + a la derecha de la selección de lista Manual para agregar una dirección
IP. Introduzca una dirección IP y una máscara de red en los campos correspondientes. Haga clic en
Apply para activar la nueva configuración.

Figura 14.20: Adición de una dirección IP a una interfaz existente

La pantalla vuelve automáticamente a la página de administración de la interfaz, donde puede


confirmar la nueva dirección IP.

Figura 14.21: Confirmación de la nueva dirección IP

512 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Administración de cuentas de usuario


Como usuario privilegiado, puede crear cuentas de usuario en la consola web. Haga clic en
Accounts en la barra de navegación para ver las cuentas existentes. Haga clic en Create new
account para abrir la página de gestión de cuentas.

Figura 14.22: Cuentas de usuario existentes

Ingrese la información para la nueva cuenta y haga clic en Create (Crear).

Figura 14.23: Creación de una cuenta

La pantalla revierte automáticamente a la página de gestión de la cuenta, donde puede confirmar


la nueva cuenta de usuario.

RH124-RHEL9.0-es-5-20230516 513
capítulo 14 | Análisis de servidores y soporte

Figura 14.24: Página de gestión de la cuenta

Referencias
Páginas del manual: cockpit(1), cockpit-ws(8) y cockpit.conf(5)

Para obtener más información, consulte Managing Systems Using the RHEL 9 Web
Console en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-
single/managing_systems_using_the_rhel_9_web_console/index#getting-started-
with-the-rhel-9-web-console_managing-systems-using-the-web-console

514 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Ejercicio Guiado

Análisis y gestión de servidores remotos


En este ejercicio, habilitará y accederá a la consola web en un servidor para administrarla, y
diagnosticar y resolver problemas.

Resultados
• Usar la consola web para monitorear las características básicas del sistema, inspeccionar
los archivos de registro, crear cuentas de usuario y acceder al terminal.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start support-cockpit

Instrucciones
1. Inicie sesión en la máquina servera con el usuario student.

[student@workstation ~]$ ssh student@servera


[student@servera ~]$

2. La consola web ya está instalada en el sistema, pero no está activada. Habilite e inicie el
servicio cockpit.

2.1. Habilite la consola web.

[student@servera ~]$ sudo systemctl enable --now cockpit.socket


[sudo] password for student: student
Created symlink /etc/systemd/system/sockets.target.wants/cockpit.socket -> /usr/
lib/systemd/system/cockpit.socket.

3. En la máquina workstation, abra el explorador web Firefox e inicie sesión en la interfaz de


la consola web en servera.lab.example.com. Inicie sesión con el usuario student.

3.1. Abra el explorador y diríjase a https://servera.lab.example.com:9090.

3.2. Acepte el certificado autofirmado agregándolo como una excepción.

3.3. Inicie sesión con el usuario student con la contraseña student.


Ya ha iniciado sesión en la consola web como usuario normal, con privilegios mínimos.

4. Verifique su autorización actual en la interfaz de la consola web.

RH124-RHEL9.0-es-5-20230516 515
capítulo 14 | Análisis de servidores y soporte

4.1. Haga clic en el botón Terminal en la barra de navegación izquierda para acceder al
terminal.
Se abre una sesión de terminal donde la sesión del usuario student ya está iniciada.
Verifique que la ejecución del comando funcione en el terminal incorporado.

[student@servera ~]$ id
uid=1000(student) gid=1000(student) groups=1000(student),10(wheel)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

4.2. Haga clic en el botón Accounts en la barra de navegación izquierda para administrar
usuarios.
El botón Create new account no aparece, ya que ha iniciado sesión con acceso
limitado.

4.3. Haga clic en el vínculo Student User.


En la página de detalles de cuenta del usuario student, solo puede establecer una
nueva contraseña o agregar claves públicas SSH autorizadas.

5. Escale privilegios en la consola web.

5.1. Haga clic en el botón Limited access para cambiar al acceso administrativo. Use
student como contraseña de usuario student y haga clic en el botón Authenticate.
La consola web reemplaza el botón Limited access por el botón Administrative
access.

6. Para consultar las estadísticas del sistema, haga clic en Overview en la barra de navegación
izquierda y en el botón View details and history en la sección Usage.
En esta página, se muestran varias de las estadísticas del sistema operativo, como la carga
actual, el uso del disco, las E/S del disco y el tráfico de red.

7. Para inspeccionar los registros del sistema, haga clic en el botón Logs en la barra de
navegación izquierda.
En esta página, se muestran los registros del sistema de systemd. Use los botones
ubicados en la esquina superior izquierda para modificar la manera en que se muestran las
entradas de registro según la fecha y la prioridad de los registros.

7.1. Haga clic en la lista Priority y seleccione Debug and above.

7.2. En función del día actual del mes, haga clic en cualquier entrada de registro de la lista.
Se abre una página de detalles de entrada de registro con información adicional sobre
el evento, como el nombre de host, el contexto de SELinux o el número de PID del
proceso al que corresponde la entrada.

8. Agregue una segunda dirección IP a un dispositivo de interfaz de red existente.

8.1. Haga clic en el botón Networking en la barra de navegación izquierda.


En esta página, se muestran los detalles de la configuración de red actual para
servera, así como las estadísticas de red en tiempo real, la configuración de firewall
y las entradas de registro relacionadas con la red.

8.2. Desplácese hacia abajo hasta la sección Interfaces y haga clic en la fila de la interfaz
de red eth0.

516 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

En una página de detalles, se muestran las estadísticas de red en tiempo real y la


configuración actual de la interfaz de red.

8.3. Haga clic en el enlace edit en la sección IPv4.


Se abre una ventana IPv4 settings donde puede cambiar la configuración de la
interfaz de red.

8.4. En la ventana IPv4 settings, haga clic en el botón + junto a la lista Manual.

8.5. En el cuadro de texto Address, ingrese 172.25.250.99 como la segunda dirección


IP.

8.6. En el cuadro de texto Prefix length or Netmask, ingrese 24 como el valor de la


máscara de red.

8.7. Haga clic en Apply para guardar la nueva configuración de red.


La nueva configuración se aplica inmediatamente en la consola web. La nueva
dirección IP es visible en la línea IPv4.

9. Cree una cuenta de usuario.

9.1. Haga clic en el botón Accounts en la barra de navegación izquierda. La consola web
ahora muestra el botón Create new account, ya que tiene derechos administrativos.

9.2. Haga clic en el botón Create new account.

9.3. En la ventana Create new account, agregue los siguientes detalles:

Campo Valor

Nombre completo manager1

Nombre de usuario manager1

Contraseña redh@t!23

Confirmar redh@t!23

9.4. Haga clic en Create (Siguiente).

10. Acceda a una sesión de terminal dentro de la consola web para agregar el usuario
manager1 al grupo wheel.

10.1. Haga clic en el botón Terminal en la barra de navegación izquierda.

10.2. Use el comando id manager1 para ver los miembros del grupo del usuario
manager1.

[student@servera ~]$ id manager1


uid=1002(manager1) gid=1002(manager1) groups=1002(manager1)

10.3. Use el comando sudo usermod -aG wheel manager1 para agregar al usuario
manager1 al grupo wheel.

RH124-RHEL9.0-es-5-20230516 517
capítulo 14 | Análisis de servidores y soporte

[student@servera ~]$ sudo usermod -aG wheel manager1


[sudo] password for student: student

10.4. Use el comando id manager1 para verificar que el usuario manager1 sea miembro
del grupo wheel.

[student@servera ~]$ id manager1


uid=1002(manager1) gid=1002(manager1) groups=1002(manager1),10(wheel)

11. Habilite e inicie el servicio Contabilidad de procesos de kernel (psacct).

11.1. Haga clic en el botón Services en la barra de navegación izquierda.

11.2. Busque el servicio Kernel process accounting. Haga clic en el enlace de servicio. Una
página de detalles muestra el estado del servicio como deshabilitado.

11.3. Haga clic en el botón Start and Enable junto al nombre del servicio.

11.4. El servicio ya está habilitado e iniciado.

12. Cierre sesión en la interfaz de la consola web.

13. Regrese al sistema workstation con el usuario student.

[student@servera ~]$ exit


[student@workstation ~]$

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish support-cockpit

Esto concluye la sección.

518 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Creación de un informe de diagnóstico

Objetivos
Describir y usar los recursos clave en el portal de clientes de Red Hat para encontrar información
en la documentación y la base de conocimientos de Red Hat.

Recursos del portal de clientes de Red Hat


El portal de clientes de Red Hat en https://access.redhat.com proporciona a los clientes acceso a
documentación, descargas, herramientas y experiencia técnica. La base de conocimientos permite
a los clientes buscar soluciones, preguntas frecuentes y artículos. En la siguiente lista, se muestran
algunas funciones del Portal de clientes de Red Hat:

• Acceder a la documentación oficial de los productos, soluciones y preguntas frecuentes.


• Enviar y gestionar casos de soporte.
• Gestionar las suscripciones y los derechos de software.
• Obtener descargas, actualizaciones y evaluaciones de software.
• Acceder a un catálogo de recomendaciones de seguridad para los productos de Red Hat.
• Acceda a un motor de búsqueda integrado para los recursos de Red Hat.
• Acceder a informes técnicos, hojas de información y presentaciones multimedia.
• Participar en los debates de la comunidad.

Algunas secciones del sitio son de acceso público y otras áreas requieren una suscripción activa.
Visite https://access.redhat.com/help/ para obtener ayuda para acceder al Portal de clientes de
Red Hat.

Recorrido del portal de clientes de Red Hat


Acceda al Portal de clientes de Red Hat visitando https://access.redhat.com/ Esta sección
presenta el recorrido por el Portal de clientes de Red Hat en https://access.redhat.com/start.

Con el recorrido, puede descubrir las características del portal y aprovechar al máximo las ventajas
de su suscripción a Red Hat. Una vez que haya iniciado sesión en el portal de clientes de Red Hat,
haga clic en el botón Tour the Customer Portal.

Aparecerá la ventana WELCOME TO THE RED HAT CUSTOMER PORTAL. Haga clic en el botón
Let's go para iniciar el recorrido.

Barra de navegación superior


Los primeros menús del recorrido, en la barra de navegación superior son Suscripciones,
Descargas, Contenedores y Casos de soporte.

El menú Subscriptions abre una página nueva donde puede gestionar los sistemas registrados y
el uso de suscripciones y los derechos. Esta página enumera la información de erratas aplicables.
Puede crear claves de activación para registrar sistemas y garantizar los derechos correctos. El
administrador de la organización de su cuenta puede restringir su acceso a esta página.

El menú Downloads abre una nueva página para acceder a las descargas de sus productos y
solicitar la evaluación de los productos sin derechos.

RH124-RHEL9.0-es-5-20230516 519
capítulo 14 | Análisis de servidores y soporte

El menú Support Cases abre una página nueva que brinda acceso para crear, rastrear y gestionar
los casos de soporte a través del sistema de gestión de casos, suponiendo que su organización ha
autorizado ese nivel de acceso.

Con el menú User Menu, gestione su cuenta, las cuentas de las que es administrador de la
organización, su perfil y las opciones de notificación por correo electrónico.

El icono de globo terráqueo abre el menú Language para especificar sus preferencias de idioma
para el portal de clientes de Red Hat.

Diríjase a los menús del Portal de clientes de Red Hat


Debajo de la barra de navegación superior en la página principal hay menús para navegar a las
categorías principales de recursos disponibles en el sitio.

Figura 14.25: Menús del Portal de clientes de Red Hat

El menú Products & Services proporciona acceso a Product Hubs para evaluaciones, guías de
inicio y otra información de soporte específica para el producto. También puede acceder a la
documentación sobre productos de Red Hat, a la base de conocimientos de artículos de soporte
y cómo ponerse en contacto con el soporte de Red Hat. Puede acceder a los servicios que ofrece
Red Hat, como consultoría, gestión de cuentas técnicas y capacitación y certificaciones.

El menú Tools proporciona vínculos a herramientas para ayudarlo a tener éxito con los productos
de Red Hat. Las herramientas ayudan a solucionar un problema de producto y proporcionan
información de paquetes y erratas. La sección Customer Portal Labs proporciona una colección
de aplicaciones y herramientas web para ayudarlo a mejorar el rendimiento, diagnosticar
problemas, identificar problemas de seguridad y optimizar sus configuraciones. La sección
Red Hat Insights ayuda a analizar plataformas y aplicaciones para predecir riesgos, tomar las
medidas recomendadas y realizar un seguimiento de los costos para gestionar entornos de nube
híbrida. Insights alerta a los administradores antes de una interrupción, o sobre un evento de
seguridad o un gasto excesivo.

El menú Security proporciona acceso al Centro de seguridad de productos de Red Hat para
actualizaciones de seguridad y evita que los entornos se expongan a vulnerabilidades de
seguridad. Esta sección proporciona información sobre problemas de seguridad de alto perfil,
con acceso a las notificaciones de seguridad, la base de datos de Vulnerabilidades y exposiciones
comunes de Red Hat (CVE), los laboratorios de seguridad, el blog de seguridad de Red Hat, la
medición de seguridad, las clasificaciones de gravedad, las políticas de backporting y las claves de
firma de productos GNU Privacy Guard (GPG).

El menú Community da acceso a la sección Customer Portal Community para debates


y grupos privados. Esta sección permite que los expertos, clientes y partners de Red Hat se
comuniquen y colaboren. Esta sección contiene foros de debate, blogs e información sobre los
próximos eventos.

520 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

nota
Red Hat recomienda ver el recorrido completo en Iniciación con Red Hat [https://
access.redhat.com/start], incluidas las secciones del menú How to Personalize
Your Customer Portal experience, el menú Explore the Benefits of Your Red Hat
subscription y el menú How to Engage Red Hat Support. Se requiere una
suscripción activa para acceder a estos recursos de suscripción.

Póngase en contacto con el servicio de atención al


cliente de Red Hat
El portal de clientes de Red Hat proporciona acceso a soporte técnico para clientes con una
suscripción activa. Puede ponerse en contacto con soporte abriendo un caso de soporte o una
sesión de chat, o por teléfono. Para obtener información detallada, visite la dirección https://
access.redhat.com/support/policy/support_process.

Preparar un caso de soporte


Antes de comunicarse con la asistencia de Red Hat, es importante reunir la información relevante
para el informe.

Defina el problema. Indique el problema y sus síntomas específicamente. Proporcione pasos


detallados para reproducir el problema.

Reúna información básica. ¿Qué producto y versión se ven afectados? Esté preparado para brindar
información de diagnóstico relevante. Esta información puede incluir la salida del comando sos
report. En el caso de problemas del kernel, dicha información podría incluir un vuelco de errores
de kdump del sistema o una fotografía digital del seguimiento de pila mostrado en el monitor de
un sistema bloqueado.

Determine el nivel de gravedad. Red Hat usa cuatro niveles de gravedad para clasificar problemas.
Los informes de problemas de gravedad Urgente y Alta debe seguirse mediante una llamada
telefónica al centro de asistencia local pertinente (consulte https://access.redhat.com/support/
contact/technicalSupport).

Gravedad Descripción

Urgente (Gravedad 1) Un problema que afecta gravemente su uso del software en un


entorno de producción. Esta gravedad incluye la pérdida de datos de
producción o el mal funcionamiento de los sistemas de producción.
La situación interrumpe las operaciones empresariales y no existe un
procedimiento de resolución.

Alta (Gravedad 2) Un problema donde el software funciona, pero el uso en un entorno


de producción se ve gravemente reducido. La situación tiene un
gran impacto en sus operaciones empresariales y no existe un
procedimiento de resolución.

Media (Gravedad 3) Un problema que implica una pérdida parcial no fundamental de


la capacidad de uso del software en un entorno de producción o
desarrollo. Para los entornos de producción, el problema implica un
impacto medio a bajo en su empresa. La empresa sigue funcionando
con una solución procesal. En entornos de desarrollo, la situación
provoca problemas al migrar el proyecto a producción.

RH124-RHEL9.0-es-5-20230516 521
capítulo 14 | Análisis de servidores y soporte

Gravedad Descripción

Baja (Gravedad 4) Un asunto de uso general, la comunicación de un error de


documentación o una recomendación para una mejora o modificación
futura del producto. En entornos de producción, el impacto en el
negocio o en el rendimiento o la funcionalidad del sistema es bajo o
inexistente. En entornos de desarrollo, el problema implica un impacto
de medio a bajo en el negocio, pero la empresa continúa funcionando
con un procedimiento de resolución.

Utilidad de informes SOS


El informe sos es generalmente el punto de partida para que el soporte técnico de Red Hat
investigue el problema informado. Esta utilidad proporciona una manera estandarizada de
recopilar información de diagnóstico que el soporte técnico de Red Hat necesita para investigar
los problemas informados. El comando sos report recopila diversa información de depuración
de uno o más sistemas y proporciona una opción para eliminar datos confidenciales. Este informe
se adjunta al caso de soporte de Red Hat. El comando sos collect ejecuta y recopila informes
sos individuales de un conjunto específico de nodos. El comando sos clean oculta información
potencialmente confidencial, como nombres de usuario, nombres de host, direcciones IP o MAC u
otros datos especificados por el usuario.

La siguiente lista contiene información que se puede recopilar en un informe:

• La versión del kernel en ejecución


• Módulos de kernel cargados
• Archivos de configuración del sistema y del servicio
• Salida del comando de diagnóstico
• Enumeración de todos los paquetes instalados

Puede generar un informe de diagnóstico para enviarlo al soporte técnico de Red Hat mediante la
consola web o la línea de comandos.

Generación de un informe SOS con la consola web


Para generar un informe sos con la consola web, debe iniciar sesión como usuario con privilegios.

522 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Figura 14.26: Use un usuario privilegiado para iniciar sesión.

Haga clic en Diagnostic Reports y, luego, en Create report:

RH124-RHEL9.0-es-5-20230516 523
capítulo 14 | Análisis de servidores y soporte

Figura 14.27: Creación de un informe de diagnóstico

El informe de diagnóstico tarda unos minutos en generarse.

Figura 14.28: Generación de un informe de diagnóstico

Haga clic en Download report seguido de Save File para guardar el informe de diagnóstico.

524 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Figura 14.29: Descargue el informe de diagnóstico en el sistema local.

Generación de un informe SOS desde la línea de comandos


Red Hat Enterprise Linux instala la utilidad de informes sos con el paquete sos:

[root@host ~]# dnf install sos


...output omitted...
Complete!

La generación del informe sos requiere privilegios root. Ejecute el comando sos report para
generar el informe.

[root@host ~]# sos report


...output omitted...
Press ENTER to continue, or CTRL-C to quit.

Optionally, please enter the case id that you are generating this report for []:
...output omitted...
Your sosreport has been generated and saved in:
/var/tmp/sosreport-host-2022-03-29-wixbhpz.tar.xz
..output omitted...
Please send this file to your support representative.

Cuando proporciona cualquier ID de caso de soporte en el comando anterior, el informe se adjunta


directamente al caso de soporte creado anteriormente. También puede usar el comando sos
report con la opción --utility para enviar el informe al soporte técnico.

Verifique que el comando sos report haya creado el archivo de almacenamiento en la ubicación
anterior.

[root@host ~]# ls -l /var/tmp/


total 9388
-rw-------. 1 root root 9605952 Mar 29 02:09 sosreport-host-2022-03-29-
wixbhpz.tar.xz
-rw-r--r--. 1 root root 65 Mar 29 02:09 sosreport-host-2022-03-29-
wixbhpz.tar.xz.sha256
...output omitted...

El comando sos clean oculta la información personal del informe.

RH124-RHEL9.0-es-5-20230516 525
capítulo 14 | Análisis de servidores y soporte

[root@host ~]# sos clean /var/tmp/sosreport-host-2022-03-29-wixbhpz.tar.xz*


...output omitted...
Press ENTER to continue, or CTRL-C to quit.
...output omitted...
The obfuscated archive is available at
/var/tmp/sosreport-host0-2022-03-29-wixbhpz-obfuscated.tar.xz
...output omitted...
Please send the obfuscated archive to your support representative and keep the
mapping file private

Enviar el informe SOS a la asistencia técnica de Red Hat


Seleccione uno de estos métodos para enviar un informe sos al soporte técnico de Red Hat.

• Envíe el informe sos mediante el uso del comando sos report, opción --upload.

• Envíe un informe sos al portal de clientes de Red Hat adjuntándolo al caso de soporte.

Únase al programa para desarrolladores de Red Hat


El programa para desarrolladores de Red Hat en https://developers.redhat.com proporciona
derechos de suscripción al software de Red Hat para propósitos de desarrollo, documentación
y libros de primera calidad de nuestros expertos en microservicios, computación sin servidor,
Kubernetes y Linux. También hay disponibles enlaces de blogs a información sobre próximos
eventos y capacitación, y otros recursos de ayuda.

Si desea más información, visite https://developers.redhat.com/.

Referencias
Página del manual: sosreport(1)

Contacto con la Asistencia técnica de Red Hat


https://access.redhat.com/support/policy/support_process/

Ayuda: Portal de clientes de Red Hat


https://access.redhat.com/help/

Para obtener más información, consulte Generating an SOS Report for Technical
Support en
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/
html-single/getting_the_most_from_your_support_experience/generating-an-sos-
report-for-technical-support_getting-the-most-from-your-support-experience

526 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Ejercicio Guiado

Creación de un informe de diagnóstico


En este ejercicio, generará un informe de diagnóstico que podrá enviar al portal de clientes
de Red Hat como parte de un caso de soporte mediante la consola web.

Resultados
• Generar un informe de diagnóstico que pueda enviar como parte de un caso de soporte al
portal de clientes de Red Hat.

Antes De Comenzar
Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start support-portal

Instrucciones
1. Inicie sesión en la máquina servera con el usuario student.

[student@workstation ~]$ ssh student@servera


Warning: Permanently added 'servera' (ED25519) to the list of known hosts.
Activate the web console with: systemctl enable --now cockpit.socket
...output omitted...
[student@servera ~]$

2. Inicie el servicio cockpit.

[student@servera ~]$ systemctl start cockpit.socket


==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
Authentication is required to start 'cockpit.socket'.
Authenticating as: Student User (student)
Password: student
==== AUTHENTICATION COMPLETE ====

3. Verifique el estado del servicio cockpit.

[student@servera ~]$ systemctl status cockpit.socket


● cockpit.socket - Cockpit Web Service Socket
Loaded: loaded (/usr/lib/systemd/system/cockpit.socket; disabled; vendor
preset: disabled)
Active: active (listening) since Mon 2022-03-28 01:41:13 EDT; 1min 27s ago
Until: Mon 2022-03-28 01:41:13 EDT; 1min 27s ago

RH124-RHEL9.0-es-5-20230516 527
capítulo 14 | Análisis de servidores y soporte

Triggers: ● cockpit.service
Docs: man:cockpit-ws(8)
Listen: [::]:9090 (Stream)
...output omitted...
Mar 28 01:41:13 servera.lab.example.com systemd[1]: Starting Cockpit Web Service
Socket...
Mar 28 01:41:13 servera.lab.example.com systemd[1]: Listening on Cockpit Web
Service Socket.

4. Regrese a la máquina workstation con el usuario student.

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@workstation ~]$

5. En la máquina workstation, abra el explorador web Firefox e inicie sesión en la interfaz de


la consola web que se ejecuta en la dirección servera.lab.example.com. Inicie sesión
con el usuario root y la contraseña redhat.

5.1. Abra un explorador web Firefox y navegue a la dirección https://


servera.lab.example.com:9090.

5.2. Cuando se le solicita, acepte el certificado autofirmado agregándolo como una


excepción.

5.3. Inicie sesión con el usuario root y la contraseña redhat. Ya ha iniciado sesión como
usuario privilegiado, lo cual es necesario para crear un informe de diagnóstico.

5.4. Haga clic en el menú Diagnostic Reports en el panel de navegación izquierdo. Haga
clic en el botón Create Report. El informe tarda unos minutos en crearse.

6. Cuando el informe esté listo, haga clic en el botón Download report para guardar el archivo.

6.1. Haga clic en el botón Download report y, luego, en Save File.

6.2. Cierre la sesión de la consola web y cierre el explorador web Firefox.

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish support-portal

Esto concluye la sección.

528 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Detección y resolución de problemas con


Red Hat Insights

Objetivos
Usar Red Hat Insights para analizar los servidores en busca de problemas, corregirlos o resolverlos,
y confirmar que la solución haya funcionado.

Presentación de Red Hat Insights


Red Hat Insights es una herramienta de análisis predictivo que ayuda a identificar y remediar
las amenazas de seguridad, rendimiento, disponibilidad y estabilidad de los sistemas en su
infraestructura que ejecutan productos de Red Hat. Red Hat ofrece Red Hat Insights como
un producto de software como servicio (SaaS) para que pueda implementarlo y escalarlo sin
requisitos de infraestructura adicionales. Además, puede aprovechar inmediatamente las últimas
recomendaciones y actualizaciones de Red Hat que se aplican a los sistemas implementados.

Red Hat actualiza regularmente la base de conocimientos, sobre la base de los riesgos de soporte
comunes, las vulnerabilidades de seguridad, las configuraciones erróneas conocidas y otros
problemas identificados por Red Hat. Las acciones para mitigar o remediar estos problemas
son validadas y verificadas por Red Hat. Con este soporte, puede identificar, priorizar y resolver
proactivamente los problemas antes de que se conviertan en un problema mayor.

Para cada problema detectado, Red Hat Insights proporciona estimaciones del riesgo presentado
y recomendaciones sobre cómo mitigar o remediar el problema. Estas recomendaciones pueden
sugerir materiales como Ansible Playbooks o brindar instrucciones detalladas para ayudarle a
resolver el problema.

Red Hat Insights adapta las recomendaciones a cada sistema registrado en el servicio. Para
comenzar a usar Red Hat Insights, instale el agente que recopila metadatos sobre la configuración
de tiempo de ejecución del sistema. Estos datos son un subconjunto de lo que podría proporcionar
a Red Hat Support con el comando sosreport para resolver un ticket de soporte.

Puede limitar u ocultar los datos que envían sus sistemas cliente. Al limitar los datos, podría
impedir el funcionamiento de algunas de las reglas analíticas, según lo que usted limite.

Después de registrar un servidor y de completar la sincronización inicial de metadatos del sistema,


deberá ser capaz de ver su servidor y todas las recomendaciones para este en la consola de
Insights en el portal de la nube de Red Hat.

Red Hat Insights actualmente proporciona análisis predictivos y recomendaciones para los
siguientes productos de Red Hat:

• Red Hat Enterprise Linux 6.4 y versiones posteriores


• Red Hat Virtualization
• Red Hat Satellite 6 y versiones posteriores
• Red Hat OpenShift Container Platform
• Red Hat OpenStack Platform 7 y versiones posteriores
• Red Hat Ansible Automation Platform

RH124-RHEL9.0-es-5-20230516 529
capítulo 14 | Análisis de servidores y soporte

Descripción de la arquitectura de Red Hat Insights


Cuando registra un sistema con Red Hat Insights, envía inmediatamente metadatos acerca de su
configuración actual a la plataforma Red Hat Insights. Después del registro, el sistema actualiza
periódicamente los metadatos provistos a Red Hat Insights. El sistema envía los metadatos con
cifrado TLS para protegerlos en tránsito.

La plataforma de Red Hat Insights analiza los datos recibidos y muestra el resultado en el sitio
https://console.redhat.com/insights.

Figura 14.30: Arquitectura de alto nivel de Insights

Instalación de clientes de Red Hat Insights


Insights está incluido con Red Hat Enterprise Linux 9 como parte de la suscripción. Las versiones
anteriores de los servidores de Red Hat Enterprise Linux requieren la instalación del paquete
insights-client en el sistema. El paquete insights-client reemplaza el paquete
redhat-access-insights que se inicia con Red Hat Enterprise Linux 7.5. La siguiente sección
proporciona una orientación detallada para instalar el paquete insights-client y registrar su
sistema en Red Hat Insights.

El cliente de Insights actualiza periódicamente los metadatos que están proporcionados a Insights.
Use el comando insights-client para actualizar los metadatos del cliente.

[root@host ~]# insights-client


Starting to collect Insights data for host.example.com
Uploading Insights data.
Successfully uploaded report from host.example.com to account 1460291.
View details about this system on console.redhat.com:
https://console.redhat.com/insights/inventory/dc480efd-4782-417e-a496-cb33e23642f0

Registro de un sistema de RHEL con Red Hat Insights


Registrar un servidor RHEL en Red Hat Insights es una tarea rápida.

530 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Registre interactivamente el sistema con el servicio de Red Hat Subscription Management.

[root@host ~]# subscription-manager register --auto-attach

Asegúrese de que el paquete insights-client esté instalado en su sistema. El paquete se


instala de forma predeterminada en RHEL 8 y sistemas posteriores.

[root@host ~]# dnf install insights-client

Use el comando insights-client --register para registrar el sistema con el servicio de


Insights y cargar los metadatos iniciales del sistema.

[root@host ~]# insights-client --register

En Red Hat Insights (https://console.redhat.com/insights), asegúrese de haber


iniciado sesión y de que el sistema esté visible en la sección Inventory de la interfaz de usuario
web.

Figura 14.31: Inventario de Insights en el portal de nube

Navegación de la consola de Red Hat Insights


Red Hat Insights proporciona una familia de servicios a los que puede acceder con un explorador
web en el sitio web https://console.redhat.com/insights.

Detección de problemas de configuración con el servicio de


asesores
El servicio de asesores informa problemas de configuración que afectan sus sistemas. Puede
acceder al servicio desde el menú Advisor > Recommendations.

RH124-RHEL9.0-es-5-20230516 531
capítulo 14 | Análisis de servidores y soporte

Figura 14.32: Recomendaciones del servicio de asesores

Para cada problema, Red Hat Insights proporciona información adicional para ayudarlo a
comprender el problema, priorizar las tareas para resolverlo, determinar qué mitigación o
corrección está disponible y automatizar su resolución con Ansible Playbook. Red Hat Insights
también proporciona enlaces a artículos de la base de conocimiento en el Portal de clientes.

Figura 14.33: Detalles de un problema

El servicio de asesores evalúa el riesgo de que se presente un problema en su sistema:

Riesgo total
Indica el impacto del problema en su sistema.

Riesgo de cambio
Indica el impacto de la acción de corrección en su sistema. Por ejemplo, es posible que deba
reiniciar el sistema.

Evaluación de la seguridad con el servicio de vulnerabilidades


El servicio de vulnerabilidades informa las vulnerabilidades y exposiciones comunes (CVE) que
afectan sus sistemas. Puede acceder al servicio desde el menú Vulnerability > CVEs.

532 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Figura 14.34: Informe del servicio de vulnerabilidades

Para cada CVE, Insights proporciona información adicional y enumera los sistemas expuestos.
Puede hacer clic en el botón Remediate para crear una Ansible Playbook para la corrección.

Figura 14.35: Detalles de un CVE

Análisis del cumplimiento mediante el servicio de


cumplimiento
El servicio de cumplimiento analiza sus sistemas e informa su nivel de conformidad con una
política de OpenSCAP. El proyecto OpenSCAP implementa herramientas para verificar la
compatibilidad de un sistema con un conjunto de reglas. Red Hat Insights proporciona las reglas
para evaluar sus sistemas con respecto a diferentes políticas, como el Norma de seguridad de
datos del sector de tarjetas de pago (PCI DSS).

Actualización de paquetes con el servicio de parches


El servicio de parches enumera las recomendaciones de productos Red Hat que se aplican
a sus sistemas. También puede generar una Ansible Playbook que puede ejecutar para
actualizar los paquetes RPM asociados con los documentos aplicables. Para acceder a la lista de

RH124-RHEL9.0-es-5-20230516 533
capítulo 14 | Análisis de servidores y soporte

recomendaciones para un sistema específico, use el menú Patch > Systems. Haga clic en el botón
Apply all applicable advisories para generar Ansible Playbook para un sistema.

Figura 14.36: Aplicación de parches a un sistema

Comparación de sistemas con el servicio de desajuste


Con el servicio de desajuste, puede comparar los sistemas u obtener un historial del sistema.
Puede usar este servicio para solución de problemas, al comparar un sistema con otro sistema
similar o con un estado anterior del sistema. Puede acceder al servicio desde el menú Drift >
Comparison.

En la siguiente figura, se muestra que usted puede usar Red Hat Insights para comparar el mismo
sistema en dos momentos diferentes:

Figura 14.37: Comparación de un historial del sistema

Activación de alertas con el servicio de políticas


Con el servicio de políticas, puede crear reglas para monitorear sus sistemas y enviar alertas
cuando un sistema no cumple con las reglas. Red Hat Insights evalúa las reglas cada vez que un
sistema sincroniza sus metadatos. Puede acceder al servicio desde el menú Policies.

534 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Figura 14.38: Detalles de una regla personalizada

Guías de inventario y corrección, y monitoreo de suscripciones


En la página Inventory, se proporciona una lista de los sistemas que ha registrado con Red Hat
Insights. En la columna Last seen, se muestra la hora de la actualización de metadatos más
reciente para cada sistema. Al hacer clic en el nombre de un sistema, puede revisar sus detalles y
acceder directamente a los servicios de asesor, vulnerabilidad, cumplimiento y parches para ese
sistema.

En la página Remediations (Correcciones), se enumeran todas las Ansible Playbooks que creó
para la corrección. Puede descargar las guías de esa página.

Mediante la página Subscription, puede monitorear su uso de la suscripción de Red Hat.

Referencias
Páginas del manual: insights-client(8) y insights-client.conf(5)

Para obtener más información acerca de Red Hat Insights, consulte la Product
Documentation for Red Hat Insights en
https://access.redhat.com/documentation/en-us/red_hat_insights
.

Para obtener más información sobre la exclusión de datos que recopila Insights,
consulte los capítulos Red Hat Insights Client Data Obfuscation y Red Hat Insights
Client Data Redaction en la Client Configuration Guide for Red Hat Insights en
https://access.redhat.com/documentation/en-us/red_hat_insights/2021/html-
single/client_configuration_guide_for_red_hat_insights/assembly-main-client-cg

Hay información disponible sobre los datos que recopila Red Hat Insights en
Información del sistema recopilada por Red Hat Insights
https://access.redhat.com/articles/1598863

RH124-RHEL9.0-es-5-20230516 535
capítulo 14 | Análisis de servidores y soporte

Cuestionario

Detección y resolución de problemas con


Red Hat Insights
Elija las respuestas correctas para las siguientes preguntas:

1. ¿En qué orden ocurren los siguientes eventos cuando se administra un sistema de
Red Hat Enterprise Linux con Red Hat Insights?

1) Red Hat Insights analyzes system metadata to determine which issues and
recommendations apply.
2) The Insights client uploads system metadata to the Red Hat Insights service.
3) The administrator views the recommended actions in the Red Hat Insights
customer portal.
4) The Insights client collects system metadata on the Red Hat Enterprise Linux
system.

a. 1, 2, 3, 4
b. 4, 2, 1, 3
c. 4, 2, 3, 1
d. 4, 1, 2, 3

2. ¿Qué comando se usa para registrar un cliente en Red Hat Insights?


a. insights-client --register
b. insights-client --no-upload
c. subscription-manager register
d. insights-client --unregister

3. ¿Desde qué página de la consola de Red Hat Insights puede generar una Ansible
Playbook para actualizar los paquetes RPM en un sistema?
a. Advisor > Recommendations
b. Vulnerability > Systems
c. Patch > Systems
d. Remediations

536 RH124-RHEL9.0-es-5-20230516
capítulo 14 | Análisis de servidores y soporte

Solución

Detección y resolución de problemas con


Red Hat Insights
Elija las respuestas correctas para las siguientes preguntas:

1. ¿En qué orden ocurren los siguientes eventos cuando se administra un sistema de
Red Hat Enterprise Linux con Red Hat Insights?

1) Red Hat Insights analyzes system metadata to determine which issues and
recommendations apply.
2) The Insights client uploads system metadata to the Red Hat Insights service.
3) The administrator views the recommended actions in the Red Hat Insights
customer portal.
4) The Insights client collects system metadata on the Red Hat Enterprise Linux
system.

a. 1, 2, 3, 4
b. 4, 2, 1, 3
c. 4, 2, 3, 1
d. 4, 1, 2, 3

2. ¿Qué comando se usa para registrar un cliente en Red Hat Insights?


a. insights-client --register
b. insights-client --no-upload
c. subscription-manager register
d. insights-client --unregister

3. ¿Desde qué página de la consola de Red Hat Insights puede generar una Ansible
Playbook para actualizar los paquetes RPM en un sistema?
a. Advisor > Recommendations
b. Vulnerability > Systems
c. Patch > Systems
d. Remediations

RH124-RHEL9.0-es-5-20230516 537
capítulo 14 | Análisis de servidores y soporte

Resumen
• La consola web es una interfaz de gestión web de servidores y se basa en el servicio de código
abierto cockpit.

• La consola web proporciona gráficos del rendimiento del sistema, herramientas gráficas para
gestionar la configuración del sistema e inspeccionar los registros, e interfaces de terminal
interactivas.

• El portal de clientes de Red Hat brinda acceso a documentación, descargas, herramientas


de optimización, gestión de casos de soporte y gestión de suscripciones y derechos para los
productos de Red Hat.

• La herramienta de la línea de comandos redhat-support-tool consulta la base de


conocimiento y trabaja con casos de soporte.

• Red Hat Insights es una herramienta de análisis predictivo de SaaS que ayuda a identificar y
corregir las amenazas a la seguridad, el rendimiento, la disponibilidad y la estabilidad de los
sistemas.

538 RH124-RHEL9.0-es-5-20230516
capítulo 15

Revisión exhaustiva
Meta Revisar tareas de Red Hat System Administration I .

Objetivos • Revisar tareas de Red Hat System


Administration I .

Secciones • Revisión exhaustiva

Trabajos de • Gestionar archivos desde la línea de comandos


laboratorio • Gestión de usuarios y grupos, permisos y
procesos
• Configuración y gestión de un servidor
• Gestión de redes
• Montaje de sistemas de archivos y búsqueda de
archivos

RH124-RHEL9.0-es-5-20230516 539
capítulo 15 | Revisión exhaustiva

Revisión exhaustiva

Objetivos
Demostrar conocimientos y habilidades adquiridos en Red Hat System Administration I.

Revisión de Red Hat System Administration I


Antes de comenzar la revisión exhaustiva de este curso, debe sentirse cómodo con los temas que
se abordaron en cada capítulo.

Puede consultar las secciones anteriores del libro de texto para realizar lecturas complementarias.

Capítulo 1, Introducción a Red Hat Enterprise Linux


Definir código abierto, Linux, distribuciones de Linux y Red Hat Enterprise Linux.

Explicar el propósito del código abierto, Linux, las distribuciones de Linux y Red Hat Enterprise
Linux.

Capítulo 2, Acceso a la línea de comandos


Iniciar sesión en el sistema Linux y ejecutar comandos simples desde la shell.

• Iniciar sesión en el sistema Linux y ejecutar comandos simples desde la shell.

• Iniciar sesión en el sistema Linux con el entorno de escritorio GNOME y ejecutar comandos
desde un prompt de shell en un programa de terminal.

• Ahorrar tiempo en la ejecución de comandos desde un prompt de shell con los accesos directos
de Bash.

Capítulo 3, Gestionar archivos desde la línea de comandos


Copiar, mover, crear, eliminar y organizar archivos desde la shell Bash.

• Describir cómo Linux organiza los archivos y los propósitos de diversos directorios en la
jerarquía del sistema de archivos.

• Especificar la ubicación absoluta y la ubicación relativa de los archivos en relación con el


directorio de trabajo actual, determinar y cambiar el directorio de trabajo, y hacer una lista del
contenido de los directorios.

• Crear, copiar, mover y eliminar archivos y directorios.

• Crear varias referencias de nombres de archivo al mismo archivo con enlaces duros y simbólicos
(o "blandos").

• Ejecutar con eficiencia los comandos que afectan a muchos archivos mediante el uso de las
funciones de coincidencia de patrones de la shell Bash.

Capítulo 4, Obtener ayuda en Red Hat Enterprise Linux


Resolver problemas mediante el uso de sistemas de ayuda locales.

540 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

Encontrar información en las páginas de manual del sistema Linux local.

Capítulo 5, Crear, ver y editar archivos de texto


Crear, visualizar y editar archivos de texto desde una salida de comando o en un editor de texto.

• Guardar la salida o los errores en un archivo con la redirección de shell y procesar la salida de
comando a través de varios programas de línea de comandos con pipes.

• Crear y editar archivos de texto desde la línea de comandos con el editor vim.

• Definir las variables de shell para facilitar la ejecución de comandos, y editar los scripts de
arranque de Bash para configurar las variables de shell y del entorno a fin de modificar el
comportamiento de la shell y de los programas ejecutados desde la shell.

Capítulo 6, Gestión de usuarios y grupos locales


Crear, gestionar y eliminar usuarios y grupos locales, y administrar políticas de contraseña locales.

• Describir el propósito de los usuarios y grupos en un sistema Linux.

• Cambiar a la cuenta de superusuario para gestionar un sistema Linux y otorgar a otros usuarios
acceso de superusuario a través del comando sudo.

• Crear, gestionar y eliminar cuentas de usuario locales.

• Crear, modificar y eliminar cuentas de grupo locales.

• Establecer una política de gestión de contraseñas para los usuarios, y bloquear y desbloquear
manualmente las cuentas de los usuarios.

Capítulo 7, Control de acceso a los archivos


Configurar los permisos del sistema de archivos Linux en los archivos e interpretar los efectos de
seguridad de los distintos parámetros de configuración de permisos.

• Enumerar los permisos del sistema de archivos en archivos y directorios e interpretar el efecto
de esos permisos en el acceso de los usuarios y grupos.

• Cambiar los permisos y la propiedad de los archivos con las herramientas de línea de comandos.

• Controlar los permisos predeterminados de los archivos creados por los usuarios, explicar
los efectos de los permisos especiales y usar permisos especiales y predeterminados para
configurar el propietario del grupo de archivos creados en un directorio.

Capítulo 8, Monitoreo y gestión de procesos Linux


Evaluar y controlar los procesos que se ejecutan en un sistema Red Hat Enterprise Linux.

• Determinar el estado, el uso de recursos y la propiedad de los programas en ejecución en un


sistema para controlarlos.

• Usar el control de trabajo Bash para gestionar múltiples procesos iniciados desde la misma
sesión de terminal.

• Usar comandos para finalizar procesos y comunicarse con ellos, definir las características de un
proceso daemon y detener sesiones y procesos de usuario.

• Definir el promedio de carga y determinar los procesos del servidor que consumen muchos
recursos.

RH124-RHEL9.0-es-5-20230516 541
capítulo 15 | Revisión exhaustiva

Capítulo 9, Control de servicios y daemons


Controlar y monitorear los servicios de red y los daemons del sistema con el servicio systemd.

• Enumerar daemons del sistema y servicios de red iniciados por el servicio systemd y las
unidades socket.

• Controlar los daemons del sistema y los servicios de red con el comando systemctl.

Capítulo 10, Configuración y seguridad de SSH


Configurar un servicio seguro de línea de comandos en sistemas remotos con OpenSSH.

• Iniciar sesión en un sistema remoto y ejecutar comandos con ssh.

• Configurar una cuenta de usuario para usar autenticación basada en claves para iniciar sesión en
sistemas remotos de forma segura y sin una contraseña.

• Deshabilitar los inicios de sesión directos como root y la autenticación basada en contraseñas
para el servicio OpenSSH.

Capítulo 11, Gestión de redes


Configurar las interfaces de red y la configuración en servidores Red Hat Enterprise Linux.

• Conceptos fundamentales de direccionamiento y enrutamiento de redes para un servidor

• Probar e inspeccionar la configuración de red actual con las utilidades de la línea de comando.

• Gestionar los parámetros de configuración de red con el comando nmcli.

• Modificar la configuración de la red mediante la edición de los archivos de configuración.

• Configurar el nombre de host estático del servidor y su resolución de nombre, y probar los
resultados.

Capítulo 12, Instalación y actualización de paquetes de


software
Descargar, instalar, actualizar y gestionar paquetes de software de Red Hat y repositorios de
paquetes DNF.

• Registrar un sistema para su cuenta de Red Hat y asignarle derechos para actualizaciones de
software y servicios de soporte mediante Red Hat Suscription Management.

• Explicar cómo se proporciona el software como paquetes de RPM e investigar los paquetes
instalados en el sistema con DNF y RPM.

• Buscar, instalar y actualizar paquetes de software con el comando dnf.

• Habilitar y deshabilitar el uso de repositorios DNF de terceros o de Red Hat por un servidor.

Capítulo 13, Acceso a los sistemas de archivos de Linux


Acceder, revisar y usar los sistemas de archivos existentes en el almacenamiento conectado a un
servidor Linux.

• Identificar un directorio en la jerarquía del sistema de archivos y el dispositivo donde se


almacena.

542 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

• Acceder al contenido de sistemas de archivos mediante la adición y la eliminación de sistemas


de archivos de la jerarquía de sistemas de archivos.

• Buscar archivos en sistemas de archivos montados con los comandos find y locate.

Capítulo 14, Análisis de servidores y soporte


Investigar y resolver problemas en la interfaz de administración web, y obtener soporte de Red Hat
para resolver problemas.

• Activar la interfaz de administración de la consola web para administrar y monitorear de forma


remota el rendimiento de un servidor de Red Hat Enterprise Linux.

• Describir y usar los recursos clave en el portal de clientes de Red Hat para encontrar información
en la documentación y la base de conocimientos de Red Hat.

• Usar Red Hat Insights para analizar los servidores en busca de problemas, corregirlos o
resolverlos, y confirmar que la solución haya funcionado.

RH124-RHEL9.0-es-5-20230516 543
capítulo 15 | Revisión exhaustiva

Trabajo de laboratorio

Gestionar archivos desde la línea de


comandos

nota
Si planea realizar el examen RHCSA, use el siguiente enfoque para
aprovechar al máximo las ventajas de esta revisión integral: intente realizar
cada trabajo de laboratorio sin ver los botones de soluciones ni consultar el
contenido del curso. Use los scripts de calificación para evaluar su progreso a
medida que completa cada trabajo de laboratorio.

En esta revisión, gestiona los archivos, redirige un conjunto específico de líneas de un archivo
de texto a otro archivo y edita los archivos de texto.

Resultados
• Gestionar archivos desde la línea de comandos.

• Visualizar un número específico de líneas de archivos de texto y redirigir la salida a otro


archivo.

• Editar archivos de texto.

Antes De Comenzar
Si no restableció las máquinas workstation y server al final del último capítulo, guarde
el trabajo que desea mantener de ejercicios anteriores de esas máquinas y restablézcalas
ahora.

Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start rhcsa-rh124-review1

Especificaciones
• Inicie sesión en serverb con el usuario student.

• Cree el directorio /home/student/grading.

• Cree tres archivos vacíos llamados grade1, grade2 y grade3 en el directorio /home/
student/grading.

• Capture las primeras cinco líneas del archivo /home/student/bin/manage en el archivo /


home/student/grading/review.txt.

544 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

• Anexe las últimas tres líneas del archivo /home/student/bin/manage al archivo /home/
student/grading/review.txt. No sobrescriba ningún texto existente en el archivo /home/
student/grading/review.txt.

• Copie el archivo /home/student/grading/review.txt en el archivo /home/student/


grading/review-copy.txt.

• Edite el archivo /home/student/grading/review-copy.txt para que la línea Test JJ


aparezca dos veces.

• Edite el archivo /home/student/grading/review-copy.txt para eliminar la línea Test


HH.

• Edite el archivo /home/student/grading/review-copy.txt para que exista una línea A


new line entre la línea Test BB y la línea Test CC.

• Cree un enlace duro /home/student/hardcopy al archivo /home/student/grading/


grade1. Debe crear el enlace duro después de completar el paso anterior para crear el archivo
/home/student/grading/grade1.

• Cree un enlace simbólico /home/student/softcopy al archivo /home/student/grading/


grade2.

• Guarde la salida de un comando que enumera el contenido del directorio /boot en el archivo
/home/student/grading/longlisting.txt. La salida debe ser un "listado largo" que
incluye permisos de archivo, propietario y propietario del grupo, tamaño y fecha de modificación
de cada archivo. La salida debe omitir los archivos ocultos.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade rhcsa-rh124-review1

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish rhcsa-rh124-review1

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 545
capítulo 15 | Revisión exhaustiva

Solución

Gestionar archivos desde la línea de


comandos

nota
Si planea realizar el examen RHCSA, use el siguiente enfoque para
aprovechar al máximo las ventajas de esta revisión integral: intente realizar
cada trabajo de laboratorio sin ver los botones de soluciones ni consultar el
contenido del curso. Use los scripts de calificación para evaluar su progreso a
medida que completa cada trabajo de laboratorio.

En esta revisión, gestiona los archivos, redirige un conjunto específico de líneas de un archivo
de texto a otro archivo y edita los archivos de texto.

Resultados
• Gestionar archivos desde la línea de comandos.

• Visualizar un número específico de líneas de archivos de texto y redirigir la salida a otro


archivo.

• Editar archivos de texto.

Antes De Comenzar
Si no restableció las máquinas workstation y server al final del último capítulo, guarde
el trabajo que desea mantener de ejercicios anteriores de esas máquinas y restablézcalas
ahora.

Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start rhcsa-rh124-review1

1. Inicie sesión en serverb con el usuario student.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$

2. Cree el directorio /home/student/grading. Si el directorio /home/student es su


directorio actual, no necesita especificar la ruta absoluta al directorio grading al crearlo.

546 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

[student@serverb ~]$ mkdir grading

3. En el directorio /home/student/grading, cree tres archivos vacíos llamados grade1,


grade2 y grade3.

3.1. Cree los archivos vacíos en el directorio /home/student/grading llamados grade1,


grade2 y grade3. Aplique la función de shell de expansión de llaves para crear los tres
archivos con un solo comando touch.

[student@serverb ~]$ touch grading/grade{1,2,3}

3.2. Verifique que los archivos grade1, grade2 y grade3 existan en el directorio /home/
student/grading.

[student@serverb ~]$ ls grading/


grade1 grade2 grade3

4. Copie las primeras cinco líneas del archivo /home/student/bin/manage en el archivo /


home/student/grading/review.txt.

4.1. Vea las primeras cinco líneas del archivo /home/student/bin/manage y redirija
la salida al archivo /home/student/grading/review.txt. Use el símbolo de
redireccionamiento único (>) para sobrescribir cualquier contenido existente en el
archivo.

[student@serverb ~]$ head -5 bin/manage > grading/review.txt

4.2. Verifique que el archivo /home/student/grading/review.txt contenga el


siguiente texto:

Test AA
Test BB
Test CC
Test DD
Test EE

5. Anexe las últimas tres líneas del archivo /home/student/bin/manage al archivo /home/
student/grading/review.txt. Use el símbolo de redirección doble (>>) para anexar la
salida y preservar el contenido del archivo.

5.1. Vea las primeras tres líneas del archivo /home/student/bin/manage y anexe la
salida al archivo /home/student/grading/review.txt.

[student@serverb ~]$ tail -3 bin/manage >> grading/review.txt

5.2. Verifique que el archivo /home/student/grading/review.txt contenga el


siguiente texto:

RH124-RHEL9.0-es-5-20230516 547
capítulo 15 | Revisión exhaustiva

Test AA
Test BB
Test CC
Test DD
Test EE
Test HH
Test II
Test JJ

6. Copie el archivo /home/student/grading/review.txt en el archivo /home/student/


grading/review-copy.txt.

6.1. Diríjase al directorio /home/student/grading.

[student@serverb ~]$ cd grading/


[student@serverb grading]$

6.2. Copie el archivo /home/student/grading/review.txt en el archivo /home/


student/grading/review-copy.txt.

[student@serverb grading]$ cp review.txt review-copy.txt

6.3. Vuelva al directorio de inicio del usuario student.

[student@serverb grading]$ cd
[student@serverb ~]$

7. Edite el archivo /home/student/grading/review-copy.txt para que tenga dos líneas


Test JJ secuenciales.

7.1. Use el editor de texto vim para abrir el archivo /home/student/grading/review-


copy.txt.

[student@serverb ~]$ vim grading/review-copy.txt

7.2. Desde el modo de comandos en vim, desplácese hacia abajo hasta la línea Test JJ.
Presione dos veces la tecla y para copiar la línea de texto y presione la tecla p para
pegarla debajo del cursor. Escriba wq para guardar los cambios y salir de vim. Verifique
que el archivo /home/student/grading/review-copy.txt contenga el siguiente
texto:

Test AA
Test BB
Test CC
Test DD
Test EE
Test HH
Test II
Test JJ
Test JJ

548 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

8. Edite el archivo /home/student/grading/review-copy.txt para eliminar la línea Test


HH.

8.1. Use el editor de texto Vim para abrir el archivo /home/student/grading/review-


copy.txt.

[student@serverb ~]$ vim grading/review-copy.txt

8.2. Desde el modo de comandos en Vim, desplácese hacia abajo hasta la línea Test HH.
Presione dos veces la tecla d en el teclado para eliminar la línea de texto. Escriba wq
para guardar los cambios y salir de vim. Verifique que el archivo /home/student/
grading/review-copy.txt contenga el siguiente texto:

Test AA
Test BB
Test CC
Test DD
Test EE
Test II
Test JJ
Test JJ

9. Edite el archivo /home/student/grading/review-copy.txt para que exista la línea A


new line entre la línea Test BB y la línea Test CC.

9.1. Use el editor de texto Vim para abrir el archivo /home/student/grading/review-


copy.txt.

[student@serverb ~]$ vim grading/review-copy.txt

9.2. Desde el modo de comandos en Vim, desplácese hacia abajo hasta la línea Test CC.
Presione la tecla i para cambiar al modo de inserción mientras mantiene el cursor al
principio de la línea Test CC. En el modo de inserción, presione Enter para crear una
línea en blanco sobre el cursor. Use la flecha hacia arriba para ir a la línea en blanco
y cree la línea de texto A new line. Presione la tecla Esc para volver al modo de
comandos. Escriba wq para guardar los cambios y salir de Vim. Verifique que el archivo
/home/student/grading/review-copy.txt contenga el siguiente texto.

Test AA
Test BB
A new line
Test CC
Test DD
Test EE
Test II
Test JJ
Test JJ

10. Cree un enlace duro /home/student/hardcopy al archivo /home/student/grading/


grade1.

10.1. Cree un enlace duro /home/student/hardcopy al archivo /home/student/


grading/grade1.

RH124-RHEL9.0-es-5-20230516 549
capítulo 15 | Revisión exhaustiva

[student@serverb ~]$ ln grading/grade1 hardcopy

10.2. Vea el recuento de enlaces para el archivo /home/student/grading/grade1.

[student@serverb ~]$ ls -l grading/grade1


-rw-rw-r--. 2 student student 0 Mar 6 16:45 grading/grade1

11. Cree un enlace simbólico /home/student/softcopy al archivo /home/student/


grading/grade2.

11.1. Cree un enlace simbólico /home/student/softcopy al archivo /home/student/


grading/grade2.

[student@serverb ~]$ ln -s grading/grade2 softcopy

11.2. Vea las propiedades del enlace simbólico /home/student/softcopy.

[student@serverb ~]$ ls -l softcopy


lrwxrwxrwx. 1 student student 14 Mar 6 17:58 softcopy -> grading/grade2

12. Enumere el contenido del directorio /boot y redirija la salida al archivo /home/student/
grading/longlisting.txt. La salida debe ser un listado largo que incluye permisos de
archivo, propietario y propietario del grupo, tamaño y fecha de modificación de cada archivo.
La salida debe omitir los archivos ocultos.

12.1. Vea el contenido del directorio /boot en el formato de lista larga y omita los archivos
ocultos. Redirija la salida al archivo /home/student/grading/longlisting.txt.

[student@serverb ~]$ ls -l /boot > grading/longlisting.txt

12.2. Regrese al sistema workstation con el usuario student.

[student@serverb ~]$ exit


logout
Connection to serverb closed.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade rhcsa-rh124-review1

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

550 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

[student@workstation ~]$ lab finish rhcsa-rh124-review1

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 551
capítulo 15 | Revisión exhaustiva

Trabajo de laboratorio

Gestión de usuarios y grupos, permisos y


procesos

nota
Si planea realizar el examen RHCSA, use el siguiente enfoque para
aprovechar al máximo las ventajas de esta revisión integral: intente realizar
cada trabajo de laboratorio sin ver los botones de soluciones ni consultar el
contenido del curso. Use los scripts de calificación para evaluar su progreso a
medida que completa cada trabajo de laboratorio.

En esta revisión, gestiona cuentas de usuarios y grupos, establece permisos en archivos y


directorios, y gestiona procesos.

Resultados
• Gestionar cuentas de usuarios y grupos.

• Establecer permisos en archivos y directorios.

• Identificar y gestionar los procesos que consumen mucha CPU.

Antes De Comenzar
Si no restableció las máquinas workstation y server al final del último capítulo, guarde
el trabajo que desea mantener de ejercicios anteriores de esas máquinas y restablézcalas
ahora.

Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start rhcsa-rh124-review2

Especificaciones
• Inicie sesión en serverb con el usuario student.

• Identifique y cierre el proceso que actualmente usa la mayor cantidad de tiempo de CPU.

• Cree el grupo database con un GID de 50000.

• Cree el usuario dbadmin1 y configúrelo con los siguientes requisitos:

– Agregue el grupo database como grupo complementario.

– Establezca la contraseña en redhat y fuerce un cambio de contraseña en el primer inicio de


sesión.

552 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

– Permita que se cambie la contraseña después de 10 días desde el día del último cambio de
contraseña.

– Establezca la caducidad de la contraseña después de 30 días desde el día del último cambio
de contraseña.

– Permita que el usuario use el comando sudo para ejecutar cualquier comando como
superusuario.

– Configure la máscara de usuario predeterminada como 007 para el usuario dbadmin.

• Cree el directorio /home/dbadmin1/grading/review2 con dbadmin1 como usuario


propietario y el grupo database como grupo propietario.

• Configure el directorio /home/dbadmin1/grading/review2 para que el grupo database


sea propietario de cualquier archivo o subdirectorio que se cree en este directorio,
independientemente del usuario que creó el archivo. Configure los permisos del directorio para
permitir que los miembros del grupo database accedan al directorio y creen contenido en él.
Todos los demás usuarios deben tener permisos de lectura y ejecución en el directorio.

• Asegúrese de que los usuarios solo puedan eliminar archivos de su propiedad del directorio /
home/dbadmin1/grading/review2.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade rhcsa-rh124-review2

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish rhcsa-rh124-review2

Esto concluye la sección.

RH124-RHEL9.0-es-5-20230516 553
capítulo 15 | Revisión exhaustiva

Solución

Gestión de usuarios y grupos, permisos y


procesos

nota
Si planea realizar el examen RHCSA, use el siguiente enfoque para
aprovechar al máximo las ventajas de esta revisión integral: intente realizar
cada trabajo de laboratorio sin ver los botones de soluciones ni consultar el
contenido del curso. Use los scripts de calificación para evaluar su progreso a
medida que completa cada trabajo de laboratorio.

En esta revisión, gestiona cuentas de usuarios y grupos, establece permisos en archivos y


directorios, y gestiona procesos.

Resultados
• Gestionar cuentas de usuarios y grupos.

• Establecer permisos en archivos y directorios.

• Identificar y gestionar los procesos que consumen mucha CPU.

Antes De Comenzar
Si no restableció las máquinas workstation y server al final del último capítulo, guarde
el trabajo que desea mantener de ejercicios anteriores de esas máquinas y restablézcalas
ahora.

Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start rhcsa-rh124-review2

1. Inicie sesión en serverb con el usuario student.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$

2. Identifique y cierre el proceso que actualmente usa la mayor cantidad de tiempo de CPU.

2.1. Use el comando top para ver el consumo de CPU del sistema en tiempo real.

[student@serverb ~]$ top

554 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

2.2. Desde la interfaz interactiva del comando top, preste atención a la columna %CPU y
confirme que haya un proceso denominado dd que consume la mayoría de los recursos
de CPU.

...output omitted...
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2303 student 20 0 217048 944 876 R 99.7 0.1 100:11.64 dd
...output omitted...

El proceso dd en la salida anterior tiene el PID 2303. Este proceso está consumiendo
el 99.7 % de los recursos de la CPU. El PID y el porcentaje de consumo de recursos de
CPU pueden variar en su sistema.

2.3. Desde la interfaz interactiva del comando top, escriba k para cerrar el proceso dd
con PID 2303, según lo determinado en el paso anterior. Después de escribir k en el
comando top, si el PID predeterminado que se muestra en el prompt coincide con
el PID del proceso que desea finalizar, presione la tecla Enter. Si el PID sugerido no
coincide, especifique el PID de forma interactiva.

...output omitted...
PID to signal/kill [default pid = 2303] Enter
...output omitted...

2.4. Use la señal predeterminada SIGTERM para cerrar el proceso.

...output omitted...
Send pid 2833 signal [15/sigterm] Enter
...output omitted...

2.5. Presione la tecla q para salir de la interfaz interactiva del comando top.

3. Cree el grupo database con un GID de 50000.

3.1. Cambie al usuario root.

[student@serverb ~]$ sudo -i


[sudo] password for student: student
[root@serverb ~]#

3.2. Cree el grupo database con un GID de 50000.

[root@serverb ~]# groupadd -g 50000 database

4. Cree el usuario dbadmin1. Agregue el grupo database como grupo complementario.


Establezca la contraseña en redhat y fuerce un cambio de contraseña en el primer inicio de
sesión del usuario. Permita que se cambie la contraseña después de 10 días desde el día del
último cambio de contraseña. Establezca la caducidad de la contraseña después de 30 días
desde el día del último cambio de contraseña. Permita que el usuario use el comando sudo
para ejecutar cualquier comando como superusuario. Configure el umask predeterminado
como 007.

4.1. Cree el usuario dbadmin1. Agregue el grupo database como grupo complementario.

RH124-RHEL9.0-es-5-20230516 555
capítulo 15 | Revisión exhaustiva

[root@serverb ~]# useradd -G database dbadmin1

4.2. Establezca la contraseña del usuario dbadmin1 en redhat.

[root@serverb ~]# passwd dbadmin1


Changing password for user dbadmin1.
New password: redhat
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: redhat
passwd: all authentication tokens updated successfully.

4.3. Obligue al usuario dbadmin1 a actualizar su contraseña en el siguiente inicio de sesión.

[root@serverb ~]# chage -d 0 dbadmin1

4.4. Establezca la vigencia mínima de la contraseña del usuario dbadmin1 en 10 días.

[root@serverb ~]# chage -m 10 dbadmin1

4.5. Establezca la vigencia máxima de la contraseña del usuario dbadmin1 en 30 días.

[root@serverb ~]# chage -M 30 dbadmin1

4.6. Permita que el usuario dbadmin1 use el comando sudo para ejecutar cualquier
comando como superusuario. Puede usar el comando vim /etc/sudoers.d/
dbadmin1 para crear el archivo y agregar con el siguiente contenido:

[root@serverb ~]# vim /etc/sudoers.d/dbadmin1


dbadmin1 ALL=(ALL) ALL

4.7. Cambie al usuario dbadmin1. Anexe la línea umask 007 al archivo /home/
dbadmin1/.bashrc.

[root@serverb ~]# su - dbadmin1


[dbadmin1@serverb ~]$ echo "umask 007" >> .bashrc

4.8. Obtenga el archivo ~/.bashrc para actualizar la máscara de usuario.

[dbadmin1@serverb ~]$ source ~/.bashrc

5. Cree el directorio /home/dbadmin1/grading/review2 con dbadmin1 como usuario


propietario y el grupo database como grupo propietario.

5.1. Use el comando mkdir con la opción -p para crear el directorio /home/dbadmin1/
grading/review2.

[dbadmin1@serverb ~]$ mkdir -p /home/dbadmin1/grading/review2

556 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

5.2. Establezca dbadmin1 y database de manera recursiva como usuario propietario


respectivo y grupo del directorio /home/dbadmin1/ y los subdirectorios.

[dbadmin1@serverb ~]$ chown -R dbadmin1:database /home/dbadmin1/

5.3. Establezca los permisos del grupo execute de manera recursiva en el directorio /
home/dbadmin1 y los subdirectorios. Este permiso permite a los miembros del grupo
database atravesar la estructura del directorio /home/dbadmin1.

[dbadmin1@serverb ~]$ chmod -R g+x /home/dbadmin1

6. Configure el directorio /home/dbadmin1/grading/review2 para permitir que los


miembros del grupo database creen contenido en él. Todos los demás usuarios deben tener
permisos de lectura y ejecución en el directorio.

6.1. Aplique el permiso especial SetGID en el directorio /home/dbadmin1/grading/


review2 de modo que el grupo database sea propietario de los archivos creados en
el directorio.

[dbadmin1@serverb ~]$ chmod g+s /home/dbadmin1/grading/review2

6.2. Aplique el modo permiso 775 en el directorio /home/dbadmin1/grading/review2.

[dbadmin1@serverb ~]$ chmod 775 /home/dbadmin1/grading/review2

7. Asegúrese de que los usuarios solo puedan eliminar archivos de su propiedad del directorio /
home/dbadmin1/grading/review2.

7.1. Aplique el permiso especial sticky bit en el directorio /home/dbadmin1/grading/


review2.

[dbadmin1@serverb ~]$ chmod o+t /home/dbadmin1/grading/review2

7.2. Regrese al sistema workstation con el usuario student.

[dbadmin1@serverb ~]$ exit


logout
[root@serverb ~]# exit
logout
[student@serverb ~]$ exit
logout
Connection to serverb closed.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade rhcsa-rh124-review2

RH124-RHEL9.0-es-5-20230516 557
capítulo 15 | Revisión exhaustiva

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish rhcsa-rh124-review2

Esto concluye la sección.

558 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

Trabajo de laboratorio

Configuración y gestión de un servidor

nota
Si planea realizar el examen RHCSA, use el siguiente enfoque para
aprovechar al máximo las ventajas de esta revisión integral: intente realizar
cada trabajo de laboratorio sin ver los botones de soluciones ni consultar el
contenido del curso. Use los scripts de calificación para evaluar su progreso a
medida que completa cada trabajo de laboratorio.

En esta revisión, configurará, protegerá y usará el servicio SSH para acceder a una máquina
remota y gestionar paquetes con la utilidad dnf.

Resultados
• Crear un nuevo par de claves SSH.

• Deshabilitar los inicios de sesión de SSH con el usuario root.

• Deshabilitar los inicios de sesión SSH basados en contraseña.

• Actualizar la zona horaria de un servidor.

• Instalar paquetes y módulos de paquetes con el comando dnf.

Antes De Comenzar
Si no restableció las máquinas workstation y server al final del último capítulo, guarde
el trabajo que desea mantener de ejercicios anteriores de esas máquinas y restablézcalas
ahora.

Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start rhcsa-rh124-review3

Especificaciones
• Inicie sesión en serverb con el usuario student.

• Genere claves de SSH para el usuario student. No proteja la clave privada con una frase de
contraseña. Guarde las claves privada y pública como los archivos /home/student/.ssh/
review3_key y /home/student/.ssh/review3_key.pub, respectivamente.

• Configure el usuario student en servera para aceptar inicios de sesión autenticados por el
par de claves SSH review3_key. El usuario student en serverb deberá ser capaz de iniciar
sesión en servera con SSH sin ingresar una contraseña.

RH124-RHEL9.0-es-5-20230516 559
capítulo 15 | Revisión exhaustiva

• En serverb, configure el servicio sshd para evitar que el usuario root inicie sesión.

• En serverb, configure el servicio sshd para evitar que los usuarios usen su contraseña para
iniciar sesión. Los usuarios aún deben ser capaces de autenticar los inicios de sesión con un par
de claves SSH.

• Instale el paquete zsh en la máquina serverb.

• Establezca la zona horaria de serverb en Asia/Kolkata.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade rhcsa-rh124-review3

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish rhcsa-rh124-review3

Esto concluye la sección.

560 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

Solución

Configuración y gestión de un servidor

nota
Si planea realizar el examen RHCSA, use el siguiente enfoque para
aprovechar al máximo las ventajas de esta revisión integral: intente realizar
cada trabajo de laboratorio sin ver los botones de soluciones ni consultar el
contenido del curso. Use los scripts de calificación para evaluar su progreso a
medida que completa cada trabajo de laboratorio.

En esta revisión, configurará, protegerá y usará el servicio SSH para acceder a una máquina
remota y gestionar paquetes con la utilidad dnf.

Resultados
• Crear un nuevo par de claves SSH.

• Deshabilitar los inicios de sesión de SSH con el usuario root.

• Deshabilitar los inicios de sesión SSH basados en contraseña.

• Actualizar la zona horaria de un servidor.

• Instalar paquetes y módulos de paquetes con el comando dnf.

Antes De Comenzar
Si no restableció las máquinas workstation y server al final del último capítulo, guarde
el trabajo que desea mantener de ejercicios anteriores de esas máquinas y restablézcalas
ahora.

Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start rhcsa-rh124-review3

1. Inicie sesión en serverb con el usuario student.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$

2. Genere claves de SSH para el usuario student. No proteja la clave privada con una
frase de contraseña. Otorgue los nombres /home/student/.ssh/review3_key y /
home/student/.ssh/review3_key.pub a los archivos de clave privada y pública,
respectivamente.

RH124-RHEL9.0-es-5-20230516 561
capítulo 15 | Revisión exhaustiva

[student@serverb ~]$ ssh-keygen


Generating public/private rsa key pair.
Enter file in which to save the key (/home/student/.ssh/
id_rsa): /home/student/.ssh/review3_key
Enter passphrase (empty for no passphrase): Enter
Enter same passphrase again: Enter
Your identification has been saved in /home/student/.ssh/review3_key.
Your public key has been saved in /home/student/.ssh/review3_key.pub.
The key fingerprint is:
SHA256:Uqefehw+vRfm94fQZDoz/6IfNYSLK/OpiQ4n6lrKIbY student@serverb.lab.example.com
The key's randomart image is:
+---[RSA 3072]----+
| .+=oBo+ |
| ...O * = |
|.. + % = |
|. +.B =. |
|...*..o S |
|E.=. o + . |
| .= oo o . |
| *... . |
| .oo. |
+----[SHA256]-----+

3. Configure el usuario student en servera para aceptar inicios de sesión autenticados por
el par de claves SSH review3_key. El usuario student en serverb deberá ser capaz de
iniciar sesión en servera con SSH sin ingresar una contraseña.

3.1. Exporte la clave pública review3_key a servera desde serverb.

[student@serverb ~]$ ssh-copy-id -i .ssh/review3_key.pub student@servera


/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/review3.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter
out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted
now it is to install the new keys
student@servera's password: student

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'student@servera'"


and check to make sure that only the key(s) you wanted were added.

3.2. Verifique que pueda iniciar sesión en servera desde serverb con el usuario
student y la clave privada review3_key sin que se le solicite la contraseña.

[student@serverb ~]$ ssh -i .ssh/review3_key student@servera


...output omitted...
[student@servera ~]$

3.3. Salga de servera.

562 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

[student@servera ~]$ exit


logout
Connection to servera closed.
[student@serverb ~]$

4. En serverb, configure el servicio sshd para evitar que el usuario root inicie sesión.

4.1. Establezca el parámetro PermitRootLogin en no en el archivo /etc/ssh/


sshd_config. Use el comando sudo vim /etc/ssh/sshd_config para editar el
archivo de configuración.

4.2. Recargue el servicio sshd.

[student@serverb ~]$ sudo systemctl reload sshd.service

5. En serverb, configure el servicio sshd para evitar que los usuarios usen su contraseña para
iniciar sesión. Los usuarios aún deben ser capaces de autenticar los inicios de sesión con
claves SSH.

5.1. Establezca el parámetro PasswordAuthentication en no en el archivo /etc/ssh/


sshd_config. Use el comando sudo vim /etc/ssh/sshd_config para editar el
archivo de configuración.

5.2. Recargue el servicio sshd.

[student@serverb ~]$ sudo systemctl reload sshd.service

6. Instale el paquete zsh.

[student@serverb ~]$ sudo dnf install zsh


...output omitted...
Is this ok [y/N]: y
...output omitted...
Installed:
zsh-5.8-9.el9.x86_64
Complete!

7. Establezca la zona horaria de serverb en Asia/Kolkata.

7.1. Establezca la zona horaria de serverb en Asia/Kolkata.

[student@serverb ~]$ sudo timedatectl set-timezone Asia/Kolkata

7.2. Regrese al sistema workstation con el usuario student.

[student@serverb ~]$ exit


logout
Connection to serverb closed.
[student@workstation ~]$

RH124-RHEL9.0-es-5-20230516 563
capítulo 15 | Revisión exhaustiva

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade rhcsa-rh124-review3

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish rhcsa-rh124-review3

Esto concluye la sección.

564 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

Trabajo de laboratorio

Gestión de redes

nota
Si planea realizar el examen RHCSA, use el siguiente enfoque para
aprovechar al máximo las ventajas de esta revisión integral: intente realizar
cada trabajo de laboratorio sin ver los botones de soluciones ni consultar el
contenido del curso. Use los scripts de calificación para evaluar su progreso a
medida que completa cada trabajo de laboratorio.

En esta revisión, configura y prueba la conectividad de red.

Resultados
• Configurar los ajustes de red.

• Probar la conectividad de red.

• Establecer un nombre de host estático.

• Usar nombres de host canónicos que se puedan resolver localmente para conectarse a los
sistemas.

Antes De Comenzar
Si no restableció las máquinas workstation y server al final del último capítulo, guarde
el trabajo que desea mantener de ejercicios anteriores de esas máquinas y restablézcalas
ahora.

Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start rhcsa-rh124-review4

Importante
Cuando usa el comando ssh para ajustar la configuración de red, un
comando erróneo puede bloquear o suspender su sesión. A continuación, se
desconecta del servidor y, por lo tanto, se vuelve inaccesible. Debe ajustar
la configuración de la red a través de la consola del servidor, localmente o
mediante una consola remota.

En esta revisión, abra la consola de la máquina serverb para ajustar la


configuración de red.

RH124-RHEL9.0-es-5-20230516 565
capítulo 15 | Revisión exhaustiva

Especificaciones
• En serverb, determine el nombre de la interfaz Ethernet y su perfil de conexión activa.

• En serverb, cree y active un perfil de conexión llamado static para la interfaz Ethernet
disponible. El perfil static establece de manera estática las configuraciones de la red y no usa
DHCP. Configure el perfil static para usar los ajustes de red en la siguiente tabla:

Parámetro Configuración

Dirección IPv4 172.25.250.111

Máscara de red 255.255.255.0

Puerta de enlace 172.25.250.254

Servidor DNS 172.25.250.254

• Establezca el nombre de host serverb como server-review4.lab4.example.com.

• En serverb, establezca client-review4 como el nombre de host canónico para la dirección


IPv4 servera 172.25.250.10.

• Configure el perfil de conexión static con una dirección IPv4 adicional de 172.25.250.211
con una máscara de red de 255.255.255.0. No elimine la dirección IPv4 existente. Verifique
que serverb responde a todas las direcciones cuando la conexión static está activa.

• En serverb, restaure la configuración de red original activando el perfil de conexión de red


original.

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade rhcsa-rh124-review4

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish rhcsa-rh124-review4

Esto concluye la sección.

566 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

Solución

Gestión de redes

nota
Si planea realizar el examen RHCSA, use el siguiente enfoque para
aprovechar al máximo las ventajas de esta revisión integral: intente realizar
cada trabajo de laboratorio sin ver los botones de soluciones ni consultar el
contenido del curso. Use los scripts de calificación para evaluar su progreso a
medida que completa cada trabajo de laboratorio.

En esta revisión, configura y prueba la conectividad de red.

Resultados
• Configurar los ajustes de red.

• Probar la conectividad de red.

• Establecer un nombre de host estático.

• Usar nombres de host canónicos que se puedan resolver localmente para conectarse a los
sistemas.

Antes De Comenzar
Si no restableció las máquinas workstation y server al final del último capítulo, guarde
el trabajo que desea mantener de ejercicios anteriores de esas máquinas y restablézcalas
ahora.

Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start rhcsa-rh124-review4

Importante
Cuando usa el comando ssh para ajustar la configuración de red, un
comando erróneo puede bloquear o suspender su sesión. A continuación, se
desconecta del servidor y, por lo tanto, se vuelve inaccesible. Debe ajustar
la configuración de la red a través de la consola del servidor, localmente o
mediante una consola remota.

En esta revisión, abra la consola de la máquina serverb para ajustar la


configuración de red.

RH124-RHEL9.0-es-5-20230516 567
capítulo 15 | Revisión exhaustiva

1. Use la consola del sistema para iniciar sesión con el usuario student en la máquina
serverb y cambie al usuario root.

[student@serverb ~]$ sudo -i


[sudo] password for student: student
[root@serverb ~]#

2. Determine el nombre de la interfaz Ethernet en serverb y el nombre del perfil de la


conexión que usa.

2.1. Visualización de la información de conexión de red

[root@serverb ~]# nmcli device status


DEVICE TYPE STATE CONNECTION
eth0 ethernet connected Wired connection 1
lo loopback unmanaged --

En este ejemplo, eth0 es el nombre de la interfaz de Ethernet. El nombre del perfil


de conexión es Wired connection 1. Cree el perfil de conexión static (estático)
para esta conexión.

nota
Los nombres de la interfaz de red y del perfil de conexión inicial pueden diferir de
la salida anterior. Use el nombre que se muestra en su sistema para reemplazar el
nombre del marcador de posición ethX en los pasos posteriores.

3. En serverb, cree el perfil de conexión static para la interfaz ethX. Establezca la


configuración de red de forma estática para que no use DHCP. Cuando esté listo, active ese
perfil de conexión. Base la configuración en la siguiente tabla:

Dirección IPv4 172.25.250.111

Máscara de red 255.255.255.0

Puerta de enlace 172.25.250.254

Servidor DNS 172.25.250.254

3.1. Cree el perfil de conexión static con la configuración de red proporcionada.

[root@serverb ~]# nmcli connection add con-name static type ethernet \


ifname ethX ipv4.addresses '172.25.250.111/24' ipv4.gateway '172.25.250.254' \
ipv4.dns '172.25.250.254' ipv4.method manual
Connection 'static' (ac8620e6-b77e-499f-9931-118b8b015807) successfully added.

3.2. Active el perfil de conexión.

[root@serverb ~]# nmcli connection up static

4. Establezca el nombre de host serverb como server-review4.lab4.example.com.


Verifique el nuevo nombre de host.

568 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

4.1. Configure server-review4.lab4.example.com como el nuevo nombre de host.

[root@serverb ~]# hostnamectl hostname server-review4.lab4.example.com


[root@serverb ~]# hostname
server-review4.lab4.example.com

5. En serverb, establezca client-review4 como el nombre de host canónico para la


dirección IPv4 servera 172.25.250.10.

5.1. Edite el archivo /etc/hosts y agregue client-review4 como un nombre para la


dirección IPv4 172.25.250.10.

172.25.250.10 client-review4

5.2. Verifique que puede acceder a la dirección IPv4 servera 172.25.250.10 mediante
el nombre de host canónico client-review4.

[root@serverb ~]# ping -c2 client-review4


PING client-review4 (172.25.250.10) 56(84) bytes of data.
64 bytes from client-review4 (172.25.250.10): icmp_seq=1 ttl=64 time=0.259 ms
64 bytes from client-review4 (172.25.250.10): icmp_seq=2 ttl=64 time=0.391 ms

--- client-review4 ping statistics ---


2 packets transmitted, 2 received, 0% packet loss, time 33ms
rtt min/avg/max/mdev = 0.259/0.325/0.391/0.066 ms

6. Modifique el perfil de conexión static para configurar la dirección IPv4 172.25.250.211


adicional con una máscara de red 255.255.255.0. No elimine la dirección IPv4 existente.
Verifique que serverb responde a todas las direcciones cuando el perfil de conexión
static está activo.

6.1. Agregue la dirección IP 172.25.250.211 para la conexión static.

[root@serverb ~]# nmcli connection modify static \


+ipv4.addresses '172.25.250.211/24'

6.2. Active la nueva dirección IP.

[root@serverb ~]# nmcli connection up static


...output omitted...

6.3. Desde workstation, use el comando ping para verificar que se accede a la dirección
IPv4 172.25.250.211.

[student@workstation ~]$ ping -c2 172.25.250.211


PING 172.25.250.211 (172.25.250.211) 56(84) bytes of data.
64 bytes from 172.25.250.211: icmp_seq=1 ttl=64 time=0.246 ms
64 bytes from 172.25.250.211: icmp_seq=2 ttl=64 time=0.296 ms

--- 172.25.250.211 ping statistics ---


2 packets transmitted, 2 received, 0% packet loss, time 50ms
rtt min/avg/max/mdev = 0.246/0.271/0.296/0.025 ms

RH124-RHEL9.0-es-5-20230516 569
capítulo 15 | Revisión exhaustiva

7. En serverb, restaure la configuración original activando el perfil de red original.

7.1. Regrese a la consola y use el comando nmcli para activar el perfil de red original.

[root@serverb ~]# nmcli connection up "Wired connection 1"


...output omitted...

El nombre de perfil de conexión original podría diferir en serverb. Reemplace el


nombre en esta solución con el nombre de su sistema. Busque el nombre del perfil con
el comando nmcli connection show.

7.2. En workstation, inicie sesión en serverb con el usuario student para verificar que
la configuración de red original esté activa.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@server-review4 ~]$

7.3. Salga de las terminales adicionales. Regrese al sistema workstation con el usuario
student.

[student@server-review4 ~]$ exit


logout
Connection to serverb closed.
[student@workstation ~]$

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade rhcsa-rh124-review4

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish rhcsa-rh124-review4

Esto concluye la sección.

570 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

Trabajo de laboratorio

Montaje de sistemas de archivos y


búsqueda de archivos

nota
Si planea realizar el examen RHCSA, use el siguiente enfoque para
aprovechar al máximo las ventajas de esta revisión integral: intente realizar
cada trabajo de laboratorio sin ver los botones de soluciones ni consultar el
contenido del curso. Use los scripts de calificación para evaluar su progreso a
medida que completa cada trabajo de laboratorio.

En esta revisión, monta un sistema de archivos y localiza archivos según diferentes criterios.

Resultados
• Montar un sistema de archivos existente.

• Buscar archivos por nombre de archivo, permisos y tamaño.

Antes De Comenzar
Si no restableció las máquinas workstation y server al final del último capítulo, guarde
el trabajo que desea mantener de ejercicios anteriores de esas máquinas y restablézcalas
ahora.

Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start rhcsa-rh124-review5

Especificaciones
• Inicie sesión en la máquina serverb con el usuario student y cambie al usuario root.

• Identifique el dispositivo de bloque desmontado que contiene un sistema de archivos XFS en la


máquina serverb. Monte el dispositivo de bloque en el directorio /review5-disk.

• Ubique el archivo review5-path. Cree un archivo /review5-disk/review5-path.txt


con una sola línea que consiste en la ruta absoluta al archivo review5-path.

• Busque todos los archivos que sean propiedad del usuario contractor1 y del grupo
contractor. Los archivos también deben tener los permisos octales de 640. Guarde la lista de
estos archivos en el archivo /review5-disk/review5-perms.txt.

• Localice todos los archivos con un tamaño de 100 bytes. Guarde las rutas absolutas a estos
archivos en el archivo /review5-disk/review5-size.txt.

RH124-RHEL9.0-es-5-20230516 571
capítulo 15 | Revisión exhaustiva

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade rhcsa-rh124-review5

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish rhcsa-rh124-review5

Esto concluye la sección.

572 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

Solución

Montaje de sistemas de archivos y


búsqueda de archivos

nota
Si planea realizar el examen RHCSA, use el siguiente enfoque para
aprovechar al máximo las ventajas de esta revisión integral: intente realizar
cada trabajo de laboratorio sin ver los botones de soluciones ni consultar el
contenido del curso. Use los scripts de calificación para evaluar su progreso a
medida que completa cada trabajo de laboratorio.

En esta revisión, monta un sistema de archivos y localiza archivos según diferentes criterios.

Resultados
• Montar un sistema de archivos existente.

• Buscar archivos por nombre de archivo, permisos y tamaño.

Antes De Comenzar
Si no restableció las máquinas workstation y server al final del último capítulo, guarde
el trabajo que desea mantener de ejercicios anteriores de esas máquinas y restablézcalas
ahora.

Con el usuario student en la máquina workstation, use el comando lab para preparar el
sistema para este ejercicio.

Este comando prepara su entorno y garantiza que estén disponibles todos los recursos
requeridos.

[student@workstation ~]$ lab start rhcsa-rh124-review5

1. Inicie sesión en la máquina serverb con el usuario student y cambie al usuario root.

[student@workstation ~]$ ssh student@serverb


...output omitted...
[student@serverb ~]$ sudo -i
[sudo] password for student: student
[root@serverb ~]#

2. Identifique el dispositivo de bloque desmontado que contiene un sistema de archivos XFS en


la máquina serverb. Monte el dispositivo de bloque en el directorio /review5-disk .

2.1. Identifique el dispositivo de bloque desmontado que contiene un sistema de archivos


XFS.

RH124-RHEL9.0-es-5-20230516 573
capítulo 15 | Revisión exhaustiva

[root@serverb ~]# lsblk -fs


NAME FSTYPE LABEL UUID MOUNTPOINT
...output omitted...
vdb1 xfs 7694653c-45f6-4749-bd87-f2f69c37daa7
└─vdb
...output omitted...

De la salida anterior, el dispositivo de bloque vdb1 contiene el sistema de archivos XFS,


que no está montado en el sistema.

2.2. Cree el directorio /review5-disk.

[root@serverb ~]# mkdir /review5-disk

2.3. Monte el dispositivo de bloque vdb1 en el directorio /review5-disk.

[root@serverb ~]# mount /dev/vdb1 /review5-disk

2.4. Verifique que el dispositivo de bloque vdb1 esté montado en el directorio /review5-
disk.

[root@serverb ~]# df -Th


Filesystem Type Size Used Avail Use% Mounted on
...output omitted...
/dev/vdb1 xfs 2.0G 47M 2.0G 3% /review5-disk
...output omitted...

3. Ubique el archivo review5-path. Guarde su ruta absoluta en el archivo /review5-disk/


review5-path.txt.

3.1. Ubique el archivo review5-path. Redirija todos los mensajes de error al archivo
especial /dev/null.

[root@serverb ~]# find / -iname review5-path 2>/dev/null


/var/tmp/review5-path

Observe la ruta absoluta al archivo review5-path de la salida anterior.

3.2. Use el comando vim /review5-disk/review5-path.txt y guarde la ruta


absoluta en el archivo review5-path. En el siguiente ejemplo, se muestra el
contenido esperado del archivo /review5-disk/review5-path.txt.

[root@serverb ~]# cat /review5-disk/review5-path.txt


/var/tmp/review5-path

4. Busque todos los archivos que sean propiedad del usuario contractor1 y del grupo
contractor. Los archivos deben tener los permisos octales 640. Guarde las rutas absolutas
a estos archivos en el archivo /review5-disk/review5-perms.txt.

4.1. Busque todos los archivos que sean propiedad del usuario contractor1 y del grupo
contractor y que tengan permisos octales 640. Redirija todos los errores al archivo
especial /dev/null.

574 RH124-RHEL9.0-es-5-20230516
capítulo 15 | Revisión exhaustiva

[root@serverb ~]# find / -user contractor1 \


-group contractor -perm 640 2>/dev/null
/usr/share/review5-perms

Solo el archivo /usr/share/review5-perms cumple con los criterios del comando


find anterior. Establezca la ruta absoluta al archivo review5-perms.

4.2. Use el comando vim /review5-disk/review5-perms.txt y guarde la ruta


absoluta en el archivo review5-perms. En el siguiente ejemplo, se muestra el
contenido esperado del archivo /review5-disk/review5-perms.txt.

[root@serverb ~]# cat /review5-disk/review5-perms.txt


/usr/share/review5-perms

5. Localice todos los archivos con un tamaño de 100 bytes. Guarde las rutas absolutas a estos
archivos en el archivo /review5-disk/review5-size.txt.

5.1. Localice todos los archivos con un tamaño de exactamente 100 bytes. Redirija todos
los errores al archivo especial /dev/null.

[root@serverb ~]# find / -size 100c 2>/dev/null


/usr/share/licenses/ethtool/LICENSE
/usr/share/doc/libuser
/usr/share/doc/plymouth/AUTHORS
...output omitted...
/opt/review5-size
...output omitted...

La salida anterior puede variar según la cantidad de archivos que coincidan con los
criterios de tamaño en su sistema. Observe las rutas absolutas a todos los archivos de
la salida anterior.

5.2. Use el comando vim /review5-disk/review5-size.txt y guarde la ruta


absoluta de los archivos de la salida anterior. En el siguiente ejemplo, se muestra el
contenido esperado del archivo /review5-disk/review5-size.txt.

[root@serverb ~]# cat /review5-disk/review5-size.txt


...output omitted...
/opt/review5-size
...output omitted...

5.3. Regrese al sistema workstation con el usuario student.

[root@serverb ~]# exit


logout
[student@serverb ~]$ exit
logout
Connection to serverb closed.
[student@workstation ~]$

RH124-RHEL9.0-es-5-20230516 575
capítulo 15 | Revisión exhaustiva

Evaluación
Con el usuario student en la máquina workstation, use el comando lab para calificar su
trabajo. Corrija los errores informados y vuelva a ejecutar el comando hasta obtener un resultado
satisfactorio.

[student@workstation ~]$ lab grade rhcsa-rh124-review5

Finalizar
En la máquina workstation, cambie al directorio de inicio de usuario student y use el comando
lab para completar este ejercicio. Este paso es importante para garantizar que los recursos de
ejercicios anteriores no impacten en los siguientes.

[student@workstation ~]$ lab finish rhcsa-rh124-review5

Esto concluye la sección.

576 RH124-RHEL9.0-es-5-20230516

You might also like