Si no hay noticias, son buenas noticias. No news! Good News!

Cuando el silencio vale ORO

Si no hay noticias, son buenas noticias.

No News! Good News!

Seguramente hemos escuchado esta frase en ingles en algún momento, y en el caso de que no lo hayamos hecho … en nuestro camino de linux sysadmin … va a ser nuestro mantra.

¿Qué significa realmente esta frase y cómo nos afecta en el trabajo diario?

Es tan sencillo como que si ejecutamos un comando y no nos devuelve nada quiere decir que el comando se ejecuto con éxito, de lo contrario devuelve un mensaje de error.

Algo así como cuando le digo: – sentada! a mi perra Frida … y se sienta.

Pongamos un ejemplo:

Si ejecutamos el comando ls para listar el contenido del directorio «/»,  veremos ésto:


~$ ls /
bin etc lib32 obs-studio sbin tmp
boot home lib64 opt snap usr
cdrom initrd.img lost+found proc srv var
datos initrd.img.old media root sys vmlinuz
dev lib mnt run timeshift vmlinuz.old

Como vemos en el ejemplo, se devolvió la salida por pantalla porque el directorio / existe y tiene un contenido para listar.
Sin embargo hay algo que no vemos, que es el código de salida estándar para Linux y UNIX. Lo podemos ver con el siguiente comando:

~$ echo $?
0

El código de salida del comando es 0, éssto quiere decir que el comando se ejecutó correctamente y devolvió la salida a la terminal mostrando el contenido del directorio «/».

Ahora vamos a ejecutar el mismo comando pero vamos a pedirle al sistema operativo que liste el contenido de un directorio que no existe, el directorio que voy a usar se llama foo.


~$ ls /foo
ls: no se puede acceder a '/foo': No existe el archivo o el directorio

Como vemos el comando devolvió error porque el directorio foo no existe. Veamos qué nos dice el código de la salida que no se ve.


~$ echo $?
2

Como vemos el código de salida devuelve el número 2, esto significa que hay un error. En este caso no existe el archivo o directorio.

¿Qué conclusión podemos sacar?

La conclusión hasta aquí es la siguiente:

Cuando ejecutamos un comando y el código de salida devuelve 0 es que el comando se ejecutó bien. Si devuelve 2 o cualquier número distinto de 0 hay un error. El comando no se ejecutó correctamente y tenemos que empezar a investigar porqué.

Los códigos de salida se establecen para que los programadores y los usuarios nos pongamos de acuerdo en cómo saber si algo salió bien o mal.

¿Los códigos de salida están estandarizados?

Los códigos de salida están estandarizados, los podemos ver en la siguiente lista.

Los voy a poner el nuestro idioma y en inglés  (respetando la filosofía y tradición).

Si no hay noticias son buenas noticias… Todos los procesos devuelven un código de estado este puede ser:

No news is good news … All processes return a status code, and you can expect that to be:

0 – success — El proceso salió bien.
1 – failure — El proceso falló.
2 – abject failure — Fracasé con todo éxito. (fracaso absoluto)

Para el ejemplo del comando ls que vimos anteriormente nos devolvió dos códigos distintos:

0 – Aqui tenés el listado del directorio que me pediste.
2 – Lo siento , e directorio que querés que liste no existe.

Conclusiones importantes.

Ahora podemos entender porqué cuando levantamos un servicio con el comando systemclt start servicio, el sistema no devuelve nada a la terminal (si no hay noticias son buenas noticias).

Importante: cuando usemos scripts para evaluar algún proceso, vamos a usar estos códigos de salida, para saber cual es el camino por el cual tenemos que seguir.