Está en la página 1de 270

Sistemas Operativos

Abiertos
SISTEMAS OPERATIVOS ABIERTOS 2

Curso Sistemas Operativos Abiertos (2406)


Formato Manual de curso
Autor Institucional Cibertec
Páginas 307 p.
Elaborador Oviedo Bejar, Juan Carlos
Revisor de Contenidos Morales Flores, Gustavo

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 3

Índice
Presentación 7
Red de contenidos 8

UNIDAD DE APRENDIZAJE 1: INSTALACIÓN DEL SISTEMA OPERATIVO GNU/LINUX

1.1 Tema 1 : Instalación del sistema operativo GNU/Linux 10


1.1.1 : Fundamentos del software libre 10
1.1.2 : Arquitectura del sistema GNU/Linux 12
1.1.3 : Distribuciones GNU/Linux 13
1.1.4 : Instalación del sistema operativo Ubuntu Desktop 20.04 lts 14

UNIDAD DE APRENDIZAJE 2: COMANDOS GNU Y UNIX


2.1 Tema 2 : Comandos GNU y Unix 32
2.1.1 : Trabajar en línea de comandos 32
2.1.2 : Personalizar y utilizar el entorno del terminal 51
2.1.3 : Procesar flujos usando filtros, tuberías y redirecciones 55
2.1.4 : Realizar administración de archivos básicos 72
2.1.5 : Buscar en archivos de texto usando expresiones regulares 77

UNIDAD DE APRENDIZAJE 3: USANDO EL EDITOR VI Y ADMINISTRACIÓN DE


PROCESOS

3.1 Tema 3 : Editor Vi 81


3.1.1 : Editar archivos con Vi, utilizar los modos de Vi 81
3.1.2 : Operaciones básicas de edición de archivos usando Vi 84

3.2 Tema 4 : Administración de procesos 86


3.2.1 : Crear, monitorizar y eliminar procesos 86
3.2.2 : Modificar prioridades en la ejecución de procesos 98

UNIDAD DE APRENDIZAJE 4: ENLACES DE ARCHIVOS Y ESTRUCTURA JERÁRQUICA


LINUX

4.1 Tema 5 : Crear y cambiar enlaces duros y simbólicos 103


4.1.1 : Crear enlaces duros y/o simbólicos 103
4.1.2 : Usar enlaces para soportar tareas de administración de sistema 104
4.1.3 : Comprender la ubicación correcta de archivos en el FHS 106
4.1.4 : Conocer la ubicación y propósito de archivos y directorios 107
importantes definidos en el FHS

4.2 Tema 6 : Arrancar el sistema 108


4.2.1 : Proveer comandos comunes al cargador de arranque y opciones 108
al Kernel al arranque del sistema
4.2.2 : Demostrar conocimiento de la secuencia de arranque desde el 111
BIOS hasta completar el arranque

4.3 Tema 7 : Cambiar los niveles de ejecución, apagar o reiniciar el sistema 120

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 4

4.3.1 : Establecer el nivel de ejecución predeterminado 120


4.3.2 : Cambiar entre niveles de ejecución 122
4.3.3 : Inicializar el sistema Sysv, Upstart y Systemd. 123
4.3.4 : Apagar o reiniciar el sistema desde la línea de comando 134
4.3.5 : Terminar procesos apropiadamente 134

UNIDAD DE APRENDIZAJE 5: ADMINISTRACIÓN DE PAQUETES DEBIAN Y RPM

5.1 Tema 8 : Instalación de paquetes Debian 138


5.1.1 : Instalar, actualizar y desinstalar paquetes binarios de Debian 138
5.1.2 : Encontrar paquetes que contengan archivos específicos o 148
bibliotecas las cuales pueden estar o no instaladas
5.1.3 : Obtener información de un paquete como la versión, 149
contenido, dependencias, integridad del paquete y estado de
instalación (este o no instalado el paquete)

5.2. Tema 9 : Instalación de paquetes RPM y YUM 152


5.2.1 : Instalar, actualizar o eliminar paquetes usando RPM y YUM 152
5.2.2 : Obtener información de un paquete RPM como la versión, 158
estado, dependencias, integridad y firmas
5.2.3 : Determinar que archivos provee un paquete, así como 163
encontrar de que paquete viene un archivo específico

UNIDAD DE APRENDIZAJE 6: DISPOSITIVOS, SISTEMAS DE FICHEROS Y SUS


ESTÁNDARES

6.1 Tema 10 : Creando particiones y sistema de ficheros 166


6.1.1 : Usar diversos comandos Mkfs para configurar particiones y 166
crear sistemas de archivos

6.2 Tema 11 : Mantener la integridad de los sistemas de archivos 171


6.2.1 : Verificar la integridad de un sistema de archivos 171
6.2.2 : Monitorizar el espacio e inodos libres 171
6.2.3 : Reparar problemas simples en un sistema de archivos 173

UNIDAD DE APRENDIZAJE 7: MONTANDO Y DESMONTANDO FILE SYSTEMS

7.1 Tema 12 : Controlar el montaje y desmontaje de sistemas de archivos 177


7.1.1 : Montar y desmontar sistemas de archivos manualmente 177
7.1.2 : Configurar el montaje de sistemas de archivos al arranque del 178
sistema
7.1.3 : Configurar sistemas de archivos para dispositivos extraíbles 180
7.1.4 : Establecer cuotas de disco para un sistema de archivos 181
7.1.5 : Editar, revisar, y generar reportes de cuotas de usuario 185

UNIDAD DE APRENDIZAJE 8:ADMINISTRACIÓN DE USUARIOS Y GRUPOS

8.1 Tema 13 : Administración de cuentas 189


8.1.1 : Administrar permisos de acceso a los archivos y directorios 189
8.1.2 : Usar modos de acceso como SIUD, SGID y Sticky Bit para 192
mantener la seguridad

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 5

8.1.3 : Conocer cómo cambiar la máscara de creación de archivos 194


8.1.4 : Usar el campo de grupo para garantizar acceso a miembros de 198
grupo

UNIDAD DE APRENDIZAJE 9: ADMINISTRACIÓN DE TAREAS DEL SISTEMA

9.1 Tema 14 : Automatizar tareas administrativas planificando tareas del 209


sistema
9.1.1 : Administrar tareas con la utilidad Cron y At, configura el acceso 209
del usuario a los servicios Cron y At del sistema

9.2 Tema 15 : Registro de actividad del sistema 216


9.2.1 : Introducción, sistema de registros Syslog, configuración de 216
Syslogd, rotar archivos de registros y revisar contenidos de
registros

UNIDAD DE APRENDIZAJE 10: FUNDAMENTOS DE REDES

10.1 Tema 16 : Networking en Linux 225


10.1.1 : Instalar y configurar hardware de red, configurando la red con 225
DHCP, IP estático, configurando enrutamiento, resolución de
nombres de host
10.1.2 : Diagnosticar la red, verificar conectividad de red, traza de rutas, 232
comprobar el estado de la red
10.1.3 : Configuración avanzada de IP Alias 234
10.1.4 : Acoplamiento de las interfaces de red – Bonding y Bridge 237
10.1.5 : Utilitarios de red: Netstat y Traceroute 239
10.1.6 : Acceso remoto por SSH 243

10.2 Tema 17 : Arreglo de disco y volúmenes lógicos 247


10.2.1 : Niveles de RAID 248
10.2.2 : Implementación de arreglos de discos (RAID 1) en Linux 251
10.2.3 : Administración de volúmenes lógicos 258
10.2.4 : Laboratorio: Implementar una solución de almacenamiento con 259
RAID y LVM

Bibliografía 267

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 6

Presentación
Durante los últimos años, se ha venido observando grandes demandas en el desarrollo de
sistemas y empleo de servicios en plataformas GNU/Linux, dando lugar una alta demanda de
profesionales de Linux, siendo una prioridad en el sector privado y público a la hora de contratar
personal de TI.

Administración de Sistemas Operativos Abiertos es un curso que pertenece a la línea de Linux y


se enseña en la carrera de Redes y Comunicaciones. Brinda un conjunto de conocimientos y
herramientas que permite a los estudiantes implementar soluciones en plataformas GNU/Linux
que satisfacen necesidades de negocio específicas en un entorno empresarial o institucional.

El curso Sistemas Operativos Abiertos (Linux) está realizado en base a los sílabos de la
certificación.

LPC-1 del examen 101. Al finalizar el estudio de este manual, el estudiante estará en la capacidad
de utilizar los comandos de Linux, identificar procesos, sentencias, montar dispositivos extraíbles,
configurar interfaces de red, brindar soporte ante fallas menores y también, para consolidar lo
aprendido, estará en condiciones de poder rendir el examen de certificación básica LPC-1 examen
101.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 7

Red de contenidos
Instalación del Sistema
Unidad 1
Operativo GNU/Linux

Unidad 2 Comandos GNU y Unix

Usando el Editor Vi y
Unidad 3 Administración de
Procesos

Enlaces de Archivos y
Unidad 4
Estructura Jerárquica Linux

Administración de
Unidad 5
Paquetes Debian y RPM
Sistemas Operativos Abiertos

Dispositivos, Sistemas de
Unidad 6
Ficheros y sus Estándares

Montando y desmontando
Unidad 7
File Systems

Administración de
Unidad 8
Usuarios y Grupos

Administración de Tareas
Unidad 9
del Sistema

Unidad 10 Fundamentos de Redes

Servicios de
Unidad 11
Infraestructura de Red

Unidad 12 Servicio de mensajería

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 8

UNIDAD

1
INSTALACIÓN DEL SISTEMA OPERATIVO
GNU/LINUX
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno comprende la filosofía de Software Libre e instala el
sistema operativo GNU/Linux.

TEMARIO
1.1 Tema 1 : Instalación del Sistema Operativo GNU/Linux
1.1.1 : Fundamentos del software libre
1.1.2 : Arquitectura del sistema GNU/Linux
1.1.3 : Distribuciones GNU/Linux
1.1.4 : Instalación del sistema operativo Ubuntu Destop 20.04 LTS

ACTIVIDADES PROPUESTAS
• Los alumnos instalan el sistema operativo.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 9

1.1. INSTALACIÓN DEL SISTEMA OPERATIVO GNU/LINUX

1.1.1. Fundamentos del software libre

GNU / LINUX

GNU/Linux es un sistema operativo tipo Unix que se distribuye bajo Licencia GPL (Licencia Pública
General de GNU). Su nombre proviene del Núcleo de Linux, desarrollado en 1991 por Linus
Torvalds en conjunto con las aplicaciones del sistema creadas por el proyecto GNU, liderado por
Richard Stallman.

GNU/LINUX = KERNEL (LINUX) + APLICACIONES (GNU)

Figura 1: Sistema Operativo GNU/Linux


Fuente.- Tomado de es.slideshare.net

APLICACIONES GNU

Figura 2: Aplicaciones de GNU/Linux


Fuente .- Tomado de es.slideshare.net

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 10

SOFTWARE LIBRE VS. SOFTWARE PRIVATIVO

Lo que hacías con: Lo puedes hacer con: Lo que hacías con: Lo puedes hacer
con:

Figura 3: Aplicaciones comerciales y sus similares en Software Libre


Fuente.- Tomado de conectarigualdad.gob.ar

Software Libre, se denomina a todo software que respeta la libertad de los usuarios y la
comunidad, cumpliendo con las 4 libertades del Software Libre:

• Libertad de ejecutar el programa como se desea con cualquier propósito (libertad 0).
• Libertad de estudiar el funcionamiento del programa y cambiarlo como se desee (libertad 1).
• Libertad de redistribuir copias para ayudad a su prójimo (libertad 2).
• Libertad de distribuir copias de sus versiones modificadas a terceros (libertad 3).

Software Libre no quiere decir gratuito.

Open Source, o también conocido como código abierto, se focaliza más en beneficios prácticos
(acceso al código fuente) que en cuestiones éticas o de libertad que se destaca en el software
libre.

Licencia GPL, la Licencia Pública General de GNU o más conocida por su acrónimo en inglés
(General Public License), es una licencia creada por la Free Software Foundation. Está orientada,
principalmente, a proteger la libre distribución, modificación y uso de software. Pretende
garantizar su libertad de compartir y modificar el software "libre", esto es para asegurar que el
software es libre para todos sus usuarios. Algunos otros programas de software de la Free
Software Foundation están cubiertos por la "LGPL” (Licencia pública general reducida), la cual
puede aplicar a sus programas también.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 11

Copyleft, contrario al copyrigth, el copyleft se practica al ejercer el derecho de autor que consiste
en permitir la libre distribución de copias y versiones modificadas, de una obra u otro trabajo,
exigiendo que los mismos derechos sean preservados en las versiones modificadas.

1.1.2. Arquitectura del sistema GNU/Linux

Un Sistema Operativo (SO) es aquel programa o software encargado de administrar y gestionar


los recursos disponibles de un ordenador a nivel de hardware y proporciona el correcto ambiente
para que el usuario pueda ejecutar programas. Su función principal es la de brindar herramientas
necesarias para controlar una computadora y poder hacer uso de ella. No son de uso exclusivo
de las computadoras, sino que también se utilizan para poder controlar e interaccionar con los
teléfonos celulares, tablets, routers, reproductores de DVD, consolas de videojuegos, smart card,
cajeros ATM, etc.

S.O. = Intermediario entre los recursos HW, el usuario y las aplicaciones.

Figura 4: Sistema operativo en capas


Fuente .- Tomado de es.slideshare.net

Funciones principales

• Administración del procesador: el Sistema Operativo proporciona los recursos


necesarios del procesador entre las aplicaciones ejecutadas para que éstas se ejecuten
correctamente mediante un algoritmo de programación.
• Gestión de la memoria: al igual que en el anterior punto, el SO se encarga de gestionar
la memoria ram, disponible en la computadora, para que las aplicaciones puedan ser
ejecutadas.
• Gestión de operaciones de operaciones de entradas y salidas (inputs/outputs): el SO
permite administrar los periféricos a través de los drivers.
• Administración de autorizaciones: El SO se encarga de gestionar y administrar las
autorizaciones garantizando que solo los usuarios y las aplicaciones que tienen la
autorización puedan ejecutarlas.
• Gestión de archivos: El SO gestiona la lectura y escritura en el sistema de archivos y las
autorizaciones de acceso a archivos de aplicaciones y usuarios.
• Administración de utilerías y soporte: El SO proporciona información con algunos
indicadores que pueden ser utilizados para diagnosticar el funcionamiento correcto del
equipo.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 12

1.1.3. Distribuciones GNU/Linux

Una distribución GNU/Linux (coloquiamente, llamada distro) es una distribución de software


basada en el núcleo Linux que incluye determinados paquetes de software para satisfacer las
necesidades de un grupo específico de usuarios, dando origen a ediciones domésticas,
empresariales y para servidores. Por lo general, están compuestas, total o mayoritariamente, de
software libre, aunque a menudo, incorporan aplicaciones o controladores propietarios
(ES.WHAT-THIS.COM, 2020).

Distribuciones más importantes en el mundo de GNU/Linux

Figura 5: Distribuciones GNU/Linux


Fuente.- Tomado de planet-libre.org

Componentes

Para Sanchez (2013), el conjunto típico de una distribución Linux contiene un núcleo,
herramientas y bibliotecas, software adicional, documentación, un sistema de ventanas, un
administrador de ventanas y un entorno de escritorio, éste suele ser GNOME o KDE.
Gran parte del software incluido es de fuente abierta o software libre y distribuido por sus
desarrolladores tanto en binario compilado como en forma de código fuente, permitiendo a
sus usuarios modificar o compilar el código fuente original si lo desean. Muchas distribuciones
incorporan software privativo, no disponible en forma de código fuente.

Distribuciones independientes
Como Gentoo Linux, T2 y Linux From Scratch, proveen el código fuente de todo el software y
solo incluyen los binarios del núcleo, herramientas de compilación y de un instalador; el
instalador compila todo el software para el CPU específico de la PC del usuario.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 13

Gestión de paquetes

Las distribuciones están divididas en «paquetes». Cada paquete contiene una aplicación
específica o un servicio. Ejemplos de paquetes son una biblioteca para manejar el formato de
imagen PNG, una colección de tipografías o un navegador web. El paquete es distribuido en su
versión compilada y la instalación y desinstalación de los paquetes es controlada por un sistema
de gestión de paquetes en lugar de un simple gestor de archivos.

Cada paquete elaborado para ese sistema de paquetes contiene metainformación tal como fecha
de creación, descripción del paquete y sus dependencias. El sistema de paquetes analiza esta
información para permitir la búsqueda de paquetes, actualizar las librerías y aplicaciones
instaladas, revisar que todas las dependencias se cumplan y obtenerlas si no se cuenta con ellas
de manera automática.

Sistemas de paquetes más usados

• RPM, creado por Red Hat y usado por un gran número de distribuciones de Linux, es el
formato de paquetes del Linux Standard Base. Originalmente introducido por Red Hat,
pero ahora se usa en muchas distribuciones, como por ejemplo Mandriva y Centos.
• Deb, paquetes Debian, originalmente introducidos por Debian, pero también utilizados
por otros como Knoppix y Ubuntu.
• Tgz, usado por Slackware, empaqueta el software usando tar y gzip. Pero, además, hay
algunas herramientas de más alto nivel para tratar con este formato: slapt-get, slackpkg
y swaret.
• Ebuilds, archivo que contiene información acerca de cómo obtener, compilar e instalar
un paquete en el sistema Portage de Gentoo Linux con el comando emerge.
Generalmente, estas instalaciones se basan en la compilación de fuentes, aunque
algunos paquetes binarios se pueden instalar de esta manera. Pacman, para Arch Linux,
usa binarios precompilados distribuidos en un fichero .pkg.tar.gz ó .pkg.tar.xz.
• Pet, utilizado por Puppy Linux, sus derivados y Quirky, su proyecto hermano (Sanchez,
2013).

1.1.4. Instalación del sistema operativo Ubuntu Desktop 20.04 LTS

1.1.4.1. Diseñar el esquema de disco duros

Una forma fácil de particionar un disco duro debe contener una sola partición grande (bajo el
directorio "/") de todo el sistema que ocupa el disco duro, menos espacio destinado para
intercambio. Si el usuario va a utilizar el mismo Sistema Operativo y solo lo actualiza en lugar de
instalar alguno nuevo, esto podría ser un buen esquema. Trazar las particiones es fácil, ya que
hay una y todo está en la misma partición. La desventaja es que, si el sistema se corrompe, exigirá
una reinstalación del Sistema Operativo, todos los datos de la partición se pueden perder.

Esquema 1: Separar la partición "/boot"

El usuario puede separar el directorio "/boot" en una partición del resto del Sistema Operativo.
El directorio /boot contiene el núcleo de Linux y la información de inicio. Los usuarios que quieran
personalizar sus núcleos y compartirlos, a través de múltiples sistemas operativos Linux suelen
crear una partición /boot. De esta manera, el usuario puede personalizar su núcleo e instalar
Fedora Linux en una partición que utilice su núcleo personalizado e instalar Ubuntu Linux en otra
partición que utilice el mismo núcleo.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 14

Esquema 2: Partición separada "/usr"

El directorio "/usr" contiene todos los archivos binarios, los programas que el usuario ha
instalado. Cualquier programa que un usuario pueda ejecutar se almacena en el directorio
/usr. En sistemas con varios usuarios, el administrador podría crear una partición /usr de un
tamaño fijo. De esta manera, los usuarios del sistema no podrían mantener la instalación de
softwares, más allá del límite del tamaño. En teoría, el administrador podría crear una
partición /usr con espacio apenas suficiente para mantener el software necesario y nada más.

Combinaciones

Cualquiera de estos sistemas se puede combinar para obtener resultados diferentes. Por
ejemplo, un usuario podría crear una partición /boot separada por dos sistemas diferentes de
Linux, cada uno de los cuales también puede acceder a dos diferentes particiones /home para
sus usuarios; sin embargo, algunos discos duros tienen limitaciones a tantas particiones que
un usuario puede crear. Lo mejor es consultar la documentación sobre el tipo de unidad de
disco duro a utilizar para saber mejor cómo crear las particiones.

1.1.4.2. Instalar un gestor de arranque

Según el Massachusetts Institute of Technology (s.f.b.), cuando se enciende un equipo con Red
Hat Enterprise Linux, el Sistema Operativo es cargado en memoria por un programa especial
llamado gestor de arranque. Un programa gestor de arranque existe en el disco duro primario
del sistema (o en otros dispositivos) y es responsable de la carga del kernel de Linux con sus
archivos necesarios o (en algunos casos) de otros sistemas operativos en la memoria.

Figura 6: Gestor de Arranque Red Hat


Fuente .-Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 15

a. Gestores de arranque y arquitectura del sistema

Cada arquitectura de sistemas que pueda ejecutar Red Hat Enterprise Linux usa un gestor de
arranque diferente. La lista siguiente muestra los gestores de arranque disponibles para cada
arquitectura:

Arquitectura Gestores de arranque


AMD® AMD64 GRUB
IBM® eServer. iSeries. OS/400®
IBM® eServer. pSeries. YABOOT
IBM® S/390® z/IPL
IBM® eServer. zSeries® z/IPL
Intel® Itanium. ELILO
x86 GRUB

Este capítulo explica comandos y opciones de configuración para el gestor de arranque GRUB
suministrado con Linux para la arquitectura x86.

a. GRUB

GNU (Grand Unified Boot Loader) o GRUB, es un programa que habilita al usuario a seleccionar
qué Sistema Operativo instalado o kernel cargar en el momento de arranque del sistema.
Permite también que el usuario transmita argumentos al kernel.

b. Proceso de arranque en un sistema x86 y GRUB

Esta sección explica con más detalle el papel específico que desempeña GRUB al arrancar un
sistema x86. Para hacerse una idea del proceso de arranque, GRUB se carga asimismo en la
memoria en las diferentes etapas:

La etapa 1 o cargador de arranque primario se lee en la memoria por el BIOS desde el MBR1.El
gestor de arranque primario existe en menos de 512 bytes de espacio en disco dentro del MBR
y es capaz de cargar bien sea la etapa 1.5 o la etapa 2 del gestor de arranque.

La Etapa 1 del gestor de arranque se lee en la memoria por el gestor de arranque de la Etapa 1,
si es necesario. Determinados hardware requieren un paso intermedio para pasar a la Etapa 2
del gestor de arranque. Esto sucede a menudo cuando la partición /boot/ está por encima del
cilindro 1024 del disco duro o cuando se usa el modo LBA. La Etapa 1.5 del gestor de arranque
se encuentra en la partición /boot/ o en una pequeña parte del MBR y la partición /boot.

La Etapa 2 o el gestor de arranque secundario se lee en la memoria. El gestor de arranque


secundario visualiza el menú GRUB y el entorno de comandos. Esta interfaz le permite
seleccionar qué Sistema Operativo o kernel arrancar, pasar argumentos al kernel o ver los
parámetros del sistema.

El gestor de arranque secundario lee el Sistema Operativo o el kernel así como también los
contenidos de /boot/sysroot/ en memoria. Una vez que GRUB determina qué Sistema
Operativo iniciar, éste lo carga en la memoria y transfiere el control de la máquina a dicho
Sistema Operativo.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 16

El método usado para arrancar Linux se conoce como método de carga directa porque el gestor
de arranque carga el Sistema Operativo directamente. No existe un intermediario entre el
gestor de arranque y el kernel.

El proceso de arranque usado por otros sistemas operativos puede variar. Por ejemplo, los
sistemas operativos de Microsoft® Windows®, así como otros sistemas operativos, se cargan
mediante un método de arranque de carga encadenada. Bajo este método, el MBR señala el
primer sector de la partición que tiene el Sistema Operativo. Allí encuentran los archivos
necesarios para arrancar el Sistema Operativo.

GRUB soporta ambos métodos de arranque, directo y de carga encadenada, permitiendo


arrancar desde casi cualquier Sistema Operativo (Massachusetts Institute of Technology, s.f.).

c. Funciones de GRUB

En una investigación del Massachusetts Institute of Technology (s.f.), se refiere que el GRUB
contiene una serie de funciones que lo convierten en el método favorito respecto al resto de
gestores de arranque disponibles para la arquitectura x86. A continuación tiene una lista de las
características más importantes:

GRUB proporciona un verdadero entorno basado en comandos, pre-Sistema Operativo, para las
máquinas x86. Esta funcionalidad le otorga al usuario una gran flexibilidad en la carga de sistemas
operativos con opciones específicas o con la recopilación de información sobre el sistema.
Durante muchos años, las arquitecturas diferentes a x86 han usado entornos previos al Sistema
Operativo que permiten arrancar el sistema desde una línea de comandos.

GRUB soporta el modo Direccionamiento Lógico de Bloques (LBA). El modo LBA coloca la
conversión de direccionamiento utilizada para buscar archivos en la unidad de disco duro del
firmware y se utiliza en muchos discos IDE y en todos los discos duros SCSI. Antes de LBA, los
gestores de arranque encontraban la limitación del cilindro 1024 del BIOS, donde el BIOS no podía
encontrar un archivo después de ese cabezal de cilindro del disco. El soporte LBA permite que
GRUB arranque los sistemas operativos desde las particiones más allá del límite de 1024 cilindros,
siempre y cuando el BIOS del sistema soporte el modo LBA. La mayoría de las revisiones más
modernas de la BIOS soportan el modo LBA.

GRUB puede leer las particiones ext2. Esto permite que GRUB acceda a su archivo de
configuración, /boot/grub/grub.conf, cada vez que el sistema arranca, eliminando la necesidad
que tiene el usuario de escribir una nueva versión de la primera etapa del gestor de arranque al
MBR en caso de que se produzcan cambios de la configuración. El único caso en el que el usuario
necesitaría reinstalar GRUB en el MBR es en caso de que la localización física de la partición /boot/
se traslade en el disco.

d. Instalación de GRUB

Para el Massachusetts Institute of Technology, s.f. si no instaló GRUB durante el proceso de


instalación, se puede hacer después. Una vez instalado, se convierte en el gestor de arranque por
defecto. Antes de instalar GRUB, debería asegurarse de que cuenta con el último paquete
disponible de GRUB desde los CD-ROMs de instalación.

Una vez que el paquete GRUB esté instalado, abra un intérprete de comandos de la shell y ejecute
el comando /sbin/grub-install <ubicación> donde <ubicación> es la ubicación en la que la Etapa

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 17

1 de GRUB debería ser instalado. Por ejemplo, el comando siguiente instala GRUB al MBR del
dispositivo maestro IDE en el bus IDE primario:
/sbin/grub-install /dev/hda

La próxima vez que arranque el sistema, el menú del gestor de arranque gráfico GRUB aparecerá
antes del que el kernel se cargue en memoria.

e. Terminología de GRUB

Una de las cuestiones más importantes que debe entenderse antes de utilizar GRUB es cómo el
programa hace referencia a los dispositivos, por ejemplo, a los discos duros y a las particiones.
Esta información es muy importante si desea configurar GRUB para arrancar varios sistemas
operativos.

f. Nombres de dispositivos

Cuando se refiera a un dispositivo específico con GRUB, haga esto usando el formato siguiente
(observe que los paréntesis y las comas son muy importantes en la sintaxis):

(<tipo-de-dispositivo> <número-dispositivo-bios>, <número-partición>)

El <tipo-de-dispositivo> especifica el tipo de dispositivo desde el cual inicia GRUB. Las dos
opciones más comunes son hd para un disco duro o fd para un disquete de 3.5. Un tipo de
dispositivo menos usado también está disponible, llamado nd para un disco de la red.

El <número-dispositivo-bios> es el número del dispositivo BIOS. El disco duro IDE primario se


numera 0 y un disco duro IDE secundario se numera 1. La sintaxis es equivalente a aquella
utilizada para los dispositivos por el kernel. Por ejemplo, a en hda para el kernel es análogo a 0
en hd0 para GRUB, b en hdb es análogo a 1 en hd1, y así sucesivamente.

El <número-partición> hace referencia al número de una partición concreta en un dispositivo. Al


igual que en el caso de <número-partición>, la mayoría de los tipos de particiones son numeradas
comenzando por 0. Aunque la mayoría de las particiones se especifican con números, si el sistema
usa particiones BSD a éstas se hará referencia con letras, con a correspondiendo a 0, b
correspondiendo a 1 y así sucesivamente (Massachusetts Institute of Technology, s.f.).

g. Nombres de archivos y listas de bloqueo

Al escribir comandos en GRUB que hagan referencia a un archivo, como una lista de menús, es
necesario especificar una ruta de archivos absoluta después de los números de dispositivo y
partición.

Lo siguiente ilustra la estructura de tal comando:

En este ejemplo, reemplace <tipo-dispositivo> con hd, fd o nd. Reemplace con <número-
dispositivo> el número entero para el dispositivo. Reemplace </ruta/a/archivo> con una ruta
absoluta relativa al nivel más superior del dispositivo.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 18

También puede especificar archivos a GRUB que no aparecen realmente en el sistema de


archivos, tal como un gestor de arranque en cadena que aparece en los primeros bloques de
la partición. Para cargar tales archivos, deberá indicar una lista de bloques, que indique a
GRUB, bloque por bloque, la ubicación exacta del archivo en la partición. Puesto que un archivo
puede estar formado por varios conjuntos de bloques, hay una sintaxis específica para escribir
listas de bloques. Cada bloque que contiene el archivo se describe con un número de
desplazamiento de bloques seguido de un número de bloques de ese punto de
desplazamiento. Los desplazamientos de bloques se listan secuencialmente y delimitados por
comas.

La siguiente es una lista de bloques de ejemplo:

0+50,100+25,200+1

Esta lista de bloques de ejemplo especifica un archivo que empieza en el primer bloque de la
partición y que usa los bloques del 0 al 49, del 99 al 124, y el 199.

Saber cómo escribir listas de bloques es útil al utilizar GRUB para cargar sistemas operativos que
usan el método de carga encadenada. Puede suprimir el número de desplazamiento de bloques,
si empieza por el bloque 0. Por ejemplo, el archivo de carga encadenada de la primera partición
del primer disco duro tendrá el nombre siguiente:
(hd0,0)+1

Lo siguiente muestra el comando chainloader con una designación de lista de bloques similar en
la línea de comandos de GRUB después de establecer el dispositivo correcto y la partición
adecuada como raíz:

chainloader +1

El Sistema de archivos raíz y GRUB

Algunos usuarios se confunden con el uso del término sistema de archivos raíz tiene un
significado diferente con relación a GRUB. Es importante recordar que el sistema de archivos raíz
de GRUB no tiene nada que ver con el sistema de archivos raíz de Linux.

El sistema de archivos raíz de GRUB es el nivel superior del dispositivo especificado. Por ejemplo,
el archivo imagen (hd0,0)/grub/splash.xpm.gz está ubicado dentro del directorio /grub/ en el
nivel superior (o raíz) de la partición (hd0,0) (la cual es en verdad la partición /boot/ para el
sistema).

Luego, se ejecuta el comando kernel con la ubicación del archivo del kernel como una opción.
Una vez que el kernel de Linux inicia, establece el sistema de archivos raíz con el cual los usuarios
de Linux están familiarizados. El sistema de archivos raíz de GRUB original y sus montajes se
olvidan; la única finalidad de su existencia era arrancar el archivo del kernel.

Archivo de configuración de menú de GRUB

El archivo de configuración (/boot/grub/grub.conf), usado para crear la lista en la interfaz de


menú de GRUB de los sistemas operativos para el arranque, básicamente permite al usuario
seleccionar un grupo predefinido de comandos para su ejecución de configuración
(Massachusetts Institute of Technology ( s.f.).

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 19

1.1.4.3. Administración de bibliotecas compartidas

Una librería es un fichero que contiene un conjunto de funciones, escritas en un lenguaje de


programación, para ser utilizadas por un programa, de forma que, si un programa necesita usar
estas funcionalidades, puede acceder a la librería sin tener que reescribir el código.
La diferencia entre un programa y una librería es mínima, la única diferencia es que una librería
no se ejecuta de forma autónoma (no contiene el bloque de instrucción main), pero por lo demás,
funciona como un programa normal (también puede requerir de otras librerías para funcionar).

Tipos de Librerías

En el Blog de elhacker.NET (2016) explican que existen dos tipos de librerías, las librerías
compartidas o dinámicas, y las librerías estáticas. La diferencia entre ambas es que mientras en
las librerías compartidas el acceso es dinámico y se realiza en tiempo de ejecución, en las
estáticas las funcionalidades son enlazadas en tiempo de compilación y sustituidas por la
llamada, en el fichero ejecutable final.

Figura 7: Tipos de Librerías


Fuente.- Elaboración Propia

• Librerías compartidas

En Linux (y en Unix) las librerías compartidas se llaman Shared Objects y llevan el sufijo .so (su
equivalente en Windows son las .dll).

Las librerías compartidas se vinculan a un programa en tiempo de ejecución, permitiendo que el


código de la librería se cargue en memoria una única vez y pueda ser usado por varios programas,
de esta forma se consigue que el tamaño del código sea menor con su correspondiente ahorro
de espacio en memoria.

Además de esto con las librerías compartidas se cumple el principio de modularidad


(programación modular u orientada a objetos), de forma que si necesitamos modificar alguna
funcionalidad nos bastara con editar la librería que la contiene, dejando el programa que las
utiliza sin modificar (Blog de elhacker.NET, 2016).

NOMBRES DE LAS LIBRERÍAS COMPARTIDAS

Por convenio las librerías compartidas pueden tener varios tipos de nombre:

El nombre usado por el enlazador (‘lib’ + nombre de la libreria + ‘.so’)


Nombre completo (‘lib’ + nombre de la libreria + ‘.so’ + ‘.’ + número de versión) // Link hacia la
librería con el nombre real
Nombre real (‘lib’ + nombre de la libreria + ‘.so’ + ‘.’ + número de versión + ‘.’ + número de
subversión + ‘.’ + revisión) // La revisión es opcional.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 20

Para el cambio de versiones, hay que tener dos factores en cuenta, el número de la subversión
se cambia cuando se realizan cambios en la librería y esta no pierde compatibilidad con la version
anterior, pero si se pierde compatibilidad el cambio tiene que ser de versión y no de subversión.
Gracias a este convenio de nombres es posible que múltiples versiones de una librería compartida
coexistan en el sistema (Blog de elhacker.NET, 2016).

UBICACIÓN DE LAS LIBRERÍAS COMPARTIDAS

Las librerías compartidas se colocan en directorios denominados lib:

/lib: Librerías de sistema, vitales


/usr/lib: Librerías de usuario básicas, no se necesitan en el boot
/usr/local/lib: Librerías que no forman parte de la distribución estándar

La librería más importante del sistema es la de C. Todos los programas compilados son vinculados
a libc, por lo que es mejor no borrar esta librería; de lo contrario, el sistema dejaría de funcionar.

LIBRERÍAS VINCULADAS A UN PROGRAMA

Gracias al comando ldd, se podrán conocer las librerías vinculadas a un programa. Como
parámetro, se tiene que pasar la ubicación del programa.

Por ejemplo, para conocer las librerías asociadas al editor de texto Gedit, el comando sería el
siguiente:
ldd /usr/bin/gedit

El comando ldd también indicará si falta alguna librería asociada.

AÑADIR NUEVAS LIBRERÍAS

Para añadir una nueva librería, hay que ubicarla en uno de los directorios mencionados y después
ejecutar el programa ldconfig. Este programa se va a encargar de dejar la librería accesible para
el enlazador, creando los vínculos y caché necesarios en el archivo /etc/ld.so.conf, y en los
directorios de confianza (/lib y /usr/lib).

Si se da el caso que, la ubicación de la librería no es una de las estándares (las mencionadas), será
necesario agregar el directorio a /etc/ld.so.conf.

ENLAZADOR DINÁMICO “ld.so”

Ya hemos dicho que los ficheros binarios en Linux requieren un enlace dinámico (a no ser que se
opte por el enlace estático), y de este enlace se encargan los programas ld.so y ld-linux.so*. La
misión de estos dos programas es encontrar y cargar las bibliotecas compartidas requeridas por
el programa en cuestión, preparar el programa para ejecutarse y ejecutarlo. Para ello, el binario
en cuestión ofrece el nombre de las bibliotecas que necesita y ld.so, se encarga de buscarlas en
las siguientes ubicaciones:

• Las definidas a través de la variable de entorno LD_LIBRARY_PATH. Salvo cuando el


ejecutable tiene activo el bit setuid/setgid, en cuyo caso se ignora.

• Las definidas en el propio binario.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 21

• En el fichero /etc/ld.so.cache, que contiene una lista compilada de bibliotecas candidatas


encontradas previamente en la ruta de bibliotecas ampliada.

• En la ruta predeterminada /lib, y despues en /usr/lib/. Si el binario fue enlazado con la


opción -znodeflib, se omite este paso.

La primera librería encontrada que cumpla la dependencia será la utilizada. Hay que tener en
cuenta que lo que el binario contiene, no es una lista con los enlaces a cada librería, sino una lista
de rutas adicionales en las que buscar las dependencias (si las tiene).

1.1.4.4. Instalación del sistema operativo Ubuntu Desktop 20.04 LTS

Pasos previos:

Descargar imagen iso de Ubuntu Desktop 20.04 LTS de la siguiente url:


https://ubuntu.com/download/desktop/thank-you?version=20.04.1&architecture=amd64
Crear una máquina virtual para instalar Ubuntu Desktop 20.04 LTS, cargar la imagen e iniciar.
Se visualizará la siguiente imagen, se iniciará el asistente para instalar Ubuntu.

Figura 8: Instalación de Ubuntu Desktop 20.04 LTS


Fuente. - Elbaoración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 22

Seleccionar el idioma con la tecla F2; luego, Español.

Figura 9: Selección de Idioma para instalación


Fuente. - Elaboración Propia

Seleccionar Probar Ubuntu sin instalarlo.

Figura 10: Selección Probar Ubuntu sin instalarlo


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 23

Figura 11: Carga el sistema Operativo desde Imagen ISO


Fuente. - Elaboración Propia

Seleccionar el ícono de “Instalar Ubuntu 20.04.1 LTS”.

Figura 12: Selección Instalar Ubuntu 20.04 LTS


Fuente. - Elaboración Propia

Seleccionar Idioma a instalar ”Español”. Dar clic en el botón Continuar.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 24

Figura 13: Selección idioma a instalar


Fuente. - Elaboración Propia

Seleccionar disposición del teclado “Spanish”. Luego, dar clic en el botón Continuar.

Figura 14: Selección Disposición del teclado


Fuente. - Elaboración Propia

Seleccionar las casillas para Descargar actualizaciones al instalar Ubuntu e Instalar software de
terceros para hardware de gráficos y de wifi y formatos multimedia adicionales. Seguidamente,
dar clic al botón Continuar.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 25

Figura 15: Descargar actualizaciones e Instalar programas de terceros


Fuente. - Elaboración Propia

Seleccionar la opción “Borrar disco e instalar Ubuntu” y dar clic al botón Instalar ahora.

Figura 16: Selección del tipo de instalación


Fuente. - Elaboración Propia

Escribir los cambios en el disco, haciendo clic al botón Continuar.

Figura 17: Particionamiento automático del disco duro


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 26

Seleccionar la zona horaria dando clic en el mapa del Perú. Dar clic al botón Continuar.

Figura 18: Selección de la zona horaria


Fuente. - Elaboración Propia

Crear un usuario, escribiendo el nombre del nuevo usuario, el nombre de equipo y asignando una
contraseña robusta. Luego, dar clic al botón Continuar.

Figura 19: Creación de usuario standard


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 27

Iniciar la instalación del sistema.

Figura 20: Visualización del progreso de la instalación.


Fuente. - Elaboración Propia

Muy bien, ya se tiene Ubuntu Desktop 20.04 LTS instalado. Dar clic al botón Reiniciar ahora.

Figura 21: Finaliza la instalación del sistema


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 28

Ubuntu Desktop 20.04 LTS está listo para iniciar sesión.

Figura 22: Sistema listo para iniciar sesión


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 29

Resumen
1. En esta unidad, se vio la introducción al sistema operativo GNU/Linux, así como, la
filosofía del software Libre y Open Source, los comandos básicos para poder utilizar
Linux, Asimismo se realizó la instalación de Ubuntu Desktop 20.04 LTS. Por otro lado, se
conoció el gestor de arranque del Sistema Operativo, se reconoció su uso y la
importancia de éste para el inicio del sistema operativo.

Recursos
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta unidad:

o https://www.youtube.com/watch?v=hZDaS9xyINI
o https://www.youtube.com/watch?v=aMDhvICn7c8

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 30

UNIDAD

2
COMANDOS GNU Y UNIX
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno utiliza la línea de comandos (Shell), comandos de
ayuda, formato, uso de diferentes parámetros, personaliza el entorno y usa el historial
de comandos.

TEMARIO
2.1 Tema 2 : Comandos GNU y Unix
2.1.1 : Trabajar en línea de comandos
2.1.2 : Personalizar y utilizar el entorno del terminal
2.1.3 : Procesar flujos usando filtros, tuberías y redirecciones
2.1.4 : Realizar administración de archivos básicos
2.1.5 : Buscar en archivos de texto usando expresiones regulares

ACTIVIDADES PROPUESTAS

• Los alumnos identifican la sentencia del uso de los comandos básicos.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 31

2.1. COMANDOS GNU Y UNIX


2.1.1. Trabajar en línea de comandos

En Linux hay disponibles varias consolas. La mayoría ofrece funciones similares, por lo que es muy
útil conocer determinados puntos básicos de su funcionamiento, así como las variables de
entorno que contienen datos que pueden utilizar muchos programas.

Explorar las opciones de la consola de Linux

Linux proporciona un rango de opciones para las consolas; entre las más comunes se encuentran
las siguientes:

• Bash: está basada en la consola bourne, aunque la amplía de varias maneras; es la consola por
defecto más común para las cuentas de usuario.
• Tcsh: está basada en la antigua consola #C (csh); no es la consola por defecto de las principales
distribuciones, es similar a bash pero difiere de ella en algunos detalles operacionales.
• Csh: es la consola #C original, no se usa mucho en Linux.
• Ksh: consola Korn, diseñada con las mejores funcionalidades de las consolas bourne y #C y las
amplía. Tiene pocos seguidores en Linux.
• zsh: lleva la evolución de la consola más allá de la korn, incorporando funcionalidades de las
consolas anteriores y añadiendo otras nuevas (Syconet. Blog de Informática y Redes, 2012).

Hay disponibles más consolas poco conocidas, pero la mayoría de los usuarios Linux ejecutan
bash que es la opción por defecto; otros SO, emplean por defecto, csh o tcsh, lo que puede
resultar más comodo si se tiene experiencia con un SO de tipo UNIX distinto de Linux.

El fichero /bin/sh es un enlace simbólico a la consola por defecto del sistema, que en Linux, suele
ser /bin/bash.

Utilizar una consola

Para Syconet. Blog de Informática y Redes (2012), el uso de la consola es bastante intuitivo: se
escribe un comando, al que se pueden haber añadido o no opciones, y el ordenador ejecuta el
comando. La mayoría de los comandos son externos, programas independientes de la consola;
pero existen algunos comandos internos y puede ser importante saber la diferencia entre ellos,
puesto que permiten algunos pequeños trucos: hacer que el ordenador complete un comando o
nombre de fichero largo, recuperar un comando que se ha ejecutado, etc. Existe una clase de
comandos muy importantes, que son aquellos que se emplean para la administración básica de
ficheros.

Iniciar una consola

En Linux, se puede acceder directamente a la consola a través de una pantalla de acceso en modo
texto que abre directamente la consola por defecto; pero también se puede acceder a través de
una interfaz gráfica de usuario (GUI), lo que hará que se tenga que iniciar una consola
manualmente. Para abrir esta consola, algunas GUI proporcionan una opción de menú; en caso
de que esta opción no exista, se deberá buscar una opción que permita ejecutar un comando
arbitrario donde se escribirá el nombre de nuestra consola para que se ejecute.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 32

Figura 23: Iniciando una consola por interfaz gráfica (GUI)


Fuente. - Elaboración Propia

Otra manera de iniciar una consola es con la combinación de teclas Alt+F2 y escribiendo “gnome-
terminal” en el cuadro de diálogo.

Figura 24: Iniciando una consola


Fuente. - Elaboración Propia

Como resultado, se obtiene un terminal o consola.

Figura 25: Consola de Ubuntu


Fuente. - Elaboración Propia
Consolas virtuales

Una consola virtual es un intérprete de comandos en un ambiente no gráfico, accesado desde la


máquina física, no remotamente. Se pueden acceder a múltiples consolas virtuales
simultáneamente.

Desde la interfaz gráfica, es posible conectarse a una consola virtual utilizando la combinación de
teclas Ctrl+Alt+FN, donde N es un número del 1 al 6.
Ejemplo: Acceder a la consola 3 desde la interfaz gráfica.

CTRL+ALT+F3

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 33

Una vez que esté en una consola virtual, la navegación entre las consolas se hace con la
combinación de teclas Alt+FN, donde N es un número del 1 al 6.

A continuación, una tabla con las combinaciones de teclas para acceder a cada consola.

N° de Consola Virtual Combinación de teclas


CV1 CTRL + ALT +F1
CV2 CTRL + ALT +F2
CV3 CTRL + ALT +F3
CV4 CTRL + ALT +F4
CV5 CTRL + ALT +F5
CV6 CTRL + ALT +F6
Tabla 1: Consola virtual
Fuente. - Elaboración Propia

Algunos trucos de la consola de comandos

Escribir los comandos resulta una tarea tediosa que puede derivar en errores, sobre todo si quien
escribe es lento o descuidado; para evitar esto, la consola incluye varias herramientas que ayudan
a acelerar las operaciones. La primera es la compleción de comandos, que nos ayudará a rellenar
el resto del comando o el nombre de fichero una vez tengamos escritas algunas letras; se emplea
pulsando la tecla TAB y, si los caracteres escritos no identifican a un único comando o nombre de
fichero, la consola rellenará lo que pueda y se detendrá. Si volvemos a pulsar TAB, se nos
mostrarán las posibles finalizaciones y, entonces, escribiremos uno o dos caracteres más y
volveremos a pulsar TAB para que complete con el comando o nombre de fichero deseado.

Los comandos básicos suelen tener nombres cortos, pero hay otros que son muy largos: los
nombres de ficheros pueden ser bastante largos (hasta 255 caracteres en algunos sistemas de
ficheros), por lo que la compleción de comandos suele resultar muy útil. Las consolas más
habituales incluyen está opción.

Otro atajo útil es el historial, que guarda un registro de todos los comandos escritos, se almacena
en ~/.bash_history en el caso de bash. Para recuperar un comando del historial que se haya
escrito recientemente pulsaremos la fecha arriba tantas veces como sea necesario hasta
encontrarlo. Si nos pasamos de largo, pulsaremos flecha abajo. Las combinaciones control+p y
control+n duplican la acción flecha arriba y flecha abajo. Si pulsamos control+r activamos la
búsqueda inversa: escribiremos caracteres que sean exclusivos del comando a localizar (no tienen
por qué ser los primeros caracteres del comando); podemos escribir más caracteres o pulsar
control+r varias veces, hasta encontrar el comando. La combinación control-s es similar, pero
busca hacia adelante. Si en cualquiera de los dos casos no queremos seguir con la búsqueda,
pulsaremos control+g; si, por el contrario, localizamos el comando y queremos editarlo, bash
ofrece funcionalidades de edición a partir de las del editor emacs:

Desplazarse dentro de la línea: control+a o control+e, desplazan el cursor al inicio o final de la


línea. Las teclas flecha izquierda y flecha derecha sirven para desplazarse caracter a caracter.
control+flecha izquierda o flecha derecha sirve para desplazarse de palabra en palabra, igual que
si pulsamos la tecla escape (esc) seguido de “b” o “f”.

Borrar texto: control+d o la tecla suprimir (supr) borran el carácter que hay bajo el cursor; la tecla
retroceso borra el carácter a la izquierda del cursor, control+k borra todo el texto que hay entre

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 34

el cursor y el final de la línea. Si pulsamos control+x seguido de retroceso, borraremos el texto


que va del cursor al comienzo de la línea.

Intercambiar texto: pulsando control+t se intercambia el carácter que hay delante del cursor por
el que está debajo del cursor; escape (esc) seguido de “t” intercambia las dos palabras que hay
justo antes del cursor o debajo de éste.

Cambiar mayúsculas y minúsculas: escape (esc) seguido de “u” convierte a mayúsculas el texto
que hay entre el cursor y el final de la palabra; escape (esc) seguido de “l” convierte a minúsculas
el texto que hay entre el cursor y el final de la palabra. Escape (esc) seguido de “c” convierte en
mayúscula la letra que hay bajo el cursor o la primera de la siguiente palabra, dejando intacto el
resto de la palabra.

Llamar a un editor: podemos usar el editor que queramos para editar el comando, si pulsamos
control+x seguido de control+e, bash intentará iniciar el editor definido en las variables de
entorno $FCEDIT o $EDITOR o como último recurso EMACS.

Estos comandos de edición son los más útiles de los que soporta bash; en la práctica, se hará un
uso intensivo de la comprensión de comandos y nombres de fichero del historial de comandos y
quizás alguna función de edición.

El comando history proporciona una interfaz para visualizar y administrar el historial. Si se escribe
solo mostrará, por lo general, los últimos 500 comandos; si añadimos un número, mostrará ese
número de comandos. La opción -c limpia el historial, algo muy útil si hemos escrito comandos
que no queremos mostrar, como aquellos que incluyen contraseñas (Syconet. Blog de Informática
y Redes, 2012).

Explorar la configuración de la consola

Las consolas se configuran a través de ficheros que contienen opciones de configuración en texto
plano. Estos ficheros son realmente scripts en la consola bash y sus principales ficheros de
configuración general son: /etc/bash.bashrc y /etc/profile; los principales para el espacio de
usuario son: ~/.bashrc y ~/.profile. Se pueden realizar cambios sencillos con nuestro editor de
texto favorito en los scripts de la consola sin saber mucho. Si no tenemos mucha experiencia,
antes de cambiar una configuración es recomendable guardar una copia del fichero original, pues
así, en el caso de encontrarnos algún problema, podremos regresar a la copia guardada, hasta
conocer las causas del problema que se ha producido.

Uso de las variables de entorno

Las variables de entorno contienen información a la que se accede a través del nombre de la
variable. Forman parte del entorno de un programa y pueden modificar dicho entorno. Las
variables de entorno definen información que se puede aplicar a muchos programas diferentes,
lo que evitará que tengamos que configurar ciertos datos individualmente para cada programa.
En bash se pueden definir utilizando un operador de asignación (=) seguido del comando export:

#NNTPSERVER=news.abigisp.com
#export NNTPSERVER

O podemos combinar estos dos comandos en uno solo:

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 35

#export NNTPSERVER=news.abigisp.com

Cualquiera de los dos métodos define la variable de entorno $NNTPSERVER con el valor
news.abigisp.com, las variables se definen omitiendo el signo de $, pero se utilizan incluyéndolo,
lo que las identifica como variables de entorno.

Podemos ver el contenido que tiene una variable de entorno utilizando el comando echo seguido
del nombre de la variable:

#echo $NNTPSERVER

También se puede ver el entorno completo escribiendo env, que dará como resultado decenas
de líneas de variables de entorno con sus valores. Si lo que queremos es borrar una variable,
utilizaremos el comando unset seguido del nombre de la variable sin el símbolo dólar ($):

#unset NNTPSERVER

Obtener ayuda

Linux proporciona un sistema de ayuda de tipo texto conocido como man. Sus entradas
proporcionan breves resúmenes de lo que hace un comando, fichero u otra función. El comando
man emplea el paginador less para mostrar la información. Para avanzar por una página,
pulsaremos barra espaciadora, para retroceder, escape (esc) seguido de “v”; si lo que queremos
es desplazarnos línea a línea, utilizaremos las flechas del cursor arriba y abajo; con la barra (/)
buscaremos texto, si queremos salir de less y de la página man que nos está mostrando,
pulsaremos “q”.

Las páginas man se clasifican en varias secciones y hay veces que una misma palabra posee
entradas en diferentes secciones. Si esto ocurre, man devuelve la entrada de número inferior, si
lo que deseamos es una entrada superior, podemos forzar a man escribiendo un número delante
de la palabra clave. Por ejemplo, passwd tiene entradas en las secciones 1 y 5, si queremos
localizar la entrada número 5, escribiremos, man 5 passwd.

Figura 26: Secciones del manual MAN


Fuente. - Elaboración Propia

Hay programas que han pasado de las páginas man a tener páginas info. El objetivo es el mismo,
pero las info utilizan un formato de hipertexto que permite moverse entre las secciones de la

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 36

documentación de un programa. Tanto man como info presentan un estilo conciso y están
concebidas como herramientas de consulta, no como totorales, por lo que suelen asumir cierta
familiaridad con el comando o, al menos, con Linux (Syconet. Blog de Informática y Redes, 2012).

Comandos internos y externos

Según LPIC. Guía Extraoficial de Estudio (2011), la diferencia entre estos dos tipos de comando
no es más que los internos son los nativos de la consola. Digamos que los externos el intérprete
no los sabe ejecutar y para ello requiere su localización en el disco duro. Para encontrarlos, los
buscará en una serie de directorios, en concreto aquellos que están indicados en la variable PATH.
Veamos que contiene la variable PATH del sistema:

Figura 27: Echo $PATH


Fuente. - Elaboración Propia

Cada directorio separado por “:” es un “lugar” donde bash va a buscar dichos comandos externos.

Algunos de los comandos internos de bash son:

cd: Comando utilizado para el cambio de directorio de trabajo.


pwd: Este comando muestra por pantalla el directorio de trabajo actual.
echo: Muestra el texto que le sigue. Se podría decir que es como un “printf” en C.
Al pasarle una variable, muestra su contenido.
exec: este comando se utiliza para la ejecución de un programa especificado. Tiene la
funcionalidad adicional de ejecutarse junta a la consola, no crea un nuevo proceso. Con esto,
cuando finalice la ejecución del programa, finalizará también la consola.
time: Muestra el tiempo que tardan en ejecutarse los siguientes procesos:
exit: cierra la consola.

Podemos ver más comandos internos ejecutando el comando “help” (también interno) en
nuestra consola.

De entre los comandos externos, podríamos citar algunos:

ls: sin argumentos, muestra el contenido del directorio actual. Si le indicamos un directorio,
muestra el contenido de dicho directorio.
cp: copia un fichero o directorio.
mv: mueve un fichero a otro lugar. Si l directorio de destino es el mismo que el de origen, en
fichero se renombrará.
rm: borra un fichero

Comandos útiles

A continuación, se presenta una serie de comandos útiles para conocer aspectos generales del
sistema.
uname [parámetros]

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 37

La función de este comando es similar al anterior, la única diferencia es que éste arroja más
información del sistema, de acuerdo al número de parámetros utilizados, tales como:

-a: imprime el nombre kernel, del equipo, version del kernel, fecha en que fue apagado el sistema
por última vez, arquitectura del sistema.
-s: imprime el nombre del kernel.
-n: imprime el nombre del equipo.
-r: imprimeversion del kernel.
-i o –p: imprime la arquitectura del equipo.
-o: imprime el nombre del sistema operativo.

Ejemplo:

Figura 28: Validando salida de uname -a


Fuente. - Elaboración Propia
date
Muestra la fecha que tiene registrado el sistema.

Ejemplo:

Figura 29: Validando salida de date


Fuente. - Elaboración Propia

En caso de querer modificar la fecha, solo se sigue la siguiente sintaxis:


date [MesDiaHoraMinutoAño.Segundos]

Ejemplo:

Figura 30: Cambiamos el día y la hora


Fuente. - Elaboración Propia

Indica los usuarios que se encuentran en el sistema, así como, lo que hacen en él.

Ejemplo:

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 38

Figura 31: Vemos quienes están conectados


Fuente. - Elaboración Propia

whoami

Muestra el nombre del usuario (username). whoami equivale a “id –un” o a “who –m”.

Ejemplo:

Figura 32: Visualizamos usuario actual.


Fuente. - Elaboración Propia
who

El comando who sirve para ver los usuarios logueados y conocer diferentes datos de las
sesiones activas.

Figura 33: Visualizamos usuarios logueados.


Fuente. - Elaboración Propia

Existen muchas opciones que pueden usarse como parámetros para el comando.
Algunas de ellas y su descripción:

-b, tiempo transcurrido desde el inicio del sistema (boot).


-q, conteo de usuarios logueados al sistema.
-r, runlevel actual del sistema.
-u, usuarios logueados.
-a, listado detallado de sesiones con información extendida, tiempo de sistema y runlevel
actual.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 39

Figura 34: Listado detallado de sesiones


Fuente. - Elaboración Propia
pwd
El comando pwd muestra el directorio de trabajo actual.

Figura 35: Visualización del directorio actual


Fuente. - Elaboración Propia
hostname

Muestra o establece el nombre del sistema. También sirve para obtener información relativa
sobre el mismo.

Opciones:

hostname -f Muestra el nombre de mi nodo completo, con dominio DNS.

hostname -i Muestra la dirección IP de mi nodo.

hostname -a Muestra los alias para mi nodo.


hostname --fqdn muestra el FQDN (Nombre de Dominio Completamente Especificado).

hostname nuevo_nombre cambia el nombre de mi nodo a nuevo_nombre, esto lo realiza solo


para la sesión actual, para hacer los cambios permanentes editar los archivos /etc/hostname
y /etc/hosts

Figura 36: Visualización de hostname


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 40

rmdir

El comando rmdir sirve para borrar carpetas, proviene de las palabras en inglés remove directory
(borrar directorio) y es una orden de Unix. Los directorios deben de estar vacíos para poderlos
eliminar.

Opciones:

--ignore-fail-on-non-empty no tiene en cuenta los fallos que se producen únicamente porque un


directorio no está vacío
• -p, --parents borra DIRECTORIO y sus ancestros.
ej. `rmdir -p a/b/c' es similar a `rmdir a/b/c a/b a'.
• -v, --verbose muestra un mensaje por cada directorio procesado
• --help muestra esta ayuda y finaliza
• --version informa de la versión y finaliza

Figura 37: Borrado de directorio vacío


Fuente. - Elaboración Propia
touch

Este comando se utiliza para cambiar la fecha de acceso y/o modificación a un archivo.
Su sintaxis es la que sigue:

touch [opción...] archivo...

Si el argumento “archivo” corresponde al nombre de un archivo que no existe, a menos que se


le diga, touch creará el archivo con dicho nombre y sin ningún contenido.

Figura 38: Creación de archivo vacío


Fuente. - Elaboración Propia
Opciones:

-a Cambia solamente el tiempo de acceso.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 41

-c No crear archivos que no existían antes.

-d fecha Usar fecha en lugar de la fecha actual.

El formato de fecha es MMDDHHMMAAAA; por ejemplo, para representar el 7 de abril de


2021 a la 1:00 a.m., se escribirá: 040701002021. Si el año a usar es el año actual, se puede obviar,
entonces el ejemplo anterior quedaría así: 04070100.

Este comando es muy útil cuando se necesita recompilar cierta parte de un programa evitando
compilar todo el programa completo, solo aquellos sectores modificados.

file

El comando file sirve para determinar el tipo de archivo.

Con este comando se comprueba fácilmente el tipo de fichero, esto es útil porque no tiene
extensión, que por algún motivo, se cree que no es la correcta o porque se desconfía por alguna
razón. Entre otras cosas, muestra la codificación de caracteres de los archivos de texto, srt, etc.

Figura 39: Visualización de tipo de archivo


Fuente. - Elaboración Propia
dd

El comando dd copia archivos. Es usado para copiar particiones completas o incluso clonar
discos. A continuación, algunos ejemplos.

Sintaxis:

dd if=origen of=destino

ara clonar un disco duro:

# dd if=/dev/hda of=/dev/hdb bs=1M

Con esto, se clona el disco hda en hdb. (Discos IDE)

O para discos SATA:

# dd if=/dev/sda of=/dev/sdb bs=1M

Con bs=1M, tanto la lectura como la escritura, se realizará en bloques de 1 megabyte (menos,
sería más lento pero más seguro; mientras que más, se corre el riesgo a perder datos por el
camino).

También sirve para copiar la información de un archivo a otro.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 42

Figura 40: Visualización de copia de archivo con el comando dd.


Fuente. - Elaboración Propia
info

El comando info se usa para mostrar la documentación de lectura en línea para el comando
especificado.

La sintaxis es

# info nombre_comando

Opciones:

-n Especifica los nodos en el primer archivo info visitado.


-f Especifica el archivo info a visitar.

Figura 41: empleo del comando info para mkdir


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 43

Figura 42: Visualización de ayuda del comando mkdir a través de info


Fuente. - Elaboración Propia
Gzip

Para comprimir ficheros en formato .gz, se utiliza el siguiente comando:

# gzip -9 fichero

Donde -9 le indica a gz que utilice el mayor factor de compresión posible.

Para descomprimir ficheros .gz, se utilizará el siguiente comando:

# gzip -d fichero.gz

Donde -d indica descompresión.

Bzip2

Para comprimir ficheros en formato bz2, se utiliza el siguiente comando:

# bzip2 fichero

Para descomprimir ficheros .bz2, se usa el comando siguiente:

# bzip2 -d fichero.bz2

Donde -d indica descompresión.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 44

Nota: Tanto el compresor gzip como bzip2, solo comprimen ficheros, no directorios, para
comprimir directorios (carpetas), se debe de usar en combinación con tar.

Tar

El comando tar se usa para crear archivos y extraer los archivos archivados.

Ficheros tar

La sintaxis es:

tar [opciones] [archivo-archivador] [Archivo o directorio a archivar]

Opciones:

Figura 43: Opciones del comado tar.


Fuente.- Tomado de hscripts.com
Ejemplo:

Para archivar un directorio o archivo:

# tar -cvf backup.tar /etc

Este comando crea un archivo tar llamado backup.tar que es el archivo del directorio /etc,
donde backup.tar es un archivo tar creado y /etc es un directorio archivado.

Para archivar un directorio o archivo y guardarlo en un dispositivo de almacenamiento:

# tar -cvf /dev/cdrom0 /home/user1/HGB

Este comando archivará el directorio /etc y lo guardará en el CD, donde /dev/cdrom0 es el


nombre de CD donde se guarda el archivo y /home/user1/HGB es un directorio archivado. Para
extraer el archivo:

# tar -xvf backup.tar

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 45

Este comando extraerá el archivo backup.tar


Para listar los archivos de un archivo tar:

# tar -tvf backup.tar

El comando anterior mostrará los archivos y directorios archivados en backup.tar.

Ficheros tar.gz

Para comprimir ficheros en formato tar.gz, se utiliza el siguiente comando:

tar -czfv archivo.tar.gz ficheros

-c : indica a tar que cree un archivo.


-z : indica que use el compresor gzip
-f : indica a tar que el siguiente argumento es el nombre del fichero.tar
-v : indica a tar que muestre lo que va empaquetando

Para descomprimir ficheros con extensión tar.gz, se usa el siguiente comando:

tar -xzvf archivo.tar.gz

-x : le dice a tar que extraiga el contenido del fichero tar.gz


-z : le indica a tar que esta comprimido con gzip
-v : va mostrando el contenido del fichero
-f : le dice a tar que el siguiente argumento es el fichero a descomprimir.
Para poder ver el contenido de un fichero comprimido en tar.gz, se usa el siguiente comando:

# tar -tzf archivo.tar.gz

Ficheros tar.bz2
Para comprimir en tar.bz2, se hace uso del parámetro pipeline ( | ), que consiste en que “filtra”
la salida de un comando a la entrada de otro, como es en este ejemplo: tar empaqueta los
distintos ficheros o directorios y su salida lo pasa al comando bzip2 para que éste lo comprima
y el resultado, lo redirecciona ( > ) al fichero final tar.bz2.

# tar -c ficheros | bzip2 > archivo.tar.bz

Para descomprimir ficheros tar.bz2, se utiliza el siguiente comando:

# bzip2 -dc archivo.tar.bz2 | tar -xv

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 46

Para ver el contenido de un fichero tar.bz2, se usa el siguiente comando:

# bzip2 -dc archivo.tar.bz2 | tar –t

zip

Para poder comprimir en formato zip, se usará el comando siguiente:

# zip archivo.zip ficheros a comprimir

Para poder descomprimir los ficheros zip, se usa el siguiente comando:

# unzip archivo.zip

Para ver el contenido de un fichero zip, se pone el siguiente comando:

# unzip -v archivo.zip

cpio

El comando cpio crea y elimina archivos cpio. Es capaz de copiar archivos a cosas distintas de
un disco duro. Probablemente, este comando se usa también para hacer copia de seguridad
y restaurar archivos.

Sintaxis:

# cpio [opciones]

Opciones:

Figura 44: Opciones del comado cpio


Fuente.- Tomado de hscripts.com

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 47

Ejemplo:

Encuentra la lista de archivos y directorios y los copia al cd.

# find. -print | cpio -ocv > /dev/cdrom0

Encuentra la lista de archivos y directorios y los copia o hace una copia de seguridad al usuario.

# find. -print | cpio -dumpv /home/admin

Recupera los archivos del cd.

# cpio -icuvd < /dev/cdrom0

Set

Permite la modificación de variables del Shell del usuario y también lista todas las variables
locales y variables del ambiente.

Sintaxis:

# set [-o | +o] opción

Opciones:
Set Lista todas las variables.
Set -o Lista cada opción del Shell y su propiedad (on | off)
Set -o allexport Si activa esta opción cada variable que se defina
automáticamente será exportada.
Set +o Desactiva la opción.

Para Nanda (2009), un error muy común que las personas cometen cuando sobrescriben
comandos como cp y mv es sobrescribir los archivos correctos sin darse cuenta. Usted puede
evitar ese riesgo al utilizar un ''alias'' por ej., utilizando mv –i en vez de mv. No obstante, ¿cómo
puede evitar que alguien o algún script sobrescriba los archivos utilizando el operador de re-
direccionamiento (''>'')?
Veamos un ejemplo. Supongamos que usted tiene un archivo denominado muy_importante.txt.
Alguien (o algún script) involuntariamente utilizó algo como:

# ls -l > muy_importante.txt

El archivo inmediatamente se sobrescribió y pierde los contenidos originales del archivo. Para
evitar este riesgo, se puede utilizar el comando set con la opción -o noclobber, como se
muestra a continuación:

# set -o noclobber

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 48

Luego de este comando, si alguien intenta sobrescribir el archivo:

# ls -l > muy_importante.txt
El shell ahora evita que se sobrescriba un archivo existente Si se requiere sobrescribirlo, se
utilizará el operador >|.
-bash: muy_importante.txt: cannot overwrite existing file

# ls -l >| muy_importante.txt

Para desactivarlo:

# set +o noclobber

El comando set es también muy útil para utilizar el editor vi para editar comandos. Una manera
rápida de reejecutar el comando es repitiendo los comandos utilizando el editor.Para que éste
ejecute este comando primero:

set -o vi

Ahora, suponiéndola búsqueda de un comando que contenga la letra ''v'' (como en vi o vim,
etc.). Para buscar el comando, ejecutar teclas que se encuentran dentro del corchete:

# [Escape Key] [/ key] [v key] [ENTER Key]

Esto muestra el último comando ejecutado que contenga la letra ''v''. El último comando en
este caso fue set –o vi; por lo tanto, eso aparece en el command prompt.

# set -o vi

Según Nanda (2009), si no es el comando buscado, presione la tecla ''n'' para obtener el
siguiente comando más reciente. De esta manera, podrá recurrir a todos los comandos
ejecutados con la letra ''v''. Cuando se ve el comando, se presiona [tecla ENTER] para
ejecutarlo.
Supongamos que usted está buscando un comando mpstat ejecutado anteriormente.
Todo lo que tiene que hacer es ingresar esta cadena de búsqueda ''mpstat'':

# [Escape Key] [/ key] mpstat [ENTER Key]

Supongamos que el comando de arriba muestra mpstat 5 5 y usted realmente desea ejecutar
mpstat 10 10. En vez de retipearlo, puede editar el comando en el editor vi.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 49

Para hacerlo, presione [Tecla Escape] y la tecla [v], la cual colocará el comando en el editor vi.
Ahora puede editar el comando que desee. Cuando lo guarda en vi presionando : wq, el comando
modificado será ejecutado (Nanda, 2009).
Listado variables del sistema con set

Asimismo, el comando set también es utilizado para listar las variables de entorno del sistema:

Figura 45: Listado de variables del sistema con set


Fuente. - Elaboración Propia

El listado es muy amplio, así que se debe acotar la búsqueda a la variable de interés:

Figura 46: Listado y filtro de la variable de entorno HOSTNAME con set y grep
Fuente. - Elaboración Propia
tee

El comando tee lee de la entrada estándar y escribe en la salida estándar o un archivo.

Sintaxis:

# tee –a file

Ejemplo

Agrega la entrada al final del archivo prueba.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 50

# cat /etc/passwd | tee prueba

Sobrescribe

# echo “Texto” | tee prueba

Envía la salida a dos archivos.

# cat /etc/group | tee file1 >file2

2.1.2. Personalizar y utilizar el entorno del terminal

Revisión de las variables de entorno

Para Syconet. Blog de Informática y Redes (2012b) las variables de entorno proporcionan medios
para pasar datos con nombre a programas iniciados desde la consola. Las propias consolas
también se basan en variables de entorno. Por ejemplo, $HOSTNAME almacena el nombre del
ordenador. Las variables de entorno se configuran manualmente, a través del operador de
asignación de igualdad (=); para que esté disponible se utiliza el comando export:

#HOSTNAME=carson.example.com
#export HOSTNAME

O sencombinar estos dos comandos en uno solo:

#export HOSTNAME=carson.example.com

En una línea de comandos, se puede revisar el contenido de una variable de entorno con el
comando echo o escribir env para mostrar todas las variables de entorno.

#echo $HOSTNAME

Los nombres de variables de entorno van precedidos de un signo de dolar ($) en los scripts y en
las líneas de comandos de la consola, excepto cuando no están asignadas. El método más común
para definir una variable de entorno es definirla global o localmente, en un script de inicio.

Variables de entorno comunes y su significado

Para averiguar cómo están configuradas las variables de entorno escribiendo env, que se suele
utilizar para ejecutar un programa con un conjunto de variables modificadas; solo devuelve las
variables que estén definidas en un formato similar al de su asignación:

#env | grep HOSTNAME


HOSTNAME= carson.example.com

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 51

Las variables y sus valores suelen ser únicos para cada sistema e incluso para cada cuenta.

Nombre de la variable Explicación


USER o USERNAME Nombre del usuario actual. Es una variable
que mantiene el sistema.
SHELL Contiene la ruta a la consola de comandos
actual.
PWD Directorio de trabajo actual, la variable la
mantiene el sistema. La utilizan los
programas para buscar cuando no se
proporciona la ruta completa.
HOSTNAME Nombre de Host TCP/IP actual del ordenador.
PATH Es una variable inusualmente importante.
Define la ruta de una sesión, que es una lista
de directorios separados por dos puntos, en
los que Linux busca los programas
ejecutables. Por ejemplo, si PATH es
/bin:/usr/bin y escribimos ls, Linux buscará
un programa ejecutable llamado ls en /bin
y después en /usr/bin. Si el comando no se
encuentra en la ruta el sistema devolverá
un error. Esta variable suele definirse en
varios ficheros de configuración como
/etc/profile o .bashrc.
HOME Apunta al directorio home y hay programas
que la utilizan para buscar ficheros de
configuración o como ubicación por defecto
en la que almacenar ficheros.
MAIL Contiene la ubicación del buzón de correo
del usuario. Suele ser
/var/spool/mail/nombredeusuario.
LANG En él se guarda el idioma actual,
especificado como un ajuste local.
LD_LIBRARY_PATH Hay programas que utilizan esta variable
para indicar los directorios en los que se
pueden encontrar los ficheros de
biblioteca. Es similar a PATH.
PS1 Es el prompt por defecto en Bash
normalmente, incluye variables propias,
como \u para el nombre de usuario, \h para
el nombre de host y \w para el directorio
de trabajo actual, estos valores se suelen
definir en /etc/profile aunque los suelen
invalidar los usuarios.
NNTPSERVER Hay programas lectores de noticias de
Usenet que utilizan esta variable para
especificar el nombre del servidor de
noticias. Su valor se puede definir en

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 52

/etc/profile o en los ficheros de


configuración de los usuarios.
TERM Contiene el nombre del tipo de terminal
actual. Linux necesita conocer que
comandos admite el terminal y así mostrar
un cursor de tipo texto y los efectos en
programas como los editores de texto.
TERM especifica el terminal en uso, esta
información junto con los datos de los
ficheros adicionales proporcionan
información del código especifico del
terminal. Se suele definir automáticamente
al acceder a la terminal.
DISPLAY Identifica la visualización utilizada por X.
Suele ser :0.0, que corresponde a la primera
visualización del ordenador actual. Cuando
utilicemos X en un entorno de red, este valor
puede ir precedido por el nombre del
ordenador en el que estamos sentados
como por ejemplo, machine4.luna.edu:0.0.
El valor se define automáticamente cuando
accedemos pero podemos cambiarlo si lo
necesitamos. Podemos ejecutar varias
sesiones X en un ordenador y cada una
obtendrá un número de DISPLAY distinto,
por ejemplo, :0.0 para la primera sesión y
:1.0 para la segunda
EDITOR Suelen utilizarla algunos programas cuando
necesitan llamar a un editor de texto, por lo
que puede ser de utilidad configurar esta
variable con nuestro editor de texto favorito.
Lo mejor suele ser definiría con un editor en
modo texto ya que los editores GUI pueden
causar problemas si se les llama desde un
programa iniciado desde un acceso de tipo
texto.

Tabla 2 : Variables
Fuente .- Tomado de syconet.wordpress.com

Advertencia:

La variable PATH, a veces, incluye el indicador de directorio actual (.) para que se puedan
ejecutar programas en el directorio actual. Esta práctica supone un riesgo para la seguridad,
ya que alguien podría crear un programa con el mismo nombre que algún otro y engañar a
otro usuario para que lo ejecute dejándolo en un directorio que frecuente la víctima. Incluso
root podría verse afectado. Es preferible omitir este directorio en la variable PATH. Si es
necesario para los usuarios normales, los colocaremos al final de la ruta.

Es probable que haya otras variables de entorno definidas, pero suelen estar relacionadas con
programas específicos. Si un programa dice que necesita tener definidas determinadas
variables de entorno, podemos definirlas para todo el sistema en /etc/profile o bien en los
ficheros de configuración del usuario. La salida de env es demasiado larga, por lo que, sii

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 53

queremos conocer el valor de una variable, lo mejor es utilizar el comando echo. Si le pasamos
el nombre de la variable precedido de un signo de dólar, echo mostrará el contenido de la
variable.

Uso de los alias


Los alias de comandos son nuevos nombres que se les pueden dar a los comandos normales.
Se suelen utilizar para asignar a los comandos más raros unos nombres más fáciles de
recordar, para implementar las opciones deseadas como valores por defecto para los
comandos o para crear una versión reducida de un comando y así minimizar el número de
teclas a pulsar. Se pueden definir los alias de manera específica en cualquier prompt de bash,
pero lo normal es incluirlos en un script de inicio de bash. Para implementar un alias
utilizaremos la siguiente sintaxis:

alias nombre_alias=’comandos’

nombre_alias es lo que escribiremos en el prompt de manera que la consola sustituya comandos


por lo que hayamos escrito. Por ejemplo

Figura 47: Comando alias


Fuente. - Elaboración Propia

En la práctica estos alias no resultan útiles si los introducimos manualmente en el prompt de


comandos, ya que si salimos de la sesión no volverán a estar disponibles. Lo aconsejable es
incluirlos en un script de inicio de bash para así no tener que escribir el alias manualmente en
cada sesión, pues se creará automáticamente cada vez que accedamos.

Modificar los ficheros de configuración de la consola

La configuración de la consola requiere la edición de ficheros que se pueden clasificar de un


par de maneras. En primer lugar, puede tratarse de ficheros globales que afecten a todos los
usuarios o de ficheros locales que afecten sólo a un usuario. Por otra parte, puede tratarse de
ficheros de acceso que sólo se ejecutan una vez en un proceso de acceso (por ejemplo, acceso
a una consola) o de ficheros que no pertenecen al acceso y que ejecutan otros procesos (por
ejemplo, iniciar una ventana xterm). El resultado es una matriz 2×2 de ficheros de
configuración, como se muestra en la siguiente tabla:

Figura 48: Ficheros de configuración de bash comunes


Fuente.- Tomado de syconet.wordpress.com

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 54

Los ficheros utilizados varían según la distribución pero, independientemente del nombre, estos
ficheros son scripts de consola. La mayoría de ellos contienen una serie de comandos de bash,
tanto nativos como externos.

Los ficheros de configuración global afectan a todos los usuarios, pero los usuarios individuales
pueden invalidar sus parámetros, bien mediante ficheros de configuración de usuario, bien a
través de comandos escritos por los propios usuarios. Por tanto, no deberíamos confiar en los
ficheros de configuración globales para definir opciones que los usuarios no deberían cambiar.
Es preferible centrarse en las funcionalidades de seguridad global, como los permisos sobre los
ficheros ejecutables.

El directorio /etc/skel contiene ficheros que se copian en los directorios home de los usuarios
cuando se crean las cuentas. Normalmente, este conjunto de ficheros incluye ficheros de inicio
de bash locales; podemos alterarlos para que se ajusten a nuestras necesidades. Los cambios en
estos ficheros sólo afectarán a las nuevas cuentas, no a las existentes. Para realizar cambios que
afecten tanto a los usuarios existentes como a los nuevos, deberíamos editar un fichero de
configuración global. Las consolas poseen scripts de inicio y de desconexión, en bash este script
es ~/.bash_logout. La mayoría de las distribuciones crean este script como parte del directorio
home, aunque los usuarios también pueden hacerlo. Este script de desconexión podría ejecutar
programas para limpiar los directorios temporales, eliminar claves de seguridad de la memoria u
otro tipo de tareas apropiadas cuando un usuario se desconecta.

Advertencia:

Un problema de los scripts de desconexión es que puede que no funcionen correctamente


cuando un usuario accede varias veces. Si tenemos abiertas varias sesiones, como en el caso de
tener varias terminales virtuales de Linux, debemos tener cuidado con lo que incluimos en el
script de desconexión para evitar borrar ficheros temporales importantes cuando salgamos sólo
de una sesión.

Otro fichero de configuración de bash es ~/.inputrc, que sirve para poder personalizar la
configuración del teclado. Consta de líneas que tienen el siguiente aspecto:

M-Control-u: universal-argument

Esta línea asocia la combinación de teclas Meta-Control-U con la acción universal-argument. La


tecla Meta suele ser la tecla Esc y la acción universal-argument es una de las acciones definidas
por la biblioteca readline, que es una de las bibliotecas básicas de introducción en modo texto.

Normalmente no es necesario ajustar el fichero ~/.inputrc, las asociaciones por defecto de redline
funcionan correctamente con teclados estándar. Sin embargo, si una combinación de teclas no
funciona como debería en modo texto, deberíamos investigar más sobre esta configuración. X
utiliza sus propias rutinas de introducción por teclado, por lo que ~/.inputrc no afectará a los
programas que se ejecuten en X, aunque sean programas en modo texto que se ejecuten dentro
de ventanas xterm.

2.1.3. Procesar flujos usando filtros, tuberías y redireccionar

Según Syconet. Blog de Informática y Redes (2012a) la filosofía Linux es proporcionar


herramientas pequeñas que puedan combinarse mediante pipes y redirecciones para realizar
tareas más complejas. Es por esto que hay disponibles muchos comandos sencillos para
manipular textos y que realizan tareas como combinar ficheros, transformar datos en ficheros,

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 55

formatear texto, mostrar texto o resumir la información. Muchos comandos permiten omitir los
ficheros de entrada y pasan directamente a leer la información de la entrada estándar.

Comandos para combinar ficheros

En esta categoría hay 3 comandos importantes: cat, join y paste, que unen ficheros completos o
los fusionan línea a línea.

Combinar ficheros con cat

cat es la abreviatura de concatenar, sirve para enlazar de principio a fin un número arbitrario de
ficheros y envía el resultado a la salida estándar. Si lo combinamos con la redirección de salida,
podremos obtener fácilmente dos ficheros en uno.

#cat first.txt second.txt > combined.txt

cat también se suele utilizar para mostrar el contenido de un fichero pequeño, pasándole a cat
sólo el nombre del fichero a mostrar. Para ficheros grandes es mejor utilizar paginadores como
more o less. cat admite varias opciones que realizan pequeñas modificaciones a los ficheros según
los combina:

Mostrar los finales de línea: -E o –show-ends muestra un signo de dolar ($) al final de cada línea.
Numerar líneas: las opciones -n o –number agregan números de línea al comienzo de cada una.
Las opciones -b o –number-nonblank son similares, pero sólo muestran las líneas que contienen
texto.
Minimizar as lineas en blanco: -s o –squeeze-blank comprimen los grupos de líneas en blanco en
una sola linea en blanco.
Mostrar los caracteres especiales: -T o –show-tabs muestra los caracteres de tabulación como
^I. -v o –show-nonprinting muestra la mayoría de los caracteres de control y otros caracteres
especiales empleando circunflejos (^) y notaciones M-.

Figura 49: Imprimir el contenido del archivo a la salida standar


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 56

El comando tac es similar a cat, pero invierte el orden de las líneas de salida.

Figura 50: Comando tac hace todo lo contrario del comando cat
Fuente. - Elaboración Propia
Asociar ficheros por campos con join

join combina dos ficheros comparando el contenido de los campos especificados de los ficheros.
Los campos suelen ser entradas separadas por espacios dentro de una línea; se puede
especificar otro carácter como separador con la opción -t char (char es el carácter que se quiere
usar). join puede ignorar mayúsculas y minúsculas durante las comparaciones utilizando la
opción -i.

Fichero 1: números de teléfono y nombres

Figura 51: Imprimir el contenido de archivo


Fuente. - Elaboración Propia

Fichero 2: números de teléfono y estado

Figura 52: Imprimir el contenido de archivo


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 57

Si combinamos estos dos ficheros con join quedaría de la siguiente manera:

Figura 53: Imprimir el contenido de unión de dos archivos


Fuente. - Elaboración Propia
join, por defecto, utiliza el primer campo para realizar las comprobaciones con el resto de los
ficheros. En este ejemplo, el campo clave de la salida es el primero, ya que los dos contienen el
número de teléfono. Con las opciones -1 o -2 podremos especificar el campo de asociación del
primer o segundo fichero respectivamente, por ejemplo, join - 1 3 -2 2 camaras.txt lentes.txt
asocia el tercer campo de camaras.txt y el segundo campo de lentes.txt. -o FORMAT permite
especificaciones más complejas para el formato de fichero de salida.

join se puede utilizar en un conjunto de sencillas herramientas personalizadas para la


manipulación de bases de datos que empleen los comandos de manipulación de texto de Linux,
aunque está muy limitado. Por ejemplo, hace falta que las líneas de sus dos ficheros tengan el
mismo orden.

Fusionar líneas con paste

paste fusiona ficheros línea a línea, separando las líneas de cada fichero mediante tabulaciones:

Figura 54: Imprimir el contenido de unión de dos archivos


Fuente. - Elaboración Propia

Figura 55: Imprimir el contenido de unión de dos archivos con delimitador @


Fuente. - Elaboración Propia

Se puede utilizar paste para combinar datos de ficheros que no estén codificados de manera
que puedan ser utilizados por join. Para que el resultado tenga sentido, los números de línea
de los ficheros deben ser exactamente equivalentes. También se puede utilizar como medio
rápido para crear una salida de dos columnas de datos de tipo texto; si las longitudes de las
líneas no son parejas, éstas no quedarán alineadas con exactitud, al igual que en el ejemplo
anterior.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 58

Comandos de transformación de ficheros

Muchos comandos de manipulación de texto están pensados para transformar el contenido de


los ficheros: lo que hacen es enviar el fichero modificado a la salida estándar para que, después,
podamos canalizar esta salida hacia otro comando o a un nuevo fichero. Uno de los comandos
importantes para la transformación de ficheros es sed, que es muy complejo.

Convertir tabulaciones en espacios con expand

En ocasiones, los ficheros de texto contienen tabulaciones y hay programas que tienen que
procesarlos, pues no las toleran directamente. También puede ocurrir que el editor que
utilicemos emplee un carácter de tabulación diferente al editor en el que se creó el fichero. En
casos como éstos es recomendable convertir las tabulaciones en espacios lo que se puede realizar
con expand. Este comando, por defecto, supone que hay una tabulación cada 8 caracteres, este
espaciado se puede cambiar con las opciones -t num o –tabs=num, donde num es el valor del
espaciado.

Figura 56: Empleo del comando expand con –t1 para quitar la primera tabulación.
Fuente. - Elaboración Propia

Mostrar ficheros en octal con od

Algunos ficheros emplean caracteres que no pertenecen a ASCII y pueden parecer un


galimatías o provocar resultados extraños al intentar visualizarlos. Puede que deseemos
visualizar estos ficheros, sobre todo si queremos investigar la estructura de un fichero de
datos. Quizás queramos también inspeccionar un fichero ASCII de un modo que despeje
ciertas ambigüedades, como si un salto entre palabras se debe a una tabulación o varios
espacios, en estos casos od (octal dump) puede ser de ayuda, ya que muestra los ficheros en
un formato sin ambigüedades, empleando por defecto números octales (en base 8).

El tipo de salida que genera od puede ser difícil de interpretar a menos que estemos
acostumbrados a la notación en octal y al código ASCII, od no sólo genera salida en octal sino
que también puede generar muchos otros formatos de salida, como hexadecimal (base16),
decimal (base 10) e incluso ASCII con caracteres de control indicados mediante caracteres de
escape.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 59

Figura 57: Volcado de datos a hexadecimal


Fuente. - Elaboración Propia

Figura 58: Volcado de datos a hexadecimal (od –t x2 file5)


Fuente. - Elaboración Propia

Figura 59: Volcado de datos en octal (od –t oC file5 es lo mismo)


Fuente. - Elaboración Propia

Obtener ficheros con sort

Sort genera un fichero de salida ordenado de varias maneras, entre las que se incluyen:

• Ignorar mayúsculas y minúsculas: -f o –ignore-case hacen que sort no tenga en cuenta la


diferencia entre mayúsculas y minúsculas.
• Ordenar por meses: -M o –month-sort hace que el programa ordene en abreviaturas de
tres letras los meses que van de JAN a DEC.
• Ordenación numérica: podemos ordenar por números empleando las opciones -n o –
numeric-sort.
• Invertir el orden: las opciones -r o –reverse ordenan a la inversa.
• Campo de ordenación: por defecto, sort utiliza el primer campo como campo para
la ordenación. Para especificar otro campo, utilizaremos las opciones: -k campo o –
key=campo. campo puede estar compuesto por dos campos numerados separados por
comas (,), para ordenar por varios campos.

Figura 60: fichero ordenado a la inversa


Fuente. - Elaboración Propia

El comando sort admite muchas más opciones, aunque bastantes de ellas son muy exóticas.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 60

Dividir en partes un fichero con split

split puede dividir un fichero en dos o más ficheros. Este comando requiere que introduzcamos
el nombre de fichero de salida y, normalmente, también deberemos especificar el tamaño que
deseemos que tengan los ficheros individuales:

Dividir por bytes: -b tamaño o –bytes=tamaño divide el fichero de entrada en partes del tamaño
indicado. Esta opción puede tener la desagradable consecuencia de cortar el fichero por la mitad
de una línea.
Dividir por bytes en bloques determinados por las líneas: podemos dividir un fichero en ficheros
de un tamaño no superior al especificado sin romper sus líneas utilizando las opciones -C=tamaño
o –line-bytes=tamaño, las líneas se seguirán dividiendo en ficheros si la longitud de éstas es
superior al tamaño indicado.
Dividir por número de líneas: -l líneas o –lines=líneas divide el fichero en bloques de un tamaño
no superior al número de líneas especificado.

Figura 61: Visualización de contenido de fichero file


Fuente. - Elaboración Propia

Figura 62: Split divide el archivo en n partes teniendo en cuenta las líneas que se tienen. Por defecto es 1
Fuente. - Elaboración Propia

Traducir caracteres con tr

tr cambia caracteres individuales de la entrada estándar. Su sintaxis es la siguiente:

tr [opciones] SET1 [SET2]

SET1 especifica los caracteres que se quieren remplazar y SET2 especifica los caracteres con
los que se quieren remplazar. Cada carácter de SET1 será reemplazado por el de su posición
equivalente en SET2. Si SET2 es más corto que SET1, tr sustituye con la última letra de SET2 las

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 61

que faltan de SET1. Las opciones -t o –truncate-set1 hace que tr corte SET1 en función del
tamaño de SET2.

La opción -d hace que el programa borre los caracteres de SET1. Si utilizamos esta opción,
podemos omitir totalmente SET2. tr acepta también varios atajos como [:alnum:] (todos los
números y letras), [:upper:] (todas las letras mayúsculas), [:lower:] (todas las letras minúsculas)
y [:digit:] (todos los dígitos). También podemos especificar un rango de caracteres
separándolos con guiones (-); por ejemplo, A-M engloba los caracteres que van de la A a la M,
ambas incluidas.

Figura 63: Parámetros de comando tr


Fuente. - Elaboración Propia

De uso más frecuente:


-d borra los caracteres en el string1 de la salida.
-s borra los caracteres repetidos
-c se usa para completar al string1 o todos los caracteres que no están.

Figura 64: empleo del comando tr


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 62

Figura 65: Eliminación de los caracteres no imprimibles, salvo el carácter de nueva línea
Fuente. - Elaboración Propia

Convertir espacios en tabulaciones con unexpand

Es el opuesto a expand y convierte varios espacios en tabulaciones. Sirve para comprimir el


tamaño de ficheros con muchos espacios y es útil si un fichero va a ser procesado por una utilidad
que espera tabulaciones en determinados puntos. Acepta las opciones -t num o –tabs=num que
definen el espaciado de la tabulación a num caracteres. En caso de omitir esta opción, unexpand
supone que las tabulaciones son cada 8 caracteres.

Figura 66: Unexpand convierte espacios en tabulaciones


Fuente. - Elaboración Propia

Borrar líneas duplicadas con uniq

uniq elimina las líneas duplicadas. Es útil cuando ordenamos un fichero y no deseemos tener
elementos duplicados en él, por lo que, por lo general, lo utilizaremos junto al comando sort.
Su sintaxis junto al comando sort sería la siguiente:

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 63

#sort archivo_a_ordenar | uniq

La salida de uniq va dirigida a la salida estándar, por lo que podremos visualizarlo por pantalla
o usar los redirectores para enviar la información a un fichero.

Figura 67: empleo de comando uniq para mostrar datos únicos


Fuente. - Elaboración Propia

Figura 68: Conteo de las repeticiones


Fuente. - Elaboración Propia

Figura 69: Muestra solo los datos que se repiten


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 64

Figura 70: Muestra solo los datos que no se repiten


Fuente. - Elaboración Propia

Comandos de formato de ficheros

fmt, nl y pr dan formato al texto de un fichero. fmt está pensado para volver a dar formato a
los ficheros de texto; por ejemplo, en un fichero donde las líneas son demasiado largas para
poder visualizarlas, nl numera las líneas de un fichero y pr es una herramienta de
procesamiento de la impresión, que da a los documentos un formato de página adecuado para
tal fin.

Volver a dar formato a párrafos con fmt

A veces los ficheros vienen con líneas muy largas, con longitudes irregulares y otros
problemas… esto se puede arreglar utilizando un editor de texto o bien limpiando el fichero
con fmt. Si lo ejecutamos sin opciones, el programa intentará limpiar los párrafos, que supone
delimitados por dos o más líneas en blanco o por cambios de sangría. El formato por defecto
para el nuevo párrafo tiene no menos de 75 caracteres de ancho, con las opciones -ancho, -w
ancho o –width=ancho podemos modificar el comportamiento por defecto de fmt e indicar el
ancho en caracteres que tendrán las líneas.

Figura 71: empleo del comando fmt


Fuente. - Elaboración Propia
Numerar las líneas con nl

Si necesitamos realizar numeraciones complejas, emplearemos nl y no cat que tiene una


numeración de líneas más limitada. nl obtiene casi el mismo resultado que cat -b (numerar todas
las líneas que no estén vacías). Podemos añadir opciones a nl para conseguir determinados
efectos:

Estilo de numeración del cuerpo: -b estilo o –body-numbering definen el estilo de numeración


para el grueso de las líneas. estilo es el código del formato del estilo, descrito abreviadamente
(hay diferentes tipos de estilo).

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 65

Estilo de numeración de encabezado y pie: si el texto tiene encabezado o pie de página, podemos
definir el estilo de éstos con las opciones -h estilo o –header-numbering=estilo para el
encabezado y -f estilo o –footer-numbering=estilo para el pie.
Separador de páginas: algunos esquemas de numeración reinicializan lo números de línea en
cada página. Podemos indicarle a nl como identificar una nueva página con las opciones -d código
o –section-delimited=código, donde código es el código del carácter que identifica la nueva
página.
Opciones de número de línea para las nuevas páginas: si le pasamos las opciones -p o –no-
renumber, nl no reinicializara el número de línea al llegar a una nueva página.
Formato de los números: -n formato o –numberformat=formato especifica el
formato de la numeración, donde formato es: ln justificado a la izquierda, sin ceros iniciales, rn
justificado a la derecha sin ceros iniciales o justificado a la derecha con ceros iniciales.

Las opciones body, header y footer permiten especificar un estilo de numeración para cada uno
de estos elementos de página:

Numerar sólo las líneas que no estén vacías: este es el comportamiento por defecto que
corresponde con el valor t de style.
Numerar todas las líneas: para lograrlo especificaremos el valor a para style.
No numerar las líneas: especificando el valor n para style omitiremos los números de línea.
Numerar las líneas que coincidan con una expresión regular: un valor REGEXP para style numera
aquellas líneas que coincidan con la expresión regular REGEXP.

Si creamos un script que no funciona como esperábamos, cuando lo ejecutemos obtendremos


mensajes de error que hacen referencia números de línea. Para poder localizar estas líneas
podemos crear una versión del script con las líneas numeradas y así encontrar más fácilmente
donde está el error. Este script con las líneas numeradas no podrá ser ejecutado, ya que tiene
números al principio de cada línea, pero si podremos utilizar un paginador o un editor de textos
para visualizarlo y, gracias a la numeración, localizar las líneas que fallan.

Figura 72: Visualización del archivo a utilizar


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 66

Figura 73: Empleo del comando nl con –h (seteo de estilo header) con –a para numerar
Fuente. - Elaboración Propia

Figura 74: empleo del comando nl con –b (seteo de estilo body) con –a para numerar
Fuente. - Elaboración Propia

Preparar un fichero para imprimir con pr

Según Syconet. Blog de Informática y Redes (2012a) el comando pr prepara un fichero en texto
plano para imprimirlo en su forma más básica. Se usa de la siguiente manera:

#pr myfile.txt

El resultado es un texto formateado para imprimir en una impresora, pr asume por defecto una
longitud de línea de 80 caracteres con una fuente monoespacial. Se puede utilizar pr (|) en un
pipe tanto para aceptar la entrada de otro programa como para enviar su salida hacia otro
programa. Por defecto, pr genera una salida con el texto original y encabezados con la fecha y
hora actuales, el nombre del fichero original y en número de página. Se puede alterar la salida de
varias maneras:

Generar una salida multi-columna: las opciones -numcols o –columms=numcols crean una salida
con un número de columnas numcols. pr no altera el formato del texto: si hay líneas demasiado
largas, se truncarán o se desbordarán ocupando varias columnas.
Generar una salida con espacios dobles: -d o –double-space generan una salida con espacios
dobles a partir de un fichero con espacios simples.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 67

Utilizar el salto de página: pr separa las páginas utilizando un número fijo de líneas en blanco.
Esto funciona si la impresora utiliza el mismo número de líneas que espera pr. Si tenemos
problemas, utilizaremos las opciones -F,-f o –form-feed para crear una salida con un carácter de
salto de página entre páginas, que es más adecuado para ciertas impresoras.
Definir la longitud de página: -l líneas o –length=líneas definen la longitud en líneas de la
página.
Definir el texto del encabezado: -h texto o –header=texto definen el texto a mostrar en el
encabezado sustituyendo al nombre del fichero. Para especificar varias palabras, las
entrecomillaremos. Las opciones -t o –omit-header omiten totalmente el encabezado.
Definir el margen izquierdo y el ancho de páginas: -o caracteres o – indent=caracteres definen
el número de caracteres del margen izquierdo, que se suma al ancho de la página, el cual es, por
defecto, de 72 caracteres; puede ser ajustado con las opciones -w caracteres o –
width=caracteres.
pr admite muchas más opciones que se pueden consultar en su página MAN. Por ejemplo, si
queremos imprimir una versión numerada y a doble espacio del fichero /etc/profile para poder
consultarlo, lo haremos de la siguiente manera:

#cat -n /etc/profile | pr -d | lpr

cat -n genera una salida numerada, pr -d genera una salida con espacios dobles y lpr imprime el
fichero. Si el fichero contiene líneas que se acercan o exceden los 80 caracteres, el resultado
puede tener líneas que ocupen el espacio de dos, lo que sobrepasará los límites de la página. La
solución es definir una longitud de página más corta con la opción -l, y -f para asegurarnos que la
impresora recibe los saltos de página tras cada una de ellas:

#cat -n /etc/profile | pr -dfl 50 | lpr

Figura 75: Empleando comando pr para paginar archivo antes de imprimir


Fuente. - Elaboración Propia

Comandos para visualizar ficheros

Hay unos cuantos comandos que nos pueden ayudar a visualizar los ficheros sin tener que
cargarlos en un editor, el comando cat también resulta útil para este fin aunque no fue diseñado
para ello.

Visualizar el inicio de los ficheros con head

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 68

El comando head muestra las 10 primeras líneas de uno o más ficheros por la salida estándar.
En caso de que sean varios nombres de fichero, la salida de cada uno irá precedida de un
encabezado que permitirá identificarlo. Se puede modificar la cantidad de información
mostrada por head de dos maneras:

Especificar el número de bytes: -c num o –bytes=num hacen que head muestre num bytes en
lugar de las 10 líneas por defecto.
Especificar el número de líneas: -n num o –lines=numcambian el número de líneas a mostrar.

Figura 76: Empleando comando head imprimiendo los primeros n bytes


Fuente. - Elaboración Propia

Visualizar el final de los ficheros con tail

El comando tail muestra las 10 últimas líneas de un fichero, aunque se pueden utilizar las
opciones -c/–bytes y -n/–lines para cambiar la cantidad de información mostrada, al igual que
con head. Se suele utilizar para examinar la actividad reciente en los ficheros de registro o en
otros ficheros a los que haya que añadir datos. Admite varias opciones que permiten al programa
abordar tareas adicionales entre las que se incluyen:

Hacer el seguimiento de un fichero: -f o –follow le indican a tail que mantenga el fichero abierto
y que muestre las nuevas líneas que se le añadan. Es útil para hacer un seguimiento a los ficheros
de registro, ya que permite visualizar los cambios conforme se van incorporando al fichero.

Dejar de hacer el seguimiento al finalizar el programa: –pid=PID le indican a tail que deje de hacer
un seguimiento (iniciado por -f o –follow) una vez que haya finalizado el proceso cuya PID es pid.

Figura 77: Empleando comando tail, con –c 1k vemos los primeros 1k del archivo
Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 69

Recorrer los ficheros página a página con less

Less es una versión mejorada de more pues permite leer un fichero de pantalla en pantalla.
Cuando escribimos less fichero se muestran las primeras líneas del fichero. Después, podremos
avanzar o retroceder en las páginas del fichero:

Pulsando barra espaciadora, avanzaremos por el fichero de pantalla en pantalla.


Pulsar esc seguido de v permite retroceder en el fichero de pantalla en pantalla.
Las teclas flecha arriba y flecha abajo recorren el fichero línea a línea.
Para buscar dentro de un fichero escribiremos / seguido del término a buscar. La búsqueda se
realizará a partir de la posición actual. Si escribimos una / y pulsamos intro, pasaremos a la
próxima aparición del término a buscar. n repite la búsqueda hacia adelante y N repite la
búsqueda hacia atrás.
Para buscar hacia atrás en el fichero utilizaremos el signo de interrogación (?) en lugar de la barra
(/).

Para moverse a una línea específica escribiremos g seguido del número de línea, de modo que
g50 nos llevara a la línea 50.
Para salir del programa escribiremos q.

less no se puede utilizar en un pipe (|) a menos que sea el comando final de éste. En esta
situación, resulta útil para examinar fácilmente una salida larga. Suele ser el paginador por
defecto en los sistemas Linux, aunque muchos sistemas de tipo Unix utilizan more, lo que limita
las funciones de visualización de ficheros. less dispone de muchas más utilidades: una de ellas es
h, que mostrará el sistema de ayuda interno con un resumen de los comandos que podemos
utilizar.

Comandos para resumir ficheros

El comando cut toma segmentos de un fichero de entrada y los envía a la salida estándar,
mientras que el comando wc muestra algunas estadísticas básicas del fichero.

Extraer texto con Cut

El comando Cut permite especificar por dónde cortar las líneas de entrada y después mostrar
las líneas modificadas por la salida estándar:

Por byte: -b lista o –bytes=lista cortan la lista especificada de bytes del fichero de entrada.

Por carácter: -c lista o –characters=lista cortan la lista especificada de caracteres del fichero de
entrada. Suele dar el mismo resultado que el de corte por byte, a no ser que el fichero de entrada
utilice una codificación multi-byte.

Por campo: -f lista o –fields=lista cortan la lista de campos especificada del fichero de entrada.
Un campo es una sección de una línea delimitada por tabulaciones. Se puede cambiar el carácter
delimitador con las opciones -d char, –delim=char o – delimiter=char, donde char es el carácter
que delimita los campos. Por lo general, cut muestra líneas que no contienen delimitadores; las
opciones -s o –only-delimited hacen que el programa no muestre las líneas que no contienen el
carácter delimitador. Una lista es una forma de especificar muchos bytes, caracteres o campos,
lo que se puede hacer a través de un número (como 4), un rango cerrado (como 2-4) o un rango
abierto (como -4 o 4-). El comando cut se utiliza en scripts para extraer datos de la salida de otros
comandos.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 70

Para extraer datos de una salida se puede combinar cut con grep mediante un pipe (|).
Así, de esta manera, sólo tendremos que cortar las líneas que necesitemos.

Figura 78: Empleando comando cut para mostrar caracteres por columnas de 1-10 del archivo passwd
Fuente. - Elaboración Propia

Generar un contador de palabras con wc

wc genera un contador de palabras de un fichero, que también cuenta líneas y bytes:

#wc file
308 2343 15534 file

Este fichero contiene 308 líneas (más exactamente 308 caracteres de salto de línea), 2343
palabras y 15534 bytes. Se puede limitar la salida al recuento de saltos de línea (–lines o -l), el de
palabras (–words o -w), el de bytes (–bytes o -c) o al de caracteres (– chars o -m). También
podemos saber la longitud móxima de línea con la opción –max-linelenght o -L.

Figura 79: empleando comando wc


Fuente. - Elaboración Propia

Figura 80: Empleando comando wc para contar carácteres


Fuente. - Elaboración Propia

Figura 81: Empleando comando wc para contar líneas


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 71

Figura 82: Empleando comando wc para contar palabras


Fuente. - Elaboración Propia

2.1.4. Realizar administración de archivos básicos

A continuación, se muestra una serie de comandos útiles para conocer aspectos generales

/proc/mounts

Muestra los sistemas de ficheros que se encuentran montados; por

Ejemplo

Figura 83: Visualización de puntos de montura


Fuente. - Elaboración Propia

df -h

Reporta el uso de espacio en los discos duros.

Ejemplo

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 72

Figura 84: Visualización de puntos de montura


Fuente. - Elaboración Propia

mkdir

Este comando sirve para crear una carpeta

Ejemplo:

Figura 85: Creación de la carpeta Documentos


Fuente. - Elaboración Propia

Figura 86: Creación de árbol de carpetas con parámetro -p


Fuente. - Elaboración Propia
touch

Sirve para generar archivos sin contenido.

Ejemplo

Figura 87: Creación de archivo en blanco


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 73

cd

Comando que permite el moimiento entre directorios; su sintaxis es:

Cd [carpeta de destino]
Ejemplo

Figura 88: Ingresando al directorio Desktop


Fuente. - Elaboración Propia

Figura 89: Regresando al directorio origen


Fuente. - Elaboración Propia
cp

Comando que sirve para copiar archivos o carpetas, su sintaxis es cp [parámetros]


[archivo/Directorio] [rutaDestino]
Los parámetros son:

-r: Copia directorios recursivamente.


-v: Muestra el estado de la copia.
-f: Forza la copia sin pedirnos confirmación.

Ejemplo 1: Copiar un archivo a una carpeta

Figura 90: Copia de un archivo a una carpeta


Fuente. - Elaboración Propia

Ejemplo 2: Copiar una carpeta a otra carpeta

Figura 91: Copia de una carpeta a otra


Fuente. - Elaboración Propia

mv

Comando que sirve para mover archivos o carpetas, su sintaxis es:

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 74

mv [parámetros][archivo/Directorio] [rutaDestino]

Los parámetros son los siguientes:


-v: Muestra el estado del proceso
-f: Forza el movimiento sin pedirnos confirmación

Ejemplo 1: Mover un archivo a una carpeta

Figura 92: Mover archivos a una carpeta


Fuente. - Elaboración Propia

Ejemplo 2: Mover una carpeta a otra carpeta

Figura 93: Mover una carpeta a otra carpeta


Fuente. - Elaboración Propia

rm

Comando que sirve para eliminar archivos o carpetas, su sintaxis es:

rm [parámetros] [archivo/Directorio]

Los parámetros son los siguientes:

-r: Borra directorios recursivamente


-v: Muestra el estado del borrado
-f: Forza el borrado sin pedirnos confirmación

Ejemplo 1:

Figura 94: Eliminar un archivo


Fuente. - Elaboración Propia

Ejemplo 2:

Figura 95: Eliminar un archivo de una carpeta


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 75

ls

Lista los archivos que contiene una carpeta, su sintaxis es:

ls [parámetros]

Los parámetros son los siguientes:


-l: Muestra los detalles de archivos y carpetas.
-a: Muestra los archivos o carpetas ocultas.

Ejemplo:

Figura 96: Listar contenido de la carpeta


Fuente. - Elaboración Propia
find
Busca archivos en una ruta específica, su sintaxis es:

find [ruta] [expresion]


Ejemplo 1:
Buscar archivos y carpetas con el nombre “archivo.txt” en todo el directorio raíz.

Figura 97: Buscar archivo.txt desde la raíz


Fuente. - Elaboración Propia
Ejemplo 2:

Buscar archivos y carpetas que le pertenezcan al usuario “rdelvillar” en todo el


directorio raíz.

Figura 98: Buscar archivos y carpetas de rdelvillar


Fuente. - Elaboración Propia

Ejemplo 3:

Buscar archivos con extensión .bin dentro del directorio '/home/rdelvillar'

Figura 99: Buscar todos los archivos con extensión -txt


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 76

Ejemplo 4:

Buscar archivos binarios que no han sido usados en los últimos 100 días.

Figura 100: Buscar los binarios modificados en los últimos 100 días
Fuente. - Elaboración Propia

Ejemplo 5:

Buscar archivos binarios creados o modificados en los últimos diez días.

Figura 101: Buscar los binarios modificados en los últimos 10 días


Fuente. - Elaboración Propia

2.1.5. Buscar en archivos de texto usando expresiones regulares

Para la University of Ottawa (s.f.), una expresión regular es un patrón que nos permite buscar un
texto formado por metacaracteres y caracteres ordinarios.

Los metacaracteres son ciertos caracteres con un significado específico dentro de una expresión
regular. Estos caracteres tienen un significado que va más allá del símbolo que representan y
tienen un comportamiento especial en una expresión regular.

Aquí tenemos una lista de metacaracteres que usamos en expresiones regulares:


. Significa cualquier carácter.
^ Indica el principio de una línea.
$ Indica el final de una línea.
* Indica cero o más repeticiones del carácter anterior.
+ Indica una o más repeticiones del carácter anterior.
\< Indica el comienzo de una palabra.
\> Indica el final de una palabra.
\ Carácter de escape. Da significado literal a un metacaracter.
[ ] Uno cualquiera de los caracteres entre los corchetes. Ej: [A-Z] (desde A hasta Z).
[^ ] Cualquier carácter distinto de los que figuran entre corchetes: Ej: [^A-Z].
{ } Nos permiten indicar el número de repeticiones del patrón anterior que deben darse.
| Nos permite indicar caracteres alternativos: Ej: (^|[?&])
( ) Nos permiten agrupar patrones. Ej: ([0-9A-F]+:)+

Nota: En las expresiones regulares se distingue entre mayúsculas y minúsculas.

Si queremos representar un carácter entre la a y la z, lo haremos de la siguiente manera:


[a-z]

Dentro del conjunto, podemos especificar todos los caracteres que queramos. Por ejemplo: [a-
zA-Z] representaría los caracteres alfabéticos en minúsculas y mayúsculas. El conjunto representa

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 77

a un sólo carácter. Si lo que queremos es representar identificar un número o una letra,


podríamos hacerlo así: [a-zA-Z0-9]
Los conjuntos pueden representarse, nombrando todos y cada uno de los elementos, o el
intervalo. Ej: [0-9] representa lo mismo que [0123456789].

Si queremos representar un número que se compone de cero o más dígitos: [0-9]*

Y si queremos representar un número que se compone de uno o más dígitos: [0-9]+

Si ahora queremos representar cualquier carácter menos los dígitos: [^0-9]

Ahora, imaginemos que queremos representar un número de 5 dígitos: [0-9]{5}

Y si quisiéramos representar una palabra que tiene entre dos y cuatro caracteres: [a-zA-Z]{2,4}

Dentro de los conjuntos de caracteres individuales, se reconocen las siguientes categorías

[:alnum:] alfanuméricos
[:alpha:] alfabéticos
[:cntrl:] de control
[:digit:] dígitos
[:graph:] gráficos
[:lower:] minúsculas
[:print:] imprimibles
[:punct:] de puntuación
[:space:] espacios
[:upper:] mayúsculas
[:xdigit:] dígitos hexadecimales

Vamos a ver algunos ejemplos de expresiones regulares:

# grep '^La' fichero


El comando anterior nos devuelve todas las líneas del fichero que comienzan por La.

# grep '^ *La' fichero


El comando anterior nos devuelve todas las líneas del fichero que comienzan por cualquier
número de espacios seguido de La.

# grep '^\..*' fichero


El comando anterior nos devuelve todas las líneas del fichero que comienzan por punto y
tienen cualquier número de caracteres.

# ls -la | grep ' \..*'


El comando anterior nos devuelve la lista de ficheros que comienzan por un espacio seguido
de un punto y cualquier número de caracteres, es decir, la lista de ficheros ocultos.

# ls -l | grep '^d'
El comando anterior nos devuelve la lista de ficheros que comienzan por d, es decir, la lista de
directorios.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 78

Resumen
1. En esta unidad, se consiguió tener mayor conocimiento del modo de trabajo de
plataformas Linux vía comandos. Se conoció comandos básicos para trabajar con el
sistema operativo, como el comando date para el cambio de día y hora, con una sola línea
de comando, también el filtro de búsqueda en los textos de Linux, con lo cual se puede
iniciar una administración básica de un sistema operativo Linux.

Recursos
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta unidad:

o https://www.youtube.com/watch?v=T9tOU0PsfrM

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 79

UNIDAD

3
USANDO EL EDITOR VI Y ADMINISTRACIÓN
DE PROCESOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno conoce el funcionamiento básico del editor de texto
Vi. Navegar, insertar, copiar, mover, pegar y buscar serán algunas de las tareas que
servirán de ahora en adelante para editar los archivos de texto, ya sean textos o bien
ficheros de configuración del sistema; el alumno ejecuta procesos en primer y segundo
plano, los cambia de plano; monitoriza los procesos actuales, los ordena según varios
parámetros; envía señales a los procesos; y elimina procesos innecesarios para el
sistema/usuario.

TEMARIO
3.1 Tema 3 : Editor Vi
3.1.1 : Editar archivos con Vi, utilizar los modos de Vi
3.1.2 : Operaciones básicas de edición de archivos usando Vi

3.2 Tema 4 : Administración de procesos


3.2.1 : Crear, monitorizar y eliminar procesos
3.2.2 : Modificar prioridades en la ejecución de procesos

ACTIVIDADES PROPUESTAS

• Los alumnos identifican las opciones para utilizar el editor Vi.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 80

3.1. EDITOR VI

3.1.1. Editar archivos de Vi, utilizar los modos de Vi

Según Toledo (s.f.), el editor Vi es un editor de texto de pantalla completa que maneja en
memoria el texto entero de un archivo. Es el editor clásico de UNIX; está en todas las versiones.
Puede usarse en cualquier tipo de terminal con un mínimo de teclas; esto lo hace difícil de usar
hasta que uno se acostumbra.

Existe un editor Vi ampliado llamado vim que contiene facilidades adicionales, así como diversas
versiones del Vi original. En todos los casos, el conjunto de comandos básicos es el mismo.

Modos de Vi

Para Gonzalez-Barbone (2017) existen tres modos o estados en Vi:

modo comando: las teclas ejecutan acciones que permiten desplazar el cursor, recorrer el
archivo, ejecutar comandos de manejo del texto y salir del editor. Es el modo inicial de Vi.
modo texto o modo inserción: las teclas ingresan caracteres en el texto.
modo última línea o ex: las teclas se usan para escribir comandos en la última línea al final de la
pantalla.

El modo por defecto es el modo de comandos. En este modo no se puede realizar la edición del
texto. Vi espera al comando apropiado antes de realizar una operación. En general, Vi volverá al
modo de comandos después de ejecutar un comando.

La ventaja de este modo de trabajar es que se pueden ejecutar comandos desde ficheros y los
documentos pueden ser formateados o reestructurados, simplemente, ejecutando comandos de
Vi.

Si al presionar ESC el terminal emite un pitido quiere decir que ya se está en modo de comandos.

Iniciando Vi

Para comenzar a usar Vi, teclear

vi nuevo_fichero

Este comando inicia el editor y, como el fichero no existe todavía, se crea para ser editado. El
editor está ahora en modo de comandos esperando por un comando.

vi +5 nombre_fichero //Comienza la edición en la línea 5

vi + nombre_fichero //Comienza la edición en la última línea

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 81

Moviendo el cursor

Las siguientes teclas controlar el movimiento del cursor.


• arriba
• abajo
• izquierda
• derecha

Cuando se carga Vi con un nuevo fichero, el cursor está en la esquina superior izquierda de la
pantalla y no puede ser movido con las teclas de cursor.

Modo de entrada de texto (añadir, insertar)

• a: añade texto a partir del carácter en que está situado el cursor.


• A: añade texto al final de la línea actual.
• I: inserta texto a partir de la posición del cursor.
• I: inserta texto al principio de la línea actual.
• O: inserta una línea debajo de la posición del cursor o inserta una línea encima de la
posición del cursor-
• :r fich): permite insertar el fichero fich tras la línea actual.

Borrando y cambiando texto

Los tres comandos más utilizados para alterar el texto son

• X borra el carácter en el cursor.


• nx borra caracteres hacia la derecha, incluido el que está sobre el cursor.
• nX borra n caracteres hacia la izquierda.
• r sustituye el carácter en el cursor.
• dd borra la línea en la que está el cursor.
• Ndd borra n líneas hacia abajo incluyendo la que contiene el cursor.

Estos tres comandos son ejecutados en el modo de comandos y vuelven al modo de comandos
después de ejecutarse.

Deshaciendo cambios

Hay veces que se realizan cambios, pero que incluye un error, en esos casos, el editor Vi facilita
mecanismos para deshacer acciones de comandos previos.

El comando u deshace el comando previo.

El comando U deshace todos los cambios realizados en la línea actual.

Guardando cambios y permaneciendo en Vi

Es muy recomendable guardar los cambios que se van realizando de una forma regular.

Para ello se utiliza :w

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 82

Si no se quieres sobre escribir el fichero que se está editando, sino que se desea guardar los
cambios como un fichero nuevo, añade al comando :w, el nombre del nuevo fichero.

:w nuevo_fichero2

Edición simultánea de ficheros

Se puede pasar de la edición de un fichero a la edición de otro, usando ':e fichero', pero antes se
debe salvar el contenido de la edición actual. También es posible forzar el paso a editar otro
fichero con ':e! fichero' aunque en ese caso se perderán las modificaciones realizadas. Usando
':e#' se retoma la edición del fichero anterior situado en la misma línea donde fue dejado.

Abandonando Vi

Según Knowledge Database Discover (s.f.), para dejar Vi se utiliza:

• ZZ Guarda los cambios en el fichero original, y vuelve al intérprete de comandos.


• :wq igual que ZZ
• :q! abandonar el editor, no guarda los cambios y vuelve al intérprete de comandos.

Comandos adicionales para posicionamiento del cursor

Además de las teclas h, j, k, l existen cuatro más:

b mueve el cursor al comienzo de la palabra anterior e mueve el cursor al final de la palabra


siguiente 0 mueve el cursor al comienzo de la línea (cero) $ mueve el cursor al final de la línea

Scroll de pantalla

Los comandos para avanzar una pantalla arriba y abajo (12 líneas) son

• Ctrl-d una pantalla abajo


• Ctrl-u una pantalla arriba

Para ficheros muy largos, se puede ir a una línea del texto

3000G va a la línea número 3000

Para posicionar el curso en la última línea del fichero, teclea

Para posicionar el cursor al comienzo del fichero, teclea

1G

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 83

El siguiente comando muestra el número de línea actual

ctrl-g

Búsqueda

Otro método de posicionarse dentro de un fichero es buscando una cadena de caracteres. En el


modo de comandos, cualquier cadena de caracteres precedida por / significa el comando de
búsqueda hacia adelante. El cursor se posiciona en la primera ocurrencia de dicha cadena.

El comando n busca hacia adelante la siguiente ocurrencia.

Para buscar hacia atrás, se utiliza el comando ?

Borrar texto

Ya se vio anteriormente el comando dd para borrar la línea actual.

El comando dw borra la palabra actual. Nótese que el comando de borrado comienza por d,
seguido por el ámbito de aplicación (d para una línea, w para una palabra (word en inglés)).

Quitar y poner

Cuando se borra algo, es almacenado en un buffer temporal. El contenido de este buffer puede
ser accedido y 'puesto' o pegado en cualquier sitio del texto.

Para recuperar el último texto borrado, se usa el comando p

• Nww guarda en la memoria intermedia n palabras contadas desde la posición del cursor
• y$ guarda en la memoria intermedia desde la posición del cursor hasta el final de la línea.
• Ny guarda en la memoria intermedia n+1 lineas desde la línea actual

3.1.2. Operaciones básicas de edición de archivos usando Vi

Para averiguar la versión de vim que está ejecutando y las características que tiene incluidas
usando el comando:

vi --versión

Por ahora, se usará el comando sin opciones.

vi count1.sh

Para Shields (2010) el editor Vi fue creado cuando no todos los teclados de terminal tenían teclas
de movimiento de cursor, por consiguiente, todas las tareas que pueden realizarse en vi, también
pueden llevarse a cabo con las teclas alfanuméricas tradicionales y otras pocas teclas como Esc e

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 84

Insert. Sin embargo, si lo desea, puede configurar vi para usar teclas adicionales; la mayoría de
las teclas tienen funciones útiles en vi. Debido a sus orígenes y al hecho de que las primeras
conexiones de terminales eran lentas, vi se destacó por el uso de comandos muy breves y
crípticos. Veamos primero las teclas que se usan para navegar dentro de un archivo.

Edición de texto

Ahora es el momento de aprender a editar el texto dentro del archivo.

Modificar texto

Use los siguientes comandos para insertar, eliminar o modificar texto. Tome en cuenta que
algunos de estos comandos poseen una forma en mayúscula que es similar a la forma en
minúscula; lea las descripciones proporcionadas a continuación.

I
Ingrese al modo insertar antes del carácter en la posición actual. Tipee el texto deseado y
presione Esc para volver al modo de comandos. Use I para insertar texto al comienzo de la línea
actual.

A
Ingrese al modo insertar antes del carácter en la posición actual. Tipee el texto deseado y
presione Esc para volver al modo de comandos. Use A para insertar texto al final de la línea actual.

C
Use c para modificar el carácter actual e ingrese al modo insertar para tipear caracteres de
reemplazo.

O
Abra una línea nueva para insertar texto debajo de la línea actual. Use O para abrir una línea
arriba de la línea actual.

cw
Elimine el resto de la palabra actual e ingrese al modo insertar para reemplazarla. Use un conteo
de repetición para reemplazar varias palabras. Use c$ para reemplazar hasta el final de la línea.
dw
Igual a cw y c$, con la excepción de que no se ingresa al modo insertar.

dd

Elimine la línea actual. Use un conteo de repetición para eliminar varias líneas.

x
Elimine el carácter en la posición del cursor. Use un conteo de repetición para eliminar varios
caracteres.

p
Coloque el último texto eliminado después del carácter actual. Use P para colocarlo antes del
carácter actual.

xp
Esta combinación de x y p es una expresión muy útil que intercambia lugares entre el carácter en
la posición del cursor y el que tiene a la derecha.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 85

3.2. ADMINISTRACIÓN DE PROCESOS

3.2.1. Crear, monitorizar y eliminar procesos

Cuando usted ejecuta un comando en su ventana de terminal, está ejecutando en el primer plano.
La mayoría de esos comandos se ejecutan rápidamente, pero suponga que está ejecutando un
escritorio gráfico y que desearía que un reloj digital se mostrará en el escritorio. Por ahora,
ignoremos el hecho de que la mayoría de los escritorios gráficos ya tienen uno; simplemente
vamos a usar esto como ejemplo.

Si usted tiene el X Window System instalado, probablemente también tendrá instaladas algunas
herramientas como xclock o xeyes. Probablemente, usted las encuentre en un paquete llamado
xorg-x11-apps o x11-apps si aún no las ha instalado. Cualquiera de ellas sirve para este ejercicio,
pero utilizaremos xclock.

La página principal explica que usted puede iniciar un reloj digital en su escritorio gráfico usando
el comando:

xclock -d -update 1

La parte -update 1 solicita actualizaciones cada segundo; en caso contrario, el reloj se actualiza
solo cada minuto. Así que vamos a ejecutar esto en una ventana de terminal.

Nota

En el momento de la escritura, hay un error que afecta a xclock cuando están habilitados los
efectos de escritorio. El efecto más notorio es que la barra de título no cambia, ni siquiera
cuando se enfoca. Si su xclock no se ve como ninguno en este artículo, tal vez desee desactivar
los efectos de escritorio durante un tiempo.

Un reloj digital con xclock

Figura 102: Reloj digital con xclock


Fuente. – Elaboración Propia

Iniciando xclock

root@soa: ~$ xclock -d -update 1

Desafortunadamente, su ventana de terminal ya no tiene un prompt, por lo cual usted


realmente necesita retomar el control. Afortunadamente, el Bash shell tiene una clave
suspend, Ctrl-z. Presionar esta combinación de claves le proporciona un prompt de terminal
de nuevo.

Suspendiendo xclock con Ctrl-z

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 86

root@soa:~$ xclock -d -update 1


^Z

El reloj todavía está en su escritorio, pero se ha detenido. Eso fue exactamente lo que hizo la
suspensión. De hecho, si usted arrastra otra ventana sobre parte de esta, la parte del reloj ni
siquiera se volverá a dibujar. Note el mensaje de resultado de terminal indicando "[1]+Stopped".
El 1 del mensaje es un número de tareas. Usted puede reiniciar el reloj escribiendo fg %1.
También puede usar el nombre de comando o parte de él escribiendo fg %xclock o fg %?clo.
Finalmente, usted simplemente escribe fg sin parámetros, usted puede reiniciar el trabajo
detenido más recientemente, el trabajo 1 en este caso. Reiniciar con fg también trae el trabajo
de nuevo al primer plano y usted ya no tendrá un prompt de comando shell. Lo que usted necesita
hacer es poner el trabajo en el segundo plano; un comando bg toma el mismo tipo de
especificación de trabajo que el comando fg y hace exactamente eso.

A continuación, muestra cómo traer el trabajo xclock de nuevo al primer plano y suspenderlo
usando dos formas del comando fg. Usted puede suspenderlo de nuevo y ponerlo en segundo
plano; el reloj continuará ejecutándose mientras usted hace otros trabajos en su terminal.

Colocar xclock en primer plano o en segundo plano

root@soa:~$ fg %1
xclock -d -update 1
^Z
[1]+ Stopped xclock -d -update 1
root@soa:~$ fg %?clo
xclock -d -update 1 ^Z
[1]+ Stopped xclock -d -update 1
root@soa:~$ bg
[1]+ xclock -d -update 1 &

Uso de "&"

Según Shields (2012), posiblemente usted haya notado que cuando pone la tarea xclock en
segundo plano, el mensaje ya no dirá "Stopped" y estará terminado por un signo (&). De hecho,
usted no necesita suspender el proceso para ponerlo en segundo plano; simplemente añada un
signo & al comando y el shell iniciará el comando (o lista de comandos) en el segundo plano.
Vamos a iniciar un reloj análogo con un wheat de trasfondo usando este método.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 87

Reloj análogo con xclock

Figura 103: Reloj digital


Fuente. - Elaboración Propia

Inicio de un xclock análogo con &

root@soa: ~$ xclock -bg wheat -update 1&


[2] 4320

Note que el mensaje es ligeramente diferente esta vez. Este representa un número de trabajo y
una ID de proceso (PID). Cubriremos las PID y más sobre el estado en un momento. Por ahora,
vamos a usar el comando jobs para descubrir cuáles trabajos se están ejecutando. Añada la
opción -l para listar las PID y verá que el trabajo 2 de hecho tiene una PID 4320 como se muestra.
Note también que el trabajo 2 tiene un signo de suma (+) junto al número de trabajo, indicando
que este es el trabajo actual (Shields, 2012).

Este trabajo vendrá al primer plano si no se da ninguna especificación de trabajo con el comando
fg.

Mostrar información de trabajo y de proceso

root@soa:~$ jobs -l
[1]- 3878Running xclock -d -update 1 &
[2]+ 4320Running xclock -bg wheat -update 1 &

Antes de resolver algunos otros problemas relacionados con trabajos de segundo plano, vamos a
crear el reloj digital de un hombre pobre. Usamos el comando sleep para causar una demora de
dos segundos y usamos el comando date para imprimir la fecha y hora actuales. Empaquetamos
este comando en un bucle while con un bloque do/done para crear un bucle infinito.

Finalmente, ponemos todo entre paréntesis para hacer una lista de comandos y poner toda la
lista en segundo plano usando un signo &. Usted aprenderá más sobre cómo construir comandos
complejos usando bucles y scripts.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 88

Reloj digital de un hombre pobre

Figura 104: Muestra la hora cada 2 segundos


Fuente. - Elaboración Propia

Nuestra lista se está ejecutando como trabajo 2 con PID 2664. Cada dos segundos se nohup.

El comando nohup se utiliza para iniciar un comando que ignora señales de hangup y anexará
stdout y stderr a un archivo. El archivo predeterminado es nohup.out o $HOME/nohup.out.
Si el archivo no puede ser escrito, entonces el comando no se ejecutará. Si usted desea que el
resultado se dirija a cualquier otra parte, redirija stdout,
stderr.

El comando nohup ahora ejecutará una interconexión o una línea de comandos. Usted puede
guardar una interconexión o lista en un archivo y luego ejecutarla usando el sh (shell
predeterminado) o el comando bash. Otro artículo de esta serie le mostrará cómo hacer
ejecutable el archivo de script, pero por ahora nos apegaremos a los script en ejecución usando
el comando sh o el bash. A continuación muestra cómo podemos hace resto para nuestro reloj
digital de hombre pobre. No es necesario decirlo, hacer que la hora se escriba a un archivo no
es particularmente útil, y el archivo seguirá creciendo, por lo que configuraremos el reloj para
que se actualice cada 30 segundos en lugar de cada segundo (Shields, 2012).

Uso de nohup en una línea de comandos en un script

Figura 105: Ejecuta script mostrara hora cada 30 segundos en archivo nohup.out
Fuente. - Elaboración Propia

Si se muestra el contenido de nohup.out, se verán líneas, con cada línea a, aproximadamente,


30 segundos después de la que está dos líneas antes que ella.

Resultado de procesos nohupls

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 89

Figura 106: Muestra contenido archivo nohup.out


Fuente. - Elaboración Propia

Las versiones antiguas de nohup no escribieron un mensaje de estado en la terminal de control,


por lo que, si se cometió un error, puede que no se vea inmediatamente. Para ello, se puede
redirigir tanto stdout como stderr hacia un archivo de su propia elección.
Si usted ha decidido que sería más fácil aprovisionar el comando usando en lugar de escribir sh o
bash. A continuación, muestra qué sucede si se usa nohup, pero redirigiendo con stdout y stderr.
Después de ingresar el comando, puede ver el mensaje que indica que el trabajo 4 ha iniciado
con PID 5853. Al presión Enter de nuevo, se verá otro mensaje diciendo que el trabajo se terminó,
con el código de salida 126

Errores con nohup

Figura 107: Ejecuta proceso nohup


Fuente. - Elaboración Propia

A continuación, se muestra el contenido de mynohup.out. Se usa nohup para ejecutar un


comando en segundo plano, y utiliza source (.) para leer comandos de un archivo y luego,
ejecutarlos en el Shell actual. Lo que es importante recordar sobre esto es que tal vez se necesite
presionar Enter, para permitir que el shell muestre el estado de salida del trabajo en segundo
plano y usted tal vez necesite observar el archivo de salida nohup para ver qué fue realmente lo
que salió mal.

Mensaje oculto de nohup

Figura 108: Muestra mensaje de error de proceso nohup


Fuente. - Elaboración Propia

Según Shields (2012), al enfocar atención en el estado de nuestro proceso. Si usted está siguiendo
todo y planea tomar un descanso en este punto, por favor permanezca cerca pues ahora usted
tiene dos trabajos que están creando archivos cada vez más grandes en su sistema de archivos.
Usted puede usar el comando fg para traer cada uno, a su vez, al primer plano, y luego usar Ctrl-

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 90

c para terminarlos, pero si desea dejar que se ejecuten un poco más, verá otras formas de
supervisarlos e interactuar con ellos.

Supervisión de procesos

Antes tuvimos una breve introducción al comando jobs y vimos cómo usarlo para listar los ID de
Proceso (o PIDs) de nuestros trabajos.

ps

Existe otro comando, el comando ps, el cual utilizamos para mostrar en pantalla varias piezas de
información de estado procesos. Recuerde que "ps" es el acrónimo de "process status", El
comando ps acepta cero o más PIDs como argumentos y muestra los estados de proceso
asociados. Si usamos el comando jobs con la opción p, el resultado es simplemente el PID del líder
de grupo de proceso para cada trabajo. Usaremos este resultado como argumento para el
comando ps como se muestra en el

Estado de procesos de segundo plano

Figura 109: Ejecuta comando Jobs -p


Fuente. - Elaboración Propia

Si usted usa ps sin opciones, verá una lista de procesos que tienen su terminal como su terminal
de control, como se muestra a continuación. Note que los comandos pmc.sh no aparecen en
esta lista. En un momento verá por qué.

Mostrar estado con ps

Figura 110: Ejecuta comando ps


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 91

Diversas opciones, incluyendo -f (full), -j (jobs) y -l (long) proporcionan control sobre cuánta
información se muestra. Si usted no especifica ningún PID, entonces otra opción útil es la opción
--forest, la cual muestra los comandos en una jerarquía en árbol, mostrando cuáles procesos
tienen a cuáles otros como padres. Particularmente, usted verá que los comandos sleep del
anterior listado son hijos de los script que usted ha ejecutado en segundo plano. Si usted ha
podido ejecutar el comando en un momento diferente, podrá ver el comando en un instante
diferente, usted podrá ver el comando date listado en su lugar en el estado de proceso, pero esto
es muy poco probable con este script.

Más información de estado

Figura 111: Ejecuta comando ps -f y comando ps-j --forest


Fuente. - Elaboración Propia

Ahora que usted cuenta con algunas herramientas básicas para monitorear sus procesos usando
los comandos jobs y ps , observemos brevemente otros comandos de supervisión antes de pasar
a otras formas de seleccionar y ordenar procesos para mostrar.

free

El comando free muestra la cantidad de memoria libre y usada en su sistema. De forma


predeterminada se muestra en kilobytes, pero usted puede alterar esto usando b para bytes, -k
para kilobytes, -m para megabytes, o -g para gigabytes. La opción t muestra una línea total, y la
opción -s junto con un valor renueva la información con la frecuencia especificada. El número es
en segundos, pero puede ser un valor flotante.

Usando el comando free

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 92

Figura 112: Ejecuta comando ps free y comando free -mt


Fuente. - Elaboración Propia

uptime

El comando uptime le muestra una visualización de una línea que incluye el tiempo actual, por
cuánto tiempo se ha estado ejecutando el sistema, cuántos usuarios están actualmente en sesión
activa y los promedios de carga de sistema durante los últimos 1, 5 y 15 minutos.

Mostrar información de tiempo de operación

Figura 113: Ejecuta comando uptime


Fuente. - Elaboración Propia

Seleccione y organice procesos para mostrar.

Usando ps

El comando ps que ya tratamos solo lista procesos que fueron iniciados desde su sesión de
terminal (note la columna de SID, o ID de sesión, en el segundo ejemplo del Listado 14). Para ver
todos los procesos con terminales de control, use la opción -a . La opción -x muestra procesos sin
una terminal de control, y la opción -e muestra información para cada proceso.
Mostrar otros procesos

Figura 114: Ejecuta comando ps -af


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 93

Note la terminal de control listada en la columna TTY. Para este listado, cambié la ventana de
terminal que abrí originalmente (pts/0), así que el comando ps -af se está ejecutando bajo pts/0,
mientras que los comandos creados para este artículo se están ejecutando bajo pts/1.

Hay muchas opciones para ps, incluyendo un número que proporciona control significativo
sobre cuáles campos son mostrados y cómo son mostrados. Otros proporciona control sobre la
selección de procesos a mostrar, por ejemplo, seleccionando los procesos para un usuario
particular (-u) o un comando particular (C).

¿Quién está ejecutando el comando xclock?

Figura 115: Consultar quien está ejecutando el comando xclock


Fuente. - Elaboración Propia
Algunas veces usted deseará ordenar el resultado por algún campo en particular, y puede hacerlo
usando la opción --sort para especificar los campos a ordenar. Lo predeterminado es ordenar en
orden ascendente (+), pero usted también puede especificar orden descendente

Ordenar el resultado de ps

Figura 116: Salida en orden del comando ps


Fuente. - Elaboración Propia

Como es usual, vea las páginas man para ps para conocer todos los detalles sobre las diversas
opciones y campos que usted puede especificar, o puede obtener un breve resumen usandops --
help.

Usar top

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 94

Si usted ejecuta ps varias veces en una fila para ver lo que está cambiando, probablemente
necesite el comando top en lugar de ello. Esta muestra una lista de procesos actualizada
continuamente, junto con útil información de resumen.

Mostrar procesos usando top

Figura 117: Salida en orden del comando top


Fuente. - Elaboración Propia

El comando top tiene cierto número de subcomandos, tales como:

h muestra la ayuda
q termina el comando top.
f permite añadir o eliminar campos desde la pantalla
o ordena el orden de presentación
F selecciona campos por los cuales ordenar

Envíe señales a procesos

Ahora observemos las señales Linux, que son una forma asíncrona para comunicarse con
procesos. Ya hemos mencionado la señal SIGHUP, y hemos usado tanto Ctrl-c como Ctrl-z, que
son otras formas de enviar una señal a los procesos. LA forma general para enviar una señal es
con el comando kill.
Enviando señales usando kill

El comando kill envía una señal a un trabajo o proceso especificado. El Listado 22 muestra el uso
de señales SIGTSTP y SIGCONT para detener y reanudar un trabajo en segundo plano. El uso de
la señal SIGTSTP es equivalente a usar el comando fg para llevar el trabajo al primer plano y
luego hacer Ctrl-z para suspenderlo. Usar SIGCONT es como usar el comando bg.

Detener y reiniciar trabajos en segundo plano

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 95

Figura 118: Detener proceso comando kill


Fuente. - Elaboración Propia

Figura 119: Visualizar procesos en ejecución


Fuente. - Elaboración Propia

Utilizamos la especificación de trabajo (%1) para detener el proceso xclock de este ejemplo, y
luego el ID de proceso (PID) para reiniciarlo (continuarlo). Si usted detuvo el trabajo %2 y luego
usó tail con la opción -f para seguirlo, verá que solo un proceso está actualizando el archivo
nohup.out.

Existen numerosas señales adicionales posibles que usted puede visualizar en su sistema usando
kill -l. Algunas se utilizan para reportar errores, como códigos de operación ilegales, excepciones
de punto flotante, o intentos de acceso a memoria a los que un proceso no tiene acceso. Note
que las señales tienen tanto un número, como 20, y un nombre, como SIGTSTP. Usted puede
usar o el número con un signo - como prefijo, o la opción -s y el nombre de señal. En mi sistema
podría haber usado kill -20 en lugar de kill -s SIGTSTP. Usted siempre debe verificar los números
de señal de su sistema antes de suponer cuál número pertenece a cuál señal.

Manejadores de señal y terminación de procesos

Usted ha visto que Ctrl-c termina un proceso. De hecho, este envía una señal SIGINT (o interrupt)
al proceso. Si usted usa kill sin ningún nombre de señal, este envía una señal SIGTERM. Para la
mayoría de los propósitos, estas señales son equivalentes. Usted ha visto que el comando nohup
hace que un propósito sea inmune a la señal SIGHUP. En general, un proceso puede implementar
señales signal handler hasta catch. Así un proceso podría implementar un manejador de señales
para capturar SIGINT o SIGTERM. Como el manejador de señales sabe cuál señal se ha enviado,
este puede optar por ignorar SIGINT y solo terminarlo cuando reciba SIGTERM, por ejemplo.

Terminando un proceso con SIGTERM

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 96

Figura 120: Terminando proceso con SIGTERM


Fuente. - Elaboración Propia

Los manejadores de señal proporcionan a los procesos gran flexibilidad. Un proceso puede hacer
su trabajo normal y puede ser interrumpido por una señal por algún propósito especial. Además
de permitir que un proceso capture solicitudes de terminación y que lleve a cabo las acciones
posibles, como cerrar archivos o marcar puntos de verificación en transacciones en curso, las
señales se usan a menudo para decirle a un proceso daemon que vuelva a leer su archivo de
configuración y posiblemente que reinicie la operación. Usted puede hacer esto para el proceso
inetd cuando cambia parámetros de red, o el Daemon de impresora de línea (lpd) cuando añade
una nueva impresora.

Terminando procesos incondicionalmente

Algunas señales no se pueden atrapar, como algunas excepciones de hardware. SIGKILL, el que
más probablemente utilizará usted no puede ser capturado por un manejador de señales y
termina un proceso incondicionalmente. En general, Usted necesitará esto solo si todos los otros
medios de terminación de proceso han fallado.

Cierre de sesión y nohup

Recuerde que vimos que usar nohup les permitiría a sus procesos seguir funcionando después de
que usted cerrara sesión. Bien, vamos a hacerlo y luego volveremos a iniciar sesión. Después de
que usted inicie sesión, revise su proceso remanente de reloj de hombre pobre usando Jobs y ps
como lo hemos hecho arriba.

Volver a iniciar sesión

root@soa:~$ jobs -l
root@soa:~$ ps -a
PID TTY TIME CMD
10995 pts/0 00:00:00 ps

Esta vez estamos ejecutando pts/0, pero no hay signos de nuestros trabajos, solo el comando ps.
No es tal vez lo que estábamos esperando. No obstante, no todo está perdido. Suponga que no
puede recordar si usted terminó el trabajo nohup que comenzó con bash o el que inició con bash.
Arriba usted vio cómo encontrar los procesos que estaban ejecutando el comando getty, así que
puede usar el mismo truco para mostrar solo SID, PID, PPID y la serie de comandos. Luego puede
usar la opción -js para mostrar todos los procesos de la sesión (Shields, 2012).

Encontrando nuestros comandos perdidos

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 97

Figura 121: Encontrando comandos perdidos


Fuente. - Elaboración Propia

Note que el pmc.sh todavía se está ejecutando, pero que ahora tiene un signo de interrogación
(?) para el TTY que controla.

3.2.2. Modificar prioridades en la ejecución de procesos

Los procesos iniciados por usuarios regulares, normalmente, tienen una prioridad de 0. El
comando ps -l puede mostrar la prioridad (nivel de cortesía o NI, por ejemplo) de los procesos
desde un terminal.
El comando nice también puede usarse para iniciar un proceso con una prioridad diferente. La
opción -n o (--adjustment) es el valor de las prioridades que va de -20 (la más alta) a 19 la más
baja. Los procesos con el menor valor de prioridad se ejecutan a la prioridad de programación
más alta. Los usuarios regulares, usualmente, solo pueden hacer que sus procesos sean más
corteses.

Uso de 'nice' para establecer prioridades a los procesos

Para demostrar el uso de nice para establecer prioridades, se inicia con el comando yes con
prioridad -5 y se deja ejecutando el comando yes en el terminal.

root@soa:~# nice -n -5 yes

Después de un momento en otro terminal, ejecutar ps -al para mostrar el estado del proceso
donde muestra el cambio de prioridad.

Figura 122: Visualizamos procesos con pa -al


Fuente. - Elaboración Propia

Uso de 'renice' para cambiar prioridad a procesos ejecutados

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 98

Asi como nice establece la prioridad de un proceso cuando se inicia su ejecución, reinicie
permite alterarla en tiempo real, sin necesidad de detener el proceso.

Figura 123: Cambio de prioridad con comando reinicie


Fuente. - Elaboración Propia

Cuando se trata ejecutar procesos en background (segundo plano) se utiliza el comando nohup
o el operador &. Aunque realizan una función similar, pero no son lo mismo.

Si se desea liberar al terminal de un programa que se espera durará un tiempo considerable


ejecutándose, como por ejemplo, cuando se ejecuta el comando yes desde la consola o terminal.
Para lograr esto basta con escribir el comando especificado y agregar al final el símbolo &
(ampersand).

Figura 124: Redireccionamos la salida del comando yes


Fuente. - Elaboración Propia

Sin embargo, lo anterior produce que el padre del proceso PPID que se invocó sea el proceso de
la terminal en si, por lo que si se cierra la terminal o salimos de la sesión también se terminarán
los procesos hijos que dependan del terminal, no muy conveniente si se desea que el proceso
continúe en ejecución.

Para solucionar lo anterior, entonces se usa el comando nohup que permite al igual que '&'
mandar el proceso a background y que éste quede inmune a los hangups (de ahí su nombre
nohup) que es cuando se cuelga o termina en el terminal o consola, de la cual se ejecutó el
proceso.

root@soa:~# nohup yes > /dev/null &

Si por ejemplo, se tiene acceso a una única consola o terminal, y se tienen que ejecutar varios
comandos que se ejecutarán por largo tiempo, se pueden entonces como ya se vió previamente
con nohup y el operador '&' mandarlos a segundo plano o background, con el objeto de liberar
al terminal y continuar trabajando.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 99

Pero si solo se está en una terminal esto puede ser difícil de controlar y para esto, se tiene el
comando jobs que lista los procesos actuales en ejecución.

Figura 125: Se envía processo a segundo plano con el comando nohup


Fuente. - Elaboración Propia

En el ejemplo previo, se ejecutó el comando yes y se envió a background (&), y el sistema


devolvió [3] 4220, indicando asi que se trata del trabajo o de la tarea [3] y su PID.

Con los comandos fg (foreground) y bg (background) es posible manipular procesos que estén
suspendidos temporalmente, ya sea porque se les envió una señal de suspensión como STOP
(20) o porque al estarlos ejecutando se presionó ctrl-z. Entonces para reanudar su ejecución en
primer plano.

root@soa:~# Jobs
[1]+ Stopped yes >/dev/null &
root@soa:~# fg %1
root@soa:~# Jobs
[1]+ Running yes >/dev/null &

Obsérvese como al traer en primer plano al proceso, éste adquirió el símbolo [+] que indica que
está al frente. Lo mismo sería con bg que volvería a reiniciar el proceso pero en segundo plano.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 100

Resumen
1. En esta unidad, se vio el uso de un editor de archivos, en Linux, vía el comando vi, con el cual
se puede modificar, eliminar contenido de los archivos con múltiples opciones para poder
seguir ampliando la administración del sistema operativo Linux. El uso de este comando es
muy importante, en Linux, debido a que todo administrador siempre está realizando cambios
de parámetros a la aplicación que levanta en el sistema operativo y se deben modificar los
archivos de las distintas aplicaciones que corren sobre este.

Recursos
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta unidad:

o VI Editor - Tutorial Linux #14: https://www.youtube.com/watch?v=pU2k776i2Zw


o Administración de Procesos LINUX Ubuntu: https://www.youtube.com/watch?v=fpcybeG0Li4

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 101

UNIDAD

4
ENLACES DE ARCHIVOS Y ESTRUCTURA
JERÁRQUICA LINUX
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno comprende la estructura de directorios del sistema de
archivos definido en el FHS, identifica y crea los enlaces utilizado para soportar tareas de
administración del sistema; utiliza los comandos básicos de GNU/Linux para modificar
parámetros de configuración de arranque del sistema operativo.

TEMARIO
4.1 Tema 5 : Crear y cambiar enlaces duros y simbólicos
4.1.1 : Crear enlaces duros y/o simbólicos
4.1.2 : Usar enlaces para soportar tareas de administración de sistema
4.1.3 : Comprender la ubicación correcta de archivos en el FHS
4.1.4 : Conocer la ubicación y propósito de archivos y directorios
importantes definidos en el FHS

4.2 Tema 6 : Arrancar el sistema


4.2.1 : Proveer comandos comunes al cargador de arranque y opciones al
Kernel al arranque del sistema
4.2.2 : Demostrar conocimiento de la secuencia de arranque desde el BIOS
hasta completar el arranque

4.3 Tema 7 : Cambiar los niveles de ejecución, apagar o reiniciar el sistema


4.3.1 : Establecer el nivel de ejecución predeterminado
4.3.2 : Cambiar entre niveles de ejecución
4.3.3 : Inicializar el sistema SysV, Upstart y Systemd
4.3.4 : Apagar o reiniciar el sistema desde la línea de comando
4.3.5 : Terminar procesos apropiadamente

ACTIVIDADES PROPUESTAS

• Los alumnos identifican los enlaces simbólicos.


• Los alumnos identifican el uso y utilidad de los enlaces simbólicos.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 102

4.1. CREAR Y CAMBIAR ENLACES DUROS Y SIMBÓLICOS

4.1.1. Crear enlaces duros y/o simbólicos

Un enlace es un medio de proporcionar varias identidades a un comando, archivo o directorio


(similar a un acceso directo de Windows) facilitándoles la accesibilidad, por ejemplo, permitir a
los programas, buscar los mismos archivos en distintas ubicaciones o, referenciar a un ejecutable
que se encuentra “escondido” tras una larga ruta, desde un enlace creado en el directorio en el
que trabajamos.

Hay dos tipos de enlaces en Linux: Enlace de referencia (hard links) o enlaces simbólicos (soft
links).

Los enlaces de referencia normalmente no se pueden crear a directorios, solo root puede
intentarlo si pasa como argumento las opciones -d, -F o –directory. En la práctica es improbable
que esto funcione, ya que la mayoría de los filesystem no lo soportan, en cambio, esto no supone
ningún problema para los enlaces simbólicos.

Los enlaces de referencias creados por defecto con ln (sin opciones) produce dos entradas de
directorio que apuntan al mismo archivo (más concretamente, al mismo nodo de índice).
Ninguno de los dos nombres es más auténtico que otro por lo que para borrar el archivo,
deberemos de eliminar ambos enlaces de referencia. Otra restricción de los enlaces de
referencia es que deben referenciar a archivos dentro del mismo sistema de archivos a bajo
nivel, por ejemplo, no podríamos crear un enlace duro o de referencia (hard link) desde / (raíz)
hacia /home, suponiendo que /home esté en una partición independiente.

Por el contrario, los enlaces simbólicos son un tipo especial de archivo (archivos que contienen
nombres de archivos) cuyo contenido apunta al archivo enlazado. Linux accede al archivo
enlazado (archivo original) cada vez que intenta acceder al enlace simbólico, por lo que acceder
a un enlace simbólico es como acceder al archivo original. Esto nos permite crear punteros entre
sistemas de archivos de bajo nivel. En la teoría acceder al archivo original desde el enlace
simbólico consume una cantidad mínima de tiempo, por lo que es más lento acceder a los
enlaces simbólicos que a los enlaces de referencia, aunque no lo suficiente como para
percatarnos de ello.

En la práctica, los enlaces simbólicos son más comunes que los de referencia; sus desventajas
son menores y la capacidad de enlazar entre sistemas de archivos independientes y directorios
puede ser importante. Con ellos podemos llamar a un mismo fichero usando varios nombres,
los identificará el sistema operativo por su número de inodo generado de forma semi aleatoria
(Nebul4ck, 2015).

Un inodo es un enlace identificador único para el sistema de ficheros.

En un directorio, hay múltiples números de inodo correspondientes cada uno de ellos con un
nombre de fichero. La estructura de Linux de ficheros se basa en que cada nombre de fichero
en un directorio (comúnmente, llamado en Windows carpeta) es un enlace a un inodo
concreto.

Nota: Cada enlace simbólico consume un único inodo de índice.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 103

Identificar enlaces duros y simbólicos

Los Hard Links (Enlaces duros)

Estos enlaces comparten el inodo del fichero original. De hecho, un hard link es indistinguible del
original y por eso, los cambios en el link afectan al fichero original, excepto en el borrado. Borrar
el link no elimina al original ni a la inversa. Este tipo de enlace conserva los permisos del original
y marcas de tiempo. Por contra, no se pueden usar para hacer enlaces a directorios ni pueden
extenderse a otros sistemas de ficheros.

Su sintaxis es la siguiente:

# ln –t </ruta/completa/fichero> <nombre_enlace>

Los Symlinks (Enlaces simbólicos)

Estos enlaces sí que pueden extenderse a otros sistemas de ficheros. También pueden hacer
referencia a directorios, de hecho, pueden referenciar hasta ficheros inexistentes. La lectura y
escritura, así como la copia del enlace, afectan al fichero origen; mientras que, el borrado afecta
al propio enlace. Borrar el fichero origen tampoco elimina el enlace automáticamente.

Su sintaxis es como sigue:

# ln -s </ruta/completa/fichero> <nombre_enlace>

Copiar vs. enlazar archivos

Según Shields (2010a) lo que se intenta lograr, en algunas ocasiones, se usarán vínculos y en
otras, será mejor crear una copia de un archivo. La diferencia principal es que los vínculos proveen
múltiples nombres para un solo archivo, mientras que una copia crea dos grupos de datos
idénticos bajo dos nombres diferentes. Usted seguramente usará copias para crear una copia de
seguridad y también para probar un nuevo programa sin poner en riesgo sus datos operativos.
Usted usa vínculos cuando necesita un alias para un archivo (o directorio), posiblemente para
proveer una ruta de acceso más conveniente o corta. In la siguiente sección, veremos otros usos
para los vínculos.

Como usted ha visto, cuando se actualiza un archivo, todos los vínculos hacia él ven la
actualización, lo cual no sucede cuando usted copia un archivo. También ha observado que los
vínculos simbólicos pueden romperse pero que con operaciones de escritura posteriores se
pueden crear un nuevo archivo. Use los vínculos cuidadosamente.

4.1.2. Usar enlaces para soportar tareas de administración de sistema

Sirva de ejemplo la siguiente sentencia

# ln -s $HOME/www /opt/joomla1.5.1/joomla-1.5.2-0/apache2/htdocs/

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 104

Donde:

/opt/joomla1.5.1/joomla-1.5.2-0/apache2/htdocs/ es la ruta al directorio en el que se


encuentran los archivos del servidor web.
$HOME es el directorio de usuario
www es un directorio creado en nuestra carpeta de usuario

Con ese enlace simbólico, se consigue tener todos los proyectos web que se irán creando en
nuestro equipo dentro de la carpeta de usuario.

La idea es que si algún día, se cambia de distribución Linux, no se pierda ese trabajo por un
despiste: toda la documentación y proyectos están en el directorio de usuario ($HOME) así no se
tendrá que recordar que dentro del sistema de ficheros de Linux hay cosas que podrían hacer
falta.

Si se quiere crear un enlace duro en vez de uno simbólico, la sintaxis es la misma cambiando única
y exclusivamente, el parámetro por -t.

# ln -t $HOME/www /opt/joomla1.5.1/joomla-1.5.2-0/apache2/htdocs/

Identificar enlaces simbólicos

Desde el administrador de archivos pueden identificarse fácilmente por contar con una flecha en
la parte inferior del ícono de carpeta.

Figura 126: Enlace simbólico


Fuente.- Tomado de andalinux.wordpress.com

Desde la terminal (lanzando un ls -l para que muestre información adicional), se ve que en el bit
de tipo en lugar de aparecer una d (de Directorio), aparece una l (de Link).

Figura 126: Enlace simbólico

Figura 127: Enlace simbólico


Fuente.- Tomado de andalinux.wordpress.com

Para el Informático de Guardia (2008), ya que estamos con la terminal y recordando el aviso que
hicimos sobre los enlaces duros (al borrar el último se borra el DIRECTORIO_ORIGINAL)
comentar que para saber cuántos enlaces DUROS apuntan al directorio original basta con mirar
el número que hay justo a la derecha de los permisos (en el ejemplo es un 1 porque sólo hay un
enlace duro al DIRECTORIO_ORIGINAL).

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 105

Figura 128: Enlace simbólico


Fuente.- Tomado de andalinux.wordpress.com

Eliminar enlaces

Tan sencillo como ejecutar el comando unlink.

# unlink RUTA_AL_ENLACE_NO_DESEADO

Donde:

RUTA_AL_ENLACE_NO_DESEADO es la ruta a alguno de los enlaces que hemos creado y han


dejado de sernos útiles.

4.1.3. Comprender la ubicación correcta de archivos en el FHS

Según Barrios (2014), el estándar de jerarquía del sistema de archivos (o FHS, del inglés
Filesystem Hierarchy Standard) es una norma que define los principales directorios y sus
contenidos en GNU/Linux y otros sistemas operativos similares a Unix. En agosto de 1993,
inició el proceso para desarrollar un estándar de sistema de archivos jerárquico, como un
esfuerzo para reorganizar las estructuras de archivos y directorios de GNU/Linux.

A principios de 1996, con la ayuda de miembros de la comunidad de desarrolladores de BSD,


se fijó como objetivo el desarrollar una versión de FSSTND más detallada y dirigida no solo
hacia Linux sino también hacia otros sistemas operativos similares a Unix. Como uno de los
resultados el estándar cambio de nombre a FHS o Filesystem Hierarchy Standard.

El FHS es mantenido por Free Standards Group, una organización sin fines de lucro
constituida por compañías que manufacturan sustento físico (Hardware) y equipamiento
lógico (Software) como Hewlett Packard, Dell, IBM y Red Hat. La mayoría de las distribuciones
de Linux, inclusive las que forman parte de Free Software Standards, sin aplicar de forma
estricta el estándar.

Figura 129: Descripción de directorios


Fuente.- Tomado de es.slideshare.net

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 106

4.1.4. Conocer la ubicación y propósito de archivos y directorios importantes


definidos en el FHS

Todos los archivos y directorios aparecen debajo del directorio raíz ≪/≫, aun si están
almacenados en dispositivos físicamente dife

Figura 130: Descripción del contenido de cada directorio


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 107

4.2. ARRANCAR EL SISTEMA

4.2.1. Proveer comandos comunes al cargador de arranque y opciones al Kernel, al


arranque del sistema

Según Rm-rf.es Administración de sistemas (2011) existe la posibilidad de que llegue un día, en el
que arranquemos uno de nuestros sistemas GNU/Linux y en el momento en el que deberíamos
visualizar el menú de Grub con los sistemas y Kernel disponibles para arrancar nos encontremos
con esto:

grub>

Figura 131: Cargador de arranque GRUB


Fuente. - Elaboración Propia

Antes de entrar en modo pánico debemos tener unas nociones básicas que nos permiten arrancar
un sistema manualmente desde Grub cuando su fichero de configuración ha sido borrado o está
vacío/incorrecto. Básicamente se trata de construir y ejecutar manualmente las líneas que
componen cada entrada en el fichero grub.conf o menu.lst. El siguiente ejemplo práctico ha sido
realizado sobre un sistema CentOS con el fichero /etc/grub.conf y /boot/grub/grub.conf
eliminado.

Para arrancar el sistema de forma correcta tenemos que establecer una secuencia de tres
comandos en la que especifiquemos lo siguiente:

A) PARTICIÓN QUE CONTIENE EL KERNEL

Una vez que estemos en la shell de Grub, si ejecutamos el comando root a secas nos dirá la
partición en la cual se encuentra el/los kernel (podemos usar la tecla [TAB] para ver los comandos
disponibles:

grub> root
(hd0,0): Filesystem type is ext2fs, partition type 0x83

Ya sabemos que la partición que contiene el kernel, imágenes initrd y demás es la (hd0,0),
podemos navegar por ella usando el comando find y haciendo uso de la tabulación para el
autocompletado de nombres, lo verificamos:

grub> find (hd0,0)/ <- presionamos [TAB]


Possible files are lost+found grub efi initramfs-2.6... vmlinux-2.6....

Una vez verificado ejecutamos el siguiente comando (normalmente no es necesario ya que como
vemos anteriormente lo detecta automáticamente):

grub> root (hd0,0)

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 108

B) ESPECIFICAR EL KERNEL Y RUTA AL FILESYSTEM

grub> kernel /vmlinuz-2.6.32-71.el6.i686 ro root=/dev/sda1

Ya sabemos que el kernel está en /vml* así que lo especificamos como se observa en el cuadro
superior, usemos el autocompletado con [TAB] para no tener que escribir todo el nombre.
Especificamos que en primera instancia se tiene que arrancar en modo lectura (ro) y finalmente
la ruta a la partición root de nuestro sistema (dev/sda1). La partición root es la que contiene
/sbin/init, también se puede especificar mediante el UUID. Si no sabemos cuál es podemos
localizarla con el siguiente comando:

grub> find /sbin/init


(hd0,1)

(hd0,1)=/dev/sda2

Otra forma sería consultando el fichero fstab:

grub> cat (hd0,1)/etc/fstab

C) UBICACIÓN DEL INITIAL RAM DISK

El RAM disk se encuentra en la misma ruta/partición que el kernel:

grub> initrd /initramfs-2.6.32-71.el6.i686.img

SECUENCIA COMPLETA PARA ARRANCAR EL SISTEMA

Haciendo un resumen y añadiendo el último comando para arrancar el sistema (boot)


quedaría así:

grub> root (hd0,0)

grub> kernel /vmlinuz-2.6.32-71.el6.i686 ro root=/dev/sda1 grub> initrd /initramfs-

2.6.32-71.el6.i686.img grub> boot

Si todo va bien, debería arrancar sin problemas el sistema. Una vez dentro podremos restaurar
el Grub con tranquilidad.

COMANDOS COMUNES DE GRUB

Según Massachusetts Institute of Technology (s.f.), GRUB permite varios comandos en su línea
de comandos. Algunos de los comandos aceptan opciones después del nombre y estas opciones

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 109

deben ir separadas del comando por comas y de otras opciones de esa línea por carácteres de
espacio.

En la lista siguiente se indican algunos comandos útiles:


boot — Arranca el sistema operativo o gestor de encadenamiento que se ha cargado.

chainloader </ruta/a/archivo> — Carga el archivo especificado como gestor de encadenamiento.


Si el archivo está ubicado en el primer sector de la partición especificada, puede utilizar la
notación de lista de bloques, +1, en vez del nombre del archivo.

Lo siguiente es un ejemplo del comando chainloader:

chainloader +1

displaymem — Muestra el uso actual de memoria, en función de la información de la BIOS. Esto


es útil si no está seguro de la cantidad de RAM que tiene un sistema y todavía tiene que
arrancarlo.

initrd </ruta/a/initrd> — Le permite especificar un disco RAM inicial para utilizarlo al arrancar. Es
necesario un initrd cuando el kernel necesita ciertos módulos para poder arrancar
adecuadamente, tales como cuando la partición se formatea con el sistema de archivos ext3.

A continuación se muestra un ejemplo del comando initrd:

initrd /initrd-2.6.8-1.523.img

install <etapa-1> <disco-instalación> <etapa-2> p <archivo-configuración> — Instala GRUB en la


MBR del sistema.

o <etapa-1> — Significa un dispositivo, partición y archivo donde el primer gestor de arranque


puede ser encontrado, tal como (hd0,0)/grub/stage1.

o <disco-instalación> — Especifica el disco donde la etapa 1 del gestor de arranque debería ser
instalado, tal como (hd0).

o <etapa-2> — Pasa la ubicación de la etapa 2 del gestor de arranque a la etapa 1, tal como
(hd0,0)/grub/stage2.

o p <archivo-configuración> — Esta opción le indica al comando install que busque por el archivo
de configuración de menú especificado por <config-file>, tal como (hd0,0)/grub/grub.conf.

NOTA: El comando install sobreescribe cualquier información que ya se encontraba en el MBR.

kernel </ruta/a/kernel><opcion-1> <opción-N> ... — Especifica el archivo del kernel a cargar


cuando se cargue el sistema operativo. Reemplace </ruta/a/kernel> con una ruta absoluta desde
la partición especificada por el comando root. Reemplace <opcion-1> con las opciones para el
kernel de Linux, tales como root=/dev/hda5 para especificar el dispositivo en el que se ubica la
partición
root para el sistema. Se pueden pasar múltiples opciones al kernel en una lista separada por
comas.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 110

Lo siguiente es un ejemplo para el comando kernel:

1. kernel /vmlinuz-2.4.21 root=/dev/hda5

La opción en el ejemplo anterior especifica que el sistema de archivos raíz para Linux está ubicado
en la partición hda5.

root (<tipo-dispositivo><numero-dispositivo>,<partición>) — Configura la partición raíz para


GRUB, tal como (hd0,0) y monta la partición.

A continuación se presenta un ejemplo para el comando root:

root (hd0,0)

rootnoverify (<tipo-dispositivo><numero-dispositivo>,<partición>) — Configura la partición


raíz para GRUB, tal como el comando root pero no monta la partición.

También están disponibles otros comandos; escriba help --all para una lista completa de
comandos. Para una descripción de todos los comandos GRUB, consulte la documentación
disponible en línea en http://www.gnu.org/software/grub/manual.

4.2.2. Demostrar conocimiento de la secuencia de arranque desde el BIOS hasta


completar el arranque

La etapa del cargador de arranque no es totalmente necesaria. Determinadas BIOS pueden cargar
y pasar el control a Linux sin hacer uso del cargador. Cada proceso de arranque será diferente
dependiendo de la arquitectura del procesador y el BIOS.

FASES DEL ARRANQUE EN LINUX

FASE 1: Hardware
FASE 2: BootLoader
FASE 3: Kernel
FASE 4: Init

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 111

Figura 132: Fases del arranque en Linux


Fuente. - Elaboración Propia

FASE 1: HARDWARE

En esta fase el sistema se inicia pasando el control a la BIOS

BIOS: Basic Input/Output System

• La BIOS es un pequeño programa que se encuentra grabado en una memoria en la placa


base.
• Esta memoria ha evolucionado desde ROM->PROM->EPROM- >Memoria Flash.
• Alimentado continuamente (batería)
• Guarda la configuración de nuestro sistema.
• Realiza POST

FASE 2: BOOTLOADER

El objetivo del Bootloader es cargar parte del núcleo (kernel) del sistema operativo en memoria
y ejecutarlo. Después de cargarse, el Bootloader toma el control y se encarga de cargar el resto
del sistema operativo.

Ubicación de un Bootloader
• En un disco duro.- Puede ubicarse en el primer sector de cada una de las particiones del
disco. A parte del primer sector del disco, existe un sector de arranque global (Master Boot
Record o MBR), este es el lugar más común para instalarlo.
• En un CD-ROM.- Siguiendo la especificación “El Torito”, es parte del proyecto SYSLINUX.
• Bootloader cargado desde la red.- Posible con Linux BIOS y normalmente via broadcasting
(RARP).

Proyecto SYSLINUX

Este proyecto cubre booloaders ligeros para:

• Floppy disks: SYSLINUX


• Arranque en red: PXELINUX
• Arranque desde CD-ROM (“El Torito”): ISOLINUX
• Arranque de sistemas Legacy (como dos) vía PXE.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 112

Bootloaders en Linux

LILO: The LInux LOader


GRUB: GRand Unifying Bootloader

Ambos son capaces de cargar tanto sistemas Linux como otros sistemas operativos y suelen
ubicarse en el sector de arranque de disquetes o en el MBR del disco duro.

LILO

• Bastante rudimentario.
• Bootloader de una sola etapa.
• No entiende de sistemas operativos, ni de sistemas de ficheros
• Lee datos del disco utilizando llamadas nativas de la BIOS, con punteros directos a los
ficheros que necesita.
• Los almacena a través de un fichero mapa que se almacena en el sector de arranque.

Figura 133: Bootloader LILO


Fuente. - Elaboración Propia

Fases de LILO

• El firmware carga el sector de arranque de LILO y lo ejecuta


• LILO carga su fichero de mapa por medio de llamadas de la BIOS, este muestra el prompt
de opciones a cargar
• El usuario selecciona el kernel que arrancar.
• LILO carga el kernel seleccionado por medio de llamadas de la BIOS y utilizando los
parámetros de ubicación en el fichero de mapa
• (Opcional) LILO carga un ramdisk
• LILO ejecuta el kernel indicando donde está el root fs y si es necesario el ramdisk

Ficheros de LILO

Ejemplo de /etc/lilo.conf

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 113

boot=/dev/hda2
root=/dev/hda2
install=/boot/boot. b
map=/boot/map
vga=normal
delay=20
image=/vmlinuz
label=Linux
read-only
other=/dev/hda1
table=/dev/hda
label=win

Para cargar la configuración hay que ejecutar el comando lilo.

# lilo /etc/lilo.conf

GRUB

• Más avanzado (y más moderno) que LILO.


• Trabaja en dos o tres etapas (Stages).
• Tiene capacidad para arrancar un kernel vía red.
• En cada etapa va cargando más elementos para arrancar.
• Entiende de sistemas de ficheros.
• Permite especificar parámetros de forma dinámica en el arranque, no utiliza valores
estáticos.

Figura 134: Bootloader GRUB


Fuente. - Elaboración Propia

Fases de GRUB

• Etapa 1: El firmware carga el sector de arranque de GRUB en memoria. (En él están


los números de bloque del disco donde se encuentra la siguiente etapa)

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 114

• Etapa 1.5: (Se denomina así porque esta etapa podría ser opcional). Su objetivo es
cargar el código que reconoce sistemas de ficheros y a partir de ahí, cargar la etapa
2 como un fichero.
• Etapa 2: GRUB muestra el menú con las opciones de boot definido y un prompt
donde se especifican ramdisks, kernels, etc. a cargar.
• GRUB ejecuta los comandos introducidos, bien las definidas por nosotros en el
fichero de configuración (grub.conf, menu.lst) y comienza la carga del kernel.

NOTA: Aquí reside la potencia de GRUB, es capaz de cargar ficheros realizar tareas dinámicas
en la fase de arranque del sistema

Ficheros de GRUB

Depende de la distribución, pero suele ser similar a esto.


:w

Figura 135: Listado de archivos de /boot/grub


Fuente. - Elaboración Propia

Un ejemplo de configuración de GRUB

El fichero menu.lst (o grub.conf)


GRUB es interactivo, para configurar hay que ejecutar grub y desde su prompt utilizar los
comandos.

Figura 136: Visualización del archivo menu.lst


Fuente. - Elaboración Propia
FASE 3: KERNEL

• Arquitectura monolítica.
• Es un largo y complejo programa compuesto de un gran número de subsistemas lógicos.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 115

• Gestionado directamente por Linus Torvalds.


• Con capacidad de carga de Módulos.
• Si bien por definición está formado por una capa lógica, internamente funciona con más.

Proceso de arranque

En esta fase comienza la ejecución del kernel, descomprimiéndose a sí mismo (esto es código
en el principio de la propia imagen del kernel).
Comienza la inicialización del kernel y el chequeo y puesta en marcha de algunos de los
dispositivos para los que se ha dado soporte.

• Detecta la CPU y su velocidad.


• Inicializa el Display para mostrar información por pantalla.
• Comprueba el bus PCI e identifica y crea una tabla con los periféricos conectados (muestra
por pantalla los mismos y su estado).
• Inicializa el sistema de gestión de memoria virtual, incluyendo el swapper.
• Inicializa todos los periféricos compilados dentro del kernel (no como módulos),
normalmente sólo se configuran así los periféricos necesarios para esta fase del arranque,
el resto se configuran como módulos.
• Monta el sistema de ficheros root (“/”).
• A partir de aquí llama al proceso init que se ejecuta con uid 0 y será el padre de todos los
demás procesos.

Configuración del Kernel

Debemos instalar las fuentes del kernel. Bien con el tar.gz, paquete deb o rpm.
Ir al Directorio /usr/src/Linux
Configurar los elementos del kernel

• make config
• Make menuconfig
• make xconfig

• Realizar las modificaciones de elementos a soportar, módulos a cargar, etc.


• Recopilar kernel y módulos
• make clean dep bzImage
• make modules

• Instalar el kernel y los módulos


• make install y/ó
• make modules_install

Kernel Monolítico vs MicroKernel

La mayor parte de los kernels Unix son monolíticos. Cada capa del kernel está integrada dentro
del propio programa del kernel y se ejecuta en Modo Kernel con independencia del proceso que
la utilice. Las arquitecturas Microkernel (como Mach de GNU o Minix) solicitan un pequeño
conjunto de funciones al kernel y sus componentes para implementar la mayor parte de las
funciones.
Los sistemas operativos Microkernel obligan a mantener interfaces muy bien definidos y estables
entre sus componentes individuales, así como, el poder realizar optimizaciones sofisticadas, lo
cual suele redundar en rendimientos más bajos que los kernels monolíticos.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 116

En 1992 se sostuvo un debate entre Andrew S. Tanenbaum y Linus Torvalds, en relación al kernel
de Linux y la arquitectura de núcleos en general, en el cual Tanenbaum argumentaba que los
micronúcleos son superiores a los núcleos monolíticos y por lo tanto Linux era obsoleto. Linus
Torvalds reconoció la superioridad de los micronúcleos y el incidente no paso a mayores
quedando en buenos términos.

Ramdisks

Son
. discos virtuales creados utilizando la memoria RAM del sistema.
Como consecuencia son discos muy rápidos y de tamaño normalmente pequeño.
Son volátiles, es decir, sus datos no persisten tras un apagado o reinicio.
Sirven para varias utilidades:

• Como cachés en Servidores Web


• Como cualquier disco con datos de alta velocidad
• En nuestro caso concreto se utilizan para descomprimir el kernel de forma rápida y cargar
los módulos en un sistema montado.

FASE 4: INIT

• En estos momentos el kernel está cargado, tenemos gestión de memoria, una parte del
hardware está inicializado y tenemos un sistema de ficheros root.
• A partir de ahora el resto de las operaciones se van a realizar directa o indirectamente por
el proceso init.
• El proceso init lee del fichero /etc/inittab la configuración a utilizar.
• Ejecuta el comando /etc/rc.sysinit el cual realiza una inicialización básica del sistema
• En función del runlevel, ejecuta los comandos establecidos.

Ejemplo de inittab

Figura 137: Visualización del archivo inittab


Fuente. - Elaboración Propia
Runlevels (System V)

• Halt
• Single-user modo texto
• (Definible por el usuario)

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 117

• Multi-user completo modo texto


• (Definible por el usuario)
• Multi-user completo modo X-Windows
• Reboot (rearranque)

rc.sysinit

Este fichero varía, según la distribución que utilicemos, parte puede estar incluida en los
scripts rc (runlevel scripts) e incluso puede presentarse con otros nombres, pero en general
realiza las tareas siguientes:

• Configura el reloj del sistema en base al reloj hardware


• Asigna el mapeo de teclado para la consola
• Monta el sistema de ficheros /proc
• Arranca el espacio de swap
• Monta y chequea los sistemas de ficheros locales (no de red)
• Inicializa el árbol de dependencias de módulos (depmod). (Esto permitirá la posterior
utilización de modprobe para cargar los módulos)
• Inicializa y configura las interfaces de red.
• Carga los drivers para USB, PCMCIA, sonido.

Runlevel scripts (scripts rc)

El script rc ejecuta los scripts de arranque que se encuentran en el directorio correspondiente al


runlevel en el que se ha iniciado el sistema.
Normalmente estos se encuentran en el directorio
/etc/rc.d/rcN.d/ (siendo N el runlevel)
Es decir para el runlevel 3: /etc/rc.d/rc3.d
En este directorio se encuentran una serie de scripts que empiezan por “S” o por
“K” y dos dígitos
Los dígitos denotan el orden de ejecución de los scripts:
Los que comienzan por S se ejecutan en orden ascendente (al arrancar o comenzar un nuevo
runlevel)
Los que comienzan por K se ejecutan en orden descendente al salir (normalmente al hacer
shutdown o al finalizar un runlevel)
En realidad es una convención, porque rc llama a estos scripts con el parámetro start o stop en
función de si es arranque o parada (de hecho los scripts K* son enlaces simbólicos a los S*)
Hay un script particular que es el S99local donde se deben hacer configuraciones locales del
equipo (si es necesario), se trata de evitar tocar los scripts previos por razones de facilidad de
mantenimiento.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 118

Ejemplo de /etc/rc.d/rcN.d

Figura 138: Listado del directorio rc3.d


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 119

4.3. CAMBIAR LOS NIVELES DE EJECUCIÓN, APAGAR O REINICIAR EL


SISTEMA

4.3.1. Establecer el nivel de ejecución predeterminado

Niveles de ejecución de SysV Init

El sistema de niveles de ejecución SysV init provee de un proceso estándar para controlar
cuáles programas init lanza o detiene cuando se inicializa un nivel de ejecución. SysV init fue
escogido porque es más fácil de usar y más flexible que el proceso tradicional init estilo BSD.

Los ficheros de configuración para SysV init están en el directorio /etc/. Dentro de este
directorio, se encuentran los scripts rc, rc.local, rc.sysinit, y, opcionalmente, los scriptsrc.serial,
así como los siguientes directorios:

Figura 139: Listado del directorio etc


Fuente. - Elaboración Propia

El directorio etc./ contiene los scripts usados por el comando /sbin/init cuando se controlan los
servicios. Cada uno de los directorios numerados representa los seis niveles de ejecución.

Niveles de ejecución

La idea detrás de los niveles de ejecución de SysV init, gira alrededor del hecho que sistemas
diferentes se pueden usar de formas diferentes; por ejemplo, un servidor.

Linux se basa en modos de ejecución para determinar que funciones hay disponibles,
enumerados del 0 al 6. Cada uno de ellos tiene asignado un conjunto de servicios. Los modos de
ejecución 0,1 y 6 están reservados para fines especiales; los modos de ejecución restantes están
disponible para los objetivos que desee o los que decidan los proveedores de las distintas
distribuciones Linux.

Nota: Puede haber modos de ejecuciones fuera del rango 0-6, pero es algo inusual.

Run level 0 Comprende las unidades runlevel0.target, poweroff.target y su


función es apagar y encender el sistema.
Run level 1 Comprende las unidades runlevel1.target, rescue.target y su
función es establecer un Shell de rescate
Run level 2 Comprende las unidades runlevel2.target, multi-user.target y su
función es establecer un entorno no gráfico de multiusuario.
Run level 3 Comprende las unidades runlevel3.target, multi-user.target y su
función es establecer un entorno no gráfico de multiusuario.
Run level 4 Comprende las unidades runlevel4.target, multi-user.target y su
función es establecer un entorno no gráfico de multiusuario.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 120

Run level 5 Comprende las unidades runlevel5.target, graphical.target y su


función es establecer un entorno grafico de multiusuario.
Run level 6 Comprende las unidades runlevel6.target, reboot.target y su
función es apagar y reiniciar el sistema.
Emergency Comprende la unidad emergency.target y su función es recuperar
el sistema.

El archivo /etc/inittab define y describe los distintos modos de ejecución.

Las entradas de /etc/inittab siguen un formato sencillo:

<id>:<modosdeejecución>:<acción>:<proceso>

Donde:

• id es una secuencia de uno a cuatro caracteres que identifica su función.

• Modos de ejecución es una lista de los modos de ejecución para los que se aplicará la
entrada. Puede definirse un solo modo (por ejemplo 3) o varios de ellos (2,3,5).

• acción indica a init cómo tratar el proceso. Por ejemplo: wait inicia el proceso una
vez cuando pase a un modo de ejecución y espera a que este finalice, respawn reinicia el
proceso cada vez que finalice, powerwait indica a init que apague el sistema antes una
falla en el sistema eléctrico (se precisa un UPS), ctraltdel reinicia el sistema cuando el
usuario presione esas teclas (se pueden cambiar las funciones o anularlas), sysinit
comando ejecutado cuando inicia el sistema (por ejemplo, limpiar /tmp), etc., se podrán
conocer más acciones, a través de man inittab. Para la acción initdefault se ignora el
campo proceso.

• proceso es el proceso que ejecutar para una determinada entrada, incluyendo las
opciones y argumentos que sean necesarios.

El nivel de ejecución por defecto para el sistema está listado en /etc/inittab. Para saber el
nivel de ejecución por defecto de un sistema, busque por la línea similar a la que se muestra
abajo en la parte inferior de /etc/inittab:

id:5:initdefault:

Figura 140: Visualización del archivo inittab


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 121

El nivel de ejecución predeterminado en este ejemplo es cinco, como indica el número después
de los dos puntos. Para cambiarlo, modifique /etc/inittab como usuario root y cambie del nivel
5 (modo multiusuario con entorno gráfico) al nivel 3 (modo multiusuario sin entorno gráfico, sólo
terminal).

Figura 141: Visualización del archivo inittab


Fuente. - Elaboración Propia

4.3.2. Cambiar entre niveles de ejecución

Systemd ha sido desarrollado como un sistema init moderno para ambientes Linux el cual es un
administrador de sistemas y servicios compatibles con el tradicional sistema SysV init y los scripts
de init de LSB. En los sistemas tipo Unix como Linux, el estado operativo actual del sistema
operativo se conoce como runlevel o niveles de ejecución el cual tiene la tarea de definir qué
servicios del sistema se están ejecutando.

En sistemas populares del init como el init de SysV, los niveles de ejecución se identifican
mediante números, pero en systemd los niveles de ejecución se denominan objetivos o targets.
Los targets en Systemd están representados por targets unit (unidades de objetivo) cuyo único
propósito es agrupar otras unidades systemd a través de una cadena de dependencias., estas
unidades objetivo usan el sufijo .target.

Existen algunos tipos de runlevels en Systemd que tienen tareas específicas, estos son:

Run level 0 Comprende las unidades runlevel0.target, poweroff.target y su


función es apagar y encender el sistema.
Run level 1 Comprende las unidades runlevel1.target, rescue.target y su
función es establecer un Shell de rescate
Run level 2 Comprende las unidades runlevel2.target, multi-user.target y
su función es establecer un entorno no gráfico de multiusuario.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 122

Run level 3 Comprende las unidades runlevel3.target, multi-user.target y


su función es establecer un entorno no gráfico de multiusuario.
Run level 4 Comprende las unidades runlevel4.target, multi-user.target y
su función es establecer un entorno no gráfico de multiusuario.
Run level 5 Comprende las unidades runlevel5.target, graphical.target y su
función es establecer un entorno grafico de multiusuario.
Run level 6 Comprende las unidades runlevel6.target, reboot.target y su
función es apagar y reiniciar el sistema.
Emergency Comprende la unidad emergency.target y su función es
recuperar el sistema.

VER EL TARGET Y RUNLEVEL ACTUAL EN SYSTEMD

Cuando se inicia sesión en el sistema, de forma predeterminada se activa el target default.target


cuya función es activar servicios y otras unidades ejecutándolas, a través de dependencias.

systemctl get-default

Figura 142: Visualización el nivel de ejecución


Fuente. - Elaboración Propia

Si se desea establecer el target, por defecto, se ejecutará la siguiente línea:

systemctl set-default multi-user. target

El resultado será el siguiente:

Figura 143: Establecer target por defecto con systemctl


Fuente. - Elaboración Propia

4.3.3. Inicializar el sistema SysV, Upstart y Systemd

SysV

SysVinit o también conocido como SysV, es uno de los primeras sistemas de inicio para sistemas
Unix/Linux; el primer proceso que se inicia en el kernel es init, y se mantiene activo mientras la
máquina siga en funcionamiento, es el proceso principal.

Upstart

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 123

El primer programa que se ejecuta en el sistema tras cargar el núcleo en memoria. Lo primero
que hace es leer el archivo /etc/inittab, de donde obtiene algunos parámetros básicos, y luego
va ejecutando por orden los scripts del directorio /etc/rcN.d de forma secuencial. Dependiendo
de un parámetro numérico llamado runlevel, posteriormente seguirá cargando todos los scripts
del directorio /etc/rcN.d correspondiente, normalmente el 2 o el 3.

Identificar los servicios de un modo de ejecución.

Existen varias maneras de identificar que programas se ejecutan cuando se pasa a un modo de
ejecución concreto con SysV, como por ejemplo a través del archivo /etc/inittab o bien con la
herramienta service –status-all. Con la herramienta update-rc.d, se puede activar y desactivar
servicios para runlevels específicos.

Se puede conocer la lista de todos los servicios que se están ejecutando, actualmente, en Ubuntu,
de la siguiente manera:

service –status -all

Figura 144: Lista todos los servicios que se están ejecutando


Fuente. - Elaboración Propia

Se puede hacer este trabajo de forma manual que sería creando nosotros mismos el enlace
simbólico del script principal en los directorios de los modos de ejecución en los que queremos
que se inicie o detenga un programa concreto.

Importante: iniciar, detener o comprobar el estado de los servicios mediante la ejecución del
comando ‘service‘:

# service servicio status|start|stop

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 124

Figura 145: Muestra estado de un servicio comando service


Fuente. - Elaboración Propia

O con la ejecución del script principal

# /etc/init.d/samba status|start|stop

Figura 146: Muestra estado de un servicio comando /etc/init.d


Fuente. - Elaboración Propia

Existe la herramienta ntsysv la cual permitirá marcar aquellos servicios que se quiere ejecutar
durante el arranque. Es una herramienta ‘gráfica’ de línea de comandos, su uso es sencillo y puede
resultar útil incluso para ver qué servicios, se tienen marcados en el arranque. También puede ser
usada para especificar un runlevel concreto.

Upstart

Upstart utiliza los ficheros de configuración para controlar los servicios, que se encuentran en el
directorio /etc/init. Estos archivos están compuestos de secciones de texto plano organizadas en
stanzas (estrofas), y cada stanza describe un servicio y cómo funciona.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 125

Upstart se basa en eventos. Cada script de Upstart depende de una serie de eventos y a su vez
genera más eventos. El primero que se genera es el startup y a partir de ahí, van lanzándose
scripts, que a su vez generan más eventos que permiten que se lancen más scripts, hasta que el
sistema completo se encuentra cargado.
Una de las principales diferencias entre System V y Upstart es que el primero trabaja de forma
síncrona mientras que Upstart lo hace de forma asíncrona, es decir, no arranca/para un servicio
después de otro, sino que puede hacerlo en paralelo. Esto implica un aumento considerable de la
velocidad de arranque y evita que un servicio tenga esperar a que otro termine para poder
arrancar. Otra característica interesante de Upstart es que tiene la capacidad de supervisar los
servicios mientras el sistema está funcionando. Upstart también es compatible con los scripts de
arranque del sistema System V por lo cual la migración de un sistema a otro es más sencilla.

Para comprobar si un servicio se está ejecutando o no, ejecutar el siguiente comando:

service service-name status

Figura 147: Muestra estado de un servicio comando service


Fuente. - Elaboración Propia

Los scripts de arranque basados en System V seguirán emplazados en /etc/init.d, mientras que
los basados en Upstart debemos añadirlos en /etc/init/*.conf. Podemos ver un ejemplo de la
sintaxis utilizada revisando cualquiera de los que ahí se encuentran. De momento se puede ver
que únicamente hay scripts propios de sistema, los servicios siguen teniendo sus scripts de
arranque en init.d. Vamos a crear un script sencillo para que veáis su funcionamiento (Rm-rf.es
Administración de sistemas, 2011a). Básicamente queremos que un script propio de prueba
esté siempre corriendo, que arranque en el runlevel 3 y que si cae se levante de forma
automática:

#vim /etc/init/test.conf

Systemd

Para Nebul4ck (2015a), systemd ha sido creado para ofrecer un inicio más rápido y flexible que
SysV, permitiendo el arranque paralelo de servicios y su inicio basado en la detección de
conexión de nueva unidad externa.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 126

Nota: Hasta ahora el PID1 era para el programa init, cosa que ha cambiado en systemd a favor
de /usr/lib/systemd/systemd y además systemd al igual que Upstart deja de utilizar el archivo
/etc/inittab

Principales caracteristicas Systemd:

• Systemd ofrece una paralelización muy potente.


• Hace uso de la activación de socket y D-Bus para iniciar los servicios.
• Soporta el inicio de los demonios bajo demanda.
• Controla los procesos que utilizan el cgroups de Linux.
• Permite crear instantáneas y posterior restauración del estado del sistema.
• Maneja los puntos de montaje y desmontaje automáticamente.
• Implanta una lógica de control del servicio basada en dependencias transaccionales.

Vamos a desglosar un poco esta definición:

• Capacidades de paralelización agresiva usando socket: systemd crea de una misma vez
todos los sockets para todos los demonios acelerando así el arranque completo e iniciar más
procesos en paralelo. En un segundo paso systemd ejecutará a la vez todos los demonios.

• Activación D-Bus para iniciar servicios: Utilizando la activación D-Bus, un servicio puede ser
iniciado la primera vez que es accedido.

• Seguimiento de procesos utilizando Linux cgroups: cgroup también llamados grupos de


control, es una característica del kernel para crear límites, políticas e incluso explicar el uso de
los recursos de ciertos grupos de procesos. cgroup asocia un conjunto de tareas con un
conjunto de parámetros, para uno o más subsistemas, proporcionando un control de servicios
y tareas, así como todos sus futuros ‘hijos’ en grupos jerárquico. Un subsistema es un módulo
resultado de la agrupación de diversas tareas con el fin de mantener un mejor control sobre
estas de forma particular.

• Mantiene puntos de montaje y automontaje: Puede utilizarse para montar o desmontar los
puntos de montaje, quedando /etc/fstab como una fuente de configuración adicional a la que
podremos llamar para su supervisión con la opción “comment=” de fstab para marcar las
entradas controladas por systemd.

Nota: La herramienta systemd-cgls nos muestra recursivamente el contenido del árbol de


jerarquías de un determinado grupo de control de Linux.

Unidades de servicios (units)

systemd inicia y supervisa todo el sistema y se basa en la noción de unidades, compuestas de un


nombre (el nombre del demonio) y una extensión. Será la extensión la que indique de qué tipo
de unidad se trata. Además cada unidad tiene su correspondiente archivo de configuración cuyo
nombre es idéntico. Un ejemplo sería el servicio httpd.service cuyo archivo de configuración
sería httpd.service. Los archivos de unidades disponibles en nuestro sistema podemos
encontrarlos en /usr/lib/systemd/system/ y /etc/systemd/system/

Nota: Los archivos bajo el directorio /etc/systemd/system/ prevalecerán en caso de duplicados.

Existen siete tipos diferentes de unidades:

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 127

• service: Demonios que pueden ser iniciados, detenidos, reiniciados o recargados.


• socket: Esta unidad encapsula un socket en el sistema de archivos o en Internet. Cada
unidad socket tiene una unidad de servicio correspondiente.
• device: Esta unidad encapsula un dispositivo en el árbol de dispositivos de Linux.
• mount: Esta unidad encapsula un punto de montaje en la jerarquía del sistema de
archivos.
• automount: Encapsula un punto de montaje automático. Cada unidad automount tiene
una unidad mount correspondiente, que se inicia al acceder al directorio de automontaje.
• target: Utilizada para la agrupación lógica de unidades. Referencia a otras unidades, que
pueden ser controladas conjuntamente, un ejemplo sería multi-user.target, que
básicamente desempeña el papel de nivel de ejecución 3 en el sistema clásico SysV.
• snapshot: Similar a las unidades target.

Entonces los archivos de configuración tendrán los nombres: programa.service, socket.socket,


dispositivo.device, punto de montaje.mount, etc.

Nota: La unidad default.target activa servicios y otras unidades dependientes, durante el


arranque de systemd. Esto lo comentaremos en el apartado target

Compatibilidad de systemd con SysV

systemd al igual que Upstart ofrece compatibilidad con SysV (comando service y chkconfig) para
aquellos servicios que aun soportan o funcionan únicamente con scripts de inicio SysV
(actualmente en 2021, son pocos los servicios que corren bajo SysV). Upstart pese a mantener
compatibilidad con los comandos service y chkconfig de SysV implementó su propia utilidad para
la administración de servicios, de igual modo systemd lo hace con su herramienta systemctl.

#systemctl stop nombreservicio

En SysV habilitábamos servicios con chkconfig (o reproducíamos listas de estos para ver cuál de
ellos se ejecutaba al arranque), algo que ahora bajo systemd podemos hacer con los siguientes
comandos:

Habilitar el servicio ufw al arranque del sistema:

#systemctl enabled ufw

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 128

Figura 148: Habilita servicio ufw desde el inicio del sistema


Fuente. - Elaboración Propia

Listar todas las unidades de servicios instaladas:

#systemctl list-unit-files

Figura 149: Muestra todos los servicios instalados del sistema


Fuente. - Elaboración Propia

O solo aquellas que se encuentran en activadas:

#systemctl list-units
#systemctl

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 129

Figura 150: Muestra todos los servicios que están activos en el sistema
Fuente. - Elaboración Propia

Podemos apreciar que a la hora de pasar el nombre del servicio lo hacemos con el nombre
completo, es decir incluyendo su sufijo, pero existen una serie de atajos:

• Si no se especifica el sufijo, systemctl asumirá que es .service. Por ejemplo, netcfg y


netcfg.service se consideran equivalentes.
• Los puntos de montaje se traducirán automáticamente en la correspondiente unidad
.mount. Por ejemplo, si especifica /home será equivalente a home.mount.
• Similar a los puntos de montaje, los dispositivos se traducen automáticamente en la
correspondiente unidad .device, por lo tanto, la especificación /dev/sda2 es equivalente a
dev-sda2.device.

Nota: Consulte man systemd.unit para más detalles.

Uso de systemctl

La utilidad de administración de las unit de systemd es systemctl, la cual combina las


herramientas service y chkconfig de SysV, por lo tanto podremos arrancar, parar, recargar
servicios, activar o desactivar servicios en el arranque, listar los estados de los servicios, etc.
En la siguiente tabla veremos el uso básico de systemctl además de sus “iguales” en SysV.

Descripción Comando systemd Comando SysVinit

Iniciar un servicio systemctl start ejemplo service ejemplo start

Detener un servicio systemctl stop ejemplo service ejemplo stop

Reiniciar un servicio systemctl restart ejemplo service ejemplo restart

Recargar un servicio systemctl reload ejemplo service ejemplo reload


Reiniciar si el
systemctl condrestart service ejemplo
servicio se está
ejemplo condrestart
ejecutando

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 130

Verificar si el
servicio se está systemctl status ejemplo service ejemplo status
ejecutando
Habilitar servicio al
systemctl enable ejemplo chkconfig ejemplo on
iniciar el sistema
Deshabilitar servicio
systemctl disable ejemplo chkconfig ejemplo off
al iniciar el sistema
Verificar si el
systemctl is-enabled
servicio iniciará con chkconfig ejemplo -list
ejemplo
el sistema
Lista de servicios
habilitados y
deshabilitados al systemctl list-unit-files –
chkconfig
iniciar el sistema type=service
(con niveles de
ejecución)
Recargar la
herramienta
systemctl daemon-reload chkconfig ejemplo -add
después de
modificaciones
Tabla 3: Comandos de Systemd y SysV
Fuente.- Tomado de https://www.sololinux.es/diferencias-entre-systemd-y-sysvinit-sysv/

1* Puede que un servicio este “enable” pero no tiene por qué estar activo cuando iniciemos
sesión ya que puede que ese servicio este configurado para ejecutarse solo en determinados
runlevels (o target en nuestro caso), a diferencia de chkconfig –list de SysV que mostraba todos
los servicios con todos los runlevels posibles y para cada uno indicaba si estaba on o off. Para
conseguir algo parecido en systemd, tendríamos que listar los target disponibles y veríamos que
servicios se ubican dentro de estos, así sabremos con que target (o runlevel) un servicio será
iniciado. Podemos emplear el siguiente listado

#ls /etc/systemd/system/*.wants/httpd. service /etc/systemd/system/multi-


user.target.wants/httpd.service

Este comando nos devuelve que el servicio httpd se encuentra bajo multi-user.target lo que
viene siendo el runlevel 3 de SysV. En los siguientes apartados conoceremos los distintos target
que de algún modo tienen similitud con los runlevels de SysV

Nota: Podríamos haber omitido el subdirectorio /httpd.service para conocer la lista completa
de targets y sus unit (mount, service, socket…)

Podemos hacerlo de una forma inversa (para lo cual hay que conocer el target), es decir ver que
servicios están ejecutándose para un target concreto:

#systemctl show -p “Wants” multi-user. target

Además de los comandos de la tabla también podemos ver las units de servicios que tenemos
cargados en el sistema con el comando:

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 131

#systemctl -t service list-units –all

Con este comando veremos qué servicios están cargados y además si están activos o muertos a
parte de una pequeña descripción.

Nota: Podemos cambiar service por mount, socket, device… para listar otros tipos (-t) de units.

Si en vez de ver las units cargadas queremos ver cuantas hay instaladas (es decir aquellas que
tienen archivos de configuración instalados en nuestro sistema y por lo tanto están disponibles):

#systemctl -t service list-unit-files –all

Nota: Podemos cambiar el tipo de unit o directamente omitir el parámetro -t y listar todas.

Aprenderemos más sobre el comando systemctl en el apartado de comandos para este tema
(Tema-5)

Sugerencia: Puede utilizar las siguientes órdenes systemctl con el parámetro -H usario@host
para controlar una instancia de systemd en una máquina remota. Esto utilizará SSH para
conectarse a la instancia systemd remota.

Target

systemd utiliza target en vez de runlevels (0123456) que reciben un nombre (en vez de un
número) para identificar un propósito específico, con la posibilidad de realizar más de una acción
al mismo tiempo. Algunos targets pueden heredar todos los servicios de otro target e
implementarse con servicios adicionales. La siguiente tabla muestra la similitud entre algunos
de los target con los runlevels de SysV:

Comando
Descripción Comando systemd
SysVinit
runlevel0.target, poweroff. target,
Detener el sistema 0, halt
systemctl halt
Modo usuario único runlevel1.target, rescue.target 1, S, single
Multiusuario runlevel2.target, multi-user. target 2
Multiusuario con red runlevel3.target, multi-user. target 3
Experimental (No
runlevel4.target, multi-user. target 4
User)
Multiusuario con
runlevel5.target, graphical.target 5
gráficos y red
runlevel6.target, reboot. target,
Reiniciar el sistema 6, reboot
systemctl reboot
Emergency shell emergency.target emergency
Tabla 4: Cuadro comparativo de targets de systemd vs. runlevels SysV
Fuente.- Tomado de https://www.sololinux.es/diferencias-entre-systemd-y-sysvinit-sysv/

Nota: Actualmente no existen target similares a los runlevels 2 y 4 de SysV, pero podríamos
definirlos nosotros mismos.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 132

Existen otros target que podremos ver con el comando:

#systemctl list-units –type=target

Podemos cambiar de target (o modo de ejecución) actual con el comando:

# systemctl isolate graphical.target

Nota: Esto podría ser equivalente a la orden #telinit 5 de SysV

systemd también nos permite cambiar el target predeterminado e incluso añadir nuevos
servicios a otros target, pero antes de esto, es importante dejar claro algunos de los directorios
de los que hace uso systemd:

Los archivos unit (archivos de configuración de service, mount, device) se encuentran en:
/usr/lib/systemd/system/ o /etc/systemd/system/
Los target (runlevels) igualmente pueden situarse en ambos directorios
Los directorios *.wants (ubicados igualmente en ambos directorios) contienen los enlaces
simbólicos que apuntan a determinados servicios, serán estos servicios los que se ejecuten con
el target al que corresponde dicho directorio wants, recordar que si un target precisa de otro,
también serán cargados los servicios de este otro target.

Nota: Los archivos unit de /etc/systemd/system tienen una mayor precedencia sobre archivos
unidad de /lib/systemd/system

El target /etc/systemd/system/default.target es el target predeterminado de arranque, es un


enlace simbólico que por defecto apunta a /lib/systemd/system/graphical.target por lo que
para cambiar de target de arranque, bastará con eliminar dicho link y crear uno nuevo
apuntando al nuevo target.

Si quisiéramos podríamos crear un target desde 0 a nuestro gusto y darle un nombre


(mylevel.target) y a continuación habilitarlo:

# systemctl enable mylevel.target

El efecto de esta orden crea un enlace simbólico (/etc/systemd/system/default.target) que


apunta a nuestro mylevel.target. Esto solo funciona si hemos añadido la etiqueta [Install] al
archivo, de la siguiente manera:

[Install]
Alias=default.target

También podemos añadir o quitar nuevos servicios a un target determinado, bastará con crear
nuevos enlaces simbólicos dentro del directorio *.wants del target de arranque (o de algunos
de los que dependa) apuntando a los servicios deseados.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 133

Otra forma de modificar el target de inicio es a través de los parámetros que le pasamos al kernel
en el archivo de configuración del gestor de arranque añadiendo por ejemplo
systemd.unit=multi-user.target para arrancar en nivel 3.

4.3.4. Apagar o reiniciar el sistema desde la línea de comando

Para apagar Linux, el usuario root puede ejecutar el comando /sbin/shutdown.

La página man para shutdown tiene una lista completa de opciones, pero las dos usadas más
comúnmente son las siguientes:

#/sbin/shutdown -h now //El Sistema se apaga al instante


#/sbin/shutdown -r now //El Sistema se reinicia al instante

Después de apagar todo, la opción -h detendrá la máquina, y la opción -r la reiniciará.

Para Red Hat, Inc. (2021), los usuarios de consola PAM pueden usar los comandos reboot y halt
para apagar el equipo mientras se está en niveles de ejecución 1 hasta 5. Para más información
sobre los usuarios de consola. Si la computadora no se apaga asi misma, tenga cuidado de no
apagar la computadora hasta que aparezca un mensaje indicando que el sistema ha sido
detenido. Si no espera por este mensaje, puede significar que no todas las particiones del disco
duro han sido desmontadas, y puede llevar a un sistema de archivos corrupto.

Otros comandos utilizados para apagar el sistema:

# halt
# shutdown
# init 0

Otros comandos utilizados para reiniciar el sistema:

# reboot
# init 6

4.3.5. Terminar procesos apropiadamente

Para González (2005) dentro de esta carpeta ubicada en /etc o en /etc/rc.d dependiendo de la
distribución, se encuentran una serie de scripts que permiten iniciar/detener la gran mayoría de
los servicios/servidores que estén instalados en el equipo. Estos scripts están programados de
tal manera que la mayoría reconoce los siguientes argumentos:

start
stop
restart
status

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 134

Los argumentos son autodescriptivos, y tienen permisos de ejecución, entonces siendo root es
posible iniciar un servicio de la siguiente manera, por ejemplo samba:

#> /etc/rc.d/init.d/smb start


Starting Samba SMB daemon [OK]

Solo que hay que cambiar start por stop | restart | status para detenerlo, reiniciarlo (releer
archivos de configuración) o checar su estatus. Ahora bien, si estás parado dentro del directorio
puedes hacerlo de la siguiente manera:

#> pwd
/etc/rc.d/init.d
#> ./smb stop
Shutting down Samba SMB daemon [OK]

Se trata de tan solo un script asi que con el permiso de ejecución (x) puedes ejecutarlo con “./”
seguido del nombre del servicio, sin espacios y después el argumento que necesites, iniciarlo,
detenerlo, etc.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 135

Resumen
1. En esta unidad, se vio la importancia del uso de enlaces simbólicos para la administración,
solución de problemas en la instalación de aplicación o copia de archivos. También, se
aprendió a crearlos. Por otro lado, se conoció el uso del comando find para la búsqueda
de archivos, directorios, binarios modificados por fecha, y archivos que pertenecen a un
usuario para poder solucionar algún problema de acceso a archivos y directorios.

2. También se desarrolló el proceso del sistema de arranque del sistema operativo, las
diferencias entre los 6 niveles de arranque, así como, las diferencias técnicas entre cada
uno de ellos.

Recursos
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta unidad:

o Enlaces Físicos y Simbólicos en Linux: https://www.youtube.com/watch?v=9LrL3UJTkhM


o Arranque Linux: https://www.youtube.com/watch?v=id9evSHH814
o Cambiar nivel de arranque de Ubuntu: https://www.youtube.com/watch?v=XjaQ8BstWD8

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 136

UNIDAD

5
ADMINISTRACIÓN DE PAQUETES DEBIAN Y
RPM
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno instala y administra paquetes Debian, RPM.

TEMARIO

5.1 Tema 8 : Instalación de paquetes Debian


5.1.1 : Instalar, actualizar y desinstalar paquetes binarios de Debian
5.1.2 : Encontrar paquetes que contengan archivos específicos o bibliotecas
las cuales pueden estar o no instaladas
5.1.3 : Obtener información de un paquete como la versión, contenido,
dependencias, integridad del paquete y estado de instalación (este o
no instalado el paquete)

5.2. Tema 9 : Instalación de paquetes RPM y YUM


5.2.1 : Instalar, actualizar o eliminar paquetes usando RPM y YUM
5.2.2 : Obtener información de un paquete RPM como la versión, estado,
dependencias, integridad y firmas
5.2.3 : Determinar que archivos provee un paquete, así como encontrar de
que paquete viene un archivo específico

ACTIVIDADES PROPUESTAS

• Los alumnos identifican la información de los paquetes en Debian.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 137

5.1 INSTALACIÓN DE PAQUETES DEBIAN

5.1.1 Instalar, actualizar y desinstalar paquetes binarios de Debian


En esta sección, se estudiará cómo se gestionan los paquetes (programas) en Debian y sus
distribuciones derivadas. La forma en que se hará será muy similar a la gestión de paquetes rpm
que se verá más adelante. Los paquetes, que realmente son ficheros binarios, se llaman así porque
no solo contienen el programa que se desea instalar, sino que además incluyen los ficheros
(scripts) de configuración, la documentación y sus dependencias.

Es muy importante conocer lo que significa “dependencias”, este término pone de manifiesto la
necesidad que tienen los programas que otros estén presentes para poder funcionar; por ejemplo,
si pretendemos instalar el paquete “X” que es un entorno gráfico, posiblemente tenga
dependencias, es decir, que necesite de otros paquetes sobre los que apoyarse para funcionar
correctamente, por ejemplo librerías.

Los nombres de los paquetes Debian tienen la siguiente estructura:

nombre-del-paquete_nombre-del-paquete-build_arquitectura.deb

Donde:

• nombre-del-paquete: será corto y descriptivo, si esta formado por varias palabras suelen
estar separadas por guiones.
• nombre-del-paquete: varía en cada revisión y suele ser numérica siguiendo el
• esquema siguiente: major.minor.patchlevel.
• build: indica la versión del paquete.
• arquitectura: plataforma hardware para la cual fue diseñada la compilación del paquete.
• deb: es la extensión del fichero que, para los paquetes Debian, es siempre .deb

Ejemplos:

ethereal_0.8.13-2_i386.deb; arj_3.10.22-9_i386.deb

Base de datos de los paquetes

La información correspondiente a los paquetes que hay instalados, se conserva en una base de
datos que suele estar en /var/lib/dpkg. Dentro de este directorio, se tienen el fichero
/var/lib/dpkg/status que contiene la totalidad de paquetes conocidos por dpkg con su estado y
también el fichero /var/lib/dpkg/available que contiene los paquetes que hay disponibles y se
pueden instalar. Estos ficheros son muy similares y nos darán bastante información: quién
mantiene el paquete, su tamaño, versión, dependencias, descripción, etc. Es muy útil para saber
que uso tiene un paquete o ponerse en contacto con su desarrollador.

Herramientas para la gestión de paquetes .deb

El sistema Debian tiene varias herramientas para el manejo de los paquetes, pero los cuatro
comandos principales son dpkg, apt-get, deselect y alien.
dpkg

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 138

Esta herramienta permite manejar los paquetes de forma individual tratando directamente con
los ficheros .deb. Es el núcleo del sistema de empaquetado Debian y equivalente al comando rpm
en otras distribuciones.

Permite instalar, actualizar, suprimir y gestionar los paquetes. Su uso se suele limitar para forzar
instalaciones, arreglar dependencias rotas y el más común, ver los paquetes instalados.

Este comando no gestiona las dependencias. Si al instalar un paquete con dpkg faltaran
dependencias informará de ello y tendremos que instalarlas previamente o en la misma línea de
comando que nos ha dado el aviso. Un aspecto importante de esta orden es la necesidad de haber
descargado previamente los paquetes a instalar.

La herramienta dpkg usa muchos de los archivos de la carpeta /var/lib/dpkg ya mencionada


anteriormente. Su sintaxis es:

# dpkg orden [paquete/s]

Donde orden puede ser:

-i; --install

Sirve para instalar los paquetes que se le pasen como segundo parámetro,(debe escribirse el
nombre completo del paquete). Si el paquete que se pretende instalar tiene dependencias de
otros paquetes que no se encuentren instalados el programa lo detectará, y será necesario
instalar previamente (o en la misma línea) aquellos abortando la operación.

La opción también se puede usar para actualizar un paquete, pero hay que tener en cuenta que
si el paquete estaba instalado lo actualizará si hay una versión más nueva disponible y si no estaba
instalado lo instalará. Por eso hay que tener cuidado si sólo se quieren actualizar los existentes
sin instalar paquetes nuevos.

-r; --remove

Elimina los paquetes que se le indiquen como segundo parámetro. No borra los ficheros de
configuración para evitar reconfigurar la herramienta si se vuelve a reinstalar. Esta opción
también comprueba las dependencias y si el paquete que se pretende desinstalar es una
dependencia de otro que esté instalado, abortará la operación.

-P; --purge

Elimina todo incluyendo los ficheros de configuración.

-R

Esta opción junto con –i instala todos los paquetes contenidos en un directorio que se indique.

-l; --list

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 139

Da el estado de de los paquetes Debian que aparecen en la base de datos. Si se le añade una
cadena nos muestra los paquetes que en su nombre contienen esa cadena. Es una opción muy
usada que devuelve una sola línea por paquete y permite usar comodines.

En el listado resultante aparecerá a la izquierda de cada paquete unas indicaciones que podrán
ser; por ejemplo, “un”, “ii” o “rc”. Esos valores indicarán, respectivamente, los paquetes sin
instalar, paquete instalado o paquete desinstalado, pero del que se conservan sus ficheros de
configuración.

-s; --status

Da información sobre el paquete que le indicamos. Si está instalado, tamaño, etc.

-S; --search

Busca un paquete de los instalados que contenga la cadena que le indiquemos. Si en vez de una
cadena le pasamos un fichero nos indicará a que paquete corresponde dicho fichero. Este
segundo uso es el más común, encontrar un paquete que contiene un fichero o lo que es lo
mismo, el paquete propietario de un fichero

-L; --listfiles

Muestra la lista de ficheros que usa el paquete cuyo nombre indiquemos a continuación, los
ficheros que instala. La mayoría de las veces basta con añadir en nombre del paquete, sin versión,
pero a veces pueden existir varias y entonces habría que especificarla en el nombre del paquete.

--configure

Ejecuta los scripts de configuración del paquete que indiquemos a continuación.

--get-selections

Imprime sólo los nombres de los paquetes que estén instalados. Permite comodines.

Ejemplos:

# dpkg -i paquete1.deb paquete2.deb

Instala los dos paquetes indicados. Obviamente los archivos paquete1.deb y paquete2.deb
deben existir en el directorio desde donde se invoca el comando dpkg.

# dpkg -r zip

Elimina el paquete ya instalado en el sistema de nombre zip.

# dpkg -P apache

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 140

Elimina completamente el paquete apache del sistema, incluyendo los ficheros de configuración,
algo que no ocurre con la opción anterior: -r

# dpkg --purge arj

Igual que la anterior pero aplicado al paquete arj.

# dpkg -i -R /var/tmp/packs/

Instala todos los paquetes que haya en el directorio /var/tmp/packs/ así como los que pudieran
encontrarse en subdirectorios que cuelguen de él a todos los niveles de profundidad.

# dpkg -l dpkg -i -R /var/tmp/packs/

Imprime por la salida estandar la relación ordenada alfabéticamente de todos los paquetes
instalados en el sistema.

# dpkg -l apache

Igual que el anterior pero sólo la información correspondiente al paquete apache.

# dpkg --get-selections xserver* zip*

Imprime por la salida estandar la relación ordenada alfabéticamente de todos los paquetes
cuyos nombres coinciden con los patrones proporcionados.

# dpkg -s wawk

Imprime por la salida estándar el estado del paquete proporcionado, así como información
complementaria de interés.

# dpkg -S /usr/bin/basename

Busca entre los todos ficheros de todos los paquetes instalados el archivo proporcionado o
patrón de coincidencia.

# dpkg -L coreutils

Imprime por la salida estandar la relación completa de archivos que el paquete -en este caso
coreutils- a depositado en el arbol de directorios después de instalarlo.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 141

Nota: La ejecución y posterior salida de un comando en pantalla puede variar dependiendo de la


distribución Linux, pero básicamente contendrá la misma información con distinto formato.

Gestor APT (Advanced Packaging Tool)

Con la herramienta anterior, cuando se quiere instalar algo, puede resultar que se necesite a su
vez 3 ó 4 paquetes más y, cuando se van a instalar estos, estos segundos necesitan de otros
pudiendo la historia convertirse en un auténtico laberinto existiendo incluso dependencias
cruzadas. Como ya dijimos antes, dpkg instala los paquetes individualmente sólo informando de
las dependencias pero no instalándolas. Esta nueva herramienta gestiona esas dependencias
instalándote todo lo necesario.

El programa apt-get sirve para automatizar la gestión de paquetes en las distribuciones que
derivan de Debian. Su principal ventaja es que resuelve él mismo las dependencias y, si quieres
instalar un paquete que tiene dependencias y estas a su vez otras resultando que hay que instalar
un número determinado de paquetes, nos informará de ello mostrándonos la lista de paquetes
que se instalarán, nos consultará si deseamos proseguir y, si se contesta afirmativamente, lo
instalará todo. Esta herramienta instala todas las dependencias requeridas (depends), pero
ignora los paquetes recomendados (recommends) y sugeridos (suggests) que también puede
haberlos.

Para poder controlar todo, apt-get en vez de trabajar directamente con paquetes lo hace con
repositorios de paquetes, que satisfacen las dependencias de manera automática. Leerá una lista
de paquetes del repositorio, creará un árbol de dependencias, y determinará que paquetes son
requisitos previos obligatorios y que todavía no están instalados. También puede ser que le
sugiera instalar algún otro paquete.

Estos repositorios contendrán todos los paquetes necesarios y pueden estar en local (en un cd,
dvd o directorio), aunque lo más habitual es que sean remotos, estén online y que sean
mantenidos y actualizados a diario siendo el inconveniente de esta segunda opción el tiempo de
descarga, pero con la gran ventaja de que con un solo comando podemos actualizar todos los
paquetes del sistema.

Los paquetes contenidos en los repositorios dependerán unos de otros, o de otros paquetes
procedentes de otros repositorios. El sistema APT puede gestionar varios repositorios de distintos
sitios, y cuando instala un paquete, también instala sus dependencias (si las encuentra).

El fichero /etc/apt/sources.list

La configuración de los repositorios se encuentra en el fichero /etc/apt/sources.list que es el que


indica al comando apt-get donde coger los paquetes para su instalación.

Un ejemplo de este fichero para un Debian o Ubuntu sería:

[root@soa] # cat /etc/apt/sources.list

deb-src http://es.archive.ubuntu.com/ubuntu/ natty main restricted


##Major bug fix updates produced after the final release of the distribution.
deb http://es.archive.ubuntu.com/ubuntu/ natty-updates main restricted
deb-src http://es.archive.ubuntu.com/ubuntu/ natty-updates main restricted

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 142

La primera línea, que se encuentra comentada, indica el dispositivo desde donde se instaló
nuestro Linux y podría interesar quitar el comentario para actualizar desde el CD/DVD. El resto de
las líneas indican fuentes desde donde se puede recuperar información y paquetes al sistema
local. Posteriormente habría que usar el comando apt-get update para sincronizar la información
que figura en su base de datos local con las fuentes especificadas en el fichero. La sincronización
debería de realizarse siempre antes de instalar o actualizar un paquete y también después de
modificar /etc/apt/sources.list. También se recomienda poner los recursos más rápidos al inicio
del fichero. Se pueden añadir comentarios poniendo al principio de la línea el símbolo #

apt-get

La sintaxis del comando es:

#apt-get [opción/es] orden [paquete/s]

Entre las opciones tenemos las siguientes:

• - f Internta corregir dependencias rotas


• -d Descarga un paquete pero no lo instala.
• -s Simula la ejecución de la orden pero no la realiza. Se usa por ejemplo para ver si un
paquete depende de otros paquetes o que implicaría un upgrade.
• -y Responde a todo que si, cuidado con esta opción.
• -h Muestra la ayuda.

La orden podrá ser:

update
Actualiza la base de datos, solo la lista de paquetes y versiones disponibles, desde los repositorios.
Se suele utilizar esta opción después de modificar el fichero sources.list.

install
Instala el paquete que indiquemos a continuación. Si el paquete ya estuviera instalado lo
actualiza. Ejecute apt-get update antes de actualizar paquetes para asegurarse de que la base de
datos local muestre las últimas versiones disponibles. Si el nombre del paquete va seguido de –
(menos) indica que en vez de instalarlo hay que desinstalarlo.
Cuando se ordena la instalación de un paquete, el apt-get revisa primero si ya fue descargado, si
no lo fue, irá al primer recurso del sources.list a buscar la versión más nueva del programa, y si
este tiene dependencias se añadirán a la lista de instalación.

remove
Borra el paquete que indiquemos a continuación. Hay que tener en cuenta que borra el paquete
indicado pero no los paquetes que tuvieron que instalarse como requisito previo a aquel aunque
no vayan a ser necesarios según nuestro árbol de dependencias. Esta orden avisa de esta
eventualidad pero no borra esos paquetes. También indica los paquetes no necesarios que
pudiera haber de antes. Tampoco borra los archivos de configuración del paquete.

autoremove
Eliminará los paquetes que le indiquemos junto con sus dependencias que no vayan a ser
necesarias para los paquetes que queden instalados en el sistema. Incluirá también aquellas
dependencias innecesarias para el sistema aunque no hallan sido instaladas por el/los que se
pretenden eliminar. La opción remove junto con --auto-remove es equivalente.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 143

Si se usa autoremove sin ningún nombre de paquete, los paquetes que no se estén usando y que
se instalaron como dependencias de otros se eliminarán de su sistema de forma automática.

purge
Junto con el nombre de un paquete lo desinstala y borra sus archivos de configuración.

upgrade
Actualiza todos los paquetes instalados de los que haya nuevas versiones disponibles.
También es muy conveniente ejecutar apt-get update antes de su uso.

clean
Elimina todos los archivos de paquetes descargados y que estén en la cache.

Cuando apt-get instala un programa, guarda una copia del fichero deb en los directorios
/var/cache/apt/archives y /var/cache/apt/archives/partial. Con el tiempo esos directorios
pueden llegar a ocupar mucho espacio, para limpiar ambos directorios se usa esta opción.

check
Actualiza la cache y verifica las dependencias.

Ejemplos:

# apt-get update

Actualiza la cache local con la de los repositorios de referencia indicados en /etc/apt/sources.list

# apt-get install vim-gtk

Instala el paquete vim-gtk y todas sus dependencias.

# apt-get install tzdata

Instala el paquete tzdata y todas sus dependencias.

# apt-get install libqt*

Instala todos los paquetes cuyos nombres coinciden con el patrón asi como las dependencias
que necesitan.

#apt-get install -s gcl apt-get


[opción/es] orden [paquete/s]

Instala el paquete gcl de forma simulada, no produce n ingún efecto real en el sistema.

# apt-get install -d gcl

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 144

Descarga un paquete sin instalarlo y luego podrá visualizar la información del paquete con dpkg
--info. Generalmente los archivos descargados están en
/var/cache/apt/archives/

# apt-get remove -s gcl

Elimina el paquete gcl de forma simulada, no produce ningún efecto real en el sistema.

# apt-get clean

Borra totalmente el repositorio local que contiene los ficheros de los paquetes descargados.
apt-cache

Busca información sobre paquetes en nuestro sistema, en la caché local. Puede utilizar
expresiones regulares.
Su sintaxis es:

# apt-cache orden paquete/patron_de_busqueda

Veamos sus opciones más comunes:

search Busca, por su nombre o comentario, un paquete en la base de datos local APT.
showMuestra la descripción del paquete.

Ejemplos:

# apt-cache search Torrent


# apt-cache search “Linux loader”
# apt-cache show torrent

dselect
Es una interfaz gráfica (front-end) del comando dpkg que gestiona las dependencias y los
conflictos. Normalmente no suele estar instalada y por tanto se necesita usar el comando
anterior para hacerlo. La orden completa sería apt-get install dselect y luego se ejecutaría con
dselect.

Por defecto, al arrancarlo selecciona automáticamente todos los paquetes "Requeridos"


("Required"), "Importantes" ("Important") y "Estándar" ("Standard"), pero podemos
configurar otros (Burgos, 2001).

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 145

Figura 151: Ejecución de dselect


Fuente .- Tomado de lpifit.com

alien (Convertidor de paquetes)

Al igual que dselect esta herramienta a veces no está instalada, por lo que la instalaríamos
previamente con apt-get install alien.

Este comando permite convertir paquetes que no son de Debian sino de Redhat (rpm), Stampede
(slp), Slackware (tgz), Solaris (pkg) o genéricos a Debian y viceversa. Lo que hace es generar una
salida lo más parecida a Debian y siempre será preferible usar paquetes originales para esta
distribución, pero a veces no hay más remedio porque no exista el paquete buscado en los
repositorios.
La sintaxis del comando es:

# alien opcion/es paquete

Las opciones típicas son:

• -d o --to-deb Es la opción por defecto. Convierte un paquete rpm a formato Debian


(.deb).

• -r o --to-rpm Para convertir un paquete a formato RPM.

• -t o --to-tgz Para convertir un paquete a formato tgz.

• --to-slp Para convertir un paquete a formato slp.

• -i o --install Instala el paquete tras crearlo.

• -c o --scripts Incluye en la conversión los scripts de pre y postinstalación.

• -h o --help Muestra la ayuda.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 146

• --description=”Comentario” Pone una descripción al paquete creado.

Ejemplos:

#alien -d lgtoclnt-7.4-1.i686.rpm
#alien -d --scripts lgtoclnt-7.4-1.i686.rpm
#alien --scripts -d lgtoclnt-7.4-1.i686.rpm
#alien -d wget.rpm
#alien -d lgtoclnt-7.4-1.i686.rpm
#alien --scripts -d lgtoclnt-7.4-1.i686.rpm

Para este comando debe indicarse el nombre completo del paquete con su versión, arquitectura,
etc. Además, hay que decir que una conversión simple comprobará las dependencias, pero no
incluirá los scripts de pre y postinstalación. Para esto hay que especificar el parámetro --scripts.

Aptitude

Si no está presente, la instalaríamos con:

# apt-get install aptitude.

El comando aptitute ofrece una interfaz para las funciones de gestión de APT. Se puede usar para
instalar o eliminar paquetes y controlar los indicadores de estado que muestran, por ejemplo, si
se deberían actualizar o conservar en su estado actual. Es como una evolución del dselect pero
mucho más amigable.

Utilice Enter para expandir o comprimir las ramas de selección y llegar hasta los paquetes, y ctrl-
t para acceder a la barra de menú.

Figura 152: Interfaz de aptitude


Fuente.- Tomado de lpifit.com

Una "i" en la columna izquierda indica que en el estado actual se hace necesario instalar el
paquete. La tecla “?” le ofrecerá ayuda en cualquier momento y "/" le permitirá buscar paquetes.
Por ejemplo, si tecleamos “/arj” la búsqueda nos llevaría a ese paquete o algún otro con nombre

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 147

similar, por ejemplo, arj-doc, si es el caso pulse “n” (next) para ir al próximo resultado. Luego
podrá usar “+/-” o el menú Package para marcar/desmarcar el paquete para su instalación.
Cuando termine, seleccione Acciones -> Instalar/Eliminar paquetes (o presione la tecla "g") para
aplicar los cambios. También se puede usar la opción quit (q) para salir sin aplicarlos.

Synaptic

Además de aptitude existen otras interfaces de gestión de paquetes para los sistemas Debian.
Una de ellas es synaptic que está preparada para el X Window System y es un front-end, una
interfaz gráfica, que llama a las funciones de APT. Tiene todas las funciones de APT y, además,
disfruta de una interfaz muy atractiva. El botón Aplicar instalará los paquetes que se marquen y
actualizará todos los paquetes que sea necesario actualizar. El botón Reload (Recargar)
actualizará la lista de paquetes.

Figura 153: Interfaz de synaptic


Fuente .- Tomado de lpifit.com

5.1.2. Encontrar paquetes que contengan archivos específicos o bibliotecas las cuales
pueden estar o no instaladas

Utilizando dpkg para conocer los nombres de paquetes

Uno de los caminos para conocer el nombre de un paquete es saber el nombre de un archivo
importante que sea contenido por ese paquete.

Para averiguar a qué paquete pertenece un archivo determinado:

# dpkg {-S|--search} patrón

Lo cual busca 'patrón' en los paquetes instalados.

Por ejemplo, para conocer el paquete que ofrece ciertos archivos ".h" puede ejecutar:

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 148

Figura 154: Empleo de dpkg para encontrar a que paquete pertenece stdio.h
Fuente. - Elaboración Propia

5.1.3. Obtener información de un paquete como la versión, contenido, dependencias,


integridad del paquete y estado de instalación (este o no instalado el paquete)

Descubriendo nombres de paquetes

Noronha y Mora (2003) proponen el siguiente ejemplo, supongamos que usted quiere revivir la
gloria de la época dorada del Atari 2600. Quiere utilizar APT para instalar un emulador de Atari,
y después bajar algunos juegos, puede hacer lo siguiente.

Figura 155: Empleo del comando apt-cache con la orden search


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 149

Hemos encontrado muchos paquetes relacionados con lo que estamos buscando. Para
obtener más información de un paquete específico, hacemos lo siguiente:

Figura 156: Empleo del comando apt-cache con la orden show


Fuente. - Elaboración Propia

En este desplegado tiene muchos detalles sobre paquete seleccionado, así como su
descripción.
Para más información sobre un paquete puede utilizar:

Figura 157: Empleo del comando apt-cache con showpkg


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 150

Y sólo para saber de qué paquetes depende:

Figura 158: Empleo del comando apt-cache con depends


Fuente. - Elaboración Propia

En resumen, tenemos una gran variedad de armas que podemos utilizar para averiguar el
nombre del paquete que queramos.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 151

5.2. INSTALACIÓN DE PAQUETES RPM Y YUM


5.2.1. Instalar, actualizar o eliminar paquetes usando RPM y YUM
RPM

Según Burgos (2001), el gestor de paquetes RPM es típico de las distribuciones GNU/Linux
basadas en Red-Hat, como por ejemplo, Fedora, CentOS, Suse, Mandriva, etc. Para nuestros
ejemplos usaremos Centos.
El sistema RPM se compone de:

Ficheros de paquetes (*.rpm)


La base de datos RPM
La herramienta rpm

Los paquetes RPM

Los ficheros RPM contienen los paquetes de software compilado, preparado para ser instalado,
y que contienen lo siguiente:

Ficheros comprimidos de la aplicación


Nombre y versión del paquete
Fecha, host y autor de la construcción del paquete
Descripción
Información de integridad y verificación (MD5 checksum)
Dependencias

El esquema de nombrado de los paquetes RPM es el siguiente:

package-version-patch.architecture.rpm.

Donde:

package: nombre de la aplicación


versión: número de versión de la aplicación
patch: número de compilación del paquete.
architecture: arquitectura para la que ha sido compilado el paquete.
rpm: es la extensión del fichero.

Por ejemplo el paquete "ethereal-0.8.9-1.i386.rpm", contiene la versión 0.8.9 del programa


Ethereal, y es la primera compilación para la plataforma i386 (Intel PC).

Comando RPM

El comando rpm lo usaremos para:

Instalar, actualizar, desinstalar y eliminar paquetes.


Preguntar información a la base de datos RPM.
Verificar paquetes y comprobar los ficheros instalados.
Construir ficheros binarios a partir de código fuente.
El comando rpm realiza las siguientes comprobaciones:

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 152

Asegurarse de que existe espacio suficiente en disco para el paquete.


Comprobar que los ficheros existentes no serán sobrescritos.
Que se encuentran todas las dependencias.

Principales opciones del comando rpm

Opción Principal Descripción


-i o --install: Instala el paquete.
-U o --update: Actualiza o instala el paquete.
-F o --freshen: Actualiza el paquete solamente si estuviera instalado.
-V o --verify: Verifica el tamaño, MD5, permisos, tipo, integridad, etc.
-q o --query: Investiga paquetes y archivos.
-e o --erase: Desinstala el paquete.

El comando rpm debe ejecutarse con alguna de las opciones principales, para determinar de este
modo qué funcionalidad del comando queremos invocar. Además, podemos acompañar a las
opciones principales de otras subopciones que modifican la menara en que actúa la opción
principal.

Las principales subopciones del comando rpm son las siguientes:

a: aplica una variable a todos los paquetes instalados.


c: Con la opción principal "q", lista los archivos de configuración.
d: Con la opción principal "q", lista los archivos de documentación.
f: Con la opción principal "q", verifica qué paquete instaló el referido archivo.
h: Muestra el progreso del procedimiento solicitado.
i: Con la opción principal "q", lista información sobre un determinado paquete.
l: Con la opción principal "q", lista todos los archivos y directorios del paquete.
p: Con la opción principal "q", indica que la investigación se realiza en el archivo
.rpm.
v: Modo más descriptivo.

Otras opciones importantes del comando rpm son:

--nodeps: Instala el paquete sin verificar las dependencias.


--force: Fuerza la instalación/actualización.
--test: Muestra cómo sería la instalación, pero no instala.
--requires: Con la opción principal "q", muestra las exigencias para el paquete especificado.
--whatrequieres: Con la opción principal "q", muestra qué programas dependen del paquete.
Ejemplos:

Supongamos que ha borrado unos cuantos ficheros por accidente, pero no está seguro de qué es
lo que ha borrado. Si quiere verificar completamente su sistema y ver qué se ha perdido, puede
hacer:

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 153

Figura 159: Visualizamos el resultado del comando


Fuente. - Elaboración Propia

Supongamos que se encuentra con un fichero que no reconoce. Para saber a qué paquete
pertenece puede hacer lo siguiente:

Figura 160: Se visualiza la salida de rpm –qf


Fuente. - Elaboración Propia

Supongamos que acaba de encontrarse con un nuevo paquete RPM de koules, pero no sabe
qué puede ser. Para obtener información al respecto:

#rpm -qpi koules-1.2-2.i386.rpm

La salida podría ser la siguiente:

Name : koules Distribution: Red Hat Linux Colgate


Versio Vendor:
n : 1.2 Red Hat Software
Releas
e : 2 Build Date: Mon Sep 02 11:59:12 1996
Install date: (none) Build Host: porky.redhat.com
Group : Games Source RPM: koules-1.2-2.src.rpm
Size : 614939
Summary: SVGAlib action game with multiplayer, network, and sound support
Description: This arcade-style game is novel in conception and excellent in
execution.
No shooting, no blood, no guts, no gore. The play is simple, but you still must develop skill
to play. This version uses SVGAlib to run on a graphics console.

Ahora si quiere saber qué ficheros instala el paquete RPM. Puede hacer lo siguiente:

#rpm -qpl koules-1.2-2.i386.rpm

La salida es la siguiente:

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 154

/usr/doc/koules
/usr/doc/koules/ANNOUNCE
/usr/doc/koules/BUGS
/usr/doc/koules/COMPILE.OS2
/usr/doc/koules/COPYING
/usr/doc/koules/Card
/usr/doc/koules/ChangeLog
/usr/doc/koules/INSTALLATION
/usr/doc/koules/Icon.xpm
/usr/doc/koules/Icon2.xpm
/usr/doc/koules/Koules.FAQ
/usr/doc/koules/Koules.xpm
/usr/doc/koules/README
/usr/doc/koules/TODO
/usr/games/koules
/usr/games/koules.svga
/usr/games/koules.tcl
/usr/man/man6/koules.svga.6

Base de datos RPM

La información de los paquetes instalados se guarda en una base de datos. Esta base de datos
se guarda en el directorio /var/lib/rpm. Cada vez que se usa el comando rpm se consulta la
información de esta base de datos.

Normalmente no nos preocuparemos de cómo se guarda la información en la base de datos


porque esto se hace de forma automática.
Si tenemos errores extraños instalando o desinstalando paquetes, puede ser debido a una base
de datos inconsistente o dañada. Si se corrompe dicha información, podemos reconstruir la base
de datos con el comando siguiente: rpm --rebuilddb.

YUM

Para poder instalar paquetes RPM con el comando rpm es necesario que previamente hayamos
localizado y descargado en nuestro equipo el paquete .rpm en cuestión. Las distribuciones de
GNU/Linux tienen unos repositorios accesibles desde Internet con todos los paquetes de la propia
distribución.

El comando YUM es similar al comando apt-get de Debian, haciéndonos más fácil el trabajo. Por
ejemplo, para instalar el paquete zsh con el comando YUM hacemos:

# yum install zsh

Y tenemos lo siguiente:

El comando yum se encarga de localizar el fichero rpm que necesitamos buscando en los
repositorios de la distribución.
Una vez localizado el fichero, lo descarga a nuestro equipo.
Una vez descargado lo instala.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 155

Si el paquete tuviera dependencias con otros paquetes, automáticamente yum se encarga de


localizar los ficheros rpm de las dependencias de los repositorios.
Descargar los ficheros de las dependencias a nuestro equipo.
Instalar los paquetes de las dependencias.

El fichero de configuración de YUM es /etc/yum.conf.


Algunas de las opciones de este archivo son:

cachedir: Directorio de almacenamiento de los paquetes y otros archivos de datos. El estándar es


/var/cache/yum.
keepcache: Valor 1 ó 0. Determina si yum debe mantener los paquetes y archivos relacionados
después de una instalación exitosa. El estándar es 1.
reposdir: Lista de directorios donde yum buscará los archivos .repo que defienden los
repositorios. El estándar es /etc./yum/repos.d
debuglevel: Nivel de mensajes de aviso.
errorlevel: Nivel de mensajes de error.
logfile: Fichero de log de yum. Donde se registran los mensajes generados por yum.
gpgcheck: Valor 1 ó 0. Determina si yum debe o no realizar la verificación GPG de los paquetes.

Por defecto, el directorio donde YUM descarga los paquetes rpm es /var/cache/yum.

Los archivos .repo definen repositorios de Internet desde donde se pueden descargar los
paquetes. Y tienen el siguiente formato:

[Identificador]
name=Nombre descriptivo del repositorio baseurl=url::/camino/para/el/repositrio

[Indentificador]: Término único que identifica cada repositorio.


name: Texto de descripción del repositorio.
baseurl: URL del directorio donde se encuentra el directorio repodata del yum.
enable: Valor 1 o 0. Determina si debe utilizarse el repositorio.
gpgcheck: Valor 1 o 0. Determina si debe realizarse la verificación GPG para los paquetes de
este repositorio.

Opciones más comunes del comando yum:

• yum search paquete: Localiza un determinado paquete.


• yum install paquete: Instala el paquete.
• yum remove paquete o yum erase paquete: Desinstala el paquete.
• yum provides recurso o yum whatprovides recurso: Localiza qué paquete, instalado o no,
ofrece un determinado recurso.
• yum updade: Actualiza los paquetes desactualizados que estén instalados.
• yum upgrade: Similar a update, pero se utiliza para actualizar la distribución a una versión
más actual.
• yum info paquete: Es similar a rpm -qi paquete

Existe otro comando llamado yumdownloader, similar a yum pero solamente localiza y
descarga el paquete RPM de los repositorios sin instalarlo. Con la opción "--source", descarga
el códido fuente del paquete en lugar del programa compilado.

Existen herramientas de instalación para el entorno gráfico como yumex, kyum, etc.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 156

Ejemplos de uso de YUM

Actualización del sistema con todas las dependencias que sean necesarias:

Figura 161: Comando yum update


Fuente. - Elaboración Propia

Consultar la información contenida en un paquete en particular

Figura 162: Información del paquete bind


Fuente. - Elaboración Propia

Instalación de paquetería con resolución automática de dependencias (Barrios, 2007).

Figura 163: Instalación del paquete bind


Fuente. - Elaboración Propia
Desinstalación de paquetes junto con todo aquello que dependa de estos.

Figura 164: Removiendo el paquete bind


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 157

Listado de paquetes

Lo siguiente listará todos los paquetes disponibles en la base de datos yum y que pueden
instalarse:

# yum list available | less

Lo siguiente listará todos los paquetes instalados en el sistema:

# yum list installed |less

Lo siguiente listará todos los paquetes instalados en el sistema y que pueden (deben)
actualizarse:

# yum list updates | less

Limpieza del sistema

YUM deja como resultado de su uso cabeceras y paquetes RPM almacenados en el interior del
directorio localizado en la ruta /var/cache/yum/. Particularmente los paquetes RPM que se
han instalado pueden ocupar mucho espacio y es por tal motivo conviene eliminarlos una vez
que ya no tienen utilidad. Igualmente conviene hacer lo mismo con las cabeceras viejas de
paquetes que ya no se encuentran en la base de datos. A fin de realizar la limpieza
correspondiente, puede ejecutarse lo siguiente:

# yum clean all

5.2.2. Obtener información de un paquete RPM como la versión, estado,


dependencias, integridad y firmas
Opciones de las consultas para un paquete rpm.

Opcion Descripción
-q Mostrar información sobre un paquete, como nombre, versión y otros
-qa Mostrar todos los paquetes que están instalados.
-qi Mostrar infomación de un paquete
-ql Mostrar lista de archivos contenidos en el paquete
-qf Archivo Consultar por el paquete que contiene el archivo Archivo; se requiere
la especificación de Archivo con su rama completa.
-qs Mostrar estado de los archivos (implica -l)
-qd Nombrar archivos de documentación (implica -l)
--dump Mostrar toda la información de verificación de todos los archivos
(utilizarlo con -l, -c o -d)
--provides Mostrar posibilidades del paquete; otro paquete puede pedirlas con -
-requires
-requires, -R Mostrar dependencias entre los paquetes
--scripts Mostrar los distintos scripts de desinstalación
Tabla 5: Consultas RPM
Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 158

Obtener información de paquetes instalados o no instalados.

Según Rm-rf.es Administración de sistemas (2012), para consultar información de paquetes


instalados o no instalados se utiliza el modificador "-q", la diferencia principal, es que para
paquetes no instalados se debe indicar el nombre completo del archivo rpm, ademas de agregar
el modificador "-p", si no indicamos ninguno de los modificadores listados a continuación, solo
obtendremos el nombre del paquete más su versión y la versión de la distribución para la que fue
empaquetado.

Modificadores

-i : Muestra información relacionada con el paquete, compilación de este, distribución y una


breve descripción del paquete.
-d : Muestra el listado de archivos de documentación del paquete.
-c : Muestra el listado de archivos de configuración del paquete.
-l : Muestra el listado completo de archivos contenidos dentro del paquete.

Por ejemplo, si quisiéramos obtener información del paquete, más el listado de archivos que
incluye, utilizaríamos:

Para un paquete instalado.

# rpm -qil ''paquete''

Para un paquete no instalado.

# rpm -qpil ''paquete''

Obtener el nombre de todos los paquetes instalados.

# rpm –qa

Este comando mostraría un listado de todos los paquetes instalados en el sistema, en el formato
nombre de paquete, versión del paquete y finalmente distribución de Linux para el que fue
empaquetado.

Versión

Para obtener información del paquete como el nombre o la versión, usaremos el siguiente
comando:

# rpm -q nombredelpaquete

El comando rpm -q mostrará el nombre del paquete, la versión y el número de la realización del
paquete instalado. Usted puede usar este comando para verificar si el paquete está instalado o
no en el sistema.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 159

[root@soa] # rpm -qi php


Name : php Relocations: (not relocatable)

Version : 5.2.6 Vendor: http://www.atomicrocketturtle.com/


Release : 1.el5.art Build Date: Fri 02 May 2008 05:17:44 PM
BRT
Install Date: Mon 16 Jun 2008 02:03:10 PM BRT Build Host:
build.atomicorp.com
Group : Development/Languages Source RPM: php-5.2.6-
1.el5.art.src.rpm
Size : 10040864 License: PHP
Signature : DSA/SHA1, Mon 05 May 2008 05:03:11 PM BRT, Key ID
32a951145ebd2744
Packager : Scott Shinn <scott@atomicrocketturtle.com>
URL : http://www.php.net/
Summary: The PHP HTML-embedded scripting language. (PHP: Hypertext
Preprocessor)
Description : PHP is an HTML-embedded scripting language. PHP
attempts to make it easy for developers to write dynamically
generated webpages. PHP also offers built-in database integration
for several commercial and non-commercial database management
systems, so writing a database-enabled webpage with PHP is fairly
simple. The most common use of PHP coding is probably as a
replacement for CGI scripts.

The php package contains the module which adds support for the PHP
language to Apache HTTP Server.

Como se puede observar, este comando muestra la información del paquete, incluyendo el
nombre, versión, y descripción del programa instalado.

Estado

Para obtener el estado del paquete, usaremos el siguiente comando:

# rpm -s nombredelpaquete

-s muestra el estado de todos los ficheros contenidos en el paquete.

Dependencias

Los paquetes RPM pueden "depender" de otros paquetes, lo cual significa que requieren de la
instalación de otros paquetes para poder ejecutarse, adecuadamente. Si intenta instalar un
paquete que tiene una dependencia no resuelta, verá lo siguiente:

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 160

#rpm -iyh foo-1.0-1.i386.rpm failed


Dependencies: bar is needed by foo-1.0-1

Para resolver este error deberá instalar los paquetes indicados. Si de todos modos desea forzar
la instalación (no es una idea muy buena ya que el paquete probablemente no se ejecutará
adecuadamente), use la opción --nodeps.

Integridad

RPM nos ofrece una utilidad muy valiosa que nos permite verificar la integridad y seguridad de
todos los paquetes y aplicaciones instaladas en el sistema (con yum o rpm). Básicamente, lo que
vamos a hacer es verificar todos los ficheros de todos los paquetes instalados en el sistema. La
verificación consiste en comprobar la información de estos ficheros con la que hay almacenada
en la base de datos rpm. Vamos a verificar el MD5 checksum, los permisos, el propietario y grupo,
tamaño del fichero, etc. Para ello utilizaremos los parámetros –verify o -V.

En primer lugar podemos descartar los ficheros de configuración, ya que lo más normal es que su
contenido cambie, aunque todavía podríamos revisar su configuración de permisos, propietario,
etc.

Si queremos hacer una revisión de todos los ficheros del sistema, algo que lógicamente puede
tardar bastante tiempo, utilizaremos el siguiente comando. Hay que tener en cuenta que en caso
de no haber salida todo es correcto:

# rpm -Va

Si queremos hacer la revisión de un único paquete lo indicamos y quitamos el parámetro “a”:

# rpm -V telnet

Y si quisiéramos revisar un único fichero:

# rpm --verify --file /usr/bin/chcon

¿Y qué sucede si se detecta algún problema? Vamos a verlo. Vamos a hacer un backup del
binario /usr/sbin/apachectl y a reescribirlo:

mv /usr/sbin/apachectl /usr/sbin/apachectl.BAK
touch /usr/sbin/apachectl
rpm -V --file /usr/sbin/apachectl
S.5.... T. c /etc/httpd/conf/httpd.conf
S.5.... T. /etc/rc. d/init. d/httpd
S.5.... T. c /etc/sysconfig/httpd
SM5.... T. /usr/sbin/apachectl

Como vemos ahora sí que hay salida. Los caracteres de verificación que se muestran son los
siguientes:

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 161

.(punto): Prueba exitosa.


?: La prueba no puede realizarse.
5: La suma MD5 del archivo es diferente
S: discrepancia en el tamaño del fichero
T: La fecha del archivo ha cambiado.
L: El enlace simbólico se modificó.
D: El dispositivo se modificó
U: El dueño del archivo ha cambiado.
G: El grupo del archivo ha cambiado.
M: El permiso o el tipo de archivo ha cambiado.

Así pues, en el ejemplo anterior vemos como el binario apachectl tiene un checksum MD5
distinto, distinto tamaño, fecha de modificación y de permisos. La “c” es de fichero de
configuración.

Si queremos comprobar la integridad de todos los binarios de /usr/sbin, es tan sencillo como:

# rpm -Va | grep "/usr/sbin"


S.5....T./usr/spin/apachectl

Podemos añadir un mayor nivel de debug con el parámetro “v”, “vv” más debug aún:

rpm -Vv –file /usr/sbin/apachectl


rpm -Vvv –file /usr/sbin/apachectl

Esta es una buena y sencilla forma de asegurarnos que los binarios del sistema no han sido
alterados y también de tener un control del estado de los ficheros de configuración.

Firmas

Para verificar la firma de un paquete y ver si el paquete ha sido dañado o alterado usaremos el
siguiente comando:

# rpm -K prog-1.0-1.i386.rpm

Si nos mestra como resultado:

# prog-1.0-1.i386.rpm: md5 gpg OK

Nos indicará que no ha habido problemas y el archivo no ha sido dañado en el momento de


la descarga.

Puede utilizar también:

# rpm –checksig paquete

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 162

5.2.3. Determinar que archivos provee un paquete, así como encontrar de que
paquete viene un archivo específico

Listar el contenido

Para ver las librerías que contiene un RPM, se ejecuta el siguiente comando:

# rpm -qlp nombre_de_paquete.rpm

Por ejemplo:

# rpm -qlp libgomp-4.4.4-13.el5.i386.rpm

warning: libgomp-4.4.4-13.el5.i386.rpm: Header V3 DSA signature:


NOKEY, key ID 37017186
/usr/lib/libgomp.so.1
/usr/lib/libgomp.so.1.0.0 /usr/share/doc/libgomp-4.4.4 /usr/share/doc/libgomp-
4.4.4/ChangeLog.bz2 /usr/share/info/libgomp.info.gz

Obtener el nombre de un paquete

Para obtener el nombre de un paquete conociendo su libreria, se ejecuta el siguiente comando:

rpm -qf /lib64/libcrypto.so.6 openssl-0.9.8b-10.el5

La opción -f sólo funciona cuando se indica el nombre de archivo completo con la ruta
incluida; se pueden indicar tantos archivos como se desee.

Por ejemplo el comando rpm -q -f /bin/rpm /usr/bin/wget produce como resultado lo


siguiente:

rpm -q -f /bin/rpm /usr/bin/wget rpm-3.0.3-3


wget-1.5.3-55

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 163

Resumen
1. En esta unidad, se vio cómo se instala, busca, actualiza los paquetes para Sistema
Operativo Ubuntu así como paquetes rpm y el uso del comando yum, de manera sencilla,
Asimismo, se conoció la búsqueda de paquetes para obtener información de ellos
validando la versión, así como raleaseque está instalado en el sistema operativo para
validar algún problema con estos paquetes.

Recursos
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta unidad:

o Ubuntu 20.04 - apt - Instalación de software: https://www.youtube.com/watch?v=ZAoL5NtkLYI

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 164

UNIDAD

6
DISPOSITIVOS, SISTEMAS DE FICHEROS Y
SUS ESTÁNDARES
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno crear y formatea particiones del Sistema Operativo
GNU/Linux.

TEMARIO
6.1 Tema 10 : Creando particiones y sistema de ficheros
6.1.1 : Usar diversos comandos Mkfs para configurar particiones y crear
sistemas de archivos

6.2 Tema 11 : Mantener la integridad de los sistemas de archivos


6.2.1 : Verificar la integridad de un sistema de archivos
6.2.2 : Monitorizar el espacio e inodos libres
6.2.3 : Reparar problemas simples en un sistema de archivos

7.

ACTIVIDADES PROPUESTAS

• Los alumnos identifican problemas simples de archivos.


• Los alumnos identifican si un archivo está íntegro.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 165

6.1. CREANDO PARTICIONES Y SISTEMA DE FICHEROS

6.1.1. Usar diversos comandos Mkfs para configurar particiones y crear sistemas de
archivos
Si añadimos un nuevo disco al sistema ya instalado deberemos crear las particiones y los
sistemas de ficheros.

Esta operación implica los siguientes pasos:


• Creación de particiones (comando fdisk)
• Creación de los sistemas de ficheros (comando mkfs)
• Montado de los sistemas de ficheros (comando mount)

El comando para crear particiones es fdisk

Formato:

#fdisk [opciones] dispositivo

Donde:
dispositivo es el dispositivo del disco (/dev/hdx en IDE, /dev/sdx para SCSI o SATA)

Debemos tener permiso de administrador para usarlo.

Opciones
-l muestra la tabla de particiones del dispositivo.

fdisk se usa mediante un menú

Figura 165: Inicializar un disco


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 166

Ejemplo:

Cree una partición primaria de 5 GB.

Usamos n (new):

Figura 166: Crear partición


Fuente. - Elaboración Propia

Por defecto, crea la partición tipo Linux (Id 83)

con l (list) vemos el tipo de particiones soportadas para cambiar el tipo de partición se usa t (type)

Figura 167: Lista de particiones soportadas


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 167

Para que se guarden los cambios debemos usar w (write).

Otras Herramientas

Figura 168: Guardar los cambios


Fuente. - Elaboración Propia

Existen otras herramientas para modificar las particiones.

Figura 169: Herramientas para particionar


Fuente. - Elaboración Propia

Creación de los sistemas de ficheros

Sobre cada partición debemos crear sistemas de ficheros con el comando mkfs

Formato:

mkfs [-V] [-t filesystem] dispositivo [n_bloques]

Opciones:

• -V verbose
• -t filesystem tipo de sistema de ficheros a crear (ext2, ext3, xfs, etc.) si no se especifica se
crea el por defecto del sistema (en Linux ext2)
• n_bloques número de bloques usados para el sistema de ficheros (si no se pone, se usa
toda la partición)

Mkfs es un front-end a distintos comandos, que permiten crear particiones de los tipos
específicos:

• mkfs.ext2 o mke2fs crea sistemas ext2


• mkfs.ext3 crea sistemas ext3, equivalente a mkfs.ext2 -j
• mkfs.jfs, mkfs.reiserfs, mkfs.xfs crean sistemas JFS, ReiserFS y XFS, respectivamente
• mkfs.msdos, mkfs.vfat crea sistemas MS-DOS
• mkswap crea un sistema de ficheros de tipo Linux swap

Cada uno de estos comandos puede tener distintas opciones.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 168

Comandos relacionados

• dumpe2fs muestra información de sistemas de ficheros ext2/ext3 Información sobre


inodos, bloques y grupos
• tune2fs permite ajustar parámetros en sistemas ext2/ext3 p.e. define el intervalo entre
chequeos automáticos, convierte ext2 en ext3, etc.
• e2label cambia la etiqueta de un sistema ext2/ext3
• existen comandos similares para otros tipos de sistemas de ficheros, p.e. reiserfstune,
jfs_tune, etc.

Partición de intercambio

Si lo que creamos es una partición de intercambio, la debemos inicializar con mkswap.

Figura 170: Creación participación de intercambio


Fuente. - Elaboración Propia

Una vez creada debemos activarla con swapon.

Figura 171: Activar participación con swapon


Fuente. - Elaboración Propia

Finalmente, para que se active en el arranque, debe incluirse la entrada correspondiente en


el fichero /etc/fstab (Fernández, 2015).

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 169

Figura 172: Registrar en /etc/fstab


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 170

6.2 . MANTENER LA INTEGRIDAD DE LOS SISTEMAS DE ARCHIVOS

6.2.1. Verificar la integridad de un sistema de archivos


El monitoreo periódico del sistema de ficheros de Sistema Operativo resulta tema de suma
importancia para los administradores de red, ya que durante el transcurso del tiempo estos
sistemas de ficheros pueden terminar presentando problemas como los siguientes:

• El sistema de ficheros se llena hasta el límite de su capacidad, causando que las


aplicaciones o quizás, el sistema entero deje de funcionar.
• El sistema de ficheros se corrompe, seguramente por un corte de alimentación o por una
caída del sistema.
• El sistema de ficheros se queda sin inodos libres, de tal forma que no se pueden crear
nuevos objetos en el mismo.

Monitorizar y comprobar cuidadosa y regularmente los filesystems de Linux nos ayudará a


prevenir o corregir estos problemas. Para verificar la integridad de un sistema de archivos,
utilizaremos el comando fsck.

fsck es una utilidad Unix que se utiliza ante alguna inconsistencia del sistema de archivos, para
corregir los posibles errores que hubiese es necesario ejecutar fsck. Para verificar un sistema
de archivos se aconseja hacerlo mientras este está desmontado. Generalmente, se ejecuta
automáticamente al inicio del sistema ante alguna anomalía.

#fsck [-opciones] /dev/hdXXX (o sdXXX)

Opciones:

-a confirmar automáticamente. No recomendado.


-c comprobar bloques en el disco.
-f forzar el chequeo aunque todo parezca ok.
-v (verbose) despliega más información.
-r Modo interactivo. Espera nuestra respuesta.
-y asume yes de respuesta.

Ejemplo:

Figura 173: Ejecutar fsck


Fuente. - Elaboración Propia

6.2.2. Monitorizar el espacio e inodos libres


Un sistema de lectura escritura no sirve de mucho si crece hasta el punto en que no pueda admitir
nuevos ficheros. Esto podría ocurrir si nuestro sistema de ficheros se llena o si se queda sin inodos

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 171

libres. Los inodos son las estructuras de datos dentro del sistema de ficheros que describen los
ficheros (valga la redundancia) en el disco.

Cada sistema de ficheros contiene un número finito de inodos que se establece en el momento
de creación del sistema de ficheros. Este número es, a su vez, el máximo número de ficheros que
un sistema de ficheros puede acomodar. Como los sistemas de ficheros se crean con un número
de inodos enorme, probablemente nunca crearás tantos ficheros como para agotar este número.
No obstante, es posible quedarse sin inodos libres en particiones que contengan muchos ficheros
pequeños.

Es muy importante prevenir la escasez de inodos libres en las particiones del sistema. El comando
df proporciona información necesaria tanto sobre la uso del espacio en disco como de los inodos
libres. El comando df nos muestra información general sobre el uso del disco en los sistemas de
ficheros montados en directorios. Normalmente, en directorios indicamos ficheros de
dispositivos de particiones como /dev/hda1, pero si indicamos otro tipo de nombre de fichero o
directorio obtendremos información sobre la partición donde está ubicado dicho fichero o
directorio. Si omitimos directorios, se mostrará la información relativa a los sistemas de ficheros
montados en los dispositivos incluidos en /etc/fstab. La forma correcta de utilizar el comando df
será de la siguiente manera.

#df [opciones] /dev/sd[a|b|c|d][1,2,3,4

En la tabla siguiente, se muestran las opciones más usadas:

Opciones Descripción
-h Muestra los resultados en un formato legible para las personas,
incluyendo sufijos como M (megabytes) y G (gigabytes).
Muestra información sobre los inodos libres en lugar de la información
-i por defecto el espacio libre en disco.

Figura 174: Ejecutar df


Fuente. - Elaboración Propia

El comando du nos puede ayudar, mostrándonos directorio por directorio el uso del espacio en
disco, así mismo examina los directorios recursivamente y muestra información detallada o
resumida sobre el espacio en disco consumido. La forma correcta de utilizar el comando du será
de la siguiente manera.

#du [opciones] [directorio]

En la tabla siguiente, se muestran las opciones más usadas:

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 172

Opciones Descripción
-a Muestra todos los ficheros, no solo los directorios.
-c Genera un gran total de todos los elementos listados.
-h Muestra los resultados en un formato legible para las personas,
incluyendo sufijos como M (megabytes) y G (gigabytes).
-s Visualiza un sumario para cada uno de los directorios especificados,
en lugar de los totales encontrados recursivamente en cada
subdirectorio.
-S Excluye los subdirectorios de las sumas y los totales, limitándose a
totalizar los directorios.

Figura 175: Ejecutar du


Fuente. - Elaboración Propia

6.2.3. Reparar problemas simples en un sistema de archivos


La verificación del disco rígido bajo Linux se realiza mediante el comando fsck. Sin embargo,
por cuestiones de seguridad relativos a los datos presentes en el disco, no es muy
recomendable iniciar fsck en una partición montada. Ten en cuenta que es difícil eliminar las
particiones que requieren fsck ya que estas son usadas por el sistema.

Durante la comprobación del sistema de archivos, fsck se hace lo siguiente:


• Comprueba inodos, bloques y tamaños.
• Comprueba la estructura de directorios.
• Comprueba la conectividad de directorios.
• Comprueba las referencias.
• Comprueba el total de la información.

Para comprobar el sistema de archivos al arranque del sistema se pueden aplicar las siguientes
soluciones.

Solución 1

El objetivo es solicitar al sistema que ejecute fsck en el siguiente reinicio.


Para ello se debe ejecutar el comando shutdown con el parámetro -F:

#shutdown -r -F now

Figura 176: Ejecutar shutdown -r -F now


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 173

Solución 2

Otra solución es crear el archivo forcefsck en la raíz del sistema.

#touch /forcefsck

En el próximo reinicio tu disco duro será analizado y el archivo /forcefsck será


eliminado.
En la tabla siguiente se muestran las opciones más usadas.

Opciones Descripción
Ejecuta comprobaciones en todos los sistemas de ficheros incluidos en
/etc/fstab. Esta opción está pensada para utilizarse en tiempo de carga
-A del sistema, antes de montar los filesystems.
-N No se ejecuta, pero muestra lo que debería hacerse.
Especifica el tipo de sistema de ficheros a comprobar; por defecto se
asume ext2. El valor de tipo determina que verificador específico para
-t tipo el sistema de ficheros es utilizado.
Utiliza una copia del superbloque alternativa. En el modo interactivo,
e2fsck utiliza automáticamente superbloques alternativos.
Normalmente, para restaurar un superbloque defectuoso, utilizarás -b
-b superbloque 8193 en el modo no interactivo.
-c Comprobar bloques defectuosos.
-f Fuerza una comprobación, incluso si el sistema de ficheros parece
Limpio.
-p Repara automáticamente el sistema de ficheros sin hacer preguntas.
Responde automáticamente "yes" a todas las preguntas interactivas
-y permitiendo la utilización no interactiva de e2fsck.
-v Muestra el estado del proceso.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 174

Resumen
1. En esta unidad, se siguió ampliando el conocimiento acerca de los comandos para la
administración del sistema operativo Linux. Se vieron comandos para el uso de particiones
en Linux, como el Mkfs para solucionar problemas básicos de los archivos y ver los inodos
del sistema operativo.

Recursos
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta unidad:

o Cómo crear particiones de un Disco en Ubuntu usando comandos:


https://www.youtube.com/watch?v=2pDUT8oHQZA
o Comando Linux Reparar Disco con fsck: https://www.youtube.com/watch?v=uEF4ZYZpbPQ

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 175

UNIDAD

7
MONTANDO Y DESMONTANDO FILE
SYSTEMS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno monta y desmonta sistemas de ficheros para poder
trabajar con ellos.

TEMARIO
7.1 Tema 12 : Controlar el montaje y desmontaje de sistemas de archivos
7.1.1 : Montar y desmontar sistemas de archivos manualmente
7.1.2 : Configurar el montaje de sistemas de archivos al arranque del sistema
7.1.3 : Configurar sistemas de archivos para dispositivos extraíbles
7.1.4 : Establecer cuotas de disco para un sistema de archivos
7.1.5 : Editar, revisar, y generar reportes de cuotas de usuario

ACTIVIDADES PROPUESTAS

• Los alumnos identifican el proceso de montura manual y dispositivos


extraíbles.
• Los alumnos identifican las cuotas en un sistema de archivos.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 176

7.1. CONTROLAR EL MONTAJE Y DESMONTAJE DE SISTEMAS DE


ARCHIVOS

7.1.1. Montar y desmontar sistemas de archivos manualmente


Los sistemas de ficheros son montados con el comando mount. Durante el arranque, los sistemas
de ficheros que no contienen un 0 en el pass number son chequeados y luego montados. Después
del arranque se pueden añadir más sistemas de ficheros manualmente con el comando mount.

El comando mount se usa para montar sistemas de ficheros dentro de la estructura del árbol del
sistema. La primera y segunda entrada consulta al fichero /etc/fstab para montar los dispositivos
y así tomar las opciones que se le especifiquen en el /etc/fstab. La tercera opción es
independiente del fichero /etc/fstab y monta el sistema de ficheros en el directorio El comando
mount admite dos tipos de opciones, unos para el comando en sí, y otros para especificar
opciones del sistema de ficheros. La sintaxis básica de esta utilidad es la siguiente:

#mount [opciones] [dispositivo|directorio

El comando mount admite dos tipos de opciones, unos para el comando en sí y otros, para
especificar opciones del sistema de ficheros.

Opciones Descripción
-a Monta todos los fileystems especificados en el /etc/fstab menos los
que tengan la opción noauto
-h Ayuda del comando mount
-o Especifica las opciones del mount en la línea de comandos
-r Monta filesystems en modo de solo lectura
-t fstype Especifica un tipo de fileystem
-v Salida interactiva
-w Monta fileystems de lectura/escritura

Opciones del mount

Estas opciones se especifican en el fichero /etc/fstab o bien en la línea de comandos con la


opción -o. Estas opciones modifican el modo de montaje del comando mount, algunas de las
opciones son las siguientes.

Opciones Descripción
Async Toda la E/S al sistema de ficheros debería hacerse asíncronamente.
Auto Puede montarse con la opción –a.
Establece las opciones: rw, suid, dev, exec, auto, nouser y async. Es la
defaults opción por defecto en sistemas ext2.
Dev Interpretar dispositivos especiales de caracteres o bloques en el
sistema de ficheros.
Exec Permitir la ejecución de binarios.
Noauto Solo puede montarse explícitamente (esto es, la opción -a no hará
que el sistema de ficheros se monte)
noexec No permitir la ejecución de ningún binario en el sistema de ficheros
montado. Esta opción puede ser útil para un servidor que tiene sistemas de
ficheros que contienen binarios para otras arquitecturas distintas de la suya

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 177

nosuild No permitir el efecto de los bits SUID ni SGID.


nouser Prohibir a un usuario ordinario (esto es, distinto de root) montar el
sistema de ficheros. Esto es lo predeterminado.
ro Montar el sistema de ficheros en modo de solo lectura.
rw Montar el sistema de ficheros de lectura y escritura.
suid Permitir el efecto de los bits SUID y SGID.
sync Toda la E/S al sistema de ficheros debería hacerse síncronamente.
user Permitir a un usuario ordinario montar el sistema de ficheros.
users Permite a cualquier usuario el montaje/desmontaje del sistema de
Ficheros.

Desmontando el sistema de ficheros

Los sistemas de ficheros pueden ser desmontados usando el comando umount. Cuando un
sistema de ficheros es desmontado, los contenidos del árbol principal se actualizan, no
pudiéndose usar el umount si el sistema de ficheros que se quiere desmontar está en uso. Si
el sistema de ficheros está en uso el comando umount dará un error. Esto puede ocurrir por
ejemplo cuando tenemos abierto un fichero de un DVD o un proceso está haciendo uso del
mismo. Otros errores pueden surgir al quitar dispositivos removibles sin antes desmontarlos.

La sintaxis básica de esta utilidad es la siguiente:

# umount [opciones] [dispositivo directorio

El comando mount admite dos tipos de opciones, unos para el comando en sí y otros, para
especificar opciones del sistema de ficheros.

Opciones Descripción
-a Desmonta todos los filesystems descritos en /etc/mtab. Este fichero
está mantenido por los comandos mount y umount en tiempo real, se
usa normalmente cuando se apaga/reinicia el PC.
-t fstype Desmonta solo los filesystems del tipo especificado.

7.1.2. Configurar el montaje de sistemas de archivos al arranque del sistema

Todos los archivos de un sistema UNIX están organizados en un gran árbol de directorios/archivos

Pueden estar distribuidos entre diferentes dispositivos de almacenamiento o incluso entre otros
equipos conectados en red. El comando mount permite vincular el sistema de archivos de un
dispositivo físico dentro de una determinada ruta del árbol de archivos de UNIX. El contenido del
directorio desaparecerá cuando el dispositivo se desmonte del árbol mediante la orden umount.
Sintaxis:

# mount [-t type] [-o mount_options] device directory

Fuerza al S.O. a unir el sistema de ficheros del tipo type del dispositivo device al directorio
directory.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 178

mount –h: Muestra una pequeña ayuda en línea.

Consultar los comandos man mount o info mount.

mount: Muestra todos los sistemas de archivos montados actualmente.

La orden mount soporta muchos sistemas de archivos, en la siguiente tabla se listan los tipos
más utilizados.

Tipo Descripción
ext2 sistema nativo de Linux /ext2
ext3 sistema nativo de Linux /ext3 con journaling
Iso9660 sistema de archivo utilizado en los CD-ROMs
msdos sistema de archivo utilizado por MSDOS (FAT 12 o FAT 16)
vfat sistema de archivo utilizado por Windows (FAT 32)
ntfs sistema de archivo utilizado por Windows NT y posteriores
auto detección automática del sistema de archivo del dispositivo

Si se omite la opción –t, la orden mount realizará una detección automática, que funciona
correctamente en la mayoría de los casos.

No obstante en aquellos que la asignación sea incorrecta (por ejemplo un sistema FAT32 es
asignado a FAT16 y no es posible acceder a los nombres largos de los archivos) será necesario
indicar el tipo de archivos del dispositivo con la opción –t.

Montar y dejar partición en el arranque

#mkdir /media/multimedia

Se monta el disco duro por medio de la siguiente sintaxis;

mount -t sistema_archivos /dev/dispositivo /media/directorio_creado

#mount -t ext4 /dev/sdb2 /media/multimedia

Figura 177: Ejecutar mount


Fuente. - Elaboración Propia

Donde:

mount: comando para montar dispositivos.


-t: Hace referencia al tipo de sistema de archivos.
ext3: Sistema de archivos.
/dev/sdb1: Dispositivo Primario esclavo.
/media/multimedia: directorio creado donde se montará el disco duro.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 179

Sino conoce el sistema de archivos ejecute la siguiente sintaxis;

# fdisk -l

Se verifica si se montó correctamente el disco duro en el directorio multimedia, ejecutando la


siguiente sintaxis:

Figura 178: Ejecutar df -h


Fuente. - Elaboración Propia

Ahora se deja de forma permanente el disco duro en el arranque del sistema, para esto es
necesario editar el archivo fstab con un editor de texto; por ejemplo: vim, pico, joe, etc. Así mismo
no está demás hacer una copia de respaldo del archivo antes que sea editado.

#vi /etc/fstab

Se agrega la siguiente sintaxis en el archivo fstab:

/dev/sdb2 /media/multimedia ext4 defaults 00

Figura 179: Editar /etc/fstab


Fuente. - Elaboración Propia

7.1.3. Configurar sistemas de archivos para dispositivos extraíbles


Como ya se vio anteriormente, la estructura de los sistemas de ficheros está generalmente
divididos en particiones, unidas todas ellas en el punto de montaje raiz (/) o separadas. Los

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 180

sistemas de ficheros de los dispositivos removibles como USB o Disco CD se unen a la raiz del
sistema de la misma manera, como directorios o puntos de montaje. En principio estos
directorios destinados a los dispositivos están vacíos, a la espera de su montaje, puede darse el
caso de que el directorio destinado a este fin contenga subdirectorios o archivos, en cuyo caso
quedarán ocultos hasta que el dispositivo se desmonte.

Montaje de dispositivos extraíbles

Los datos de DVDs, CDs, disquetes y dispositivos USB normalmente se montan manualmente, a
menos que se disponga de un automontador que lleve a cabo esta tarea. Linux asigna directorios
bajo /mnt o /media para dispositivos extraíbles. En la línea de comandos es necesario escribir el
nombre del fichero del dispositivo y el punto de montaje. Si se está montando un dispositivo de
almacenamiento en masa USB, tiene sentido comprobar el fichero log /var/log/messages para
ver si el fichero ha sido detectado correctamente y para descubrir el nombre del fichero del
dispositivo.
Para montar un dispositivo detectado; por ejemplo: sdd, en un directorio existente, /media/usb,
escribimos lo siguiente:

#mount /dev/sdd /media/usb

No es necesario especificar la partición, si el stick USB no está particionado, para un stick


formateado será preciso especificar /dev/sdd1.

Linux auto detecta el tipo de sistema de ficheros para un medio. Si en su lugar se obtiene un
mensaje de error, puede echarse una mano a Linux y especificarle el tipo de ficheros,
suministrando un valor para el parámetro -t, por ejemplo:

#mount –t vfat /dev/sdd /media/usb

Sirve para un viejo sistema de ficheros Windows en un medio con formato FAT. Además de vfat
(para el sistema de ficheros Windows/DOS), los valores soportados sin ext2 (Extended Filesystem,
Version 2), ext3 (Extended Filesystem, Version3), reiserfs (Reiser Filesystem), iso9660 (ISO9660),
ntfs (NT Filesystem), etc., por citar unos pocos.

La mayoría de los sistemas definen los nombres de los dispositivos y puntos de montaje para
CDs/DVDs y disquetes, esto significa que con un comando tal como

#mount /media/cdrom

Puede ser todo lo necesario para montar un CD.

7.1.4. Establecer cuotas de disco para un sistema de archivos


La utilización de cuotas en el sistema de archivos permite a los administradores de sistemas
realizar la gestión eficiente del espacio compartido en disco por múltiples usuarios. Las cuotas
restringen la capacidad de los usuarios para acceder hacia los recursos de sistema, tales como
bloques (asignación de unidades), e inodos (entradas del sistema de archivos). Cuando una cuota
es excedida se aplica una política determinada por el administrador. Las cuotas se administran
individualmente por cada sistema de archivos y son únicas para usuarios y/o grupos.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 181

Acerca de las cuotas.

Una cuota de disco es un límite establecido por un administrador, el cual restringe ciertos
aspectos del uso del sistema de archivos. El objetivo de las cuotas es limitar, de forma razonable,
el espacio utilizado en el sistema de archivos. Suelen configurarse en servidores de correo
electrónico, servidores HTTP con anfitriones virtuales, servidores de archivos, en algunos
sistemas de escritorio y en cualquier escenario donde el administrador del sistema necesite
controlar el espacio utilizado por los usuarios en el sistema de archivos.

Muchos entienden mal el cómo las cuotas funcionan. Las cuotas normalmente no se activan en
los demonios, no es labor del demonio controlar las cuotas. Es labor del kernel.

En el kernel se activa un módulo que permite llevar la contabilidad de las cuotas, y como el kernel
es el que recibe las solicitudes de escritura, entonces el mismo kernel se ocupará de negarlas si
la contabilidad así lo indica o no.

Existen dos variantes de quotas en Linux:

Quotas por usuario


Quotas por grupo

Las cuotas por usuario afectarán el qué o cuánto escribe el usuario hacia disco. Y las cuotas de
disco afectarán el qué o cuánto escribe un grupo de usuarios al disco.

De las dos, trabajaremos con cuotas por usuario. Aunque mencionaremos cómo se llevan las
cuotas de grupo.

Las cuotas se dividen a su vez en

cuotas de espacio en disco (bloques)


quotas de cantidad de archivos (inodos)

Las cuotas de espacio en disco se miden en K y es la que comunmente es más fácil de entender:
Es cuántos KBytes puede escribir un usuario (o grupo) a disco.

Las cuotas de cantidad de archivos (inodos) indica cuántos archivos (no importa el tamaño)
pueden escribir los usuarios (o grupos). Es útil cuando tenemos riesgos de que un usuario cree
por ejemplo 100000 archivos de 0 bytes de tamaño. Aun cuando tengan 0 de tamaño, consumirá
todos los inodos del sistema.

Normalmente las cuotas de inodos no se utilizan a no ser que tenga una razón específica.

Las cuotas de espacio en disco y/o archivos se dividen en dos tipos:

Soft Quotas
Hard Quotas

Hard quotas: Son aquellas que no te puedes pasar, por ejemplo, si digo que tienes 10000KBytes
de hard quota, eso significará que no puedes pasarte de los 10000kbytes (10mb).

Soft quotas: Significa que te puedes pasar de ellas, pero por un tiempo determinado (7 días)
llamado periodo de gracia. Una vez superado este valor, se considerarán hard quotas.
Se utilizaban antes cuando había poco disco, a los usuarios se les decía:

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 182

Tienes un espacio en disco de 10MB

Sin embargo el sistema de quotas se programaba de la siguiente forma:


Soft Quota: 10MB
Hard Quota: 20MB

De forma tal que el usuario, si tenía un requerimiento muy especial podía pasarse de los 10MB
hasta 20MB. pero eso sí, antes de los 7 días debía ajustarse a la soft quota (10MB).
Instalación:

Debe iniciarse el sistema en nivel de ejecución 1 (mono usuario), ya que se requiere no haya
procesos activos utilizando contenido de la partición a la cual se le aplicará la cuota de disco.

Una vez en modo mono usuario, verificamos si tenemos instalado el paquete quota.

# apt -qq list quota

Si el paquete no estuviera presente, deberíamos instalarlo con:

# apt install quota

Las cuotas se manejan por partición, supongamos que yo quiero activar las cuotas en la
partición /data.

Lo importante es agregarle soporte para quotas por usuario y/o grupo, detrás de default

#vi /etc/fstab
/dev/sdb2 /data ext4 defaults,usrquota,grpquota 1 2

Figura 180: Editar /etc/fstab y agregar soporte para quotas


Fuente. - Elaboración Propia

Una vez haya hecho el cambio procedemos a reiniciar el sistema.

Se deben haber creado automáticamente los ficheros aquota.user, aquota.group

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 183

Figura 181: Listar contenido de partición /data


Fuente. - Elaboración Propia

En caso no se hayan creado en forma automáticamente o se hubiesen eliminado se ejecuta el


siguiente comando:

#quotacheck -cug /data

edquota

Es importante conocer que significa cada columna mostrada por edquota.

Blocks: Bloques. Corresponde a la cantidad de bloques de 1 Kb que está utilizando el usuario.

Inodes: Inodos. Corresponde al número de ficheros que está utilizando el usuario. Un inodo
(también conocido como Index Node) es un apuntador hacia sectores específicos de disco duro
en los cuales se encuentra la información de un fichero. Contiene además la información acerca
de permisos de acceso así como los usuarios y grupos a los cuales pertenece el fichero.

Soft: Limite de gracia. Límite de bloques de 1 KB que el usuario puede utilizar y que puede rebasar
hasta que sea excedido el periodo de gracia (de modo predeterminado son 7 días).

Hard: Limite absoluto. Limite que no puede ser rebasado por el usuario bajo circunstancia alguna.

Asignar cuotas de disco a cualquier usuario o grupo solo hará falta utilizar edquota citando el
nombre del usuario al cual se le quiere aplicar:

#edquota usuario

Lo anterior deberá devolver algo como lo siguiente a través de vi u otro editor de texto simple:

Figura 182: Editar quota de usuario edquouta


Fuente. - Elaboración Propia

El usuario siempre podrá rebasar una cuota de gracia, pero nunca una cuota absoluta.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 184

Cuota de gracia (Soft)

El sistema tiene de modo predeterminado un periodo de gracia de 7 días que se puede modificar
con el mandato edquota -t, donde se puede establecer un nuevo periodo de gracia por días,
horas, minutos o segundos.

#edquota -t

Figura 183: Editar período de gracia de usuário edquouta -t


Fuente. - Elaboración Propia

La cuota de gracia establece los límites de bloques o inodos que un usuario tiene en una partición.
Cuando el usuario excede el límite establecido por la cuota de gracia, el sistema advierte al
usuario que se ha excedido la cuota del disco sin embargo permite al usuario continuar
escribiendo hasta que trascurre el tiempo establecido por el periodo de gracia, tras el cual al
usuario se le impide continuar escribiendo sobre la partición.

7.1.5. Editar, revisar, y generar reportes de cuotas de usuario

Utilice el mandato edquota con el usuario juan.

#edquota juan

Asigne al usuario «juan» una cuota de disco de 2 archivos con límite máximo de 4:

Figura 184: Editar quota de usuario juan edquouta


Fuente. - Elaboración Propia

Desde otra terminal acceda hacia el sistema como el usuario juan y cree archivos con el comando
touch; luego ejecute el mandato quota y observe con detenimiento la salida:

Figura 185 : Cree archivos con el comando touch


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 185

Figura 186: Ejecuta comando quota


Fuente. - Elaboración Propia
Reporte de cuota

#repquota /data

Figura 187: Genera reporte de cuota repquota


Fuente. - Elaboración Propia

Activar y desactivar cuota

#quotaoff -aug
#quotaon -aug

Figura 188: Activar y desactivar cuota


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 186

Resumen
1. En esta unidad, se revisó la manera de montar un USB o dispositivos externos en el
sistema operativo Linux con el comando mount y desmontarlo; luego, con el comando
umount. Además, se vio cómo colocar cuotas a los discos para que, los distintos usuarios
que ingresan al sistema operativo no sobrepasen de su uso. Asimismo, se vio cómo revisar
las cuotas para poder tomar medidas con los usuarios que no respetan los mensajes de
advertencia de las cuotas de disco.

Recursos
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta unidad:

o Ubuntu Server | Cuotas de disco | quota: https://www.youtube.com/watch?v=mv-Y9w47sWM

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 187

UNIDAD

8
ADMINISTRACIÓN DE USUARIOS Y GRUPOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno configura usuarios y grupos en Linux con atributos
específicos.

TEMARIO
8.1 Tema 13 : Administración de cuentas
8.1.1 : Administrar permisos de acceso a los archivos y directorios
8.1.2 : Usar modos de acceso como SIUD, SGID y Sticky Bit para mantener la
seguridad
8.1.3 : Conocer cómo cambiar la máscara de creación de archivos
8.1.4 : Usar el campo de grupo para garantizar acceso a miembros de grupo

ACTIVIDADES PROPUESTAS

• Los alumnos identifican los accesos suid, sgid.


• Los alumnos identificar la máscara de archivos.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 188

8.1. ADMINISTRACIÓN DE CUENTAS

8.1.1. Administrar permisos de acceso a los archivos y directorios


Para Nigro (2010), el sistema de permisos en Linux se basa en un esquema de usuarios/grupos
que lo convierte en la base principal de la seguridad en Linux, a estos usuarios y grupos se les
asignan distintos derechos sobre los archivos y directorios.

Esta es una de las características que ayudan a que Linux sea casi inmune a los Virus de
computadora, los virus deben ser capaces de escribir sobre un archivo para poder infectarlo y
ejecutarse de alguna manera para poder infectar más archivos, con el sistema de permisos de
Linux los virus no pueden copiarse a cualquier archivo, si el usuario carece de permisos el virus
no podrá infectar más archivos y por lo tanto no podrá reproducirse.

Todos los archivos y directorios en Linux tienen permisos que verifican quien puede hacer o no
alguna acción con él.

Los permisos son los siguientes:

r: read (lectura): Cuando el permiso de lectura está activo sobre un directorio significa que se
podrá listar los recursos almacenados en él, si está asignado a un archivo se podrá leer su
contenido.

w: write (escritura): Cuando el permiso de escritura está activo sobre un directorio significa que
se podrá crear y borrar archivos en su interior, si esta activado para un archivo significa que se
podrá modificar su contenido.

x: execute (ejecución): Si el permiso de ejecución está activo sobre un directorio significa que el
usuario podrá realizar otras funciones dentro de él mediante los otros permisos de lectura y
escritura, y si está activo sobre un archivo se podrá ejecutarlo desde la línea de comandos.

¿Y dónde están los permisos?

Para poder ver los permisos de los archivos y directorios es necesario ejecutar el siguiente
comando:

#ls -l

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 189

Este comando dará una salida similar a la siguiente.

Figura 189: Listando contenido de carpeta


Fuente. - Elaboración Propia
Ahora, se describe la salida que obtenida:

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 190

Tamaño

Fecha
Grupo

Propietario Hora

enlaces Nombre

Permiso de otros

Permiso de grupo

Permiso Propietario

Tipo de Archivo

Figura 190: Descripción de la salida


Fuente. - Elaboración Propia

Con la siguiente línea interpretamos la información así:

drwxr-xr-x 2 cibertec cibertec 4096 ene 8 00:32 Escritorio


↑↑↑ ↑↑ ↑ ↑ ↑ ↑ ↑ ↑
1 2 3 4 5 6 7 8 9 10 11
1 : Tipo de = es un directorio
2 : Permisos = los permisos para el propietario son de lectura, escritura y ejecución
3 : Permisos = el grupo tiene permiso de lectura y ejecución
4 : Permisos = los otros usuarios tienen el permiso de sólo ejecución
5 : Enlace Físico = tiene dos enlaces físicos
6 : Propietario = el usuario cibertec es el propietario de este archivo
7 : Grupo = este archivo pertenece al grupo cibertec
8 : Tamaño = su tamaño es de 4096 bytes
9 : Fecha = fue creado el 08 de enero de 2021
10 : Hora = a 00:32 horas
11 : Nombre = el archivo se llama Escritorio

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 191

Como se puede apreciar, los permisos están asignados en grupos de 3 (rwx) y corresponde al:
propietario (owner: dueño del archivo o directorio), grupo (group: grupo del archivo o directorio)
y otros (others: otro usuario diferente del propietario).

Figura 191: Descripción de la salida


Fuente. - Elaboración Propia

8.1.2. Usar modos de acceso como SUID, SGID y Sticky Bit para mantener la
seguridad
Pueden ser utilizados 3 tipos de permisos en determinadas circunstancias. Aparte de los
siempre aplicables de lectura, escritura y ejecución, algunas veces es necesario algo más para
un archivo o directorio.
Estos permisos especiales son los 3 siguientes:

• Sticky bit
• Asignar ID de usuario (set user ID) (SUID)
• Asignar ID de grupo (set group ID) (SGID)

Stiky Bit

Según Hernán Vivani's Blog (2013), se utiliza para permitir que cualquiera pueda escribir y
modificar sobre un archivo o directorio, pero solo su propietario o root puedE eliminarlo. Un
ejemplo de uso es el directorio /tmp.

Para aplicar el Sticky bit a un directorio:

#chmod 1755 /Vídeos

Figura 192: Resultado de Sticky


Fuente. - Elaboración Propia

Al directorio con el Sticky Bit aplicado, se le agrega la t al final del descriptor de permisos.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 192

SUID

El bit SUID activo en un archivo, significa que el que lo ejecute va a tener los mismos permisos
que el que creó el archivo. Esto puede llegar a ser muy útil en algunas situaciones, pero hay que
utilizarlo con cuidado, dado que puede generar grandes problemas de seguridad.

Para que sea efectivo el archivo debe tener permisos de ejecución.

Para activarlo:

Figura 193: Dar permiso de ejecución a kk.sh


Fuente. - Elaboración Propia

Vean que en la última línea le saqué el permiso de ejecución al archivo y en los permisos se
reemplaza la s por la S. En este caso no tiene efecto el bit.

SGID

El SGID es lo mismo que en el SUID, pero a nivel de grupo. Es decir, todo archivo que tenga activo
el SGID, al ser ejecutado, tendrá los privilegios del grupo al que pertenece.

Esto es muy usado cuando queremos configurar un directorio colaborativo: si aplicamos este bit
al directorio, cualquier archivo creado en dicho directorio, tendrá asignado el grupo al que
pertenece el directorio.

#chmod 2775 Vídeos/


drwxrwsr-x. 2 cibertec Cibertec 4096 feb 7 21:57
root@soa# su cibertec
Contraseña:

cibertec@soa: $ cd Vídeos/
cibertec@soa: $ touch nn.txt
cibertec@soa:$ ll
total 8
-Rw-r--r--. 1 usuario1 grupo 0 feb 7 21:58 nn.txt

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 193

Figura 194: Dar permiso a grupo


Fuente. - Elaboración Propia

Al igual que con el SUID, aparece una s o una S reemplazando la x en los permisos del grupo.

8.1.3. Conocer cómo cambiar la máscara de creación de archivos


En GNU/Linux cuando un usuario crea un fichero o directorio, se le asigna unos permisos por
defecto. Usualmente, para un fichero nuevo se le asignan los permisos rw-r--r-- (644), mientras
que para un directorio nuevo rwxr-xr-x (755).

Para conseguir esta asignación por defecto, se utiliza una máscara de permisos, cuya misión no
es asignar los permisos sino restringirlos. Esto quiere decir que, la máscara especifica los
permisos que no se asignarán a los nuevos objetos que se vayan creando.

El valor de la máscara se puede consultar y modificar mediante el comando umask. El valor por
defecto de la máscara suele ser 0022.

El procedimiento de aplicación de permisos para nuevos objetos es el siguiente:

• Por defecto, se crean todos los ficheros con los permisos 666 (rw-rw-rw-)
• Por defecto, se crean todos los directorios con los permisos 777 (rwxrwxrwx)
• Se aplica la máscara (por defecto 0022)
• Se utiliza la misma máscara para todos los ficheros y directorios.
• La máscara no modifica los permisos de los objetos existentes, sino que se aplica solamente
a los nuevos objetos.

Para consultar el valor de la máscara hay que utilizar el comando umask sin parámetros:

umask
0022

Para asignar un nuevo valor de máscara, indicar el nuevo valor como parámetro.

umask 0026
umask
0026

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 194

Figura 195: Asignar valor de máscara umask


Fuente. - Elaboración Propia

Ejemplos de aplicación de la máscara:

• Para un fichero
Predeterminado rw–rw–rw– (666)
Retirar -–––w--w- (022)
Resultado rw–r––r–– (644)

• Para un directorio
Predeterminado rwxrwxrwx (777)
Retirar --––w--w- (022)
Resultado rwxr–xr–x (755)

• Suprime permisos, no realiza la resta aritmética

Predeterminado rw–rw–rw– (666)


Retirar ––––wxrwx (037)
Resultado rw–r––––– (640) (y no 629, imposible en octal)

Modificar los permisos de los archivos.

Linux dispone de 3 comandos que permite cambiar los permisos, el propietario y el grupo de un
archivo y/o directorio, respectivamente.

Comando chmod: se utiliza para cambiar los permisos del archivo o directorio.

$ chmod [permisos] [archivo/directorio] [opciones]

Comando chown: se utiliza para cambiar el propietario del archivo o directorio.

chown [nuevo usuario propietario] [archivo/directorio] [opciones]

Comando chgrp: utilizado para cambiar el grupo del archivo o directorio

chgrp [nuevo grupo] [archivo/directorio] [opciones]

¿Cómo se cambian los permisos?

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 195

Para cambiar los permisos se puede hacer de 2 maneras: utilizando taquigrafía basada en
caracteres o utilizando números.

Cambio de permisos utilizando taquigrafía de caracteres

Para poder utilizar la taquigrafía basada en caracteres tomemos en cuenta la siguiente lista con
su respectiva correspondencia.

Figura 196: Tabla de taquigrafía basada en caracteres.


Fuente. - Elaboración Propia

Vamos a practicar con el comando chmod, para ello lo primero que haremos será crear el
archivo foto1.png para ver los cambios de permisos, así que les recomiendo seguir la
secuencia:

Figura 197: Empleo del comando chmod


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 196

Si cambiamos los permisos a un directorio y deseamos que estos permisos tengan efecto sobre
todos sus subdirectorios y archivos sólo deberemos añadir la opción –R.

Ejemplo

$ chmod a=rw DIRECTORIO –R

Cambio de permisos utilizando números

Cada permiso tiene asignado un valor, incluso cuando el permiso no está activo. Para poder
utilizar los números tendremos que tener en cuenta la siguiente tabla con sus respectivos
valores:

Figura 198: Valores de permisos


Fuente. - Elaboración Propia

Cuando asignamos los permisos utilizando números debemos tener en cuenta que primero
se sumarán los valores y dicho resultado será el que se coloque, aquí una tabla que muestra
dichos valores:

Figura 199: Tabla de valores por permisos


Fuente. - Elaboración Propia

Los permisos por números se asignan en grupos de 3, es decir, para el propietario-grupo-


otros, no es factible asignar solo para uno o dos de ellos. A continuación mencionaremos
algunos ejemplos:
• rw-------- (600): Sólo el propietario tiene el derecho de leer y escribir. rw-r--r-- (644): Sólo
el propietario tiene los permisos de leer y escribir; el grupo y los demás sólo pueden leer.
• rwx------ (700): Sólo el propietario tiene los derechos de leer, escribir y ejecutar el archivo.
• rwxr-xr-x (755): El propietario tiene los derechos de leer, escribir y ejecutar; el grupo y
los demás sólo pueden leer y ejecutar.
• rwx--x--x (711): El propietario tiene los derechos de lectura, escritura y ejecución; el
grupo y los demás sólo pueden ejecutar.
• rw-rw-rw- (666): Todo el mundo puede leer y escribir en el archivo. ¡No es una buena
elección!
• rwxrwxrwx (777): Todo el mundo puede leer, escribir y ejecutar. ¡Tampoco es buena
elección!

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 197

Utilizaremos el mismo ejercicio anterior para poder practicar con los permisos utilizando números,
el único cambio que haremos será utilizar otro archivo llamado foto2.png:

Figura 200: Empleo del comando chmod


Fuente. - Elaboración Propia

8.1.4. Usar el campo de grupo para garantizar acceso a miembros de grupo


Cuentas de usuario

Según el Ministerio de Educación y Formación Profesional de España (s.f.), para poder utilizar el
sistema operativo Unix es necesario disponer de una cuenta de usuario que se compone de
nombre de usuario (login) y de contraseña (password). Las cuentas de usuario son creadas por el
administrador que en Unix es un usuario especial llamado root (ver más abajo). Los usuarios
deberán pertenecer al menos a un grupo de usuarios ya que obligatoriamente deben tener
asignado un grupo principal o grupo primario.
Cuando un usuario entra en un sistema Unix, debe identificarse indicando su nombre de usuario
(en inglés login) y su contraseña (en inglés password). Si se equivoca al introducir su nombre o su
contraseña, el sistema le denegará el acceso y no podrá entrar.

Otro de los puntos a la hora de establecer permisos es la necesidad de poder cambiar el


propietario y grupo del archivo o directorio, para hacer esta operación debe estar como root y
los usuarios y grupos que utilizará deben haber sido creados previamente.
La cuenta de usuario le permite acceder al sistema tanto de forma presencial (sentado delante
del ordenador) como de forma remota accediendo desde otro equipo por la red. Los permisos
que tiene el usuario cuando utiliza el sistema presencialmente son los mismos que tiene cuando
lo hace remotamente. Lo habitual es utilizar el sistema de forma remota ya que al ser Unix un
sistema multiusuario, la única forma de que varios usuarios lo utilicen de forma simultánea es
remotamente.
El sistema Unix codifica los usuarios con un número diferente a cada uno que es el identificador
de usuario (uid = User IDentifier). Internamente el sistema trabaja con el uid, no con el nombre
del usuario. Normalmente a los usuarios que creemos se les asignan uids desde 1000 en adelante.
Los números uid menores que 100 se reservan para usuarios especiales del sistema.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 198

En Unix, por defecto, la información de los usuarios de un sistema se guarda en el archivo


/etc/passwd. Es un archivo de texto que puede visualizarse con cualquier editor. Cada línea del
archivo /etc/passwd almacena los parámetros de un usuario. Solo puede modificarlo el
administrador (root). A continuación mostramos el archivo passwd:

Figura 201: Listado del archivo passwd


Fuente. - Elaboración Propia
Las contraseñas de cada usuario se guardan encriptadas con un sistema de codificación
irreversible, en el archivo /etc/shadow que también es un archivo de texto

Figura 202: Listado del archivo shadow


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 199

Grupos de usuarios

Para poder administrar los permisos de los usuarios de una forma más flexible, el sistema Unix
permite la organización de usuarios en grupos y establecer permisos a los grupos. Ejemplo, si en
un centro educativo el grupo "profesores" tiene acceso a ciertas carpetas, cuando demos de alta
un profesor nuevo, tan solo tendremos que añadirle al grupo "profesores" para que pueda
acceder a todas esas carpetas. Es lo que se denomina administración de permisos por grupos.

Figura 203: Usuario y grupos


Fuente. - Elaboración Propia

Todos los usuarios pertenecen al menos a un grupo que es el grupo principal del usuario, también
llamado grupo primario del usuario, pero pueden pertenecer a más grupos. En caso de que
pertenezcan a más grupos, éstos serán grupos secundarios.

Todo usuario debe pertenecer a un grupo principal obligatoriamente


Los grupos pueden contener varios usuarios. Los grupos de usuarios solo pueden contener
usuarios, nunca podrán contener a otros grupos.
El sistema Unix codifica los grupos de usuarios con un número diferente a cada uno que es el
identificador de grupo (gid = Group IDentifier). Internamente el sistema trabaja con el gid, no con
el nombre del grupo. Normalmente a los grupos que creemos se les asignan gids desde 1000 en
adelante. Los números gid menores que 100 se reservan para grupos especiales del sistema.

En Unix por defecto, la información de los grupos de un sistema se guarda en el archivo


/etc/group. Es un archivo de texto que puede visualizarse con cualquier editor. Cada línea del
archivo /etc/group almacena los parámetros del grupo y los usuarios que contiene. Solo puede
modificarlo el administrador (root). Las contraseñas de los grupos se guardan encriptadas con un
sistema de codificación irreversible, en el archivo /etc/gshadow que también es un archivo de
texto.

Usuario root

El usuario root, a veces llamado super usuario, es el usuario administrador del sistema. Está
identificado con el número de usuario cero (uid=0) y tiene permisos sobre todo el sistema sin
ningún tipo de restricción. El usuario root puede acceder a cualquier archivo, ejecutar, instalar y
desinstalar cualquier aplicación, modificar los archivos de configuración del sistema y administrar
usuarios. Si dispones de la contraseña de root tendrás control total sobre todo el sistema.

Administración de usuarios y grupos

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 200

La administración de usuarios y grupos solamente puede realizarlas el usuario root utilizando los
comandos de gestión de usuarios. Las tareas y los comandos para realizarlas son:

• Creación de usuarios / useradd


• Modificación de usuarios / usermod
• Eliminación de usuarios / userdel
• Creación de grupos / groupadd
• Modificación de grupos / groupmod
• Eliminación de grupos / groupdel
• Añadir usuarios a un grupo / adduser
• Quitar usuarios de un grupo / deluser

Creación de usuarios

El comando useradd permite añadir un usuario, indicando como parámetros la información


particular para crear el usuario en la misma line de comandos. La sintaxis es:

#useradd [opciones] nombre-usuario

Entre las opciones más destacables se tienen:

-g: Grupo principal para el usuario (debe existir previamente)


-d: Carpeta home del usuario. Suele ser /home/nombre-usuario
-m: Crear carpeta home si es que no existe.
-s: Intérprete de comandos (shell) del usuario. Suele ser /bin/bash

Ejemplo, para crear un usuario llamado 'pedro' cuyo grupo principal sea 'profesores', cuya
carpeta home sea /home/pedro y su intérprete de comandos sea /bin/bash, se ejecuta el
siguiente comando:

#useradd -g profesores -d /home/pedro -m -s /bin/bash pedro

De esta manera, se ha creado al usuario pedro y su carpeta home. Si no se utiliza la opción -


m, no se creará la carpeta home del usuario; en tal caso, se tendría que crear manualmente.
Tan solo quedará establecer su contraseña con el comando passwd:

# passwd pedro

Figura 204: Creación de Usuario y asignación a grupo


Fuente. - Elaboración Propia

Entonces el sistema preguntará dos veces la contraseña a asignar a pedro.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 201

También se puede ver información sobre la expiración de la contraseña del usuario con el
comando chage.

Figura 205: Ver información sobre expiración de la contraseña de usuario


Fuente. - Elaboración Propia

Si se quiere que el usuario cambie su contraseña cada 90 días, escribir lo siguiente:

# chage -M 90 pedro

Figura 206: El usuario debe cambiar la contraseña de usuario cada 90 días


Fuente. - Elaboración Propia

Ahora se observa que la contraseña de "pedro" expirará el 09 de mayo de 2021 (90 días más
tarde).

Para el Ministerio de Educación y Formación Profesional de España (s.f.), el comando useradd


permite crear muchos usuarios automáticamente mediante archivos de comandos (scripts).

Se recomienda que el nombre de usuario sea en minúsculas y además de letras también puede
contener números y algún signo como guiones normales y guiones bajos. Debemos recordar que
unix distingue entre mayúsculas y minúsculas, es decir, Pepe es distinto de pepe.

Modificación de usuarios

Se utiliza el comando usermod y permite cambiar el nombre del usuario, su carpeta home, su
intérprete de comandos, los grupos a los que pertenece y algunos otros parámetros.

Para cambiar el home de un usuario:

# usermod -d /home/carpeta_pedro pedro

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 202

Eliminación de usuarios

Se realiza con el comando userdel seguido del nombre del usuario. Con la opción -r eliminará
también su carpeta home, ejemplo:

# userdel -r pedro

Eliminaría el usuario pedro y su carpeta home.

Creación de grupos

El comando groupadd permite añadir un grupo indicando como parámetro el nombre del
grupo. Ejemplo, si deseamos crear un grupo llamado 'alumnos' ejecutaremos:

# groupadd alumnos

Modificación de grupos

El comando groupmod permite modificar el nombre de un grupo o el gid del mismo. La sintaxis
es: sudo groupmod [-g nuevo-gid] [-n nuevo-nombre] nombre-grupo, ejemplo:

Para cambiar el gid del grupo ‘profesores’:

# groupmod -g 2000 profesores

Eliminación de grupos

Se realiza con el comando groupdel seguido del nombre del grupo, ejemplo:

# groupdel profesores

Eliminaría el grupo profesores. Si algún usuario tuviera dicho grupo como grupo primario, el
comando groupdel no eliminará el grupo.

Añadir usuarios a un grupo

Se utiliza el comando adduser seguido del nombre del usuario y del nombre del grupo al que
queremos añadirle, ejemplo:

Para añadir ‘juan’ al grupo ‘alumnos’:

# adduser juan alumnos

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 203

Figura 207: Añadir usuario a grupo


Fuente. - Elaboración Propia

Quitar usuarios de un grupo

Se utiliza el comando deluser seguido del nombre del usuario y del nombre del grupo del que
queremos quitarle, ejemplo:

Para quitar a 'juan' del grupo 'alumnos':

# deluser juan alumnos

Figura 208: Eliminar usuario a grupo


Fuente. - Elaboración Propia

Para más información de todos estos comandos, se puede consultar la ayuda del manual
ejecutando man, seguido del nombre del comando, ejemplo: man adduser.

Cambiando el propietario

Otro de los puntos a la hora de establecer permisos es la necesidad de poder cambiar el


propietario y grupo del archivo o directorio, para hacer esta operación debe estar como root y
los usuarios y grupos que utilizará deben haber sido creados previamente.

Utilizar el comando chown.

# chown cibertec foto1.png

Al cambiar el propietario del archivo, ahora el usuario Cibertec será el propietario del archivo
foto1.png

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 204

Figura 209: Cambiando de propietario


Fuente. - Elaboración Propia

# chown juan foto2.png

Figura 210: Cambiando de propietario


Fuente. - Elaboración Propia

El usuario juan será el propietario del archivo foto2.png

Al a cambiar el propietario de un directorio y con todos sus subdirectorios y archivos en forma


recursiva, se utilizará la opción –R.

# chown juan fotos/ –R

Figura 211: Cambiando de propietario a Directorio


Fuente. - Elaboración Propia

El usuario juan será el nuevo propietario de todos los archivos y subdirectorios que estén
dentro del directorio fotos/

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 205

Cambiando el grupo

Utilizar el comando chgrp.

# chgrp cibertec foto1.png

Al cambiar el propietario del archivo, ahora el archivo foto1.png será del grupo cibertec.

# chgrp juan foto2.png

El archivo foto2.png será del grupo juan.

Al cambiar el grupo de un directorio y con todos sus subdirectorios y archivos en forma


recursiva utilizaremos la opción –R:

# chgrp cibertec datos/ –R

Todos los archivos y subdirectorios del directorio fotos/ serán del grupo Cibertec

Figura 212: Cambiando de grupo archivos y directorio


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 206

Resumen
1. En esta unidad, se validó la administración de los archivos y directorios mediante los
usuarios o grupos, a los cuales pertenecen los usuarios. También, se vio los modos de
accesos de SUID, SGID y Sticky, y cómo poder modificar el acceso a los archivos y directorios
mediante los comandos chmod.

Recursos
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta unidad:

o Usuarios y grupos en Linux | 06 Crear usuarios y grupos en Ubuntu 20.04 LTS:


https://www.youtube.com/watch?v=GblmgUcooLo

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 207

UNIDAD

9
ADMINISTRACIÓN DE TAREAS DEL
SISTEMA
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno realiza la configuración para automatizar tareas
administrativas del sistema y el mantenimiento de los registros del sistema.

TEMARIO
9.1 Tema 14 : Automatizar tareas administrativas planificando tareas del sistema
9.1.1 : Administrar tareas con la utilidad Cron y At, configura el acceso del
usuario a los servicios Cron y At del sistema

9.2 Tema 15 : Registro de actividad del sistema


9.2.1 Introducción, sistema de registros Syslog, configuración de syslogd,
rotar archivos de registros y revisar contenidos de registros

ACTIVIDADES PROPUESTAS

• Los alumnos realizan la configuración para automatizar las tareas


administrativas del sistema.
• Los alumnos realizan la configuración y mantenimiento de los registros del
sistema.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 208

9.1. AUTOMATIZAR TAREAS ADMINISTRATIVAS PLANIFICANDO TAREAS


DEL SISTEMA

9.1.1. Administrar tareas con la utilidad Cron y At, configura el acceso del usuario a
los servicios Cron y At del sistema
CRON

Cron es una utilidad que sirve para ejecutar tareas programadas según una combinación de la
hora, día del mes, mes, día de la semana y semana. Además, asume que el sistema está encendido
de forma continua. Si el sistema no está activo cuando está programada una tarea, Cron no se
ejecuta.

Para usar el servicio Cron, se debe tener el paquete Cron y el servicio crond debe estar en
funcionamiento. Para determinar si el paquete está instalado, use el comando apt -qq list cron.
Para determinar si el servicio está funcionando, utilice el comando systemctl status cron.

Cron administra los procesos en segundo plano que ejecuta trabajos a intervalos regulares. Cron
se utiliza para automatizar tareas que hay que realizar periódicamente. Los procesos que deben
ejecutarse y la hora en la que deben hacerlo, se especifican en el archivo crontab del usuario que
ejecutará los procesos.

Figura 213: Verificar si el paquete y servicio cron están en el sistema


Fuente. - Elaboración Propia

Para editar este fichero se puede utilizar un editor favorito. Para ello, se debe tener la variable
de entorno EDITOR definida y usar crontab -e para editar crontab. Un ejemplo usando el editor
vi:

[root@soa]# export EDITOR=”vi”


# crontab -e

En el fichero crontab se define una línea por tarea/trabajo a ejecutar y el formato de la


misma es el siguiente:

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 209

minutos (0 -
------------- 59)
horas (0 -
| ----------- 23)
dí del mes (1 -
| | --------- a 31)
m
| | | ------- es (1 - 12)
| | | | ----- día de la semana (0 - 6) (domingo=0, lunes=1, ... sábado=6)
|||||
a
ejecut
* * * * * comando ar
lo
* significa todos s valores validos
un
/ permite definir a repetición
- permite definir un rango
, permite definir varios valores

Valores de tiempo definidos

Figura 214: Valores temporales definidos.


Fuente.- Tomado de http://somebooks.es/programar-una-tarea-repetitiva-en-ubuntu-server-20-04-lts/

Configuración de una tarea Cron

El fichero de configuración principal de cron, /etc/crontab, contiene las líneas siguientes:

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 210

Figura 215: Contenido archivo /etc/crontab


Fuente. - Elaboración Propia

Según el Massachusetts Institute of Technology (s.f.a), las primeras cuatro líneas son variables
que se usan para configurar el entorno en el que se ejecutan las tareas Cron. El valor de la
variable SHELL indica al sistema el entorno de shell que deberá utilizarse (en este ejemplo, el
shell de bash) y la variable PATH, define la ruta usada para ejecutar los comandos.
El resultado de las tareas Cron se envía por correo electrónico al nombre de usuario definido
con la variable MAILTO. Si la variable MAILTO se define como una cadena vacía (MAILTO=""), no
se enviará correo electrónico. La variable HOME puede utilizarse para establecer el directorio
principal que deberá usarse al ejecutar los comandos o scripts.

Cada línea del archivo /etc/crontab representa una tarea y tiene el formato siguiente:

minute hour day month dayofweek command

• minute — número entero entre 0 y 59


• hour — número entero entre 0 y 23
• day — número entero entre 1 y 31 (debe ser un día válido si se especifica un mes)
• month — número entero entre 1 y 12 (o nombre corto del mes, por ejemplo, ene, feb, etc.)
• dayofweek — número entero entre 0 y 7, donde 0 o 7 corresponde a Domingo (o el nombre
corto del día de la semana, por ejemplo, dom, lun, etc.)
• command — el comando a ejecutar (el comando puede ser uno tal como ls /proc >>
/tmp/proc o el comando para ejecutar un script personalizado.)

En cualquiera de los valores antes indicados, se puede utilizar un asterisco (*) para especificar
todos los valores válidos. Por ejemplo, un asterisco para el valor de mes significa que el comando
se ejecutará cada mes dentro de las limitaciones del resto de los valores.

Un guión (-) entre los números enteros indica un intervalo de números enteros. Por ejemplo, 1-
4 significa los números enteros 1, 2, 3 y 4.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 211

Una lista de valores separados por comas (,) específica una lista. Por ejemplo, 3, 4, 6, 8 indica
esos cuatro números enteros.

La barra oblícua (/) puede utilizarse para especificar valores de salto. El valor de un número
entero se puede saltar dentro de un rango si se indica a continuación del rango con /<número
entero>. Por ejemplo, 0-59/2 puede usarse para definir cada otro minuto en el campo minuto.
Los valores de salto también pueden utilizarse con un asterisco. Por ejemplo, vamos a programar
el apagado automático del servidor, todos los días laborables a las 15:30 horas.

Figura 216: Programar el apagado automático del sistema


Fuente. - Elaboración Propia

Las líneas que empiezan por almohadilla o símbolo numeral (#) son comentarios y no se procesan.

Como podrá observar en el archivo /etc/crontab, usa el script run-parts para ejecutar los scripts
en los directorios /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, y /etc/cron.monthly cada
hora, diariamente, semanalmente o mensualmente, respectivamente. Los archivos en estos
directorios deben ser scripts de Shell.

Si las tareas Cron deben ejecutarse según una programación distinta a la hora, día, semana o mes,
esto puede agregarse en el directorio /etc/cron.d. Todos los ficheros de este directorio utilizan la
misma sintaxis que /etc/crontab.

record the memory usage of the system every monday


at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
run custom script the first day of every month at 4:10AM 10 4 1 * *
/root/scripts/backup.sh

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 212

Los usuarios no root pueden configurar las tareas Cron tasks con la utilidad crontab. Todos los
crontabs definidos por el usuario se almacenan en el directorio /var/spool/cron y se ejecutan
utilizando los nombres de los usuarios que los han creado. Para crear un crontab como un
usuario, inicie la sesión como ese usuario y escriba el comando crontab -e para modificar el
crontab del usuario con el editor especificado por la variable de entorno VISUAL o EDITOR. El
fichero usa el mismo formato que /etc/crontab. Cuando se guardan los cambios en crontab, el
crontab se almacena según el nombre de usuario, y se escribe en el fichero
/var/spool/cron/username.

El demonio cron controla el fichero etc/crontab, el directorio etc/cron.d/ y el directorio


/var/spool/cron cada minuto para cada cambio. Si se encuentra algún cambio, estos se descargan
en la memoria. De este modo, el demonio no necesita ser reiniciado si se cambia un fichero
crontab.

Control de acceso a Cron

Los ficheros /etc/cron.allow y /etc/cron.deny se usan para restringir el acceso a Cron. El formato
de los dos ficheros de acceso es un nombre de usuario en cada línea. No está permitido espacio
en blanco en ninguno de los ficheros. El demonio Cron (crond) no deberá ser reiniciado si los
ficheros de control de acceso se modifican. Los ficheros de control de acceso se leen cada vez
que el usuario intenta añadir o borrar una tarea cron.

El usuario root puede utilizar siempre Cron, sin prestar atención a los nombres de usuarios
listados en los ficheros de control de acceso.

Si existe el fichero cron.allow, tan sólo se permitirá a los usuarios presentes en la lista utilizar
Cron y el fichero cron.deny se ignorará.

Si cron.allow no existe, a todos los usuarios listados en cron.deny no se les permite usar Cron.

Iniciar y finalizar el servicio

Para iniciar el servicio Cron, use el comando /sbin/service crond start. Para parar el servicio, use
el comando /sbin/service crond stop. Se le recomienda que inicie el servicio en el tiempo de
arranque.

AT

Según el Massachusetts Institute of Technology (s.f.b), mientras que CRON se usa para programar
tareas, el comando at se usa para programar una única tarea en un tiempo específico. El comando
batch se usa para programar que se ejecute una única tarea cuando la carga promedio de los
sistemas estén por debajo de 0.8.

Para poder usar at or batch debe tener el paquete at instalado y el servicio atd en
funcionamiento. Para determinar si el paquete está instalado, utilice el comando apt -qq list at.
Para determinar si el servicio se está ejecutando, utilice el comando systemctl atatus atd.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 213

Figura 217: Verificando paquete y servicio at


Fuente. - Elaboración Propia

Configuración de tareas

Para programar una tarea no repetitiva en un tiempo específico, escriba el comando at time, en
el que time es el tiempo para ejecutar el comando.

El argumento time puede ser uno de los siguientes:

• formato HH:MM — Por ejemplo,04:00 especifica 4:00AM. Si se inserta el tiempo, se


ejecuta en el tiempo específico el día después.
• midnight — Especifica 12:00AM.
• noon — Especifica 12:00PM.
• teatime — Especifica 4:00PM.
• formato del nombre-mes, día y año — Por ejemplo, febrero 15 del año 2021. El año es
opcional.
• formato MMDDYY, MM/DD/YY, o MM.DD.YY — Por ejemplo, 021521 para el día 15 de
febrero del año 2021.
• now + time — el tiempo está en minutos, horas, días o semanas. Por ejemplo, now + 5 días,
especifica que el comando debería ser ejecutado a la misma hora en 5 días.

La hora debe ser especificada en primer lugar, seguido por la fecha opcional. Para más
información sobre el formato del tiempo, lea el fichero del texto /usr/share/doc/at-
<version>/timespec.

Tras haber escrito el comando at con el argumento del tiempo, el prompt at> será visualizado.
Escriba el comando a ejecutar, pulse [Intro] y escriba Ctrl-D. Se puede especificar más de un
comando escribiendo cada comando seguido de la tecla [Intro]. Después de haber escrito todos
los comandos, pulse [Intro] para obtener una línea en blanco y escriba Ctrl-D. Alternativamente,
se puede introducir un script de shell en el intérprete de comandos y escribir Ctrl-D en una línea
en blanco para salir. Si se introduce un script, la configuración de la shell usada será la
configuración de la shell en la SHELL del usuario, la shell de registro del usuario o /bin/sh (el
primero que se encuentre).

Si la configuración de comandos o el script intentan visualizar información, la salida de datos será


enviada vía correo electrónico al usu

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 214

Visualización de las tareas pendientes

Para visualizar las tareas pendientes at, use el comando atq. Muestra una lista de las tareas
pendientes, con cada trabajo en una línea. Cada línea sigue el formato de número de tarea, la
fecha, la hora, el tipo de tarea y nombre de usuario. Los usuarios tan sólo pueden ver sus propias
tareas. Si el usuario root ejecuta el comando atq, se visualizarán todas las tareas de todos los
usuarios.

Figura 218: Visualizar tareas pendientes de ejecutar


Fuente. - Elaboración Propia

Control de acceso a At

Los ficheros /etc/at.allow y /etc/at.deny pueden ser usados para restringir el acceso al comando
at. El formato de ambos ficheros de control de acceso es un nombre de usuario en cada línea. El
espacio en blanco no está permitido en ningún fichero. El (atd) demonio at no deberá ser
reiniciado si los ficheros de control de acceso son modificados. Los ficheros de control de acceso
se leen cada vez que un usuario intenta ejecutar el comando at.

El usuario root siempre puede el comando at, sin tener en cuenta los ficheros de control de
acceso.

Si existe el fichero at.allow tan sólo se permitirá a los usuarios listados usar at y el fichero at.deny
será ignorado (Massachusetts Institute of Technology, s.f.b).

Si at.allow no existe, a los usuarios listados en at.deny no se les permitirá usar at.

Iniciar y finalizar el servicio

Para iniciar el servicio at, use el comando systemctl start atd. Para detener el servicio, use el
comando systemctl stop atd. Se recomienda iniciar el servicio durante el momento de arranque.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 215

9.2. REGISTRO DE ACTIVIDAD DEL SISTEMA

9.2.1. Introducción, sistema de registros Syslog, configuración de Syslogd, rotar


archivos de registros y revisar contenidos de registros
Según LinuxParty (2015), Linux mantiene archivos de registros (logfiles) a los que se reportan
sucesos relevantes sobre el funcionamiento del sistema, ya sea como del propio kernel o de
servicios de red que se encuentran ejecutados de forma permanente en segundo plano
(demonios).

Estos archivos de registros son especialmente útiles para detectar fallas en el sistema, o incluso
prever estas mediante la monitorización de archivos claves o concretos de un servicio. Una de las
obligadas tareas que tiene un administrador de sistemas es precisamente revisar estos archivos
de registro periódicamente para poder anticiparse a problemas venideros o por ejemplo conocer
las causas de porque un servicio no se ejecuta de forma correcta.

Una particularidad común de todos los sistemas de registro y los archivos en los que se acumula
la información es que crecen, de hecho pueden crecer tanto que dejen el sistema operativo ‘no
operativo‘, dependiendo de donde se estén guardando estos archivos.

Por ejemplo si tenemos una partición ‘/‘(raíz) en la que se encuentra el directorio /var y bajo este
lo normal es encontrar los archivos de registro (/var/log/*) puede hacer que el espacio asignado
para la partición raíz se llene impidiendo incluso el acceso de nuevos usuarios al sistema o
trabajando de una forma extraña. Por ello el administrador del sistema está obligado a definir
una política de seguridad ante tal problema. La política que se implemente estará definida de
acuerdo con el esfuerzo de administración que conlleve o a la importancia que la organización le
preste a tal problema, entre otras. Algunas de las políticas suelen ser:

No almacenar archivos de registro. Evidentemente esta opción es muy poco recomendable,


aunque evidentemente se establecerá o no, en función de la criticidad del sistema.

Resetear los archivos periódicamente. Puede ser una medida a corto plazo contra el llenado de
espacio de un disco o partición, pero a largo plazo puede ser desastrosa, ya que no contaremos
con los archivos de registro que quizás necesitemos en función del tiempo que haya pasado.

Rotar los archivos en función del tiempo transcurrido. Esta suele ser una de las medidas más
adoptadas por administradores de sistemas. Es una política configurable desde los propios
archivos de configuración del sistema de registro que estemos usando. Una vez rotado el archivo,
el antiguo es comprimido (ahorrando espacio en disco) y quizás llegue el momento en el que sea
automáticamente eliminado dependiendo del tiempo de rotación y cantidad de archivos rotados
almacenados en el disco que hayamos definidos. Algunos sistemas de registro como Journal
comprimen directamente los archivos de registros.

Almacenar los archivos de registro. Si disponemos de una unidad externa de almacenamiento o


partición destinada a copias de seguridad, podemos guardar nuestros archivos de registro en
dicha unidad y acceder a ellos cuando fuese necesario.

Nota: Podemos jugar con las opciones de rotar y almacenar para encontrar una solución
definitiva.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 216

Existen diferentes sistemas de registro para Linux. Vamos a estudiar el demonio syslogd, syslog-
ng (syslog de nueva generación), rsyslog y Journal
Syslog

Es un sistema que procura centralizar el manejo de los registros de eventos que generan los
diversos programas que corren bajo un sistema Linux. Por un lado, facilita a los desarrolladores
de aplicaciones la generación y el manejo de mensajes a registrar, y por otro lado facilita a los
administradores de sistema el manejo de forma centralizada de los mensajes provenientes de
diferentes aplicaciones. Syslog clasifica los mensajes por origen e importancia, y los envía a
diferentes destinos como pueden ser archivos, la terminal o eventualmente a un comando que
lo reenvíe a direcciones de correo electrónico o paginador. Syslog permite manejar mensajes
originados en diferentes sistemas de la red.

Los componentes más importantes de syslog son:

• syslogd: el servicio que recibe los mensajes y los almacena de acuerdo con la
configuración del archivo /etc/syslogd.conf
• openlog(), syslog() y closelog(): rutinas de la biblioteca C estándar para permitir la
comunicación entre syslog y el programa.
• logger: comando de usuario para agregar un mensaje a un archivo de registro

Instalación y configuración de syslogd

El demonio syslogd es uno de los primeros que se lanza cuando el sistema se inicia, para
comenzar a recibir mensaje desde los diferentes servicios de red y registrarlos en sus respectivos
archivos de registro de acuerdo con lo especificado en su archivo de configuración.

En ocasiones se suelen confundir o comparar los demonios syslogd y klogd, este último registra
los eventos del kernel. Ambos demonios son instalados mediante el mismo paquete sysklogd
desde los repositorios oficiales.

Una vez tengamos instalado el sistema de registro tendremos que configurarlo, esto como
mencionamos anteriormente lo haremos desde el archivo de configuración /etc/syslogd.conf.
Este archivo tiene un formato sencillo, pero ofrece un gran potencial. Las líneas adoptan la
siguiente forma:

recurso.prioridad acción

En algunos documentos, libros, wikis, etc., podremos leer facility.level en vez de su traducción
recurso.prioridad, al final ambos identifican a un selector. Es decir, un selector estará formado
por un recurso que no es más que el código del tipo de programa que generó el mensaje y la
prioridad, que será igualmente un código que identifique la importancia que tendrá ese
mensaje. El campo acción decide el que se hará con todos los mensajes que se identifiquen con
un determinado selector (recurso. Prioridad).

Vamos a ver los posibles valores de cada campo y seguidamente expondremos un ejemplo para
ver esto de una forma más clara.

recurso: Suelen ser valores prefijados por el sistema e identifican a uno o varios servicios como
auth (mensajes relacionado con la seguridad), mark (reservado para uso interno), mail, Cron,

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 217

daemon, lpr, ftp, news, syslog, uucp y desde local0 hasta local7 (usados con cierta libertad por el
usuario para diferentes aplicaciones). No todos los recursos se encuentran aquí enumerado. Si
quisiéramos especificar más de un recurso para una prioridad y acción concreta en una sola línea
del archivo se utiliza el carácter ‘,‘ (coma) y si queremos definir todos los recursos para una
prioridad y acción ‘*‘ (asterisco)

prioridad: Con este campo seleccionaremos que mensajes queremos incluir en uno u otro archivo
de registro para uno o varios recursos. Los códigos de prioridad, listados de menor a mayor
prioridad son: debug, info, notice, warning (warn), err (error), crit, alert y emerg o panic (este
último en desuso, al igual que warn y error). La prioridad debug registra la mayor parte de la
información (pensado para depurar programas) y en el extremo opuesto emerg, que registrará
los mensajes para problemas muy serios. Un aspecto importante para tener en cuenta es saber
que mensajes serán guardados en los archivos de registro. Todos los mensajes emitidos por los
recursos se acompañan de un código de prioridad, y serán registrados por defecto siempre y
cuando el código sea igual o superior (esto es modificable) al indicado en el archivo de
configuración para ese determinado recurso. A continuación, veremos esto con un ejemplo.

Acción: Existen varias opciones para este campo, la más utilizada es la de guardar los registros en
un archivo, el cual deberá de estar creado de antemano y bastará con indicar el path completo.
Podemos enviar los registros al demonio syslogd de otra máquina escribiendo ‘@<nombre
máquina o IP>‘ o reenviar a la terminal de un usuario siempre y cuando este esté logueado
indicando como acción un archivo de dispositivo de consola (/dev/console). En esta última opción
podremos separar diferentes usuarios con el carácter ‘,‘ o marcar a todos con un asterisco ‘*‘.
Algunos sistemas permiten enviar el mensaje a la entrada estándar de un comando mediante un
pipe ‘|‘.

Los espacios entre los selectores (recurso. Prioridad) y la acción suelen ser tabulaciones. Vamos
a clarificar con algunos ejemplos las situaciones descritas en los puntos anteriores.

Registrar todos los mensajes (*) del recurso mail al archivo /var/log/mail:

mail.* /var/log/mail

Enviar solo los mensajes con prioridad notice para los recursos news y mail a la consola
principal del sistema:

news,mail.=notice /dev/console

Nota: Podemos separar varios recursos son ‘,‘. Si en el archivo de configuración existe también
la entrada del ejemplo anterior, los mensajes de mail para prioridad notice serán enviados a la
consola y registrados en /var/log/mail. Podríamos haber cambiado /dev/console por
‘*‘(asterisco) para enviar los mensajes a todas las consolas de modo texto abiertas en el
sistema.

Registrar todos los mensajes con prioridad crit o superior (es decir; crit, alert y emerg) del recurso
daemon en /var/log/error y los mensajes con prioridad warn o menor (es decir; warn, notice, info
y debug) para el recurso lpr en /var/log/lpr-info. Si queremos especificar los mensajes con
prioridad igual o menor a una determinada prioridad lo haremos con el carácter de admiración
‘!‘:

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 218

daemon.crit /var/log/error
lpr.!warn /var/log/lpr-info

Ahora vamos a ver cómo manejar diferentes mensajes según su prioridad para un recurso con
acciones diferentes. En este ejemplo vamos a enviar con la primera línea todos los mensajes
generados por el kernel al archivo /var/log/kernel, con la segunda línea indicaremos que además
de registrarse en el archivo, aquellos que tengan una prioridad crit o superior se enviarán a
syslogd de otro sistema (el otro sistema tiene que estar configurado para tal fin) y además esos
mismos mensajes también serán impresos por terminal gracias a la tercera línea. Por último,
haremos que todos los mensajes comprendidos entre la prioridad info y err, además de ser
enviados al archivo /var/log/kernel gracias a la primera línea, serán escritos en el archivo
/var/log/kernel-info:

kern.* /var/log/kernel
kern.crit @unamaquina.enundominio.es
kern. crit /dev/console
kern.info; kern.! err /var/log/kernel-info

Nota: Vemos como hemos seleccionado dos selectores separados por el carácter ‘;’ para ser
comprendidos por una misma acción

Añadir registros manualmente

Cuando mencionamos anteriormente los componentes más importantes de syslog vimos que
logger es la herramienta que nos permite crear registros de forma manual.

$ logger ejemplo del funcionamiento de logger

El resultado sería seguramente una entrada en el archivo /var/log/message con el siguiente


contenido:

Feb 11 18:02:27 LiMinCinn nebul4ck: ejemplo del funcionamiento

Rotar archivos de registro

La rotación del registro se controla a través del archivo /etc/logrotate.conf en el que se suele
incluir la referencia a los archivos bajo /etc/logrotate.d/. Las entradas de estos archivos le indican
al sistema si debe rotar los registros a intervalos fijos o cuando estos almacenen un tamaño
concreto. Cuando un registro rota, se renombra y dependiendo de la configuración se comprimirá
o no, se creará uno nuevo e incluso puede que se borre el archivo de registro comprimido más
antiguo de los existentes.

Para rotar archivos de registros necesitaremos tener instalado el paquete logrotate, tener una
buena configuración y ser lanzado periódicamente, algo de lo que se encargará Cron o en su

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 219

defecto (ya que esta tarea es ejecutada por las noches y la mayoría de los pc de usuario duermen
en estas horas) anacron, pero de esto hablaremos en las próximas secciones.

Cuando se invoca logrotate este consulta su archivo de configuración (o archivos en caso de que
este referencie a otros como /etc/logrotate.d/*) y actuará en función de los ajustes que en él o
ellos encuentre.

Si se especifica la inclusión de archivos de configuración bajo /etc/logrotate.d significará que


habrá servicios que configuren sus propios archivos de registro de los que además serán los
propietarios. Algunos de los servicios que tienen tal comportamiento podrían ser: apt, aptitude,
Yum, dpkg, Samba, ufw y Upstart. A continuación, pondremos uno de estos archivos a modo de
ejemplo.

Figura 219: Visualización de archivo dpkg


Fuente. - Elaboración Propia

Algunas de las características más importante de los archivos de configuración individuales para
logrotate están contemplados en la imagen anterior, aun así vamos a nombrar algunos más.

Nomenclatura de los archivos rotados: Por defecto a los archivos rotados se le


asigna un digito como extensión al nombre del archivo, por ejemplo: smbd.log.3 (indica que este
archivo a rotado un total de tres veces). Podemos cambiar este comportamiento con la opción
dateext

Opciones de compresión: Definida en nuestro ejemplo con la palabra compress. Por defecto se
comprimen con gzip, si queremos usar por ejemplo bzip podemos definirlo así: compresscmd
bzip2 e indicar opciones del comando, como la tasa de compresión con compressoptions.

Crear un nuevo archivo de registro tras la rotación: Podemos hacer que se cree un nuevo archivo
con la opción copytruncate que lo que realmente hace es copiar el archivo antiguo y vaciar su
contenido, o por ejemplo pasar un usuario propietario y unos permisos (esto no siempre
funciona): create 644 samba samba.

Opciones temporales: Con daily, weekly y monthly provocaremos que los registros roten
diariamente, semanalmente o mensualmente respectivamente.

Opciones de tamaño: Si no queremos rotar en función del tiempo podremos hacerlo


especificando un tamaño máximo de archivo de registro, por defecto el valor es en bytes aunque
podemos cambiar esto con los sufijos k o M. size 100k para que el archivo rote cuando haya
llegado al tamaño de 100Kilobytes.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 220

Opciones de rotación: Con rotate ‘número’ indicaremos cuantos archivos de registros antiguos
queremos conservar. Si indicamos rotate 3, tendremos smbd.1.gz, smbd.2.gz y smbd.3.gz.
Cuando el que actualmente está registrando los mensajes llegue a su tamaño de cota o al tiempo
límite de rotación pasará a llamarse smbd.1.gz y smbd.3.gz será eliminado. Los otros dos archivos
pasarán del 1 al 2 y el otro del 2 al 3.

Opciones de correo: Utilizando mail ‘dircorreo’ podremos enviar el archivo que rota por correo
electrónico. Con nomail no enviaremos ningún correo.

Scripts: Las palabras claves prerotate y postrotate indican que se ejecute una acción (comando)
antes o después de haber rotado un archivo de registro. En
nuestra imagen tenemos el ejemplo. Para finalizar la ejecución de los comandos lo haremos con
endscript.

Revisar el contenido de los archivos de registro

Para revisar un archivo de registro primero deberemos de encontrar el archivo y luego buscar la
información deseada dentro de este. Lo normal es que los archivos de registro se guarden bajo
el directorio /var/log, que a su vez como hemos visto en el ejemplo de samba puede haber un
directorio para un servicio concreto y dentro de este encontremos el archivo de registro.
Utilizaremos normalmente las herramientas cat, tail y head, o los paginadores less y more.

La mayoría de los mensajes enviados por el sistema suelen guardarse en el archivo


/var/log/messages, archivo que podremos desplegar con el comando dmesg.

Otros archivos de registros importantes son auth.log, utmp, wtmp y lastlog. Linux mantiene un
registro en los archivos utmp y lastlog sobre información de los usuarios como por ejemplo si un
usuario está logueado en el sistema, en que terminal y desde cuándo. Estos archivos son
actualizados en cada login y logout guardando además esta información en el archivo wtmp que
mantendrá entonces un histórico sobre los inicios de sesión de los usuarios. Al ser un archivo que
va creciendo deberemos de tenerlo contemplado en la configuración de logrotate.

Estos archivos están en formato binario, pero podrán ser desplegados con los comandos who, w
y lastlog. El comando who desplegará el contenido del archivo utmp por lo que veremos los
registros de los usuarios actualmente dentro del sistema, en que terminales se encuentran
(pts/<número>, si iniciaron una terminal virtual desde el entorno gráfico o tty<número> si se
lanzó la consola al inicio de sesión. Podremos ver también la terminal actual con el comando tty)
y la hora de inicio de sus sesiones. El comando w se comporta de la misma manera, pero nos
ofrece algo más de información como por ejemplo el display utilizado. Si queremos desplegar el
contenido del archivo de registro lastlog bastará con invocar a lastlog, el cual depslegará una lista
de todos los usuarios de /etc/passwd mostrando su último inicio de sesión (para los usuarios
nunca logueados aparecerá: Never logged in). Para desplegar el contenido del archivo wtmp
(histórico de login y logout de usuarios) pasaremos como parámetro el nombre del archivo wtmp
al comando who:

$ who /var/log/wtmp

O bien utilizando directamente el comando last o lastb para ver el histórico de logueos e incluso
logueos fallidos, respectivamente.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 221

Nota: Los comandos w, who, last y lastb nos muestran como mínimo el usuario, la terminal, el
display y la hora de inicio. El comando w además muestra la carga del sistema y el número de
usuarios conectados. who y last muestra además la fecha.

La ubicación de estos archivos varía de un sistema a otro. El archivo utmp habitualmente está en
el directorio /etc o /var/run, el archivo wtmp suele estar en /var/log o /var/adm al igual que el
archivo lastlog.

Una vez identificado el archivo de registro necesitado podremos desplegar su contenido con uno
de los paginadores conocidos (more o less), buscando contenido específico con grep, o tail y head
que podrán sernos igualmente útiles y si queremos dejar
monitorizando un archivo de registro específico ya sabemos que la opción -f de tail nos permite
tal acción.

Existen herramientas avanzadas de análisis del registro como Logcheck que forma parte del
paquete Sentry Tools o Whatlogh (LinuxParty, 2015).

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 222

Resumen
1. En esta unidad, se vió la administración de tareas con la utilidad Cron y At, configuración
de acceso de los usuarios a los servicios Cron y At, se aprendió a crear tareas con Cron y
at. Asimismo, se vio el sistema de registro syslog, configuración de syslogd, opciones de
registro, registro manual de datos, rotar archivos de registros y revisar contenidos de
registros.

Recursos
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta unidad:

o Cómo utilizar Crontab: https://www.youtube.com/watch?v=1flpMHngRGI


o Administración de Logs en Linux: https://www.youtube.com/watch?v=fPKjbqFQypg

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 223

UNIDAD

10
FUNDAMENTOS DE REDES
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el alumno configura la interface de red y utiliza herramientas
para comprobar el estado de la red, implementa soluciones de alta disponibilidad y
tolerancia a fallos.

TEMARIO

10.1 Tema 16 : Networking en Linux


10.1.1 : Instalar y configurar hardware de red, configurando la red con
DHCP, IP estático, configurando enrutamiento, resolución de
nombres de host
10.1.2 : Diagnosticar la red, verificar conectividad de red, traza de rutas,
comprobar el estado de la red
10.1.3 : Configuración avanzada de IP Alias
10.1.4 : Acoplamiento de las interfaces de red – Bonding y Bridge
10.1.5 : Utilitarios de red: Netstat y Traceroute
10.1.6 : Acceso remoto por SSH

10.2 Tema 17 : Arreglo de disco y volúmenes lógicos


10.2.1 : Niveles de RAID
10.2.2 : Implementación de arreglos de discos (RAID 1) en Linux
10.2.3 : Administración de volúmenes lógicos
10.2.4 : Laboratorio: implementar una solución de almacenamiento con
RAID y LVM

ACTIVIDADES PROPUESTAS

• Configurar eficientemente los parámetros IP para un servidor en producción.


• Establecer conexión remota administrativa al servidor Linux Ubuntu
• Implementar arreglos de discos. RAID por software
• Implementar volúmenes lógicos LVM.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 224

10.1. NETWORKING EN LINUX

10.1.1. Instalar y configurar hardware de red, configurando la red con DGCP, IP


estático, configurando enrutamiento, resolución de nombres de host
La mayoría de las distribuciones ofrecen medios para configurar la red durante la instalación del
sistema. Lo más normal es que la red ya esté en funcionamiento en nuestro sistema, de no ser
así, podemos hacer una configuración mediante DHCP o direcciones IP estáticas. Los mecanismos
de configuración de red de Linux se basan en scripts de inicio y sus ficheros de configuración,
también es posible utilizar herramientas GUI para configurar la red.

Configuración del hardware de red

Poner en funcionamiento el hardware de red, en la mayoría de los casos, es una tarea bastante
automatizada. La mayoría de las distribuciones vienen con scripts de inicio del sistema que
detectan automáticamente la tarjeta de red y cargan el módulo del driver correspondiente. Si
recompilamos el kernel, tendremos que asegurarnos de compilar el driver correcto en el fichero
principal del kernel para que se cargue al inicio del sistema.

Ver las tarjetas de red

Figura 220: Visualización las tarjetas de red del sistema


Fuente. - Elaboración Propia

Configuración con DHCP

DHCP es la manera más fácil de configurar un ordenador en una red TCP/IP, pues permite a un
ordenador gestionar los parámetros de muchos otros ordenadores. Cuando un ordenador que
ejecuta un cliente DHCP arranca, envía una multidifusión en busca de un servidor DHCP. El
servidor responde a la dirección del hardware del cliente con la información de configuración que
el cliente necesita para unirse a la red, sobre todo, la dirección IP, la máscara de red, las
direcciones de la puerta de acceso y el servidor DNS. El servidor DHCP también puede
proporcionar un nombre de host. El cliente se configurará automáticamente con los parámetros
recibidos. La IP asignada no es permanente, sino temporal (DHCP lease). Si la IP no se renueva, el
servidor podría asignársela a otro ordenador, por lo que el cliente consulta al servidor de vez en
cuando para efectuar la renovación.

Los tres clientes DHCP más habituales en Linux son: pump, dhclient y dhcpcd (que no hay que
confundir con el servidor dhcpd). Las distribuciones pueden incluir uno o incluso los tres, pero
todas tienen un cliente DHCP por defecto que se instala cuando se le indica al sistema que se
quiere utilizar DHCP durante la instalación. Si la distribución viene con varios clientes, podremos
intercambiarlos sin ningún problema. Lo ideal es que el cliente DHCP se ejecute en el inicio del
sistema, lo que se suele controlar desde su propio fichero de inicio SysV o como parte del fichero
de inicio principal de configuración de la red. Frecuentemente, el sistema posee una línea en un
fichero de configuración para determinar si debe ejecutar un cliente DHCP, en Ubuntu 20.0.4 esta

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 225

opción se define en el fichero /etc/netplan/00-installer-config.yaml, La línea en cuestión presenta


el siguiente aspecto:

dhcp4: true

Figura 221: Visualización configuración dhcp


Fuente. - Elaboración Propia

Configuración con una dirección IP estática

SI la red no tiene un servidor DHCP, tendremos que configurar manualmente el ordenador. Estas
opciones podemos configurarlas mediante comandos interactivos. Si queremos configurarlas a
largo plazo, ajustaremos ficheros de configuración como etc/netplan/00-installer-config.yaml.

Figura 222: Configurar IP estático


Fuente. - Elaboración Propia

netplan apply

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 226

Figura 223: Verificar configuración de IPs de tarjetas de red ip a


Fuente. - Elaboración Propia

De este modo definiremos la IP especificada para que el ordenador responda a ella y la utilice
como origen para los datos que envía. Esto no configura la ruta para el tráfico exterior a la red
actual, para ello tendremos que utilizar el comando route:

route add default gw 192.168.56.1

Tanto ifconfig como route pueden mostrar información de la configuración actual de la red. Para
ifconfig introduciremos el comando seguido del nombre de la interfaz:

Figura 224: Verificar configuración de tarjeta de red ifconfig


Fuente. - Elaboración Propia

ifconfig debería mostrar una dirección de hardware (HWaddr), una dirección IP (inet addr) y
estadísticas de paquetes rechazados o desbordamientos por los paquetes recibidos (RX) y
transmitidos (TX), lo ideal es que estas colisiones sean pocas, aunque son inevitables si
utilizamos un HUB en lugar de un SWITCH. Podemos utilizar route para efectuar un diagnóstico
escribiendo lo siguiente:

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 227

Figura 225: Verificar tabla de ruteo route


Fuente. - Elaboración Propia

Esto muestra que los datos destinados a 192.168.56.0 pasan directamente por enp0s8.
127.0.0.0 es un interfaz especial que crea un circuito cerrado con el ordenador de origen. Se
utiliza para ciertos fines internos de la red. La última línea muestra la ruta por defecto, que
describe lo que hacer con todo lo que no coincida con las demás entradas de la tabla de
enrutamiento. En este caso, 192.168.56.1 es la puerta de acceso por defecto de la ruta. Si no
aparece o está mal configurada, el tráfico destinado a redes externas no pasará del segmento de
red local.

Es más fácil utilizar una herramienta GUI para definir direcciones IP para los nuevos
administradores, ya que la ubicación exacta de los ficheros de configuración varía de una
distribución a otra y los ejemplos listados anteriormente pueden no ser válidos para nuestro
sistema actual.

Configuración del enrutamiento

Los routers pasan tráfico de una red a otras. Linux se configura para contactar directamente a los
sistemas de la red local, aunque también se le suministra la dirección del router, que el sistema
utilizará para enviar todo el tráfico que no esté destinada a la red local. Cada router tiene al
menos dos interfaces de red y mantiene una tabla de reglas que indican dónde se debe enviar la
información en función de la IP de destino. Nuestro propio ordenador tiene una tabla de este
tipo, pero es muy simple comparada con la de los routers de Internet.

Linux puede funcionar como un router conectando dos redes o más entre sí y dirigiendo el tráfico
entre ellas según su tabla de enrutamiento. Parte de estas tareas se controlan con el comando
route, que se puede utilizar para algo más que especificar un único sistema de puerta de acceso.
En una versión simplificada su sintaxis sería la siguiente:

route {add | del} [-net | -host] destino [netmask nm] [gw gw] [reject] [[dev] interfaz]

Junto a add o del, se especifica un destino y otros parámetros opcionales. -net y -host fuerzan a
route a interpretar el destino como una red o como una dirección de ordenador. netmask permite
definir una máscara de red y gw permite especificar el router por el que deberían pasar los
paquetes hacia el destino especificado (hay versiones de route que utilizan gateway en lugar de
gw). reject rechaza todo el tráfico destinado a la red especificada (no es un cortafuegos). Por

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 228

último, la opción dev fuerza a route a utilizar un dispositivo de red concreto, aunque
normalmente route pueda añadir el dispositivo por si solo. El siguiente ejemplo muestra cómo
route podemos configurar una ruta con el comando route:

route add -net 172.20.0.0 netmask 255.255.0.0 gw 172.20.1.1

Las tablas de enrutamiento incorrectas pueden causar que alguno o todos los ordenadores no
respondan. Podemos examinar las rutas de enrutamiento, escribiendo solo route y, una vez
localizadas las rutas incorrectas, las borraremos y las sustituiremos por otras nuevas si fuese
necesario. Una cosa más que debemos saber para permitir que Linux haga un enrutamiento, es
que Linux no reenvía los paquetes recibidos de un sistema que estén dirigidos a otro. Sin
embargo, para hacer de router, Linux tendrá que aceptar estos paquetes y enviarlos a la red de
destino. Para activar esta funcionalidad, modificaremos un fichero clave en /proc:

echo “1” > /proc/sys/net/ipv4/ip_forward

Este comando activa el reenvió IP ; para activarlo permanentemente tendremos que modificar
un fichero de configuración que en algunas distribuciones es /etc/sysctl.conf :

net.ipv4.ip_forward = 1

Otras distribuciones utilizan otros ficheros de configuración y opciones, como


/etc/sysconfig/sysctl y su línea IP_FORWARD. En caso de no disponer de este tipo de ficheros,
modificaremos un script de inicio para añadir el comando que aplique el cambio.

Resolución de nombres de host

DNS es una base de datos distribuida en ordenadores que realizan conversiones entre
direcciones IP y nombres de host. Cada dominio debe mantener, al menos, dos servidores DNS;
ambos deben proporcionar los nombres de cada ordenador del dominio o redireccionar una
petición DNS a otro servidor DNS que pueda gestionar mejor la petición.

En la práctica, este proceso está oculto, ya que las empresas mantienen servidores DNS que
hacen todo el trabajo sucio. Bastará con que nuestro ordenador apunte a los servidores DNS de
nuestro ISP. Esto se puede controlar con DHCP o introduciendo la información manualmente en
los ficheros de configuración. A veces necesitaremos comprobar manualmente las DNS debido a
que nuestra configuración DNS está distribuyendo la dirección errónea o para verificar si el
servidor está operativo. Los programas que nos ayudan a realizar estas comprobaciones son los
siguientes:
• nslookup: realiza búsquedas DNS (por defecto, en determinados ordenadores en particular) y
devuelve los resultados. Tiene un modo interactivo con el que podemos realizar una serie de
consultas. El programa está oficialmente obsoleto, lo que significa que ya no recibe
mantenimiento y será eliminado de su paquete padre (bind-utils o bind-tools). Lo mejor es
utilizar host o dig.
• host: es el sustituto para las funciones más sencillas de nslookup, carece de un modo
interactivo y difiere en muchos detalles de funcionamiento. En el caso más simple,
escribiremos host nombre_objetivo donde nombre_objetivo es el nombre de host o la

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 229

dirección IP que queremos consultar. Admite varias opciones para modificar su


comportamiento básico.
• dig: realiza búsquedas DNS más complejas que host. Podemos utilizarlo para localizar la
dirección IP de un único nombre de host o el nombre de host de una única dirección IP, es
más flexible que host.
• whois: busca la información de un dominio en conjunto y nos proporciona información sobre
quién es el propietario del dominio, con quién contactar en caso de problemas, etc. Se suele
utilizar junto con la opción -H, que omite las cláusulas legales que muchos registradores de
dominios incorporan a la información de whois.

Si sólo necesitamos resolver un puñado de nombres de host y no queremos recurrir a las DNS,
utilizaremos el fichero /etc/hosts para definir las asociaciones de direcciones IP con nombres
de host (una por línea). Cada asociación incluye por lo menos un nombre, aunque puede ser
más de uno:

Figura 226: Verificar archivo hosts


Fuente. - Elaboración Propia

En este ejemplo, el nombre localhost está asociado a la dirección 127.0.0.1; los nombres
soa.cibertec.edu.pe. El primer vínculo debería aparecer en cualquier fichero /etc/hosts; el
segundo es un nombre de host completo que incluye la parte del domino. Los siguientes
nombres de esta línea son alias (normalmente el nombre del host sin la especificación del
dominio). Una vez configurado este fichero, podemos hacer referencia a los ordenadores que
parecen en él por sus nombres, estén o no en los servidores DNS que utiliza el ordenador.

La principal desventaja de /etc/hosts es que es un fichero local y la definición de las asociaciones


sólo afecta a las búsquedas de nombre realizadas por el ordenador. Si queremos hacerlo en
toda la red, tendremos que modificar los ficheros de todos los ordenadores de esta. Linux suele
realizar búsquedas en /etc./hosts antes que en las DNS; para modificar este comportamiento
configuraremos el fichero /etc./nsswitch.conf, en su línea hosts. Esta línea indica el orden de
las opciones files y DNS, que corresponden a /etc/hosts y DNS respectivamente:

hosts: files dns

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 230

Figura 227: Verificar archivo nsswitch.conf


Fuente. - Elaboración Propia

Invertiremos el orden de las opciones files y DNS para obligar al sistema a consultar las DNS
antes que /etc/hosts. El fichero /etc./nsswitch.conf admite opciones como, por ejemplo, realizar
una resolución de nombres utilizando llamadas NetBIOS de Windows, o un servidor LDAP
añadiendo las opciones pertinentes a la línea hosts junto con el software de apoyo necesario.
Las líneas passwd, shadow y group controlan cómo se autentifican los usuarios y gestionan los
grupos Linux. No deberíamos intentar cambiar estas configuraciones a menos que entendamos
los sistemas implicados.
El fichero /etc/networks funciona de un modo similar a /etc./hosts, pero se aplica a las
direcciones de red e invierte el orden de los nombres y las direcciones IP en cada línea:

loopback 127.0.0.0
mynet 192.168.7.0

Figura 228: Verificar archivo netwoks


Fuente. - Elaboración Propia

Este ejemplo define dos vinculaciones: el nombre loopback con la red 127.0.0.0/8 y mynet para
la red 192.168.56.0/24. No tendremos que editar este fichero salvo en contadas ocasiones.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 231

10.1.2. Diagnosticar la red, verificar conectividad de red, traza de rutas, comprobar el


estado de la red
Diagnosticar conexiones de red

La configuración de las redes es compleja, ya que las cosas no siempre funcionan como se
planearon. Existen unos cuantos comandos que ayudan a diagnosticar problemas: Ping,
Traceroute, Tracepath, Netstat y Tcpdump. Cada comando proporciona una información
concreta que nos puede servir para seguir la pista del origen de un problema.

Verificar la conectividad básica

El comando ping hace la comprobación más básica de la red enviando un paquete ICMP al sistema
citado (a través de una IP o un nombre de host) y espera una respuesta. ping enviará paquetes
una vez por segundo hasta que lo interrumpamos pulsando control+c. También podemos limitar
el número de comprobaciones con la opción -c num. Podemos aislar el lugar donde se produce
un problema en la red haciendo ping a sistemas locales y remotos. Por ejemplo, si podemos hacer
ping a sistemas locales pero no a sistemas remotos, el problema probablemente esté en la
configuración del router; sin embargo, si podemos hacer ping por dirección IP pero no por
nombre de host, entonces el problema residirá en la configuración de las DNS.

Hacer una traza de una ruta

Traceroute envía una serie de tres paquetes de prueba a cada ordenador desde nuestro sistema
al sistema objetivo, su salida es similar a la siguiente:

Figura 229: Ejecuta comando traceroute


Fuente. - Elaboración Propia

-n hace que se muestren las direcciones IP de los ordenadores objetivo en lugar de sus nombres
de host, lo que podría acelerar el proceso, sobre todo si tenemos problemas de DNS. Suele ser
recomendable conocer los nombres de host, ya que ayudan a determinar con precisión quien es
el responsable de un problema. El ejemplo anterior muestra una gran variabilidad en los tiempos
de respuesta, el dato de 192.168.56.1 es totalmente local: este router respondió en 0.446 ms,
0.405ns y 0.418ns a las 3 pruebas. El sistema sólo se presenta tres tiempos y en las demás se
marca como un asterisco (*) debido a que el paquete nunca regresó.

Traceroute permite localizar los problemas de conectividad de la red si tenemos una gran
variabilidad en los tiempos. La ausencia de alguno tiempo indica que el router está sobrecargado
o que tiene una conexión poco fiable con el sistema anterior de la lista. Si observamos un salto
muy grande en los tiempos, suele indicar que hay una enorme distancia física entre dos de los

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 232

routers, algo habitual en las conexiones intercontinentales. Estos saltos no son necesariamente
un problema a no ser que los dos sistemas estén lo suficientemente cerca como para que este
salto enorme carezca de sentido.

La salida de Traceroute nos permite determinar si existe un problema en la conectividad de la red


de la que somos responsables. Por ejemplo, la variabilidad del primer dato en el ejemplo anterior
puede indicar un problema en la red local, aunque lo más probable es que el paquete se perdiera
antes de llegar a su destino final, por lo que no se trata de un problema en la red. Si la conexión
problemática está dentro de nuestra área de responsabilidad, tendremos que comprobar el
estado del sistema problemático, los sistemas vecinos y el segmento de red. Hay routers que
bloquean todos los datos de Traceroute, independientemente de que estén destinados a ellos o
sean paquetes de paso. Si la salida de Traceroute contiene una o dos líneas de asteriscos (*) pero
todo lo demás parece estar bien, es probable que nos hayamos topado con uno de estos sistemas.

tracepath es una alternativa a Traceroute. Es similar en su funcionamiento básico, pero genera


una línea de salida por cada paquete de prueba, lo que produce una salida más larga que
Traceroute. Además, tracepath dispone de menos opciones que Traceroute.

Figura 230: Ejecuta comando tracerpath


Fuente. - Elaboración Propia

Comprobar el estado de la red

Netstat es la navaja suiza de las herramientas de red. Puede devolver información que no se
obtiene fácilmente de otras maneras, por ejemplo:

• Información sobre la interfaz: los parámetros –interface o -i dan información sobre los
interfaces de red similar a la que devuelve ifconfig. Hay versiones de Netstat que utilizan el
mismo formato de salida que ifconfig, pero, normalmente, la muestran de manera
diferente.
• Información del enrutamiento: –route o -r permiten obtener un listado de la tabla de
enrutamiento similar al que muestra el comando route.
• Información de enmascaramiento: con los parámetros –masquerade o -M obtendremos
información sobre las conexiones en las que intervengan las funcionalidades NAT de Linux
(enmascaramiento de IP). NAT permite a un router
• Linux “ocultar” una red tras una única dirección IP, lo que resulta bueno para expandir las
direcciones IPv4.
• Uso del programa: –program o -p intentan proporcionar información sobre los programas
que utilizan conexiones de red. No siempre tiene éxito, pero, en caso de que sí, podremos
ver qué programas están realizando conexiones al exterior.
• Puertos abiertos: cuando se utiliza sin parámetro alguno, Netstat devuelve información
sobre los puertos abiertos y los sistemas a los que se conectan.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 233

Todas las conexiones: -all o -a hacen que Netstat muestre información sobre los puertos
que abren los programas de servidor para escuchar las conexiones de red, además de las
conexiones ya abiertas.

Netstat es una herramienta muy potente; ni las opciones ni la salida son exactamente las
mismas en todas las distribuciones.

Figura 231: Ejecuta comando netstat


Fuente. - Elaboración Propia

10.1.3. Configuración avanzada de IP Alias


En Ubuntu 20.04 podemos configurar direcciones IPv4 secundarias a una tarjeta de red, a esto se
denomina IP Alias.

Debemos configurar interfaces virtuales que estarán referenciadas a una interface de red física,
es decir, podemos asignar más de una dirección IP a una tarjeta de red:

Si la nueva dirección IP no está en la misma red que la dirección antigua, entonces es una
dirección de red más en una misma interface.

Si la nueva dirección IP está en la misma red que la dirección antigua, entonces es una dirección
secundaria en una misma interface.
Asignar una dirección ip Alias

Para configurar una interface virtual (por ejemplo enp0s8) de manera no persistente debemos
escribir la siguiente línea de comandos:

[root@soa ~] # ip addr add 192.168.1.100/24 dev enp0s8

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 234

Figura 232: Interface


Fuente. - Elaboración Propia

Asignar un Alias a la tarjeta de red

Para configurar una interface virtual (por ejemplo Alias) de manera no persistente debemos
escribir la siguiente línea de comandos:

[root@soa ~] # ip addr add 192.168.1.20/24 dev enp0s8 label enp0s8: Alias

Figura 233: Interface Alias


Fuente. - Elaboración Propia

Si necesitamos configurar de manera permanente la configuración de nuestra interface


virtual, debemos editar el archivo etc/netplan/00-installer-config.yaml.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 235

[root@soa ~]# vi /etc/netplan/00-installer-config.yaml

Figura 234: Configurar IP en interface


Fuente. - Elaboración Propia

Para que los cambios tengan efecto debe reiniciar la tarjeta de red:

[root@soa ~]# netplan apply

Reiniciar tarjeta de red

Los siguientes comandos reiniciarían la interfaz de red enp0s8:

[root@soa ~] # ip link set enp0s3 down


[root@soa ~] # ip link set enp0s3 up

Figura 235: Desactivar interface de red


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 236

10.1.4. Acoplamiento de las interfaces de red – Bonding y Bridge


El acoplamiento de tarjetas (Bonding) permite configurar una solución de alta disponibilidad,
tolerancia a fallos y balanceo de carga a nivel de las interfaces físicas (tarjetas de red). Por lo
tanto, permite aumentar la seguridad y el rendimiento de las tarjetas de red en nuestros
servidores Linux.

Tipos de Bonding

o Modo 0 (BALANCE-RR): Configuración de red round robin. Los paquetes se envían en orden
secuencial desde la primera conexión enumerada, siguiendo la cadena.

o Modo 1 (ACTIVE BACKUP): Solo se usa la primera conexión, a menos que falle, en cuyo caso
se usa otra conexión.
o Modo 2 (BALANCE-XOR): Esto usa una política de transmisión para enrutar entre interfaces
y proporciona equilibrio de carga y tolerancia a fallas
o Modo 3 (BROADCAST): Envía datos en todas las interfaces.
o Modo 4 (802.3ad): Este es un estándar IEEE. Requiere conmutadores para admitir el mismo
protocolo. Este modo agrega la conexión para proporcionar el beneficio del ancho de banda
de todas las interfaces configuradas.
o Modo 5 (BALACE-TLB): Gestiona la carga entre los adaptadores de red según la demanda y
la disponibilidad.
o Modo 6 (BALANCE-ALB): Incluye balanceo de carga de transmisión (balance-tlb) y balanceo
de carga de recepción.

Escenario de implementación de bonding:

El servidor de base datos necesita un sistema de alta disponibilidad a nivel de interfaces de red.
Usted tiene dos tarjetas “enp0s3” y “enp0s8” para configurar el multilink o bonding “bond0”

Figura 236: bonding


Fuente. – Tomado de https://guidocutipa.blog.bo/agregacion-interfaces-red-ubuntu-bonding/

Bonding Alta disponibilidad:

Debemos editar el archivo /etc/netplan/01-installer-config.yaml.

[root@soa ~]# vi /etc./netplan/01-installer-config.yaml

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 237

Figura 237: Configurar Bonding


Fuente. - Elaboración Propia
Aplicar cambios

[root@soa ~]# netplan apply

Verificar configuración de interface

[root@soa ~]# ip a

Figura 238: Verificar ip de las interfaces de red


Fuente. - Elaboración Propia

Verificar información de interface master y slave en /proc/net/bonding/bond-lan

[root@soa ~] # cat /proc/net/bonding/bond-lan

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 238

Figura 239: Verificar interface master y slave


Fuente. - Elaboración Propia

Finalmente desactivamos interface master y podemos observar que no se pierde conectividad

Figura 240: Verificar funcionamiento bonding


Fuente. - Elaboración Propia
10.1.5. Utilitarios de red: Netstat y Traceroute
Es necesario que se cuenten con las herramientas adecuadas como Traceroute, hping3, epel-
release, net-tools y webming

[root@soa ~]# apt install net-tools


[root@soa ~]# apt install traceroute

PING y HPING

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 239

PING es una herramienta que permite comprobar si hay realmente conectividad en ICMP no en
TCP (no sirve para aplicaciones). Puede ejecutar ping hacia cualquier dirección de la red local o
de internet con la siguiente línea de comandos:

[root@soa ~]# ping 192.168.56.1


[root@soa ~]# ping www.google.com

NETSTAT

Netstat es una herramienta utilizada para supervisar las conexiones de red, estadísticas de
interfaces y asignaturas de multidifusión. Se utiliza principalmente para encontrar problemas en
una red y para medir el tráfico de red como una forma de calcular el desempeño de ésta.

• Para visualizar todas las conexiones activas en el sistema, tanto TCP como UDP, se utiliza la
opción – a:

[root@soa ~]# netstat -a

• Para mostrar solo las conexiones activas por TCP, se utiliza: [root@soa ~]# netstat -t

• Para mostrar solo las conexiones activas por UDP, se utiliza: [root@soa ~]# netstat -u

TRACEROUTE y TCPTRACEROUTE

Traceroute es una herramienta que permite determinar el camino que siguen los paquetes de
red desde un equipo a otro y así determinar si existe algún problema en algún momento entre
ambos. Si tenemos un problema notable de velocidad, con Traceroute podemos verificar en qué
momento sucede el problema y así intentar encontrar la solución más adecuada.
El Traceroute simple solo nos da el camino en ICMP y no en TCP.
[root@soa ~]# traceroute www.google.com (simple solo sirve para ICMP)

Figura 241: Traceroute


Fuente. - Elaboración Propia

Al igual que el ping, el Traceroute simple no sirve para aplicaciones y en su remplazo existe el
tcptraceroute y el Traceroute detallado (-T -O info) que nos dan el camino en TCP hasta llegar a
la aplicación. Por ejemplo, si existiera un filtro negando ICMP y si deseamos saber dónde se quedó
la comunicación de una aplicación TCP como una página web, el Traceroute simple solo nos
confundirá porque se quedará en un paso antes del filtro; pero, el TCPTRACEROUTE nos dará el
encaminamiento real sin filtros de ICMP viendo el verdadero camino de la aplicación en TCP.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 240

Figura 242: Tcptraceroute


Fuente. - Elaboración Propia

WEBMIN

Webmin es una herramienta que permite de manera web administrar aplicaciones y el mismo
servidor donde está instalada. Su acceso es via web https://ip:10000.

Registro de fuente para instalar Webmin

Se edita el archivo /etc/apt/sources.list y se registra la siguiente línea

deb http://download.webmin.com/download/repository sarge contrib

Instalación paquete Webmin

[root@soa ~]# wget -q -O- http://www.webmin.com/jcameron-key.asc | apt-key add


[root@soa ~]# apt install webmin

Primero preparamos el firewalld e Linux para permitir el acceso al webmin:

[root@soa ~] # ufw 10000/tcp


[root@soa ~] # ufw reload
[root@soa ~]# ufw status

Figura 243:Activar acceso en Firewall


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 241

Figura 244: Webmin


Fuente. - Elaboración Propia

El usuario es root y la clave es la misma que la del servidor desde su Dashborad podemos
administrar el servidor y sus servicios.

Figura 245: Webmin


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 242

10.1.6. Acceso remoto por SSH


SSH (Secure Shell) es un protocolo de red que permite establecer una comunicación a través de
un canal seguro entre un cliente local y un servidor remoto. Utiliza una clave pública cifrada para
autenticar el servidor remoto y, opcionalmente, permitir al servidor remoto autenticar al usuario.

SSH provee confidencialidad e integridad en la transferencia de los datos utilizando criptografía


y MAC (Message Authentication Codes, o Códigos de Autenticación de Mensaje). De modo
predeterminado, escucha peticiones a través del puerto 22 por TCP.

Figura 246: SSH


Fuente.- Tomado de https://universo-digital.net/todo-sobre-protocolo-ssh-gnu-linux/

A continuación, revisaremos algunas herramientas que integran al protocolo SSH:

• SFTP (SSH File Transfer Protocol)


SFTP es un protocolo que provee funcionalidad de transferencia y manipulación de ficheros a
través de un flujo confiable de datos. Utiliza SSH para proveer una transferencia segura de
ficheros.

• SCP.(Secure Copy)
SCP es un protcolo seguro para transferir ficheros entre un equipo local y otro remoto, a través
de SSH. Básicamente, es idéntico a RCP (Remote Copy, o Copia Remota), con la diferencia de
que los datos son cifrados durante la transferencia para evitar la extracción potencial de
información a través de programas de captura de las tramas de red. SCP solo implementa la
transferencia de ficheros, pues la autenticación requerida es realizada a través de SSH.

• OpenSSH. (Open Secure Shell)


OpenSSH es un proyecto creado por el equipo de desarrollo de OpenBSD y actualmente dirigido
por Theo de Raadt. Se considera más segura que su contraparte propietaria debido a la
constante auditoria que se realiza sobre el código fuente por parte de una gran comunidad de
desarrolladores, una ventaja que brinda al tratarse de un proyecto de fuente abierta.
OpenSSH incluye servicio y clientes para los protocolos SSH, SFTP y SCP. Puede descargarlo la
última versión de la siguiente dirección: http://www.openssh.org/. También puede utilizar la
herramienta yum.

Implementación de OPENSSH

Descargar e instalar el paquete utilizando la siguiente línea de comandos:

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 243

[root@soa ~]# apt install ssh

Editar el archivo de configuración del servicio sshd_config

[root@soa ~]# vi /etc/ssh/sshd_config

Debe cambiar los siguientes parámetros:

• Port:
Algunas personas para elevar el nivel de seguridad del servicio SSH debe cambiar el puerto
por defecto del servicio (22/TCP) por cualquier otro puerto, por ejemplo:
Port 46699.
Nota: Nunca abra el puerto de ssh hacia internet independiente del puerto, el acceso remoto
solo debe ser por VPN.

• ListenAddress:
Por defecto el servicio SSH será atendido por todas las interfaces de red, es recomendable
especificar la dirección IP de la interface por donde debe atender el servicio, por ejemplo:
ListenAddress 192.168.56.10

• PermitRootLogin:
Establece si se va a permitir el acceso directo del usuario root al servidor SSH. Si se va a
permitir el acceso hacia el servidor desde una red no confiable (nunca desde acceder desde
Ineternet), resultará importante utilizar este parámetro con el valor no, por ejemplo:
PermitRootLogin no

• X11Forwarding:
Establece si se permite o no la ejecución remota de aplicaciones gráficas. Si se va a acceder
hacia el servidor desde red local, este parámetro puede quedarse con el valor yes. Si se va a
permitir el acceso hacia el servidor desde redes no confiables, resultará prudente utilizar
este parámetro con el valor no.
X11Forwarding yes
UserAllowUsers:
Permite restringir el acceso por usuario y, opcionalmente, el equipo desde el cual pueden
hacerlo. El siguiente ejemplo restringe el acceso hacia el servidor SSH para que solo puedan
hacerlo los usuarios user1 y user2, desde cualquier equipo.
AllowUsers user1 user2
Si desea restringir el acceso de usuario y el equipo desde el cual pueden conectarse entonces
utilice la siguiente línea de comandos:

AllowUsers user1@192.168.56.10

Ahora debe iniciar el servicio SSH, utilizando la siguiente línea de comandos:

[root@soa ~]# systemctl enable ssh

Si el servicio ya está levantado puede reiniciarlo para aplicar los cambios:

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 244

[root@soa ~] # systemctl status ssh

Figura 247: SSH


Fuente. - Elaboración Propia

Prueba y conexión SSH

Para acceder al servidor SSH desde un cliente Linux hacia el servidor por SSH, basta con ejecutar
desde el sistema cliente el comando ssh definiendo el usuario a utilizar y el servidor al cual
conectar:

[root@soa ~]# ssh usuario@servidor

[root@soa ~]# ssh user1@192.168.56.10

Para acceder hacia un puerto en particular, se utiliza el parámetro -p. En el siguiente ejemplo,
utilizando la cuanta del usuario “user1”, se intentará acceder al servidor con dirección IP
192.168.56.1, el cual tiene un servicio de SSH que responde peticiones a través del puerto 46699.

[root@soa ~]# ssh -p 46699 user1@192.168.56.10

Prueba con el commando SCP

Para realizar transferencias de ficheros a través de SCP, es necesario conocer las rutas de los
directorios objetivos del equipo remoto. A continuación, se describen algunas de las opciones
más importantes del mandato scp.

-p : Preserva el tiempo de modificación y tiempo de acceso del fichero original.

-P : Especifica el puerto para realizar la conexión.

-r : Copia recursivamente los directorios especificados.

Ejemplos de uso del comando SCP:

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 245

• Transferir el fichero archivo.txt preservando los permisos y tiempos hacia el directorio del
usuario user2 en el servidor 192.168.56.1:

[root@soa ~]# scp -p archive.txt user2@192.168.56.1:~/

• Transferir la carpeta MisDocumentos y su contenido preservando los permisos y tiempos


hacia el directorio del usuario user2 en el servidor 192.168.56.1:
root@soa ~]# scp -rp MisDocumentos user2@192.168.56.1:~/

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 246

10.2. ARREGLO DE DISCO Y VOLÚMENES LÓGICOS


El término RAID (Redundant Array of Independent or Inexpensive Disks) es una arquitectura
para el almacenamiento de datos en discos duros, que basada en niveles define el tipo de
tolerancia del sistema y la forma en la que los datos se distribuyen entre los dos o más discos que
conforman el “array” o arreglo.

RAID utiliza una técnica llamada “striping” para dividir la información antes de distribuirla en
bloques que son almacenados de forma organizada en los diferentes discos del “array”. Es
importante indicar que un sistema RAID puede ser interno o externo y su implementación puede
ser hecha a nivel de hardware o software. En este último caso le corresponde a la BIOS del sistema
operativo controlar el RAID cuyos discos podrán ser de tipo IDE, SATA o SAS. En una
implementación por hardware el controlador es independiente, cuenta con capacidad de proceso
propia y dispone de un interfaz SCSI o SATA para la conexión de los discos que conforman el
arreglo.

Beneficios de implementar un arreglo de discos

Un disco duro se caracteriza entre otros parámetros por su MTBF (Mean Time Between Failure
o tiempo medio entre fallos) cuya importancia no sólo radica en su valor sino también en su
significado. EL MTBF nos avisa que los discos pueden dejar de funcionar, ocasionando pérdidas
de datos o imposibilitando el acceso a la información por parte de los usuarios. Además, un
sistema de almacenamiento basado en arquitectura RAID ofrece cuatro ventajas principales:

• Mayor fiabilidad que los discos individuales por tratarse de una arquitectura tolerante a fallos
con soporte de elementos redundantes.
• Mayor rendimiento y tasa de transferencia de datos que los discos individuales como
resultado de las operaciones de lecturas/escritura simultáneas realizada sobre múltiples disco
en paralelo.
• Mayor capacidad de almacenamiento que los discos individuales. Un “array” de disco

• RAID puede verse como un disco lógico formado por la suma de los discos individuales que lo
conforman, por lo que en la mayoría de las configuraciones, la capacidad total será superior.
• Mayor integridad. Ante un error en los datos almacenados en alguno de los discos del arreglo
(corrupción de datos, error de grabación, etc.), la información de paridad generada por los
sistemas RAID permitirá reconstruir los datos perdidos manteniendo así la integridad de la
información.
• Si bien es cierto un sistema RAID aporta múltiples ventajas, es importante resaltar los
aspectos más importantes para los que los arreglos RAID no han sido diseñados:
• RAID no protege los datos. Un sistema RAID no impedirá que los datos se vean modificados o
borrados como consecuencia de errores accidentales. Ni tampoco podrá evitar que los datos
se dañen o que sean destruidos por un agujero de seguridad. Para evitar estos riesgos
deberemos disponer de herramientas de Backup o Data Recovery.

• RAID no hace que la recuperación ante desastres sea más simple. Las herramientas de
recuperación de datos deberán soportar los controladores RAID apropiados, de lo contrario
no podrán acceder a los datos almacenados en los discos afectados. Generalmente, los
dispositivos NAS/SAN incluyen funcionalidades de “backups”, como la replicación remota, que
permite duplicar los arreglos entre unidades o en ubicaciones remotas utilizando servicios en
la nube.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 247

RAID no facilita la migración a sistemas nuevos. Mover un RAID de una controladora a otra
ubicada en un nuevo sistema puede resultar complejo, y en algunas ocasiones hasta imposible
(tal es el caso de los sistemas que integran la controladora en la placa base). Una implementación
RAID por software eliminaría este inconveniente.

10.2.1. Niveles de RAID


RAID-0: Disk Striping

RAID-0 es un arreglo de discos con striping (separación o fraccionamiento) de alta transferencia.


Realiza “striping” de datos a nivel bloque sin información de paridad con una distribución
equitativa de estos entre dos o más discos. Este nivel mejora el rendimiento, pero no ofrece
tolerancia a fallos. En caso de avería en cualquiera de los discos miembros del arreglo, el sistema
fallará en su totalidad.

Figura 248: RAID 0


Fuente.- Tomado de http://www.avastor.com

Ventajas:
• Permite el acceso a más de un disco a la vez, logrando una tasa de transferencia más elevada.
• Al no requerir espacio para almacenar información de redundancia, el coste por megabyte
resulta inferior.

Desventajas:
• No se dispone de información de paridad.
• No ofrece tolerancia a fallos.

Uso recomendado:
• A pesar de la desventaja, RAID 0 es utilizado por aquellos que desean el máximo rendimiento
de dos o más unidades.
• Para sistemas de edición de vídeo y audio por la transferencia rápida de datos.

Mínimo número de discos para ser implementado: Dos discos duros

RAID-1: Mirroring

RAID-1 es un arreglo de discos en espejo, es conocido también como "mirroring" o "Duplicación"


(Creación de discos en espejo). Se basa en la utilización de discos adicionales sobre los que se
realiza una copia en todo momento de los datos que se están modificando. RAID 1 ofrece una
excelente disponibilidad de los datos mediante la redundancia total de los mismos. RAID-1 no
tiene paridad ni fraccionamiento o striping.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 248

Figura 249: RAID 1


Fuente.- Tomado de http://www.avastor.com
Ventajas:

• Protección de la información en caso de fallos del disco y/o de la controladora (en caso de
tener instalada una controladora duplicada).
• Ofrece tolerancia a fallos.

Desventajas:

• Ineficiencia debido a las tareas de escritura en el disco espejo.


• Se “desperdicia” el 50% de la capacidad de almacenamiento del sistema haciendo que el
coste por megabyte “útil” sea mayor.

Uso recomendado:
• Para soluciones donde se necesite almacenar archivos importantes (contables, registros
financieros, personales, etc.) son comúnmente respaldadas con una solución RAID 1.

Mínimo número de discos para ser implementado: Dos discos duros

RAID-5: Striping + Parity

Este array ofrece tolerancia al fallo, además optimiza la capacidad del sistema permitiendo una
utilización de hasta el 80% de la capacidad del conjunto de discos. Esto lo consigue mediante el
cálculo de información de paridad y su almacenamiento alternativo por bloques en todos los
discos del conjunto. La información del usuario se graba por bloques y de forma alternativa en
todos ellos. De esta manera, si cualquiera de las unidades de disco falla, se puede recuperar la
información en tiempo real, sobre la marcha, mediante una simple operación de lógica de O
exclusivo, sin que el servidor deje de funcionar.

Figura 250: RAID 5


Fuente.- Tomado de http://www.avastor.com

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 249

Ventajas:

• Proporciona un buen rendimiento con mínima pérdida de capacidad de almacenamiento.


• Aporta un nivel de redundancia suficiente para ser considerado tolerante a fallos.

Desventajas:

• Menores prestaciones que en RAID 1. No ofrece solución al fallo simultáneo en dos discos.
• Cuando las aplicaciones requieren muchas escrituras de tamaño inferior a la división de
datos establecida (stripe), el rendimiento ofrecido por RAID 5 no es el óptimo.

Uso Recomendado:

• En servidores de base de datos, correo electrónico, soluciones de virtualización y en sistemas


donde se necesite un rendimiento sea equilibrado con tolerancia a fallos.

Mínimo número de discos para ser implementado: Tres discos duros.

RAID 1+0 o RAID-10

Primero se crea un espejo RAID-1 y luego, sobre los anteriores, se establece un RAID-0. El
resultado es un “array” dotado de redundancia con una mejora de rendimiento al no precisar
escritura de paridad. Para que no se pierdan datos cada RAID-1 deberá mantener al menos uno
de sus discos sin fallos.

Figura 251: RAID 10


Fuente.- Tomado de http://www.avastor.com

Ventajas:

• RAID-10 ofrece los beneficios combinados de RAID 1 y 0 con el doble de capacidad de RAID
1
• La capacidad total es la mitad de la suma de los cuatro discos. Los cuatro discos del “array”
son controlados como una sola unidad más grande.
• RAID-10 puede mantener una falla en el disco por cada “sub array” y ofrece el rendimiento
más rápido con redundancia.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 250

Desventajas:

• Mayor costo.
• Escalabilidad limitada.

Uso recomendado:

• Es una excelente solución para los profesionales de audio y video que requieren un alto
rendimiento, así como una alta tolerancia a fallos.

Mínimo número de discos para ser implementado: Cuatro discos duros.

10.2.2. Implementación de arreglos de discos (RAID-1) en Linux


En Linux Ubuntu vamos a implementar un arreglo de discos basado en software; es decir,
dependiente de los controladores en el sistema operativo.

Escenario: Implementación de RAID-1:


Nuestro servidor cuenta con dos discos duros de 10 GB Disk1 y Disk2. El primer disco es
reconocido por Linux Ubuntu como /dev/sdb y el segundo disco como /dev/sdc. A continuación,
se deben crear las respectivas particiones para unirlas de manera lógica en una unidad RAID de
Nivel 1; es decir, se implementa un arreglo de discos en espejo.

Disco 0: /dev/sdb Disco 1: /dev/sdc

10 GB 10 GB

Raid-1: /dev/md0

5 GB

Figura 252: RAID 1


Fuente. - Elaboración Propia

Observe que el tamaño del RAID-1 (/dev/md0) es de 10 GB porque la información se encuentra


reflejada en ambos discos, es decir si uno de los discos que conforman el arreglo falla la
información queda respaldada en el otro disco. Por lo tanto, esta solución nos ofrece un sistema
tolerante a fallos.

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 251

Importante: Antes de comenzar a configurar el arreglo de discos, agregue dos discos duros (para
el RAID) a su servidor utilizando la opción Configuración de VirtualBox.

Listamos los discos en nuestro servidor con la información de las particiones de cada disco:

[root@soa ~]# fdisk –l

Figura 253: RAID 1


Fuente. - Elaboración Propia

Crear una partición en el disco /dev/sdb utilizando la herramienta fdisk. Escriba la siguiente línea
de comandos:
[root@soa ~]# fdisk /dev/sdb

Figura 254: RAID 1


Fuente. - Elaboración Propia

Ahora vamos a utilizar el comando “n” para crear una nueva partición; y, luego “p“ para indicar
que es una partición primaria:

Figura 255: RAID 1


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 252

Confirmamos que es la partición 1

Figura 256: RAID 1


Fuente. - Elaboración Propia
Aceptamos el primer sector por defecto

Figura 257: RAID 1


Fuente. - Elaboración Propia

Confirmamos el ultimo sector por defecto

Figura 258: RAID 1


Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 253

Seleccionamos la opción “t” para elegir el tipo de partición.

Figura 259: RAID 1


Fuente. - Elaboración Propia

Con la opción L identificamos la partición que buscamos “fd” que es el raid buscado.

Figura 260: RAID 1


Fuente. - Elaboración Propia
Con la opción “p” verificamos que la partición es RAID y grabamos con “w”

Figura 261: RAID 1


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 254

Los mismos pasos deben realizarse para el disco /dev/sdc.


Ahora que los discos están preparados para formar parte del RAID-1, procederemos a crear el
arreglo de discos con el comando mdadm de la siguiente manera:

[root@soa ~] # mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

Figura 262: RAID 1


Fuente. - Elaboración Propia

Opciones:
--create: Crea el dispositivo RAID, en este caso /dev/md0 por tratarse del primer array. Para el
siguiente array se asigna el dispositivo /dev/md1.
--level=1: Indica el nivel del RAID: 0 para el RAID-0, 1 para el RAID-1, 5 para el RAID-5, 10 para
el RAID-10.
--raid-devices: Indica la cantidad de discos que forman parte del RAID.

Verificamos que el arreglo se haya creado correctamente:

[root@soa ~]# mdadm --detail /dev/md0

Figura 263: RAID 1


Fuente. - Elaboración Propia
Damos formato a nuestro RAID1:

[root@soa ~] # mkfs. ext4 /dev/md0

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 255

Figura 264: RAID 1


Fuente. - Elaboración Propia

El RAID implementado debe guardarse en el archivo mdadm.conf

[root@soa ~]# mdadm --examine --scan >> /etc/mdadm.conf

Finalmente, debemos montar el dispositivo RAID configurado. Además, debemos configurar el


fichero /etc/fstab para automatizar el proceso

[root@soa ~] # mkdir /mnt/raid1


[root@soa ~]# mount /dev/md0 /mnt/raid1
[root@soa#i#i ~]# vi /etc/fstab

Figura 265: RAID 1


Fuente. - Elaboración Propia

Recuperación de un arreglo RAID-1

Antes de forzar el error en uno de los discos que conforman el RAID-1 debemos verificar el
estado de nuestro arreglo:

[root@soar ~]# cat /proc/mdstat

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 256

Figura 266: RAID 1


Fuente. - Elaboración Propia

Nuestro RAID-1 está conformado por los discos /dev/sdb1 y /dev/sdc1. Vamos a simular un fallo
en el disco /dev/sdc1 utilizando la siguiente línea de comandos:

[root@soa~]# mdadm --manage --set-faulty /dev/md0 /dev/sdc1

Figura 267: RAID 1


Fuente. - Elaboración Propia
Validamos el estado del RAID:

[root@soa ~]# cat /proc/mdstat

Figura 268: RAID 1


Fuente. - Elaboración Propia

Removemos el Disco dañado

[root@soa ~]# mdadm /dev/md0 --remove /dev/sdc1

Figura 269: RAID 1


Fuente. - Elaboración Propia

Luego, añadimos un nuevo disco /dev/sdd en virtualbox y seguimos los pasos de preparación
del /dev/sdb (fdisk) para poder unirlo al arreglo que hemos implementado con la finalidad de
mantener nuestro sistema tolerante a fallos. Utilizamos la siguiente línea de comandos

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 257

[root@soa ~]# mdadm /dev/md0 --manage --add /dev/sdd1

Figura 270: RAID 1


Fuente. - Elaboración Propia

Le damos unos minutos para que los RAID se adecuen y verificamos.

[root@soa ~]# cat /proc/mdstat

Figura 271: RAID 1


Fuente. - Elaboración Propia

10.2.3. Administración de volúmenes lógicos


La administración de volumen crea una capa de abstracción en el almacenaje físico, lo que
permite crear volúmenes lógicos de almacenaje. Proporciona mucha más flexibilidad en una
cantidad de formas que el uso directo de almacenaje físico. Con un volumen lógico no hay
restricción física de espacio del disco. Además, la configuración de almacenaje del hardware se
oculta del software permitiendo así redimensionar y desplazar sin tener que detener la aplicación
o desmontar el sistema de archivos minimizando los costos operacionales.
Los volúmenes lógicos proporcionan las siguientes ventajas sobre el uso directo de
almacenamiento físico:

• Capacidad flexible
Cuando se utilizan volúmenes lógicos, los sistemas de archivos pueden extenderse a lo largo
de varios discos, ya que se pueden agregar discos y particiones en un único volumen lógico.

• Grupos de almacenaje dimensionables


Puede extender los volúmenes lógicos o reducir los volúmenes lógicos con comandos de
software sencillos, sin necesidad de volver a dar formato o crear particiones en los
dispositivos de discos subyacentes.

• Asignación de datos en línea


Para implementar subsistemas de almacenamiento más modernos, más rápidos o
resistentes, puede trasladar los datos mientras su sistema está activo. Los datos pueden ser
reorganizados en discos mientras los discos están siendo utilizados.
• Nombres de dispositivos convenientes
Los volúmenes de almacenaje lógico pueden ser administrados en grupos definidos por el
usuario, los cuales se pueden especificar de acuerdo con las necesidades.

• Volúmenes en espejos
Los volúmenes lógicos proporcionan una manera conveniente de configurar copias para sus
datos.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 258

• Instantáneas del volumen


Al usar volúmenes lógicos, se puede crear instantáneas del dispositivo para obtener copias
de seguridad consistentes o para probar el efecto de algunos cambios sin afectar los datos
reales.
Conceptos LVM

a) Volume Group (VG)


Sería el equivalente a un disco duro, es el punto de abstracción más alto en LVM. Puede
contener volúmenes físicos y lógicos.
b) Physical Volume (PV)
Puede ser un disco duro, aunque también un arreglo RAID por software.
c) Logical V olume (LV)
Equivale a una partición, contiene su propio sistema de archivos
d) Physical Extend (PE)
La extensión física está compuesta por trozos de datos de los volúmenes físicos.
e) Logical Extent (LE)
La extensión lógica está compuesta por trozos de datos de los volúmenes lógicos

Figura 272: LVM


Fuente. - Elaboración Propia

10.2.4. Laboratorio: Implementar una solución de almacenamiento con RAID y LVM


Implementación de LVM en Linux

En nuestra máquina de Ubuntu, agregue 2 discos virtuales de 10G y configure los volúmenes
lógicos. Debemos tener las particiones creadas en los discos duros, en nuestro caso serán
/dev/sdc1 y /dev/sdd1.

También debe configurar el System ID de los discos con la opción “8e: Linux LVM” (con fdisk),
para poder implementar el volumen lógico. El procedimiento lógico debe seguir el siguiente
orden.

1. Crear los volúmenes físicos (PV)

2. Crear el volumen de grupo (VG)

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 259

3. Crear los volúmenes lógicos (LV)

Revisamos las particiones en nuestro disco:

[root@soa ~]# fdisk -l

Figura 273: FDISK


Fuente. - Elaboración Propia

Creamos los volúmenes físicos (PV) en cada uno de los discos. Utilizamos las siguientes líneas de
comandos:

[root@soa ~] # pvcreate /dev/sdc1

Figura 274: PVCREATE


Fuente. - Elaboración Propia

[root@soa ~]# pvcreate /dev/sdd1

Figura 275: PVCREATE


Fuente. - Elaboración Propia

Verificamos nuestros volúmenes

[root@soa ~]# pvdisplay

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 260

Figura 276: PVDISPLAY


Fuente. - Elaboración Propia

Ahora creamos el grupo de volúmenes (VG) considerando los volúmenes físicos anteriormente
configurados, es decir, creamos el volumen de grupo LVM1 considerando los volúmenes físicos
/dev/sdc1 y /dev/sdd1.

[root@soa ~] # vgcreate LVM1 /dev/sdc1 /dev/sdd1

Figura 277: VGCREATE


Fuente. - Elaboración Propia

Verificamos si el grupo de volumen ha sido creado de manera correcta. Vamos a comprobar el


grupo de volumen (VG) configurado y además los volúmenes físicos que lo componen. Observará
también el tamaño del grupo de volumen, ahora es de 15.99 GB; es decir, la suma de las
capacidades de los PV.

[root@soa ~]# vgdisplay LVM1

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 261

Figura 278: VGDISPLAY


Fuente. - Elaboración Propia

Ahora configuramos los volúmenes lógicos (LV) tomando como referencia el espacio que nos
proporciona el grupo de volúmenes (VG) configurado en el paso anterior.

[root@soa ~]# lvcreate -n DATABASE -L 2G LVM1

Figura 279: LVCREATE


Fuente. - Elaboración Propia

Opciones:

-n: Creamos un nuevo volumen lógico, en este caso el nombre es DATABASE.


-L: Define el tamaño del volumen lógico. En este caso se define 2GB. espacio tomado del grupo
de volumen LVM1.

Verificamos la configuración del volumen lógico (LV) para esto utilizamos la siguiente línea de
comandos:

[root@soa ~]# lvdisplay LVM1

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 262

Figura 280: LVDISPLAY


Fuente. - Elaboración Propia
Damos el formato “EXT4”, creamos una carpeta llamada “database” y la montamos como
partición.

[root@soa ~]# mkfs.ext4 /dev/LVM1/DATABASE


[root@soa ~]# mkdir /mnt/database
[root@soa ~]# mount /dev/LVM1/DATABASE /mnt/database

Figura 281: LVM


Fuente. - Elaboración Propia

Visualizamos la información de espacio de los discos del servidor:

[root@soa ~]# df -h

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 263

Figura 282: LVM


Fuente. - Elaboración Propia

Expandiendo un volumen lógico

Una de las ventajas de implementar LVM es que podemos expandir o reducir el tamaño del
volumen. Vamos a expandir el tamaño de nuestro LV DATABASE de 2GB a 4GB y luego a 6G,
Utilizamos la siguiente línea de comandos:

[root@soa ~]# lvextend -L4G /dev/LVM1/DATABASE (Aumenta hasta 4G)

[root@soa ~]# lvextend -L +2G /dev/LVM1/DATABASE (Añade 2 G a lo existente)

Figura 283: LVEXTEND


Fuente. - Elaboración Propia

Verificamos el estado de nuestro volumen lógico:

[root@soa ~]# lvdisplay /dev/LVM1/DATABASE


[root@soa ~]# df -h
[root@soa ~]# resize2fs /dev/LVM1/DATABASE

NOTA: Aunque ya se podrá evidenciar que el tamaño es de 6G esto no es efectivo para el sistema
operativo aún, pues en un “df -h” seguirá apareciendo como 2G, para que el tamaño del
dispositivo se actualice es necesario usar el comando resize2f.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 264

Figura 284: LVDISPLAY


Fuente. - Elaboración Propia

Figura 285: DF
Fuente. - Elaboración Propia

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 265

Actualizamos el tamaño de la partición /mnt/database

Figura 286: Resize2fs


Fuente. - Elaboración Propia

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 266

Resumen
1. Los Volúmenes lógicos permite aumentar el tamaño de Discos por adición.

2. En LVM nos permite aumentar el tamaño de una partición.

3. Los RAID aumentan disponibilidad o la eficiencia de la búsqueda de los DATOS.

4. Los RAID existen en físico y en lógico (Tarjeta o Software).

Recursos
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta unidad:

o Cómo instalar SSH en Ubuntu 20.04 LTS: https://comoinstalar.me/como-instalar-ssh-en-ubuntu-20-


04-lts/
o Ubuntu Bonding: https://www.youtube.com/watch?v=86S8DyKGxgg

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 267

Bibliografía
• Baeza, Oscar J. (2005) Zimbra, correo y calendario libres al más puro estilo Gmail.
Recuperado de https://www.genbeta.com/web/zimbra-correo-y-calendario-libres-al-
mas-puro-estilo-gmail

• Bandel, David (2001) Edición especial Linux. 6a ed. Madrid: Pearson Educación.
Centro de Información: Código 005.43L BAND

• Barrios Dueñas, Joel (2014) Estándar de Jerarquía de Sistema de Ficheros. Recuperado de


https://koalasoft.wordpress.com/manuales/estandar-de-jerarquia-de-sistema-de-
ficheros/

• Barrios Dueñas, Joel (2007) Uso de yum para instalar y desinstalar paquetería y actualizar
sistema. Recuperado de https://koalasoft.wordpress.com/manuales/uso-de-yum-para-
instalar-y-desinstalar-paqueteria-y-actualizar-sistema/

• Blog de elhacker.NET (2016) Gestión de librerías compartidas en GNU/Linux. Recuperado


de https://blog.elhacker.net/2016/04/gestion-de-librerias-bibliotecas-compartidas-en-
gnu-linux-ldd-ldconfig.html

• Bresnahan, Christine (2016) LPIC-1: Linux Professional Institute Certification: guía de


estudio-exámenes 101-400 y 102-400. 4a ed. Madrid: Anaya Multimedia.
Centro de Información: 005.43L BRES 2016

• Burgos, María (2001) Linux lpifit 101.1. Identificar y editar configuraciones. Recuperado
de
https://www.academia.edu/6948956/Linux_lpifit_101_1_Identificar_y_editar_configur
aciones

• Canonical Ltd. (2021) Guía de escritorio de Ubuntu. Ubuntu 20.10. Recuperado de


https://help.ubuntu.com/stable/ubuntu-help/

• Canonical Ltd. (2021) Ubuntu Server Guide. Recuperado de


https://ubuntu.com/server/docs

• Cibertec (2003) Linux administrador e Internet: Linux administrador y security. Lima:


Cibertec.
Centro de Información: Código 005.43L CIBE

• Cruz Paisig, Hegel Broy de la (2012) Servidores en Linux: alta seguridad. Lima: Macro.
Centro de Información: Código 005.43L CRUZ/S

• Damal Redes S.L. (2016) Servidores de correo Zimbra. Recuperado de


https://damal.es/blog/casos-de-exito/20-soluciones-de-comunicacion/33-servidores-
de-correo-zimbra.html

• ES.WHAT-THIS.COM (2020) Filesystem Hierarchy Standard. Recuperado de


https://amp.es.what-this.com/25078/1/filesystem-hierarchy-standard.html

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 268

• Fernández Pena, Tomás (2015) Particiones y sistemas de ficheros. Recuperado de


http://persoal.citius.usc.es/tf.pena/ASR/Tema_3html/node12.html

• Gobierno del Principado de Asturias. Consejería de Educación y Ciencia (2014) Correo


electrónico. Recuperado de
https://www.uv.mx/personal/rcordoba/files/2014/11/Correo_electronico.pdf

• Gómez López, Julio (2012) Seguridad en sistemas operativos Windows y GNU/Linux. 2a


ed. Bogotá: Ediciones de la U.
Centro de Información: Código 005.8 GOME/S

• González D., Sergio (2005) Entendiendo los servicios en Linux. Recuperado de


https://www.linuxtotal.com.mx/index.php?cont=info_admon_003

• González Barbone, Victor (2017) Curso Básico de Linux. El editor vi. Recuperado de
https://filedn.com/liGIo7rEUfzfmU4MQdhIKrh/Cursos/CursoBasicoLinux/EditorVi.pdf

• Hernán Vivani's Blog (2013) Permisos especiales: Sticky Bit, SUID, SGID. Recuperado de
https://hvivani.com.ar/2013/09/06/permisos-especiales-sticky-bit-suid-sgid/

• Hertzog, Raphaël & Mas, Roland (2020) El manual del Administrador de Debian. Debian
10. Recuperado de https://debian-handbook.info/browse/es-ES/stable/

• Hispalinux (1999-2002) TLDP-ES/LuCAS: servicios editoriales para la documentación libre


en español. Recuperado de http://es.tldp.org/

• Informático de Guardia (2008) Manejo de enlaces simbólicos en Linux. Recuperado de


https://andalinux.wordpress.com/2008/09/02/manejo-de-enlaces-simbolicos-en-linux/

• Knowledge Database Discover (s.f.) Curso de Comandos VI. Recuperado de


https://1library.co/document/ynxg6ojq-curso-de-comandos-vi.html

• LinuxParty (2015) SU y SUDO. Recuperado de https://www.linuxparty.es/108-lpic/9304-


capitulo-7-curso-gratis-lpic-1-400-administrar-el-sistema-2-2.html

• LPIC. Guía Extraoficial de Estudio (2011) Comandos internos y externos. Recuperado de


https://lpic1.wordpress.com/2011/10/29/comandos-internos-y-externos/

• Massachusetts Institute of Technology (s.f.) Red Hat Enterprise Linux 4: Manual de


referencia. Capítulo 2. El gestor de arranque GRUB. Recuperado de
https://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-es-4/ch-grub.html

• Massachusetts Institute of Technology (s.f.a) Red Hat Enterprise Linux 3: Manual de


administración del sistema. Capítulo 37. Tareas automáticas. Recuperado de
https://web.mit.edu/rhel-doc/3/rhel-sag-es-3/ch-autotasks.html

• Massachusetts Institute of Technology (s.f.b) Red Hat Enterprise Linux 3: Manual de


administración del sistema. Capítulo 37. Tareas automáticas. 37.2. At y Batch.
Recuperado de https://web.mit.edu/rhel-doc/3/rhel-sag-es-3/s1-autotasks-at-
batch.html

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.


SISTEMAS OPERATIVOS ABIERTOS 269

• Massachusetts Institute of Technology (s.f.c) Red Hat Enterprise Linux 4: Manual de


referencia. Capítulo 13. Protocolo ligero de acceso a directorios (LDAP). Recuperado de
http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-es-4/ch-ldap.html

• Ministerio de Educación y Formación Profesional. España (s.f.) Usuarios y grupos de


usuarios en Linux. Recuperado de
http://formacion.intef.es/pluginfile.php/37380/mod_imscp/content/1/usuarios_y_gru
pos_de_usuarios_en_linux.html

• Ministerio de Educación y Formación Profesional. España (s.f.a) Administración de


usuarios y grupos. Recuperado de
http://formacion.intef.es/pluginfile.php/37380/mod_imscp/content/1/administracin_d
e_usuarios_y_grupos.html

• Nanda, Arup (2009) Guía para Maestría Avanzada en Comandos Linux, Parte 5:
Administración del Entorno Linux – Continuación. Recuperado de
https://www.oracle.com/ar/technical-resources/articles/linux/part5.html

• Nash, Angie & Nash, Jason (2002) LPIC 1 Certification Bible. Hoboken, New Jersey:
Wiley.

• Nebul4ck (2015) Curso LPIC-1 400 Capítulo 4. Recuperado de


https://nebul4ck.wordpress.com/lpic-1-capitulo-4/

• Nebul4ck (2015a) Sobre systemd: Mejoras en systemd, Units y Targets; uso de systemctl,
compatibilidad con SysV. Recuperado de
https://nebul4ck.wordpress.com/2015/02/11/sobre-systemd-mejoras-en-systemd-
units-y-targets-uso-de-systemctl-compatibilidad-con-sysv/

• Nigro, Marcelo I. (2010) Permisos en Linux. Recuperado de


https://marnigroedu.wordpress.com/2010/05/12/permisos-en-linux/

• Noronha Silva, Gustavo y Mora, Hugo (2003) Obteniendo información de los paquetes.
Recuperado de https://www.debian.org/doc/manuals/apt-howto/ch-search.es.html

• Petersen, Richard (1997) Linux Manual de referencia. Madrid: McGraw-Hill.

• Pinchon, Philippe (2016) Linux: administración avanzada, mantenimiento y explotación


de los servidores. Barcelona: ENI.
Centro de Información: Código 005.43L PINC

• Red Hat, Inc. (2021) 30.5. APAGAR. Recuperado de


https://access.redhat.com/documentation/es-
es/red_hat_enterprise_linux/5/html/installation_guide/s1-boot-init-shutdown-
shutdown

• Rm-rf.es Administración de sistemas (2011) Arrancar Linux manualmente desde Grub


(configuración de Grub borrada o incorrecta). Recuperado de https://rm-rf.es/arrancar-
linux-manualmente-desde-grub-configuracion-de-grub-borrada-o-incorrecta/

• Rm-rf.es Administración de sistemas (2011) RHEL/CentOS 6: adios System V, hola Upstart.

IES CIBERTEC S.A.C. ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN


SISTEMAS OPERATIVOS ABIERTOS 270

Recuperado de https://rm-rf.es/rhel-centos-6-adios-system-v-hola-upstart/

• Rm-rf.es Administración de sistemas (2012) Verificar la integridad y seguridad de ficheros


con RPM. Recuperado de https://rm-rf.es/verificar-la-integridad-y-seguridad-de-
ficheros-con-rpm/

• Sanchez, Rigoberta (2013) Distribuciones Linux. Recuperado de


https://issuu.com/rigobertasanchez/docs/estudio__distribuciones_

• Schroder, Carla (2009) Redes en Linux: guía de referencia. Madrid: Anaya Multimedia.
Centro de Información: Código 005.43L SCHR

• Shields, Ian (2010) Edición de archivos con vi. Recuperado de


https://developer.ibm.com/es/technologies/linux/tutorials/l-lpic1-v3-103-8/

• Shields, Ian (2010a) Cómo crear y cambiar vínculos físicos y simbólicos. Uso de múltiples
nombres para el mismo archivo. Recuperado de
https://developer.ibm.com/es/technologies/linux/tutorials/l-lpic1-v3-104-6/

• Shields, Ian (2012) Cree, supervise y elimine procesos. Recuperado de


https://developer.ibm.com/es/technologies/linux/tutorials/l-lpic1-v3-103-5/

• Smith, Roderick W. (2012) LPIC-2: Linux Professional Institute Certification: guía de


estudio-exámenes 201 y 202. Madrid: Grupo Anaya Comercial.
Centro de Información: Código 005.43L SMIT/2

• Syconet. Blog de Informática y Redes (2012) LPIC 101 – Tema 1 – Trabajar con la línea de
comandos. Recuperado de https://syconet.wordpress.com/tag/variables-de-entorno/

• Syconet. Blog de Informática y Redes (2012a) LPIC 101 – Tema 1 – Procesar flujos de texto
mediante filtros. Recuperado de https://syconet.wordpress.com/2012/08/08/lpic-101-
tema-1-procesar-flujos-de-texto-mediante-filtros/#more-605

• Syconet. Blog de Informática y Redes (2012b) LPIC 102 – Tema 9 – Personalizar y utilizar
el entorno de la consola. Recuperado de
https://syconet.wordpress.com/2012/10/01/lpic-102-tema-9-personalizar-y-utilizar-el-
entorno-de-la-consola/

• Synacor, Inc. (2021) Zimbra Downloads. Recuperado de


https://www.zimbra.com/downloads/

• Toledo, Luz (s.f.) Editor texto unix. Recuperado de


https://sites.google.com/site/luztoledo601v/editor-texto-unix

• University of Ottawa (s.f.) Linux: Expresiones regulares. Recuperado de


https://www.coursehero.com/file/61357429/Expresiones-Regularesodt/

ESCUELA DE TECNOLOGÍAS DE LA INFORMACIÓN IES CIBERTEC S.A.C.

También podría gustarte