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.