RedHat Certified System Administrator 7 (RHCSA 7) – Sistemas en Funcionamiento II

Continuando con el post anterior (Redhat Certified System Administrator 7 Sistemas en Funcionamiento I) donde tratamos los primeros 3 puntos del segundo requerimiento del examen RHCSA.

A continuación continuaremos con el siguiente punto de forma sintética:

Identificar los procesos que hacen un uso intensivo de la CPU y de la memoria, ajustar la prioridad de los procesos con renice y eliminar procesos

Tradicionalmente, en cualquier unix ‘ps’ es el comando para identificar los procesos con sus respectivas características, cualidades y estados. Este tradicional comando, en los sistemas GNUs soporta 3 tipos de sintaxis para los parámetros, a saber: UNIX, BSD, y GNU. Para simplificar en este post utilizaremos la sintaxis UNIX la cual permite agrupar las distintas opciones y require un -.
Por ejemplo:

ps -aux

Cabe recalcar, ps a no es igual a ps -a.

Process Snapshot (ps)

El comando ps listará los procesos dependiendo de los parámetros modificadores que la pasemos.

Repasemos los mas pertinentes:
-e / -A  Listar todos los procesos
-x        Lista procesos que estén asociados a una terminal (TTY)-U       Lista los procesos asociados a un o varios usuarios
-o       Permite determinar que características del proceso se listaran

Los parámetros mas interesantes para -o son los siguientes:

%cpu        %CPU      cpu utilization of the process in "##.#" format. 
%mem        %MEM      ratio of the process's resident set size  to the physical memory on the machine, expressed as a percentage
args        COMMAND   command with all its arguments as a string. Modifications to the arguments may be shown.
cgroup      CGROUP    display control groups to which the process belongs.
ni          NI        nice value. This ranges from 19 (nicest) to -20 (not nice to others)
pid         PID       a number representing the process ID
ppid        PPID      parent process ID

Podemos entonces, combinar estos parámetros en una salida como la siguiente:

ps -e -o pid,%cpu,%mem,args

La cuál nos brindaría el pid, el porcentaje de CPU utilizado, el porcentaje de memoria utilizado y los argumentos con los cuales se ejecuto el programa. Otro parámetro interesante es cgroup, ya que desde que tenemos systemd, todos los procesos se ejecutan bajo el control de un grupo (control group).

Pueden encontrar estos parámetros y muchos mas haciendo ‘man ps’, en la sección STANDARD FORMAT SPECIFIERS

El último tip, es el siguiente: para poder ordenar la salida, utilizamos –sort, y especificamos en base a que parámetro queremos ordenar la salida.

Por ejemplo ordenaremos por porcentaje de procesamiento del CPU:

ps -e -o pid,%cpu,command --sort %cpu

Table of Process (top)

Otro comando clásico de los UNIXs, nos listara en tiempo real la table de procesos y su consumo de recursos. Así mismo, por defecto top ordena los procesos por su consumo de CPU, lo que nos facilita encontrar cuáles son los programas que mas recursos consumen.
Presionando r se podrá cambiar el número de prioridad de un proceso y con k podemos enviar una señal para matar al proceso.
Podrán encontrar un buen post sobre top aquí

Nice & renice

Los sistemas UNIXs permiten establecer prioridades de procesamiento para que el CPU se ‘concentre’ mayormente en ciertas tareas y relegue otras.
Nice permite ejecutar un comando con una prioridad determinada:

nice -n 5 comando --argumento

Si el proceso ya estuviese corriendo, podemos reasignarle la prioridad con renice referenciando su pid:

renice -n 4 2345

Kill y sus derivados

Finalmente, para eliminar un proceso, tenemos el comando kill.
Unix establece distintas señales que podemos enviarle a un proceso, las mas comunes son SIGHUP (1) (morir y volver a ejecutarse), SIGTERM (15) (le avisa al proceso que tiene que terminar su ejecución, pero le da tiempo de que cierre los file descriptors y mate a sus hijos) y SIGKILL (9) (termina el proceso inmediatamente)l.

Así, podemos enviarle estas señales utilizando el PID y el numero de señal:

kill -s 9 2345

Killall  y pkill nos permiten hacer lo mismo, pero buscando el proceso por nombre:

killall -s 9 xchat

Otro post interesante sobre el tema, aqui

Conclusión

Estos temas son básicos para cualquier administrador linux/unix, por lo que simplemente hicimos un brevisimo repaso, no hay diferencias en Red Hat 7 de lo que ya conocemos en este punto.

Saludos!

~have fun

RedHat Certified System Administrator 7 (RHCSA 7) – Sistemas en Funcionamiento I

El segundo de los requerimientos incluidos en la certificación de Red Hat (versión 7) para System Administrator incluye los siguientes puntos:

Usar sistemas en funcionamiento
• Arrancar, reiniciar y apagar un sistema normalmente
• Iniciar sistemas manualmente en destinos diferentes
• Interrumpir el proceso de arranque con el fin de obtener acceso a un sistema
• Identificar los procesos que hacen un uso intensivo de la CPU y de la memoria,
ajustar la prioridad de los procesos con renice y eliminar procesos
• Ubicar e interpretar archivos de registro del sistema y diarios
• Acceder a la consola de una máquina virtual
• Iniciar y detener máquinas virtuales
• Transferir archivos entre diferentes sistemas de forma segura

Estos objetivos, aunque triviales para un administrador linux avezado, presentan un nuevo reto, ya que en esta versión del sistema del gorro rojo se ha incorporado systemd, agregando muchas mas funcionalidades y un poco de complejidad.

Desglosaremos brevemente los primeros 3 puntos en este post:

Arrancar, reiniciar y apagar un sistema normalmente

Puede que este enunciado nos tiente a pensar que ‘shutdown’, ‘reboot’ e ‘init’ sean los comandos necesarios para manejar el tema. Si bien es cierto, no lo es menos, que ahora todo el proceso de inicio, apagado y reinicio es administrado por systemd, por lo tanto, hemos de incorporar el systemd en nuestro repertorio de comandos:


# systemctl reboot

# systemctl halt

# systemctl poweroff

De todas formas podemos seguir utilizando los clásicos:

Reinicio

# reboot
# shutdown -r now
# init 6

Apagado

# halt
# shutdown -h now
# init 0

Apagado ACPI

# poweroff

Por otro lado, con systemd podemos administrar la suspensión/hibernación desde el mismo comando systemctl:

# systemctl suspend
# systemctl hibernate
# systemctl hybrid-sleep

Iniciar sistemas manualmente en destinos diferentes

Así mismo, con systemctl podremos administrar lo que antes conocíamos como ‘run levels’, ahora systemd introduce el concepto de ‘targets’ mejorando en gran manera las dependencias para pasar de un ‘target’ a otro.
Conocidos por todos, los run levels son:

  • 0, halt
  • 1, single: Single user o mantenimiento
  • 2: no network: sistema sin recursos de red
  • 3: multi usuario sin interfaz gráfica
  • 5: multi usuairio con interfaz gráfica
  • 6: reboot

Y podiamos pasar de uno a otro con el comando init:

#init 1

Y para saber en que run level nos encontramos podemos utilizar los siguientes comandos:

# runlevel
# who -r 

systemd es compatible con todos estos comandos, pero se recomienda la utilización del comando systemctl, cuyo uso se detalla brevemente a continuación:

Single user con file systems locales montados:

#systemctl rescue

Single user sin file systems locales montados (sólo el /)

#systemctl emergency

Multi usuario sin interfaz gráfica

#systemctl isolate multi-user.target

Multi usuario con interfaz gráfica

#systemctl isolate graphical.target

También podemos, sin editar ningún archivo, configurar un target, como el target por defecto, utilizando:

#systemctl set-default multi-user.target

Y para saber cual es el run level por defecto

#systemctl get-default

 

Interrumpir el proceso de arranque con el fin de obtener acceso a un sistema

Este punto, aunque simple, es crucial en el examen, ya que difiere en absoluto de lo que solíamos hacer  (iniciar en single mode). En este link de Red Hat, se encuentra un procedimiento un poco mas detallado del que aquí expondremos y en este link, un método alternativo, un tanto mas a la vieja usanza.

Para interrumpir el proceso de arranque, acceder al sistema y cambiar el  pasword de root, seguiremos estos pasos:

  1.  Detenemos el conteo de grub y entramos en modo edición presionando la e
  2. Buscamos la linea que comienza con ‘linux’ (o ‘linux16 o ‘linuxefi’) y borramos los parametros ‘quiet’ y ‘rhgb’ para poder visualizar los mensajes del sistema.
  3. Agregamos el siguiente parametro:
    rd.break enforcing=0

    Booteamos con ‘Ctrl-x’

  4. Nos encontraremos con el prompt de una shell del initramfs ‘switch_root’, desde donde montaremos el / con permiso de escritura:
    switch_root:/# mount -o remount,rw /sysroot
  5. Utilizamos chroot para utilizar /sysroot como nuestro /
    switch_root:/# chroot /sysroot
  6. Ya dentro de la shell del chroot, podemos ejecutar el comando passwd
    sh-4.2# passwd
  7. Una vez cambiada la password, montamos el / como sólo lectura
    sh-4.2# mount -o remount,ro /
  8. Salimos de la shell del chroot con exit y nuevamente con exit salimos de la shell del initramfs para continuar con el proceso de inicio
  9. Ejecutamos restorcon al archivo /etc/shadow para que contenga el contexto selinux adecuado
    restorcon /etc/shadow
  10. Restablecemos selinux a enforcing mode:
    #setenforce 1

Si necesitáramos iniciar en modo ‘rescue’ o ’emergency’, hemos de saber que es posible, editando la linea ‘linux’ (como hacemos en el paso 2) y agregando

systemd.unit=rescue.target

o

systemd.unit=emergency.target

En cualquiera de los dos casos, necesitaremos el password de root para acceder.

En el próximo post, seguiremos revisando los puntos importantes de este objetivo, hasta entonces:

~have fun

RedHat Certified System Administrator 7 (RHCSA 7) – Herramientas esenciales

El primer punto de los requerimientos para certificar RedHat 7 como System Administrator, pide los siguientes requerimientos:

Conocer y usar las herramientas esenciales
• Acceder a una instancia shell y escribir comandos con sintaxis correcta
• Utilizar redirección de entrada-salida (>, >>, |, 2>, etc.)
• Utilizar expresiones regulares y grep para analizar texto
• Acceder a sistemas remotos mediante ssh
• Iniciar sesión y cambiar de usuario en destinos multiusuario
• Archivar, comprimir, desempaquetar y descomprimir archivos utilizando tar, star,
gzip y bzip2
• Crear y editar archivos de texto
• Crear, borrar, copiar y mover tanto archivos como directorios
• Crear enlaces físicos y simbólicos
• Enumerar, configurar y cambiar permisos ugo/rwx estándar
• Localizar, leer y utilizar documentación de sistema, incluido man, info y archivos
en /usr/share/doc

Como estos requerimientos suelen ser conocidos por cualquier administrador Unix/Linux, me limitaré a compartir con uds un Cheat Sheet, donde se ejemplifican en comandos los requerimientos.

 

~have fun