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 ustedPATH
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 deroot
sin embargo, debe ser un usuario administrador y utilizarsudo
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ónPATH
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 PATH
en 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.