$ PATH es uno de los manipuladores silenciosos en el fondo de su computadora Linux. Afecta silenciosamente su experiencia de usuario, pero no tiene nada de sospechoso. Explicaremos qué hace y cómo puede ajustarlo.

¿Qué es $ PATH en Linux y cómo funciona?

Cuando escribe un comando en una ventana de terminal y presiona Enter, inicia una gran cantidad de actividad incluso antes de que se ejecute el comando.

Intento es el shell predeterminado en la mayoría de las distribuciones de Linux. Interpreta la línea de texto que ingresó e identifica los nombres de los comandos entremezclados con los parámetros, tuberías, redirecciones, y cualquier otra cosa que haya. Luego, localiza los binarios ejecutables para esos comandos y los lanza con los parámetros que proporcionó.

El primer paso que toma el shell para localizar el ejecutable es identificar si un binario está involucrado. Si el comando que usa está dentro del propio shell (un «Shell incorporado») no se requiere más búsqueda.

Los componentes integrados de la carcasa son los más fáciles de encontrar porque son parte integral de la carcasa. Es como tenerlos en un cinturón de herramientas: siempre están contigo.

Sin embargo, si necesita alguna de sus otras herramientas, tendrá que buscar en el taller para encontrarla. ¿Está en su mesa de trabajo o en un colgador de pared? Eso es lo que hace la variable de entorno $ PATH. Contiene una lista de lugares donde busca el shell y el orden en el que se buscarán.

Si desea ver si un comando es un shell incorporado, un alias, una función o un mv / trabajo / un archivo binario independiente, puede usar el comando type como se muestra a continuación:

type clear
type cd

los

Esto nos dice que clear es un archivo binario, y el primero que se encuentra en la ruta se encuentra en / usr / bin. Es posible que tenga más de una versión de clear instalada en su computadora, pero esta es la que el shell intentará usar.

Como era de esperar, cd es un shell incorporado.

Listando su $ PATH

Es fácil ver lo que hay en tu camino. Simplemente escriba lo siguiente para usar el comando echo e imprime el valor mantenido en la variable $ PATH:

echo $PATH

los

El resultado es una lista de ubicaciones del sistema de archivos delimitadas por dos puntos (:). El shell busca de izquierda a derecha a través de la ruta, verificando cada ubicación del sistema de archivos para un ejecutable coincidente para ejecutar su comando.

  Cómo verificar las sumas de verificación ISO en Linux

Podemos elegir nuestro camino a través de la lista para ver las ubicaciones del sistema de archivos que se buscarán y el orden en el que se buscarán:

/ usr / local / sbin
/ usr / local / bin
/ usr / sbin
/ usr / bin
/ sbin
/compartimiento
/ usr / juegos
/ usr / local / games
/ snap / bin

Algo que puede no ser inmediatamente obvio es que la búsqueda no comienza en el directorio de trabajo actual. Más bien, se abre paso a través de los directorios enumerados y solo los directorios enumerados.

Si el directorio de trabajo actual no está en su ruta, no se buscará. Además, si tiene comandos almacenados en directorios que no están en la ruta, el shell no los encontrará.

Para demostrar esto, creamos un pequeño programa llamado rf. Cuando se ejecuta, rf imprime el nombre del directorio desde el que se inició en la ventana de terminal. Está ubicado en / usr / local / bin. También tenemos una versión más reciente en el directorio / dave / work.

Escribimos lo siguiente que comando para mostrarnos qué versión de nuestro programa el shell encontrará y usará:

which rf

los

El shell informa que la versión que encontró es la del directorio que está en la ruta.

Escribimos lo siguiente para encenderlo:

rf

los

La versión 1.0 de rf se ejecuta y confirma que nuestras expectativas eran correctas. La versión encontrada y ejecutada se encuentra en / usr / local / bin.

Para ejecutar cualquier otra versión de rf en esta computadora, tendremos que usar la ruta al ejecutable en la línea de comando, como se muestra a continuación:

./work/rf

los

Ahora que le hemos dicho al shell dónde encontrar la versión de rf que queremos ejecutar, usa la versión 1.1. Si preferimos esta versión, podemos copiarla en el directorio / usr / local / bin y sobrescribir la anterior.

Digamos que estamos desarrollando una nueva versión de rf. Tendremos que ejecutarlo con frecuencia a medida que lo desarrollamos y lo probamos, pero no queremos copiar una compilación de desarrollo inédita en el entorno en vivo.

O tal vez hemos descargado una nueva versión de rf y queremos hacer algunas pruebas de verificación antes de que esté disponible públicamente.

Si agregamos nuestro directorio de trabajo a la ruta, hacemos que el shell encuentre nuestra versión. Y este cambio solo nos afectará a nosotros; otros seguirán usando la versión de rf en / usr / local / bin.

  Cómo usar la aplicación de captura de pantalla Shutter en Linux

Agregar un directorio a su $ PATH

Puede utilizar el comando de exportación para agregar un directorio al $ PATH. Luego, el directorio se incluye en la lista de ubicaciones del sistema de archivos que busca el shell. Cuando el shell encuentra un ejecutable coincidente, deja de buscar, por lo que debe asegurarse de que busque primero en su directorio, antes de / usr / local / bin.

Esto es fácil de hacer. Para nuestro ejemplo, escribimos lo siguiente para agregar nuestro directorio al inicio de la ruta para que sea la primera ubicación buscada:

export PATH=/home/dave/work:$PATH

los

Este comando establece $ PATH para que sea igual al directorio que estamos agregando, / home / dave / work, y luego a toda la ruta actual.

El primer PATH no tiene signo de dólar ($). Establecemos el valor de PATH. El $ PATH final tiene un signo de dólar porque estamos haciendo referencia al contenido almacenado en la variable PATH. Además, tenga en cuenta los dos puntos (:) entre el nuevo directorio y el nombre de la variable $ PATH.

Veamos cómo se ve el camino ahora:

echo $PATH

los

Nuestro directorio / home / dave / work se agrega al comienzo de la ruta. Los dos puntos que proporcionamos lo separan del resto del camino.

Escribimos lo siguiente para verificar que nuestra versión de rf es la primera que encontramos:

which rf

los

La prueba en el pudín está ejecutando rf, como se muestra a continuación:

rf

los

El shell encuentra la versión 1.1 y la ejecuta desde / home / dave / work.

Para agregar nuestro directorio al final de la ruta, simplemente lo movemos al final del comando, así:

export PATH=$PATH:/home/dave/work

Hacer los cambios permanentes

Como Beth Brooke-Marciniak dijo: «El éxito está bien, pero el éxito es fugaz». En el momento en que cierra la ventana de la terminal, todos los cambios que haya realizado en $ PATH desaparecen. Para que sean permanentes, debe poner su comando de exportación en un archivo de configuración.

Cuando coloca el comando de exportación en su archivo .bashrc, establece la ruta cada vez que abre una ventana de terminal. diferente a Sesiones SSH, para lo cual debe iniciar sesión, se denominan sesiones «interactivas».

En el pasado, colocaba el comando de exportación en su archivo .profile para establecer la ruta para iniciar sesión en las sesiones de terminal.

  Cómo instalar el navegador Vivaldi en Linux

Sin embargo, descubrimos que si colocamos el comando de exportación en los archivos .bashrc o .profile, establece correctamente la ruta para las sesiones de terminal interactivas y de inicio de sesión. Tu experiencia puede ser diferente. Para manejar todas las eventualidades, le mostraremos cómo hacerlo en ambos archivos.

Utilice el siguiente comando en su directorio / home para editar el archivo .bashrc:

gedit .bashrc

los

El editor gedit se abre con el archivo .bashrc cargado.

El editor gedit con el

Desplácese hasta la parte inferior del archivo y luego agregue el siguiente comando de exportación que usamos anteriormente:

export PATH=/home/dave/work:$PATH

Guarda el archivo. A continuación, cierre y vuelva a abrir la ventana de terminal o use el comando dot para leer el archivo .bashrc, de la siguiente manera:

. .bashrc

Luego, escriba el siguiente comando echo para verificar la ruta:

echo $PATH

los

Esto agrega el directorio / home / dave / work al comienzo de la ruta.

El proceso para agregar el comando al archivo .profile es el mismo. Escriba el siguiente comando:

gedit .profile

los

El editor gedit se inicia con el archivo .profile cargado.

El editor gedit con el

Agregue el comando de exportación al final del archivo y luego guárdelo. Cerrar y abrir una nueva ventana de terminal no es suficiente para forzar la relectura del archivo .profile. Para que la nueva configuración surta efecto, debe cerrar la sesión y volver a iniciarla o usar el comando dot como se muestra a continuación:

. .profile

Estableciendo el camino para todos

Para establecer la ruta para todos los que usan el sistema, puede editar el archivo / etc / profile.

Deberá usar sudo, de la siguiente manera:

sudo gedit /etc/profile

Cuando se inicie el editor gedit, agregue el comando de exportación al final del archivo.

El editor gedit con el

Guarde y cierre el archivo. Los cambios surtirán efecto para los demás la próxima vez que inicien sesión.

Una nota sobre seguridad

Asegúrese de no agregar accidentalmente dos puntos iniciales “:” a la ruta, como se muestra a continuación.

los

Si lo hace, esto buscará primero en el directorio actual, lo que presenta un riesgo de seguridad. Supongamos que descargó un archivo comprimido y lo descomprimió en un directorio. Miras los archivos y ves otro archivo comprimido. Llamas a descomprimir una vez más para extraer ese archivo.

Si el primer archivo contenía un archivo ejecutable llamado unzip que era un ejecutable malicioso, accidentalmente lo activarías en lugar del ejecutable de descompresión real. Esto sucedería porque el shell buscaría primero en el directorio actual.

Por lo tanto, siempre tenga cuidado al escribir sus comandos de exportación. Utilice echo $ PATH para revisarlos y asegurarse de que estén de la manera que desea que sean.