Saltar al contenido

Configuración de la variable PATH en / etc / environment vs .profile

Por fin luego de tanto trabajar hemos dado con la respuesta de este atolladero que muchos usuarios de nuestro sitio web han presentado. Si tienes algo que aportar no dudes en aportar tu comentario.

Solución:

Resumen:

  • Si desea agregar una ruta (p. Ej. /your/additional/path) para usted PATH variable solo para su usuario actual y no para todos los usuarios de su computadora, normalmente la coloca al final de ~/.profile como en uno de esos dos ejemplos:

    PATH="/your/additional/path:$PATH"
    PATH="$PATH:/your/additional/path"
    

    Tenga en cuenta que las prioridades de la ruta descienden de izquierda a derecha, por lo que la primera ruta tiene la prioridad más alta. Si agrega su ruta a la izquierda de $PATH, tendrá la prioridad más alta y los ejecutables en esa ubicación anularán a todos los demás. Si agrega su ruta a la derecha, tendrá la prioridad más baja y se preferirán los ejecutables de las otras ubicaciones.

  • Sin embargo, si necesita establecer esa variable de entorno para todos los usuarios, todavía no recomendaría tocar /etc/environment pero creando un archivo con el nombre del archivo terminado en .sh en /etc/profile.d/. los /etc/profile script y todos los scripts en /etc/profile.d son el equivalente global del personal de cada usuario ~/.profile y ejecutado como scripts de shell regulares por todos los shells durante su inicialización.


Mas detalle:

  • /etc/environment es un archivo de configuración de todo el sistema, lo que significa que lo utilizan todos los usuarios. Es propiedad de root sin embargo, debe ser un usuario administrador y utilizar sudo para modificarlo.

  • ~/.profile es uno de los scripts de inicialización de shell personales de su propio usuario. Cada usuario tiene uno y puede editar su archivo sin afectar a los demás.

  • /etc/profile y /etc/profile.d/*.sh son los scripts de inicialización global que son equivalentes a ~/.profile para cada usuario. Sin embargo, los scripts globales se ejecutan antes que los scripts específicos del usuario; y el principal /etc/profile ejecuta todos los *.sh guiones en /etc/profile.d/ justo antes de salir.


  • los /etc/environment el archivo normalmente contiene solo esta línea:

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
    

    Establece el PATH variable para todos los usuarios del sistema a este valor predeterminado, que no debe cambiarse de manera importante. Al menos no debes eliminar ninguna de las rutas importantes como /bin, /sbin, /usr/bin y /usr/sbin de eso.

    Este archivo es leído como uno de los primeros archivos de configuración por cada shell de cada usuario. Tenga en cuenta que es no es un script de shell. ¡Es solo un archivo de configuración que se analiza de alguna manera y que solo puede contener asignaciones de variables de entorno!

  • los ~/.profile El archivo puede contener muchas cosas, por defecto contiene, entre otras cosas, una verificación de si ~/bin El directorio existe y lo agrega al directorio existente del usuario. PATH variable, como esta (en versiones anteriores de Ubuntu anteriores a la 16.04, que la agrega incondicionalmente, y en la 18.04, que también agrega “~ / .local / bin”):

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    

    Ves que el antiguo valor de PATH se reutiliza aquí y la nueva ruta solo se agrega al principio en lugar de sobrescribir todo. Cuando desee agregar nuevas rutas manualmente, también debe mantener siempre las antiguas $PATH valor en algún lugar de la nueva cadena.

    Este script de inicialización solo lo leen los shells del usuario al que pertenece, pero hay otra condición:

    # ~/.profile: executed by the command interpreter for login shells.
    # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
    # exists.
    

    Entonces, si usa el shell Bash predeterminado, debe asegurarse de no tener un ~/.bash_profile o ~/.bash_login si quieres los cambios en ~/.profile para tener un efecto para su usuario.


Para una comprensión completa de las variables de entorno, consulte: https://help.ubuntu.com/community/EnvironmentVariables


Pregunta relacionada: diferencia entre el archivo bash.bashrc y / etc / environment

Esta respuesta es principalmente sobre el orden en el que las variables de entorno como PATH son asignados cuando se especifica en diferentes archivos de configuración. También cubro dónde debería configurarlos normalmente, pero la lista a continuación no enumera los archivos en el orden en que debería considerar su uso. Para obtener información general sobre la configuración PATH y otras variables de entorno en Ubuntu, también recomiendo leer Variables de entorno y las otras respuestas a esta pregunta.

El lugar preferido para establecer PATH depende de que usuarios necesitas configurarlo para y cuando y cómo desea que se establezca. Parte de su decisión será si desea establecer una variable de entorno para todos los usuarios o para cada usuario. Si no está seguro, le recomiendo configurarlo para un solo usuario (por ejemplo, su cuenta) en lugar de para todo el sistema.

Como dice AlexP, el PATH la variable de entorno tendrá el valor que tenía asignado más recientemente. En la práctica, la mayoría del tiempo que estableciste PATH, incluye el viejo valor de PATH en el nuevo valor, de modo que se conserven las entradas anteriores.

Así, en la práctica, cuando PATH se establece a partir de varios archivos, por lo general contiene las entradas dadas en todos los archivos. Pero eso solo sucede porque todos los archivos que lo configuran, excepto el primero, generalmente hacen referencia al PATH variable en sí, lo que hace que su valor anterior se incluya en el nuevo.

Por lo tanto, está preguntando por el orden en el que PATH se aplicarán los ajustes de varios archivos.

Lugares comunes de uso general para establecer PATH se enumeran a continuación en el orden en que entran en vigor cuando un usuario inicia sesión, no en el orden en el que normalmente debería considerar su uso. Cada uno de los lugares enumerados a continuación es una opción razonable para establecer PATHen algunos situaciones, pero solo unas pocas son buenas opciones la mayor parte del tiempo.

En la lista a continuación, verá algunos nombres de directorio como ~/.profile. En caso de que no esté familiarizado con la expansión de tilde, ~/ se refiere al directorio de inicio del usuario actual. Utilizo principalmente esta sintaxis para compacidad. Es compatible con scripts de shell, pero no en los archivos de configuración de PAM.

1. Para todos los usuarios: /etc/environment

PAM en Ubuntu provoca las variables de entorno enumeradas en /etc/environment para ser configurado, si ese archivo existe, que por defecto lo hace. Así es como se establecen más comúnmente las variables de entorno para todos los usuarios.

$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Si debe establecer variables de entorno para todos cuentas de usuario, en lugar de solo su cuenta de usuario, entonces modificar ese archivo probablemente sea su mejor opción. Recomiendo hacer una copia de seguridad primero. Una forma de hacer una copia de seguridad de este archivo es ejecutar:

sudo cp /etc/environment /etc/environment.orig

los .orig La extensión no se requiere específicamente; puede sentirse bien al nombrar el archivo de copia de seguridad como algo que no sea confuso o que ya se esté utilizando. (Además .orig, .old, .backup y .bak son comunes.)

Puede editar este archivo de cualquiera de las formas en que puede editar cualquier otro archivo como usuario raíz (sudoedit /etc/enviromnment, sudo nano -w /etc/environment, gksudo gedit /etc/environment, etc.)

/etc/environment no admite la inclusión automática del valor anterior de una variable. Pero esto suele ser innecesario, ya que la mayoría de las veces establecería una variable de entorno para todos los usuarios editando /etc/environment, querrá que ese sea su valor inicial cuando el usuario inicia sesión, de todos modos. A continuación, el usuario puede cambiarlo como desee. Normalmente, es bueno que los usuarios puedan hacer esto.

2. Para todos los usuarios: /etc/security/pam_env.conf

PAM lee las variables de entorno para todos los usuarios de /etc/security/pam_env.conf, especificado con la misma sintaxis que se utiliza en por usuario ~/.pam_environment archivos (ver más abajo).

Cuando se establece la misma variable de entorno en ambos /etc/environment y /etc/security/pam_env.conf, el valor en pam_env.conf se utiliza, incluso si ese valor se especifica como DEFAULT en vez de OVERRIDE.

Sin embargo, cuando reemplaza una línea en environment con uno en pam_env.conf, puede incluir el contenido del valor reemplazado. Consulte la sección siguiente sobre .pam_environment para más detalles (ya que usa la misma sintaxis).

Por lo general, no es necesario editar pam_env.conf y deberías tener mucho cuidado si lo haces, desde un malformado line generalmente evitará que todas las cuentas de usuario normales inicien sesión. Por ejemplo, el valor predeterminado pam_env.conf contiene las líneas:

#PATH           DEFAULT=$HOME/bin:/usr/local/bin:/bin
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11

Esto se presenta como uno de varios ejemplos. Una de las cosas que ilustra es cómo dividir una tarea en varias líneas con . Suponga que debe descomentar solo la primera línea, pero se olvidó de descomentar la segunda línea:

PATH           DEFAULT=$HOME/bin:/usr/local/bin:/bin
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11

¡No hagas esto!

Lo probé yo mismo por accidente y evitó que los usuarios iniciaran sesión correctamente. Para solucionarlo, tuve que arrancar en modo de recuperación y volver a cambiarlo. (Afortunadamente, hice esto en una máquina virtual que uso solo para probar cosas, por lo que no me causó ningún problema).

3. Para un usuario: .pam_environment en el directorio de inicio del usuario

Una de las formas de establecer una variable de entorno para un solo usuario es que ese usuario edite (o cree) .pam_environment en su directorio de inicio. Los valores establecidos en este archivo reemplazan a los establecidos en el /etc/environment expediente.

.pam_environment no forma parte del esqueleto de los archivos que se copian en la carpeta de inicio de un usuario cuando se crea inicialmente la cuenta de usuario. Sin embargo, si crea ese archivo en su directorio de inicio, puede usarlo para establecer variables de entorno como PATH. diferente a /etc/environment (pero al igual que /etc/security/pam_env.conf), el por usuario .pam_environment Los archivos admiten la expansión del valor anterior de una variable de entorno a una nueva. Sin embargo, no son scripts de shell y debe usar una sintaxis especial para lograr esto, que difiere un poco de la sintaxis que usaría en un archivo como .profile.

Por ejemplo, si tuvieras un bin2 directorio en su directorio de inicio que desea agregar al final de PATH, puede hacerlo agregando esta línea a .pam_environment:

PATH DEFAULT=$PATH:/home/@PAM_USER/bin2

Ver el ~/.pam_environment subsección de EnvironmentVariables (de la cual el ejemplo anterior está muy adaptado), man pam_env, y man pam_env.conf para mas detalles.

Aunque esta vez se promocionó como la forma preferida para que los usuarios de Ubuntu cambien o agreguen variables de entorno y todavía se considera una opción razonable y aceptable, debe tener cuidado al editar .pam_environment. Como ediciones en todo el sistema /etc/security/pam_env.conf (ver arriba), una línea mal formada en un usuario .pam_environment El archivo evitará que los inicios de sesión se realicen correctamente. (He probado esto, a propósito esta vez). Para obtener información sobre cómo han evolucionado las recomendaciones, consulte los comentarios de Gunnar Hjalmarsson a continuación y este ubuntu-devel discusión.

Tal error es mucho menos grave, en general, que una línea mal formada en pam_env.conf, porque afecta a un solo usuario. Sin embargo, en el caso de un sistema Ubuntu de escritorio con una sola cuenta de usuario que permite inicios de sesión, tal error al editar .pam_environment será tan malo como un error al editar pam_env.conf – Si aún no ha iniciado sesión, no podrá solucionarlo sin iniciar en modo de recuperación (o desde un USB en vivo, etc.).

(Si tiene otras cuentas de usuario, puede iniciar sesión como otro usuario y solucionar el problema. Incluso si no es un administrador y no puede sudo para rootear, todavía pueden ejecutar su your-account y se le pedirá que ingrese su contraseña (no la de ellos). los huésped cuenta, sin embargo, no puede hacer esto, ya que está prohibido usar su para asumir la identidad de otro usuario).

4. Para todos los usuarios: /etc/profile y archivos dentro /etc/profile.d/

Carcasas compatibles con Bourne (incluidas bash, el shell de usuario predeterminado en Ubuntu) ejecute los comandos en /etc/profile cuando se invoca como un shell de inicio de sesión.

De Ubuntu /etc/profile termina con:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

Esto hace que los comandos en cualquier archivo en el /etc/profile.d/ directorio cuyo nombre termina en .sh para ser ejecutado también.

La mayoría de los administradores de pantalla hacen que los comandos en /etc/profile (y por lo tanto archivos en /etc/profile.d) para que se ejecute también para inicios de sesión gráficos. Sin embargo, no todos lo hacen, y ese es un argumento importante a favor de utilizar las instalaciones proporcionadas por PAM en su lugar (ver arriba) – a menos que nunca haya ningún inicio de sesión gráfico en este sistema, que podría ser el caso, por ejemplo, si se trata de un servidor sin GUI instalada.

Es tradicional establecer variables de entorno de todo el sistema en /etc/profile, pero a menudo esta ya no es la mejor opción. Si no puede establecer una variable de entorno en /etc/environment, y debe configurarlo para todos los usuarios, entonces probablemente sea mejor crear un nuevo archivo en /etc/profile.d/ que editar /etc/profile sí mismo. Una de las razones de esto es que, cuando se actualiza Ubuntu, puede haber una nueva /etc/profile expediente. Dependiendo de cómo realice la actualización, se mantendrá el archivo antiguo (con sus cambios), antes de ese archivo de configuración actualizado en particular, o se le pedirá que maneje la situación.

Cuando se establece la misma variable de entorno en ambos /etc/profile y uno o más archivos en /etc/profile.d, ¿cuál se realiza en último lugar? Esto depende de si los comandos en /etc/profile que los configuran aparecen antes o después de los archivos en profile.d se han obtenido (mediante el código que he citado anteriormente). Comandos en /etc/profile se ejecutan en el orden en que aparecen.

/etc/profile es un script de shell, y su sintaxis es no el mismo que el de los archivos de configuración PAM discutidos anteriormente. Su sintaxis es la misma que la sintaxis para el usuario. ~/.profile archivo (ver más abajo).

Si necesita escribir un código que decide si agregar o no un directorio en particular a PATH (y para hacerlo para todos los usuarios), no podrá utilizar /etc/environment o /etc/security/pam_env.conf Para hacer eso. Esta es quizás la situación principal en la que es mejor utilizar /etc/profile o /etc/profile.d/ en lugar de.

5. Para un usuario: .bash_profile en el directorio de inicio del usuario

Si un usuario tiene ~/.bash_profile, bash lo usa en lugar de ~/.profile o ~/.bash_login (vea abajo). Por lo general, no debería tener un .bash_profile en su directorio personal.

Si lo hace, normalmente debería contener un comando para generar ~/.profile (p.ej, . "$HOME/.profile"). De lo contrario, el contenido del por usuario .profile el archivo no se ejecuta en absoluto.

6. Para un usuario: .bash_login en el directorio de inicio del usuario

Si un usuario tiene ~/.bash_login, bash lo usa en lugar de ~/.profile (ver más abajo), a menos que ~/.bash_profile existe, en cuyo caso ninguno de los otros se utilizará a menos que se obtenga de `~ / .bash_login.

Al igual que con .bash_profile, normalmente no deberías tener .bash_login archivo en su directorio personal.

7. Para un usuario: .profile en el directorio de inicio del usuario.

Cuando se ejecuta un shell de estilo Bourne como un shell de inicio de sesión, ejecuta los comandos en /etc/profile (que normalmente incluye comandos que hacen que los comandos en archivos en /etc/profile.d/ para ser ejecutado – ver arriba). Después de eso, ejecuta los comandos en .profile en el directorio de inicio del usuario. Este archivo es independiente para cada usuario. (Bash realmente corre .bash_profile o .bash_login en su lugar, si existen, pero, para los usuarios de un sistema Ubuntu, esos archivos rara vez deberían existir o existen. Para obtener más información, consulte la sección 6.2 Archivos de inicio de Bash en el manual de Bash).

~/.profile es, por tanto, el lugar principal para que el usuario coloque los comandos que se ejecutan cuando inician sesión. Es el lugar tradicional para que establezca su PATH, pero como Ubuntu tiene el módulo pam_env y admite ~/.pam_environment, deberías considerar usar eso.

Al igual que con /etc/profile, no todos los administradores de pantalla ejecutan este archivo para inicios de sesión gráficos, aunque la mayoría lo hace. Esta es una razón para preferir ~/.pam_environment para configurar variables de entorno (por mucho que uno prefiera /etc/environment para /etc/profile).

Puede expandir las variables de entorno, incluidas PATH en sí mismo, cuando estableces PATH en .pam_environment (véase más arriba). Sin embargo, si necesita configurar PATH de una manera más sofisticada, es posible que deba utilizar su .profile en lugar de. En particular, si desea verificar si existe un directorio cada vez que un usuario inicia sesión y solo agregarlo a PATH si lo hace, no podrá utilizar su .pam_environment archivo para agregar ese directorio a su PATH.

Por ejemplo, el valor predeterminado por usuario .profile archivo en Ubuntu solía hacerlo terminar con:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Consulte el comentario de Gunnar Hjalmarsson sobre la respuesta de Byte Commander para obtener más detalles.

Esto verifica si tiene un bin subdirectorio de su directorio personal. Si es así, agrega ese subdirectorio al comienzo de su PATH.

Esa lista omite algunas posibilidades.

Hay otras formas en que se establecen las variables de entorno cuando los usuarios inician sesión que dependen en mayor medida del tipo de inicio de sesión. Por ejemplo, es posible que ocasionalmente tenga variables de entorno que se configuren solo para inicios de sesión gráficos o solo para inicios de sesión remotos basados ​​en SSH. La lista anterior no cubre tales casos.

Dejé algunos archivos donde la gente a veces define variables de entorno, como ~/.bashrc y /etc/bash.bashrc, porque generalmente no son lugares recomendados para establecer PATH y es raro que realmente deba usarlos para este propósito. Si usa estos archivos para agregar directorios a PATH, entonces a veces se agregarán muchas veces y es muy confuso cuando examina $PATH. (En casos extremos, esto puede ralentizar las cosas, pero generalmente es solo una cuestión de mantener todo limpio y comprensible).

Ya que bash es el shell de inicio de sesión predeterminado de Ubuntu para los usuarios, y la mayoría de los usuarios lo usan o algún otro shell compatible con POSIX, he omitido información sobre cómo se configuran las variables de entorno en otros shells que no son de estilo Bourne, como tcsh.

/ etc / environment El archivo no es un archivo de secuencia de comandos que no puede usar para exportar allí y no admite la expansión de variables del tipo $ HOME, solo pares de variable simple = valor. Entonces, para usar ese archivo, simplemente necesitaría agregar su ruta a la definición existente, está específicamente diseñado para la configuración de variables de entorno de todo el sistema. una por línea. Específicamente, este archivo almacena la configuración regional y de ruta de todo el sistema.

~ / .profile – Este archivo se ejecuta cada vez que se ejecuta un shell bash, generalmente es el recomendado para las variables de entorno, sin embargo, tiene la desventaja de que solo lo invocan los shells de inicio de sesión, por lo que para que surta efecto deberá cerrar la sesión y volver a entrar, o al menos, iniciar un nuevo shell de inicio de sesión.

valoraciones y reseñas

Si haces scroll puedes encontrar las observaciones de otros sys admins, tú además puedes insertar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *