Con la que le está cayendo estos días a BASH con las infames vulnerabilidades que se le están descubriendo, he pensado dedicar el truco de esta semana a romper una lanza a favor de este fabuloso intérprete de comandos. A pesar de los problemas que nos está provocando a los administradores de sistemas, no podemos olvidar las enormes posibilidades de BASH y lo que nos ha facilitado la vida hasta la fecha. Una de estas capacidades avanzadas es lo que se conoce como los comandos (u órdenes) internos de la shell.
BASH incluye un buen número de comandos internos, algunos de los cuales son versiones reducidas de los que aparecen en el paquete coreutils
de GNU, tales como echo
, time
, test
, pwd
o kill
, mientras que otros sólo existen dentro de BASH, como cd
, alias
, pushd
, popd
, exec
o trap
. Para comprobar si un comando es interno y si tiene una contrapartida externa se utiliza el comando type
, que por cierto es sólo interno:
$ type -a echo
echo es una orden interna del shell
echo is /bin/echo
$ type -a cd
cd es una orden interna del shell
$ type -a mkdir
mkdir is /bin/mkdir
Según las prioridades de ejecución de BASH, un comando interno siempre se ejecuta antes. Por tanto, ¿qué ventajas tiene esto? Por una parte una mayor rapidez de ejecución y un menor consumo de recursos y por otra parte la seguridad de poder ejecutar el comando aunque el sistema esté colapsado. Por ejemplo, si el sistema ha llegado al máximo de procesos en ejecución y queremos matar algunos, no podremos utilizar /bin/kill
pero sí el comando interno kill
. A cambio, como ya he dicho al principio, los comandos internos «repetidos» tienen menores capacidades que sus equivalentes externos.