Creo que solo se agrega en la sesión actual, cuando abres una nueva sesión en la terminal, desaparecería
Haryono Sariputra
Respuestas:
104
Además de lo /etc/profileque otros han mencionado, algunos sistemas Linux ahora usan un directorio /etc/profile.d/; cualquier .sharchivo allí será originado por /etc/profile. Es un poco más ordenado mantener sus elementos de entorno personalizados en estos archivos que simplemente editarlos /etc/profile.
Si todos los servicios de inicio de sesión usan PAM y todos los servicios de inicio de sesión tienen session required pam_env.sosus respectivos /etc/pam.d/*archivos de configuración, entonces todas las sesiones de inicio de sesión tendrán algunas variables de entorno establecidas como se especifica en pam_envel archivo de configuración.
En la mayoría de las distribuciones modernas de Linux, todo esto está allí por defecto, solo agregue las variables de entorno global que desee /etc/security/pam_env.conf.
Esto funciona independientemente del shell del usuario, y también funciona para inicios de sesión gráficos (si xdm / kdm / gdm / entrance / ... está configurado de esta manera).
+1 también necesita reiniciar después de agregar una variable en pam_env.conf porque instantáneamente sobre la marcha $ echo $ variablename no se muestra
9
No necesita reiniciar, necesita volver a iniciar sesión. (No reiniciar servidores críticos para mí)
Lyndon White
Esto no parece aplicarse a mi distribución, Mint 17.2. El archivo preinstalado está completamente comentado, y si agrego algo como echo foo>/home/me/bary reinicio (y vuelvo a iniciar sesión), ese archivo no se crea. (Probablemente haya una forma más elegante de probar esto, pero quería estar seguro antes de comentar aquí.)
Michael Scheper
16
Sorprendentemente, Unix y Linux en realidad no tienen un lugar para establecer variables de entorno globales. Lo mejor que puede hacer es organizar que cualquier shell específico tenga una inicialización específica del sitio.
Si lo coloca /etc/profile, eso se encargará de la mayoría de los usuarios de shell compatibles con posix. Esto es probablemente "lo suficientemente bueno" para fines no críticos.
Pero cualquiera con un csho tcshshell no lo verá, y no creo que cshtenga un archivo de inicialización global.
/etc/environmentEn realidad, parece establecer variables de entorno para mí, incluso como usuario root. Sé que /etc/environmentestá en Amazon Linux y Ubuntu. No pude verificar si funciona para csh, tcsh o zsh.
Jordan Stewart
no es específico del shell que está utilizando, es realmente global
Xerus
9
Algunos extractos interesantes de la página de manual de bash:
Cuando se invoca bash como un shell de inicio de sesión interactivo, o como un shell no interactivo con la --loginopción, primero lee y ejecuta comandos del archivo /etc/profile, si ese archivo existe. Después de leer ese archivo, busca ~/.bash_profile,
~/.bash_loginy ~/.profile, en ese orden, y lee y ejecuta órdenes desde el primero que existe y es legible. La --noprofileopción se puede usar cuando se inicia el shell para inhibir este comportamiento.
...
Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, bash lee y ejecuta comandos desde
/etc/bash.bashrcy ~/.bashrc, si existen estos archivos. Esto puede inhibirse mediante el uso de la --norcopción. los--rcfilela opción de archivo obligará a bash a leer y ejecutar comandos desde el archivo en lugar de /etc/bash.bashrcy
~/.bashrc.
Eche un vistazo a /etc/profileo /etc/bash.bashrc, estos archivos son los lugares correctos para la configuración global. Ponga algo como esto en ellos para configurar una variable de entorno:
Tenga en cuenta que en los sistemas clásicos de Unix, tanto el shell Bourne como el shell Korn también leen / etc / profile: es probablemente la ubicación más utilizada para la configuración del entorno del sistema. Algunas versiones del shell C se ven en /etc/csh.cshrc y /etc/csh.login, así como en ubicaciones por usuario; otros no usan ningún archivo de configuración del entorno del sistema.
Jonathan Leffler
Impresionante, justo lo que estaba buscando en cuanto a establecer el entorno para los usuarios de shell que no inician sesión.
David Mann
Lo siento, parece que accidentalmente he votado negativamente sobre esto cuando por un tiempo las flechas no estaban visibles ... ¿te importaría editar esto (por ejemplo, "entorno" en la penúltima línea) para que pueda eliminar el voto negativo?
Cada proceso que se ejecuta bajo el kernel de Linux recibe su propio entorno único que hereda de su padre. En este caso, el padre será un shell en sí mismo (engendrando un sub shell) o el programa 'login' (en un sistema típico).
Como el 'entorno de cada proceso está protegido, no hay forma de' inyectar 'una variable de entorno a cada proceso en ejecución, por lo que incluso si modifica el shell predeterminado .rc / profile, no entrará en vigencia hasta que cada proceso salga y se vuelva a cargar su configuración de inicio.
Busque en / etc / para modificar las variables de inicio predeterminadas para cualquier shell en particular. Solo tenga en cuenta que los usuarios pueden (y a menudo lo hacen) cambiarlos en su configuración individual.
Unix está diseñado para obedecer al usuario, dentro de los límites.
NB : Bash no es el único shell en su sistema. Presta mucha atención a lo que realmente apunta el enlace simbólico / bin / sh. En muchos sistemas, esto en realidad podría ser un guión que es (por defecto, sin invocación especial) POSIBLEMENTE correcto. Por lo tanto, debe tener cuidado de modificar ambos valores predeterminados, o los scripts que comienzan con / bin / sh no heredarán sus valores predeterminados globales. Del mismo modo, tenga cuidado de evitar la sintaxis que solo bash entiende al editar ambos, también conocido como avoiding bashisms.
Respuestas:
Además de lo
/etc/profile
que otros han mencionado, algunos sistemas Linux ahora usan un directorio/etc/profile.d/
; cualquier.sh
archivo allí será originado por/etc/profile
. Es un poco más ordenado mantener sus elementos de entorno personalizados en estos archivos que simplemente editarlos/etc/profile
.fuente
Si su LinuxOS tiene este archivo:
Puede usarlo para establecer permanentemente variables ambientales para todos los usuarios.
Extraído de: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
fuente
man 8 pam_env
man 5 pam_env.conf
Si todos los servicios de inicio de sesión usan PAM y todos los servicios de inicio de sesión tienen
session required pam_env.so
sus respectivos/etc/pam.d/*
archivos de configuración, entonces todas las sesiones de inicio de sesión tendrán algunas variables de entorno establecidas como se especifica enpam_env
el archivo de configuración.En la mayoría de las distribuciones modernas de Linux, todo esto está allí por defecto, solo agregue las variables de entorno global que desee
/etc/security/pam_env.conf
.Esto funciona independientemente del shell del usuario, y también funciona para inicios de sesión gráficos (si xdm / kdm / gdm / entrance / ... está configurado de esta manera).
fuente
echo foo>/home/me/bar
y reinicio (y vuelvo a iniciar sesión), ese archivo no se crea. (Probablemente haya una forma más elegante de probar esto, pero quería estar seguro antes de comentar aquí.)Sorprendentemente, Unix y Linux en realidad no tienen un lugar para establecer variables de entorno globales. Lo mejor que puede hacer es organizar que cualquier shell específico tenga una inicialización específica del sitio.
Si lo coloca
/etc/profile
, eso se encargará de la mayoría de los usuarios de shell compatibles con posix. Esto es probablemente "lo suficientemente bueno" para fines no críticos.Pero cualquiera con un
csh
otcsh
shell no lo verá, y no creo quecsh
tenga un archivo de inicialización global.fuente
/etc/environment
En realidad, parece establecer variables de entorno para mí, incluso como usuario root. Sé que/etc/environment
está en Amazon Linux y Ubuntu. No pude verificar si funciona para csh, tcsh o zsh.Algunos extractos interesantes de la página de manual de bash:
Eche un vistazo a
/etc/profile
o/etc/bash.bashrc
, estos archivos son los lugares correctos para la configuración global. Ponga algo como esto en ellos para configurar una variable de entorno:fuente
Usar PAM es excelente.
fuente
Cada proceso que se ejecuta bajo el kernel de Linux recibe su propio entorno único que hereda de su padre. En este caso, el padre será un shell en sí mismo (engendrando un sub shell) o el programa 'login' (en un sistema típico).
Como el 'entorno de cada proceso está protegido, no hay forma de' inyectar 'una variable de entorno a cada proceso en ejecución, por lo que incluso si modifica el shell predeterminado .rc / profile, no entrará en vigencia hasta que cada proceso salga y se vuelva a cargar su configuración de inicio.
Busque en / etc / para modificar las variables de inicio predeterminadas para cualquier shell en particular. Solo tenga en cuenta que los usuarios pueden (y a menudo lo hacen) cambiarlos en su configuración individual.
Unix está diseñado para obedecer al usuario, dentro de los límites.
NB : Bash no es el único shell en su sistema. Presta mucha atención a lo que realmente apunta el enlace simbólico / bin / sh. En muchos sistemas, esto en realidad podría ser un guión que es (por defecto, sin invocación especial) POSIBLEMENTE correcto. Por lo tanto, debe tener cuidado de modificar ambos valores predeterminados, o los scripts que comienzan con / bin / sh no heredarán sus valores predeterminados globales. Del mismo modo, tenga cuidado de evitar la sintaxis que solo bash entiende al editar ambos, también conocido como
avoiding bashisms
.fuente