Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Abiertos
SISTEMAS OPERATIVOS ABIERTOS 2
Índice
Presentación 7
Red de contenidos 8
4.3 Tema 7 : Cambiar los niveles de ejecución, apagar o reiniciar el sistema 120
Bibliografía 267
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.
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.
Red de contenidos
Instalación del Sistema
Unidad 1
Operativo GNU/Linux
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
Servicios de
Unidad 11
Infraestructura de Red
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.
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.
APLICACIONES GNU
Lo que hacías con: Lo puedes hacer con: Lo que hacías con: Lo puedes hacer
con:
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).
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.
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.
Funciones principales
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.
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.
• 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).
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.
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.
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.
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.
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:
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.
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.
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.
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.
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
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
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):
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.
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.
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.
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
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.
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.
• 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).
Por convenio las librerías compartidas pueden tener varios tipos de nombre:
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).
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.
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
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.
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:
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).
Pasos previos:
Seleccionar disposición del teclado “Spanish”. Luego, dar clic en el botón Continuar.
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.
Seleccionar la opción “Borrar disco e instalar Ubuntu” y dar clic al botón Instalar ahora.
Seleccionar la zona horaria dando clic en el mapa del Perú. Dar clic al botón Continuar.
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.
Muy bien, ya se tiene Ubuntu Desktop 20.04 LTS instalado. Dar clic al botón Reiniciar ahora.
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
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
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.
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.
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.
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.
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.
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
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.
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:
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
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).
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.
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
#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.
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
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).
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:
Cada directorio separado por “:” es un “lugar” donde bash va a buscar dichos comandos externos.
Podemos ver más comandos internos ejecutando el comando “help” (también interno) en
nuestra consola.
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]
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:
Ejemplo:
Ejemplo:
Indica los usuarios que se encuentran en el sistema, así como, lo que hacen en él.
Ejemplo:
whoami
Muestra el nombre del usuario (username). whoami equivale a “id –un” o a “who –m”.
Ejemplo:
El comando who sirve para ver los usuarios logueados y conocer diferentes datos de las
sesiones activas.
Existen muchas opciones que pueden usarse como parámetros para el comando.
Algunas de ellas y su descripción:
Muestra o establece el nombre del sistema. También sirve para obtener información relativa
sobre el mismo.
Opciones:
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:
Este comando se utiliza para cambiar la fecha de acceso y/o modificación a un archivo.
Su sintaxis es la que sigue:
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
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.
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
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).
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:
# gzip -9 fichero
# gzip -d fichero.gz
Bzip2
# bzip2 fichero
# bzip2 -d fichero.bz2
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:
Opciones:
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.
Ficheros 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.
zip
# unzip archivo.zip
# 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:
Ejemplo:
Encuentra la lista de archivos y directorios y los copia o hace una copia de seguridad al usuario.
Set
Permite la modificación de variables del Shell del usuario y también lista todas las variables
locales y variables del ambiente.
Sintaxis:
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
# 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:
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'':
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.
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:
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
Sintaxis:
# tee –a file
Ejemplo
Sobrescribe
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
#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.
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:
Las variables y sus valores suelen ser únicos para cada sistema e incluso para cada cuenta.
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
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.
alias nombre_alias=’comandos’
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:
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
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.
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.
En esta categoría hay 3 comandos importantes: cat, join y paste, que unen ficheros completos o
los fusionan línea a línea.
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 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-.
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.
paste fusiona ficheros línea a línea, separando las líneas de cada fichero mediante tabulaciones:
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.
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
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.
Sort genera un fichero de salida ordenado de varias maneras, entre las que se incluyen:
El comando sort admite muchas más opciones, aunque bastantes de ellas son muy exóticas.
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 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
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
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 65: Eliminación de los caracteres no imprimibles, salvo el carácter de nueva línea
Fuente. - Elaboración Propia
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:
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.
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.
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.
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.
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
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.
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 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:
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.
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.
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
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:
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.
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.
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.
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
#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.
A continuación, se muestra una serie de comandos útiles para conocer aspectos generales
/proc/mounts
Ejemplo
df -h
Ejemplo
mkdir
Ejemplo:
Ejemplo
cd
Cd [carpeta de destino]
Ejemplo
mv
mv [parámetros][archivo/Directorio] [rutaDestino]
rm
rm [parámetros] [archivo/Directorio]
Ejemplo 1:
Ejemplo 2:
ls
ls [parámetros]
Ejemplo:
Ejemplo 3:
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:
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.
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
Y si quisiéramos representar una palabra que tiene entre dos y cuatro caracteres: [a-zA-Z]{2,4}
[: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
# ls -l | grep '^d'
El comando anterior nos devuelve la lista de ficheros que comienzan por d, es decir, la lista de
directorios.
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
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
ACTIVIDADES PROPUESTAS
3.1. EDITOR 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
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
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.
Moviendo el cursor
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.
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.
Es muy recomendable guardar los cambios que se van realizando de una forma regular.
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
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
Scroll de pantalla
Los comandos para avanzar una pantalla arriba y abajo (12 líneas) son
1G
ctrl-g
Búsqueda
Borrar texto
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.
• 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
Para averiguar la versión de vim que está ejecutando y las características que tiene incluidas
usando el comando:
vi --versión
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
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
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.
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.
Iniciando xclock
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.
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.
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.
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.
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).
Figura 105: Ejecuta script mostrara hora cada 30 segundos en archivo nohup.out
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-
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
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é.
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.
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
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.
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
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).
Ordenar el resultado de ps
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
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.
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
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.
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.
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.
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.
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.
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.
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).
Note que el pmc.sh todavía se está ejecutando, pero que ahora tiene un signo de interrogación
(?) para el TTY que controla.
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.
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.
Después de un momento en otro terminal, ejecutar ps -al para mostrar el estado del proceso
donde muestra el cambio de prioridad.
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.
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.
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.
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.
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.
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.
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:
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
ACTIVIDADES PROPUESTAS
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).
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.
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>
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.
# ln -s </ruta/completa/fichero> <nombre_enlace>
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.
# ln -s $HOME/www /opt/joomla1.5.1/joomla-1.5.2-0/apache2/htdocs/
Donde:
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/
Desde el administrador de archivos pueden identificarse fácilmente por contar con una flecha en
la parte inferior del ícono de carpeta.
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).
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).
Eliminar enlaces
# unlink RUTA_AL_ENLACE_NO_DESEADO
Donde:
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.
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.
Todos los archivos y directorios aparecen debajo del directorio raíz ≪/≫, aun si están
almacenados en dispositivos físicamente dife
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>
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:
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:
Una vez verificado ejecutamos el siguiente comando (normalmente no es necesario ya que como
vemos anteriormente lo detecta automáticamente):
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:
(hd0,1)=/dev/sda2
Si todo va bien, debería arrancar sin problemas el sistema. Una vez dentro podremos restaurar
el Grub con tranquilidad.
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
deben ir separadas del comando por comas y de otras opciones de esa línea por carácteres de
espacio.
chainloader +1
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.
initrd /initrd-2.6.8-1.523.img
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.
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 (hd0,0)
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.
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.
FASE 1: Hardware
FASE 2: BootLoader
FASE 3: Kernel
FASE 4: Init
FASE 1: HARDWARE
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
Bootloaders en Linux
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.
Fases de LILO
Ficheros de LILO
Ejemplo de /etc/lilo.conf
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
# lilo /etc/lilo.conf
GRUB
Fases de GRUB
• 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
• Arquitectura monolítica.
• Es un largo y complejo programa compuesto de un gran número de subsistemas lógicos.
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.
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
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.
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:
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
• Halt
• Single-user modo texto
• (Definible por el usuario)
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:
Ejemplo de /etc/rc.d/rcN.d
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:
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.
<id>:<modosdeejecución>:<acción>:<proceso>
Donde:
• 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:
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).
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:
systemctl get-default
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
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.
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:
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‘:
# /etc/init.d/samba status|start|stop
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.
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.
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.
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
• 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.
• 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.
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.
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:
#systemctl list-unit-files
#systemctl list-units
#systemctl
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:
Uso de systemctl
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
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:
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:
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):
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.
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
[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.
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.
La página man para shutdown tiene una lista completa de opciones, pero las dos usadas más
comúnmente son las siguientes:
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.
# halt
# shutdown
# init 0
# reboot
# init 6
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
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:
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.
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:
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
ACTIVIDADES PROPUESTAS
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.
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
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.
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
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.
-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
-R
Esta opción junto con –i instala todos los paquetes contenidos en un directorio que se indique.
-l; --list
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
-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
--get-selections
Imprime sólo los nombres de los paquetes que estén instalados. Permite comodines.
Ejemplos:
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
# dpkg -P apache
Elimina completamente el paquete apache del sistema, incluyendo los ficheros de configuración,
algo que no ocurre con la opción anterior: -r
# 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.
Imprime por la salida estandar la relación ordenada alfabéticamente de todos los paquetes
instalados en el sistema.
# dpkg -l apache
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.
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 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
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.
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
Instala todos los paquetes cuyos nombres coinciden con el patrón asi como las dependencias
que necesitan.
Instala el paquete gcl de forma simulada, no produce n ingún efecto real en el sistema.
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/
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:
search Busca, por su nombre o comentario, un paquete en la base de datos local APT.
showMuestra la descripción del paquete.
Ejemplos:
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.
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:
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
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ú.
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
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.
5.1.2. Encontrar paquetes que contengan archivos específicos o bibliotecas las cuales
pueden estar o no instaladas
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.
Por ejemplo, para conocer el paquete que ofrece ciertos archivos ".h" puede ejecutar:
Figura 154: Empleo de dpkg para encontrar a que paquete pertenece stdio.h
Fuente. - Elaboración Propia
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.
Hemos encontrado muchos paquetes relacionados con lo que estamos buscando. Para
obtener más información de un paquete específico, hacemos lo siguiente:
En este desplegado tiene muchos detalles sobre paquete seleccionado, así como su
descripción.
Para más información sobre un paquete puede utilizar:
En resumen, tenemos una gran variedad de armas que podemos utilizar para averiguar el
nombre del paquete que queramos.
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:
Los ficheros RPM contienen los paquetes de software compilado, preparado para ser instalado,
y que contienen lo siguiente:
package-version-patch.architecture.rpm.
Donde:
Comando RPM
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.
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:
Supongamos que se encuentra con un fichero que no reconoce. Para saber a qué paquete
pertenece puede hacer lo siguiente:
Supongamos que acaba de encontrarse con un nuevo paquete RPM de koules, pero no sabe
qué puede ser. Para obtener información al respecto:
Ahora si quiere saber qué ficheros instala el paquete RPM. Puede hacer lo siguiente:
La salida es la siguiente:
/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
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.
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:
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.
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
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.
Actualización del sistema con todas las dependencias que sean necesarias:
Listado de paquetes
Lo siguiente listará todos los paquetes disponibles en la base de datos yum y que pueden
instalarse:
Lo siguiente listará todos los paquetes instalados en el sistema y que pueden (deben)
actualizarse:
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:
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
Modificadores
Por ejemplo, si quisiéramos obtener información del paquete, más el listado de archivos que
incluye, utilizaríamos:
# 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.
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
# rpm -s nombredelpaquete
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:
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
# rpm -V telnet
¿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:
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:
Podemos añadir un mayor nivel de debug con el parámetro “v”, “vv” más debug aún:
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
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:
Por ejemplo:
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.
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:
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
7.
ACTIVIDADES PROPUESTAS
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.
Formato:
Donde:
dispositivo es el dispositivo del disco (/dev/hdx en IDE, /dev/sdx para SCSI o SATA)
Opciones
-l muestra la tabla de particiones del dispositivo.
Ejemplo:
Usamos n (new):
con l (list) vemos el tipo de particiones soportadas para cambiar el tipo de partición se usa t (type)
Otras Herramientas
Sobre cada partición debemos crear sistemas de ficheros con el comando mkfs
Formato:
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:
Comandos relacionados
Partición de intercambio
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.
Opciones:
Ejemplo:
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.
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.
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.
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.
Para comprobar el sistema de archivos al arranque del sistema se pueden aplicar las siguientes
soluciones.
Solución 1
#shutdown -r -F now
Solución 2
#touch /forcefsck
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.
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:
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
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:
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 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
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.
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.
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:
Fuerza al S.O. a unir el sistema de ficheros del tipo type del dispositivo device al directorio
directory.
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.
#mkdir /media/multimedia
Donde:
# fdisk -l
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
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.
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:
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:
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
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.
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 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.
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:
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.
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
edquota
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:
El usuario siempre podrá rebasar una cuota de gracia, pero nunca una cuota absoluta.
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
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.
#edquota juan
Asigne al usuario «juan» una cuota de disco de 2 archivos con límite máximo de 4:
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:
#repquota /data
#quotaoff -aug
#quotaon -aug
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:
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
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.
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.
Para poder ver los permisos de los archivos y directorios es necesario ejecutar el siguiente
comando:
#ls -l
Tamaño
Fecha
Grupo
Propietario Hora
enlaces Nombre
Permiso de otros
Permiso de grupo
Permiso Propietario
Tipo de Archivo
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).
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.
Al directorio con el Sticky Bit aplicado, se le agrega la t al final del descriptor de permisos.
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 activarlo:
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.
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
Al igual que con el SUID, aparece una s o una S reemplazando la x en los permisos del grupo.
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.
• 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
• 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)
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.
Para cambiar los permisos se puede hacer de 2 maneras: utilizando taquigrafía basada en
caracteres o utilizando números.
Para poder utilizar la taquigrafía basada en caracteres tomemos en cuenta la siguiente lista con
su respectiva correspondencia.
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:
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
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:
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:
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:
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.
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.
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.
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.
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
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:
# passwd pedro
También se puede ver información sobre la expiración de la contraseña del usuario con el
comando chage.
# chage -M 90 pedro
Ahora se observa que la contraseña de "pedro" expirará el 09 de mayo de 2021 (90 días más
tarde).
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.
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
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:
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.
Se utiliza el comando adduser seguido del nombre del usuario y del nombre del grupo al que
queremos añadirle, ejemplo:
Se utiliza el comando deluser seguido del nombre del usuario y del nombre del grupo del que
queremos quitarle, ejemplo:
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
Al cambiar el propietario del archivo, ahora el usuario Cibertec será el propietario del archivo
foto1.png
El usuario juan será el nuevo propietario de todos los archivos y subdirectorios que estén
dentro del directorio fotos/
Cambiando el grupo
Al cambiar el propietario del archivo, ahora el archivo foto1.png será del grupo cibertec.
Todos los archivos y subdirectorios del directorio fotos/ serán del grupo Cibertec
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:
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
ACTIVIDADES PROPUESTAS
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.
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:
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
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:
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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:
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.
Nota: Podemos jugar con las opciones de rotar y almacenar para encontrar una solución
definitiva.
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.
• 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
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,
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
‘!‘:
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
Cuando mencionamos anteriormente los componentes más importantes de syslog vimos que
logger es la herramienta que nos permite crear registros de forma manual.
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
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.
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.
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 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.
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.
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.
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).
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:
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
ACTIVIDADES PROPUESTAS
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.
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
dhcp4: true
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.
netplan apply
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:
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:
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:
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.
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
ú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:
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:
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
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
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:
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.
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
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.
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.
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.
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:
-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
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.
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.
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.
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:
Para configurar una interface virtual (por ejemplo Alias) de manera no persistente debemos
escribir la siguiente línea de comandos:
Para que los cambios tengan efecto debe reiniciar la tarjeta de red:
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.
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”
[root@soa ~]# ip a
PING y HPING
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:
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:
• 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)
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.
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.
El usuario es root y la clave es la misma que la del servidor desde su Dashborad podemos
administrar el servidor y sus servicios.
• 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.
Implementación de OPENSSH
• 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
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:
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.
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.
• Transferir el fichero archivo.txt preservando los permisos y tiempos hacia el directorio del
usuario user2 en el servidor 192.168.56.1:
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.
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.
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.
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.
RAID-1: Mirroring
• 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:
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.
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.
Ventajas:
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:
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.
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.
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.
10 GB 10 GB
Raid-1: /dev/md0
5 GB
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:
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
Ahora vamos a utilizar el comando “n” para crear una nueva partición; y, luego “p“ para indicar
que es una partición primaria:
Con la opción L identificamos la partición que buscamos “fd” que es el raid buscado.
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.
Antes de forzar el error en uno de los discos que conforman el RAID-1 debemos verificar el
estado de nuestro arreglo:
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:
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
• 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.
• Volúmenes en espejos
Los volúmenes lógicos proporcionan una manera conveniente de configurar copias para sus
datos.
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.
Creamos los volúmenes físicos (PV) en cada uno de los discos. Utilizamos las siguientes líneas de
comandos:
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.
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.
Opciones:
Verificamos la configuración del volumen lógico (LV) para esto utilizamos la siguiente línea de
comandos:
[root@soa ~]# df -h
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:
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.
Figura 285: DF
Fuente. - Elaboración Propia
Resumen
1. Los Volúmenes lógicos permite aumentar el tamaño de Discos por adición.
Recursos
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta unidad:
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 (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/
• 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
• Cruz Paisig, Hegel Broy de la (2012) Servidores en Linux: alta seguridad. Lima: Macro.
Centro de Información: Código 005.43L CRUZ/S
• 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/
• 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 (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/
• 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
Recuperado de https://rm-rf.es/rhel-centos-6-adios-system-v-hola-upstart/
• Schroder, Carla (2009) Redes en Linux: guía de referencia. Madrid: Anaya Multimedia.
Centro de Información: Código 005.43L SCHR
• 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/
• 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/