Encuentra lo que buscas con: which, apropos, whatis, locate y whereis

Ya llevaba algún tiempo sin escribir, y ahora que estaba aquí en la cama, tranquilo, con mi terminal bash abierto, como siempre, estaba buscando unos cuantos comandos que había olvidado, y me dije: ‘Joder, por que cojones no me voy a dormir ya (?)’, pero al final decidí escribir esta entrada así que, ahí va.

Cuando estamos buscando algún comando y lo tenemos en la punta de los dedos para teclearlo, tenemos que recurrir a Internet, o quizá no, quizá tu seas más de pararte a recordarlo como si no hubiera mañana. Pero mejor que eso, es utilizar los comandos que vienen en el sistema para encontrar lo que buscamos.

Cuando ejecutamos un comando, se consulta la variable $PATH, la cual contiene varias rutas a directorios con los diferentes binarios, por ejemplo en mi equipo puedo visualizar lo siguiente:

david$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Como podemos observar las rutas están separadas por dos puntos (:). Cada una de ellas contiene los diferentes binarios de los comandos existentes, si alguna vez estamos buscando el directorio que contiene ‘X’ binarios de ‘X’ comando, el comando que nos solucionará la vida será which.

david$  which man
/usr/bin/man

david$ which which
/usr/bin/which

Si en cambio se te olvido ese comando que realizaba ‘X’ o ‘Y’ acción, apropos o man -k será el que te va a ayudar; a este comando es necesario pasarle una palabra ‘clave’ del comando que buscas y este se encargará de buscar una palabra coincidente en las cabeceras de las paginas man de todos los comandos. Supongamos que hemos olvidado el comando que vuelca el contenido de ficheros en formatos, octal, hexadecimal, etc… Que en este caso sería od , entonces podríamos ejecutar :

david$ apropos dump octal
… Salida omitida
od (1)  – dump files in octal and other formats
… Salida omitida

whatis o man -f  no nos va ayudar tanto como la anterior, más bien, nos va a aclarar para que sirve un comando, pero la búsqueda debe ser exacta, por ejemplo:

david$ whatis od
od (1)  – dump files in octal and other formats

Otra forma, más básica de realizar una búsqueda en todo el sistema de archivos es con el comando locate este utiliza una base de datos, que se actualiza con el comando updatedb la cual contiene todos los archivos listados en el momento de ejecución del comando. Cron tiene una tarea que hace que este comando se ejecute diariamente. También se puede forzar ejecutando el susodicho comando. Por ejemplo, si creamos un fichero ahora mismo en nuestro terminal y lo buscamos:

david$ touch gnulinuxdocs
david$ locate gnulinuxdocs

Pero si ejecutamos el comando updatedb:

david$ sudo updatedb
david$ locate gnulinuxdocs/home/david/gnulinuxdocs

Hay que tener en cuenta que si borramos el fichero creado con anterioridad y ejecutamos locate, nos seguirá diciendo que esta en la misma ruta del resultado anterior, hasta que no actualicemos la BD no veremos cambio alguno.

Finalmente whereis realiza un busqueda de la ubicación de los binarios de los comandos y la ubicación de las manpage de los mismos:

david$ whereis od
od: /usr/bin/od /usr/bin/X11/od /usr/share/man/man1/od.1.gz

De momento os dejo con esto. ¡Buen fin de semana!

Deja un comentario