$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 inclusive 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. Después, 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 hay un binario involucrado. Si el comando que utiliza está dentro del propio shell (un «Shell incorporado») no es necesario realizar más búsquedas.
Los ítems incorporados de la carcasa son los más fáciles de hallar debido a que forman parte integral de la carcasa. Es como tenerlos en un cinturón de herramientas: siempre están contigo.
A pesar de esto, si necesita alguna de sus otras herramientas, debe buscar en el taller para encontrarla. ¿Está en su mesa de trabajo o en un colgador de pared? Eso es lo que el $PATH
la variable de entorno lo hace. 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 shell incorporado, un alias, una función o un mv / trabajo / un archivo binario independiente, puedes utilizar el type
comando como se muestra a continuación:
type clear
type cd
Esto nos dice que clear
es un archivo binario, y el primero que se encuentra en la ruta se encuentra en /usr/bin
. Puede tener más de una versión de clear
instalado en su computadora, pero este es el que el shell intentará utilizar.
Como podíamos esperar, cd
es un shell incorporado.
Listado de su $ PATH
Es fácil ver lo que hay en tu camino. Simplemente escriba lo siguiente para utilizar el echo
mando e imprime el valor celebrado en el $PATH
variable:
echo $PATH
La salida es una lista de dos puntos (:
) ubicaciones delimitadas del sistema de archivos. El shell busca de izquierda a derecha a través de la ruta, comprobando la ubicación de cada sistema de archivos en busca de un ejecutable coincidente para ejecutar su comando.
Podemos seleccionar 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á. Al mismo tiempo, 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
. Además tenemos una versión más reciente en el /dave/work
directorio.
Escribimos lo siguiente which
mando para mostrarnos qué versión de nuestro programa el shell encontrará y usará:
which 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
Versión 1.0 de rf
corre 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 utilizar 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 hallar la versión de rf
que queremos ejecutar, utiliza la versión 1.1. Si preferimos esta versión, podemos copiarla en el /usr/local/bin
directorio y sobrescriba el anterior.
Digamos que estamos desarrollando una versión nueva de rf
. Tendremos que ejecutarlo muchas veces 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 versión nueva 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
.
Agregar un directorio a su $ PATH
Puedes utilizar el export
comando para agregar un directorio al $PATH
. Después, el directorio se incluye en el listado 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 en su directorio primero, 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 establece $PATH
para ser igual al directorio que estamos agregando, /home/dave/work
, y posteriormente toda la ruta actual.
El primero PATH
no tiene signo de dólar$
). Establecemos el valor para PATH
. El final $PATH
tiene un signo de dólar debido a que estamos haciendo referencia al contenido almacenado en el PATH
variable. Al mismo tiempo, 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
El directorio se agrega al inicio de la ruta. Los dos puntos que proporcionamos lo separan del resto del camino.
Escribimos lo siguiente para verificar nuestra versión de rf
es el primero que se encuentra:
which rf
La prueba en el pudín se está ejecutando rf
, Como se muestra abajo:
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 permanentes los cambios
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, cualquier cambio que haya realizado en el $PATH
se fueron. Para que sean permanentes, debes poner tu export
comando en un archivo de configuración.
Cuando pones el export
mando en tu .bashrc
archivo, establece la ruta cada vez que abre una ventana de terminal. distinto a SSH
sesiones, para lo cual debe iniciar sesión, se denominan sesiones «interactivas».
En el pasado, pondría el export
mando en tu .profile
file para determinar la ruta para iniciar sesión en sesiones de terminal.
A pesar de esto, encontramos que si ponemos el export
comando en el .bashrc
o .profile
archivos, configuró correctamente la ruta para las sesiones de terminal interactivas y de inicio de sesión. Tu experiencia puede ser distinto. 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
expediente:
gedit .bashrc
los gedit
el editor se abre con el .bashrc
archivo cargado.
Desplácese hasta la parte inferior del archivo y posteriormente agregue el siguiente comando de exportación que usamos previamente:
export PATH=/home/dave/work:$PATH
Guarda el archivo. A continuación, cierre y vuelva a abrir la ventana de terminal o utilice el dot
comando para leer el .bashrc
archivo, de la próxima manera:
. .bashrc
Después, escriba lo siguiente echo
comando para verificar la ruta:
echo $PATH
Esto agrega el /home/dave/work
directorio al inicio de la ruta.
El procedimiento para agregar el comando al .profile
el archivo es el mismo. Escriba el siguiente comando:
gedit .profile
los gedit
editor se inicia con el .profile
archivo cargado.
Añade el export
comando al final del archivo y posteriormente guárdelo. Cerrar y abrir una nueva ventana de terminal es insuficiente para forzar la .profile
archivo para ser releído. Para que la nueva configuración surta efecto, debe cerrar la sesión y volver a iniciarla o utilizar la dot
comando como se muestra a continuación:
. .profile
RELACIONADO: Cómo editar archivos de texto gráficamente en Linux con gedit
Estableciendo el camino para todos
Para determinar la ruta para todos los que usan el sistema, puede editar el /etc/profile
expediente.
Necesitarás utilizar sudo
, como sigue:
sudo gedit /etc/profile
Cuando el gedit
se inicia 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 a la izquierda «:
”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ías en lugar del real unzip
ejecutable. Esto sucedería debido a que el shell buscaría primero en el directorio actual.
Por eso, siempre tenga cuidado al escribir su export
comandos. Utilizar echo
$ PATH para revisarlos y asegurarse de que estén como usted desea.