Tabla de contenidos
$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. Le 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.
Bash 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 esté allí. Luego, ubica 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 utiliza está dentro del propio shell (un «shell incorporado» ), no es necesario realizar más búsquedas.
Los elementos 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 $PATH
variable de entorno. Contiene una lista de lugares en los que el shell busca y el orden en el que se buscarán.
Si desea ver si un comando es un comando interno de shell, un alias, una función o un mv / work / unfile binario independiente , puede usar el type
comando como se muestra a continuación:
escriba claro
tipo cd
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 echo
comando e imprimir el valor contenido en la $PATH
variable:
echo $ PATH
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.
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
/bin
/usr/games
/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 del terminal. Está ubicado en /usr/local/bin
. También tenemos una versión más reciente en el /dave/work
directorio.
Escribimos el siguiente which
comando para mostrarnos qué versión de nuestro programa encontrará y usará el shell:
cual rf
El shell informa que la versión que encontró es la del directorio que está en la ruta.
Escribimos lo siguiente para encenderlo:
rf
La versión 1.0 de rf
funciona 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
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 /usr/local/bin
directorio 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 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
in /usr/local/bin
.
Agregar un directorio a su $ PATH
Puede usar el export
comando 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, detiene la búsqueda, por lo que debe asegurarse de que busque primero en su directorio, antes /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
Este comando se establece $PATH
para ser igual al directorio que estamos agregando /home/dave/work
, y luego a toda la ruta actual.
El primero PATH
no tiene signo de dólar ( $
). Establecemos el valor para PATH
. La final $PATH
tiene un signo de dólar porque estamos haciendo referencia al contenido almacenado en la PATH
variable. Además, tenga en cuenta los dos puntos ( :
) entre el nuevo directorio y el $PATH
nombre de la variable.
Veamos cómo se ve el camino ahora:
echo $ PATH
Nuestro /home/dave/work
directorio se agrega al inicio 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:
cual rf
La prueba en el pudín se está ejecutando rf
, como se muestra a continuación:
rf
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 dijo Beth Brooke-Marciniak , «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 el $PATH
. Para que sean permanentes, debe poner su export
comando en un archivo de configuración.
Cuando coloca el export
comando en su .bashrc
archivo, establece la ruta cada vez que abre una ventana de terminal. A diferencia de las SSH
sesiones , para las que debe iniciar sesión, se denominan sesiones «interactivas».
En el pasado, pondría el export
comando en su .profile
archivo para establecer la ruta para iniciar sesión en las sesiones de terminal.
Sin embargo, descubrimos que si colocamos el export
comando 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 /home
directorio para editar el .bashrc
archivo:
gedit .bashrc
El gedit
editor se abre con el .bashrc
archivo cargado.
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 dot
comando para leer el .bashrc
archivo, de la siguiente manera:
. .bashrc
Luego, escriba el siguiente echo
comando para verificar la ruta:
echo $ PATH
Esto agrega el /home/dave/work
directorio al inicio de la ruta.
El proceso para agregar el comando al .profile
archivo es el mismo. Escriba el siguiente comando:
gedit .profile
El gedit
editor se inicia con el .profile
archivo cargado.
Agregue el export
comando al final del archivo y luego guárdelo. Cerrar y abrir una nueva ventana de terminal no es suficiente para forzar la .profile
lectura del archivo. Para que la nueva configuración surta efecto, debe cerrar la sesión y volver a iniciarla o usar el dot
comando como se muestra a continuación:
. .perfil
Estableciendo el camino para todos
Para establecer la ruta para todos los que usan el sistema, puede editar el /etc/profile
archivo.
Deberá usar sudo
, de la siguiente manera:
sudo gedit / etc / profile
Cuando se gedit
inicie el editor, agregue el comando de exportación al final del archivo.
Guarde y cierre el archivo. Los cambios se aplicarán a 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.
Si lo hace, esto buscará primero en el directorio actual, lo que presenta un riesgo de seguridad. Supongamos que descargó un archivo de almacenamiento 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ía en lugar del unzip
ejecutable real . Esto sucedería porque el shell buscaría primero en el directorio actual.
Por lo tanto, siempre tenga cuidado al escribir sus export
comandos. Use echo
$ PATH para revisarlos y asegurarse de que estén de la manera que desea que sean.