1.7. El terminal como herramienta de trabajo
1.7.4. Localizando comandos
Ahora que habéis escrito algunos comandos, puede que os preguntéis dónde están ubicados esos comandos y cómo el shell encuentra los comandos que habéis escrito. Para encontrar los comandos que escribís, el shell busca en lo que se conoce como path (en castellano, ruta). Para los comandos que no están en vuestro path, podéis escribir la identidad completa de la ubicación del comando.
Si conocéis el directorio que contiene el comando que deseas ejecutar, una forma de ejecutarlo es escribiendo la ruta completa, o absoluta, de ese comando. Por ejemplo, podéis ejecutar el comando date
que se encuentra dentro del directorio /bin escribiendo:
$ /bin/date
Por supuesto, esto puede ser inconveniente, especialmente si el comando reside en un directorio con una ruta larga. La mejor manera es tener los comandos almacenados en directorios conocidos y luego agregar esos directorios a la variable de entorno PATH de tu shell. El path consiste en una lista de directorios que se verifican secuencialmente para los comandos que habéis escrito. Para ver vuestro path actual, escribid lo siguiente:
$ echo $PATH
/home/student/bin:/home/student/.local/bin:/usr/local/sbin: /usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
Los resultados muestran un path predeterminado común para un usuario regular de Gnu/Linux. Los directorios en la lista del path están separados por dos puntos. La mayoría de los comandos de usuario que vienen con Gnu/Linux se almacenan en los directorios /bin, /usr/bin o /usr/local/bin. Los directorios /sbin y /usr/sbin contienen comandos administrativos (algunos sistemas Gnu/Linux no colocan esos directorios en los paths de los usuarios regulares). El primer directorio mostrado es el directorio bin en el directorio de inicio del usuario (/home/student/bin). Si deseáis agregar vuestros propios comandos o scripts de shell, colocadlos en el directorio bin en vuestro directorio de inicio (ie. /home/student/bin para un usuario llamado student). Este directorio se agrega automáticamente a vuestro path en algunos sistemas Gnu/Linux, aunque es posible que necesitéis crear ese directorio o agregarlo a vuestro PATH en otros sistemas Gnu/Linux. Entonces, siempre que agreguéis el comando a vuestro bin con permiso de ejecución, podéis comenzar a usarlo simplemente escribiendo el nombre del comando en el indicador de vuestro shell. Si se considera que el nuevo comando esté disponible para todos los usuarios, podéis agregarlo con el usuario root al directorio /usr/local/bin o /opt/nombre_paquete/bin.
A diferencia de algunos otros sistemas operativos, Gnu/Linux no verifica el directorio actual del ejecutable. Inmediatamente, comienza a buscar en el path, y los ejecutables en el directorio actual solo se ejecutan si están en la variable PATH o si dais su dirección absoluta (como /home/student/scriptx.sh) o relativa (por ejemplo, y fijaos en el punto antes de la contrabarra, ./scriptx.sh). Los directorios que pertenecen al path de ejecutables se pueden averiguar escribiendo $PATH en el prompt del terminal:
$ echo $PATH
/home/student/.sdkman/candidates/java/current/bin: /home/student/miniconda3/bin: /home/student/miniconda3/condabin: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin: /bin:/usr/games:/usr/local/games:/snap/bin
El orden del directorio del path es importante. Los directorios se verifican de izquierda a derecha. Entonces, en este ejemplo, si hay un comando llamado foo
ubicado en ambos directorios /bin y /usr/bin, se ejecuta el que está en /bin
. Para que se ejecute el otro comando foo, debéis escribir el path completa del comando o cambiar vuestra variable PATH (un ejemplo práctico de cómo cambiar la variable PATH y agregar directorios se describe en los apartados 1.15 y 1.17).