Índice del artículo

Este tutorial es recomendable para tí si ya tienes algunos conocimientos básicos del sistema operativo UNIX, pero requieres de conocer el uso de ciertos comandos para revisar el estado de tu servidor y mejorar su performance.

Antes de comenzar es importante comentar que este tutorial esta basado en el sistema operativo Solaris, pero la mayoría de los comandos aplican igualmente (o por lo menos de forma similar) en los demás sistemas operativos de tipo Unix incluyendo Linux.

Crear usuarios en Unix

Sólo por comenzar con una definición uniforme diremos que un usuario es una persona (o aplicación) que utiliza archivos, aplicaciones, directorios del sistema de cómputo. Este cuenta con un login y un directorio home en el sistema. Cada usuario pertenecerá como mínimo a uno de los grupos existentes en sistema operativo.

El directorio home es el directorio donde accesará el usuario cada vez que inicie sesión.

Para crear un usuario, se utiliza el comando useradd y la siguiente sintaxis es de las más comunmente utilizadas aunque hay más opciones:

useradd [-c comentario] [-d directorio_home] [-g grupo] [-s shell] login

Por ejemplo:

$ useradd -c "Rafael Lopez" -d /export/home/rlopez -g 10 -s /bin/ksh rlopez

Con lo cual se crea un usuario cuyo login es rlopez y pertenece al grupo staff.

Este comando debe ser corrido por el usuario root considerando que el directorio padre de donde se creará el home existe, el shell existe y el grupo existe.

Ahora para asignar una contraseña a este usuario se utilizará el comando passwd.

passwd [login]

En este caso el parámetro login es opcional, si se corre con el usuario root y se escribe un login se cambiará la contraseña (password) de acceso del usuario que se indica. Si no se especifica un login se cambia la contraseña del usuario que ejecuta la instrucción, en este caso del usuario root.

Este comando, en respuesta, solicitará la contraseña a asignar al usuario, así como la confirmación de esta contraseña.

Ejemplo:

$ passwd rlopez
New Password:

Crear grupos de usuarios

Se utiliza un comando similar al de creación de usuarios y la sintaxis es:

groupadd [-g idgrupo] grupo

Es posible especificar el id del grupo que creamos mediante el parámetro -g, para lo cual será necesario que el id de grupo no exista, esto lo podemos verificar en el archivo /etc/group el cual nos muestra (en ese orden) el nombre del grupo, el id de grupo y los usuarios que pertenecen al grupo.


Variables de ambiente

Las variables de ambiente son cadenas de texto de las que el sistema operativo (y algunos programas) obtiene valores que pueden determinar su comportamiento.

Para conocer las variables de ambiente que tenemos definidas podemos utilizar los comandos env o printenv con lo que nos desplegará la lista de ellas.

Para obtener el valor de una sola variable de ambiente podemos utilizar el comando echo con el nombre de la variable precedido por un signo $, por ejemplo para saber el valor de la variable PATH haríamos lo siguiente:

$ echo $PATH
/usr/local/bin:/usr/local/htmldoc/bin:/usr/bin:/usr/ucb:/etc:.

De la misma forma podemos utilizar el valor de las variables en la linea de comando, por ejemplo para il al directorio que tenemos predeterminado como home, haríamos:

$ pwd
/usr/local
$ echo $HOME
/export/home/usuario
$ cd $HOME
$ pwd
/export/home/usuario

Declarar variables de ambiente

La declaración de variables de ambiente varía en diferentes tipos de shell, la que veremos a continuación es válida para la mayor parte de ellos.

Para declarar una variable de ambiente se siguen dos pasos, primero indicar al sistema operativo el nombre de la variable y su valor y posteriormente utilizar el comando export para establecerla. Vamos a crear la variable SALUDO con el texto "Hola mundo"

$ SALUDO="Hola mundo"
$ export SALUDO
$ echo $SALUDO
Hola mundo

Como podemos ver, para declarar la variable no se utiliza el signo $, sino hasta el momento de querer obtener su valor. La variable declarada se perderá al salir de sesión.

Las variables de ambiente más utilizadas o más importantes son:

PATH: Le indica al sistema operativo en que rutas puede encontrar pogramas para ejecutar.

LOGNAME: Nombre del usuario que está en sesión

LD_LIBRARY_PATH: Rutas donde encontrar librerías dinámicas.

HOME: Directorio donde entra el usuario loggeado.


Monitoreando el rendimiento (comando vmstat)

Existen difernetes tipos de información que se pueden ir observando en el rendimiendo (performance) de nuestro equipo que resultan de interés para ser recopilados, entre estos datos se encuentran la utilización global y el consumo de CPU por cada uno de los procesos.

Esta infomación se obtiene de la utilización el comando vmstat con difernetes parámetros de utilización. Aquí veremos algunos ejemplos de funcionalidad de esta funcional instrucción.

Comenzaremos diciendo que podemos utilizar el comando vmstat con 3 tipos de reportes distintos

  1. Mostrando promedios
    $ vmstat
  2. Mediante una serie continua e infinita de reportes en intervalos de tiempo
    $ vmstat segs
  3. Mediante un número finito de reportes en intervalos de tiempo.
    $ vmstat segs repeticiones

Para ver un ejemplo de la salida ejecutaremos la tercera opción, el comando vmstat 5 20 para in dicarle que queremos 4 lecturas, una cada 5 segundos, esto por que con la primera lectura es poco fiable ya que trata de calcular un promedio de los valores desde el inicio del equipo. La salida que obtendremos será variable de acuerdo a nuestro equipo.

$ vmstat 5 4

kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr cd f0 s0 -- in sy cs us sy id
0 0 0 1069300 140576 0 2 1 0 0 0 0 0 0 0 0 617 327 442 0 1 99
0 0 0 967196 95412 31 14 3 0 0 0 0 1 0 0 0 673 1654 511 12 1 87
0 0 0 967188 95272 86 45 6 0 0 0 0 3 0 0 0 717 2322 519 19 2 80
0 0 0 967184 95204 6 3 2 0 0 0 0 4 0 0 0 685 1935 532 9 1 90

Como podemos ver, la primera lectura es muy diferente al resto debido a la causa que ya se mencionó en el párrafo anterior.

El reporte nos indica las siguientes medidas:

  • kthr (procs): El número de procesos en cada uno de sus tres estados
      • r (runnable queue): Cola de procesos ejecutables en espera de tiempo de CPU
      • b (blocked queue) : Procesos bloqueados en espera
      • w (swapped queue): Procesos ejecutables "swapeados" por falta de RAM (Si este es frecuentemente distinto a cero podríamos tener el diagnóstico de falta de memoria RAM)
  • memory: El uso de la memoria real y virtual,
  • page: Actividad de la paginación y sus fallas,
  • disk: Numero de operaciones en disco por segundo,
  • faults: Tasa promedio de trap/interrupt en los últimos segundos,
  • cpu: porcentaje de tiempo de cpu

Nota: Recuerda que si deseas información más específica, pudes utilizar el comando man vmstat donde se menciona con todo detalle cada una de las columnas. Ir a "Referencia de comandos básicos"

Otro parámetro de vmstat que es muy funcional para el monitoreo es -s, el cual nos despliega el total de eventos del sistema que han tenido lugar desde que arrancó.

$ vmstat -s
0 swap ins
0 swap outs
0 pages swapped in
0 pages swapped out
.
.
.
356117375 system cpu
3474604 idle cpu
0 wait cpu

En una carga de trabajo normal y hablando en términos generales la imagen ideal es de al rededor de 70% de user cpu, 30% de system cpu y entre 1% y 2% de idle cpu, es imporante señalar que esto es hablando en de forma muy general de parámetros que pueden ser muy variables de acuerdo al trabajo y función de cada equipo.