sábado, 20 de octubre de 2012

Saber que servicios se están ejecutando en linux

Hola, hoy os enseñaré como comprobar que servicios tenéis en ejecución en vuestro linux.

NOTA: lo que voy a exponer a continuación no funciona en ubuntu ni debian, ya que no permiten mirar el estado de los servicios. Lo he probado personalmente en openSuSE y funciona, y también debería de funcionar en otras distros como Fedora o Mandriva

Primero, si queréis ver una lista de los servicios que hay en vuestro sistema podéis verla con el siguiente comando (debemos ejecutarlo como root):


chkconfig -l


Usando este comando obtendremos un resultado como el siguiente:




bien, aquí podemos ver a la izquierda el nombre del servicio y a la derecha podemos ver una serie de datos que indican un numero y a su derecha "on" o "off", NO OS DEJÉIS ENGAÑAR, esto no es el estado actual del servicio, lo que nos indica es el estado que tendrá el servicio al iniciar un determinado nivel de ejecución del sistema, por ejemplo "SuSEfirewall2_init" estará activo cuando se inicie el nivel de ejecución 3 o 5, pero si yo mas tarde decido desactivar el servicio manualmente (aun estando en nivel de ejecución 3 o 5) y ejecuto el chkconfig -l , me seguirá apareciendo como "on" a pesar de que realmente el servicio esta desactivado. Hay que tener cuidado con esto ya que puede inducir a error y pensar que tenemos un servicio activado o desactivado cuando realmente no es así.

Para mirar el estado real de un servicio lo que tenemos que hacer es irnos a la carpeta /etc/init.d/ dentro de esta carpeta nos aparecerán distintos archivos, los cuales muchos de ellos hacen referencia a servicios, si queremos por ejemplo ver el estado del servicio "SuSEfirewall2_init" tendríamos que ejecutar dicho archivo con el argumento "status" tal que así (una vez mas tenemos que hacerlo como root):

./SuSEfirewall2_init status





como podemos ver en la imagen en mi caso se muestra que el servicio esta ejecutándose.

Vale, ahora ya sabemos como poder ver en que estado están los servicios, pero el problema viene cuando queremos echar un vistazo a todos los servicios, en tal caso tendríamos que ir ejecutando uno por uno todos los archivos con el argumento "status" para poder ver el estado, lo cual es algo engorroso... Así que he creado un script que automatizara esta tarea y nos mostrara el estado de todos los servicios.

A continuación os dejo el código del script:



#!/bin/bash

DIR=/etc/init.d/
max=`ls $DIR | wc -l`

for (( i=1; $max >= i; i++))
do

if test $i -eq `ls $DIR | grep -n halt | cut -f 1 -d ":" | head -n 1`\
 -o $i -eq `ls $DIR | grep -n reboot | cut -f 1 -d ":" | head -n 1`
then
:
else

 echo "------------------------------"
 echo
 echo "`ls $DIR  | head -n $i | tail -n 1`"
 echo
 cd $DIR
 ./`ls $DIR | head -n $i | tail -n 1` status
 echo
fi

done



Para ejecutarlo simplemente coger el código, lo guardáis en un archivo de texto plano y le dais permisos de ejecución (yo le he llamado services al archivo, pero podeis llamarle como querais):



después para ejecutarlo tenéis que hacerlo de nuevo como root, y se os mostraran todos los servicios con su respectivo estado:




En mi caso por ejemplo podemos ver como tengo el firewall activo (servicios "SuSEfirewall2_init" y "SuSEfirewall2_setup") y también por ejemplo tengo el ssh (servicio sshd) desactivado.

En caso de que queráis activar o desactivar los servicios lo único que tenéis que hacer es ir de nuevo a la carpeta /etc/init.d/ y en vez de usar el argumento "status" al ejecutar los archivos, tenéis que usar "start" para activarlo o "stop" para desactivarlo.

Saludos :)

1 comentario: