2009-10-29 16 views

Respuesta

85

Además de /etc/profile que otros han mencionado, algunos sistemas Linux ahora usan un directorio /etc/profile.d/; cualquiera de los archivos .sh que haya será obtenido por /etc/profile. Es un poco más ordenado mantener el contenido de su entorno personalizado en estos archivos que simplemente editar /etc/profile.

+4

¿Qué pasa si algunos usuarios usan otro shell, como zsh? –

+44

esto no es global ... está restringido al intérprete de comandos ... lástima que es la respuesta más aceptada – momomo

+1

zsh obtendrá archivos .sh en /etc/profile.d/, puede verlo desde/etc/zshrc @ Matthieu Napoli – Bily

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 un shell específico tenga una inicialización específica del sitio.

Si lo pone en /etc/profile, se encargará de todo para la mayoría de los usuarios de shell compatibles con posix. Esto es probablemente "lo suficientemente bueno" para fines no críticos.

Pero cualquier persona con una concha o cshtcsh no lo verá, y no creo que csh tiene un archivo de inicialización global.

+1

'/ 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. –

5

Algunos extractos interesantes de la página de manual de bash:

Cuando bash se llama como un shell interactivo inicio de sesión, o como shell no interactivo con la opción --login, que primero lee y ejecuta órdenes desde el archivo /etc/profile, si ese archivo existe. Después de leer ese archivo, se busca ~/.bash_profile, ~/.bash_login, y ~/.profile, en el que orden, y lee y ejecuta órdenes desde la primera que existe y es legible . La opción --noprofile puede utilizarse cuando el shell se inicia en inhibir este comportamiento.
...
Cuando un shell interactivo que no es un inicio de sesión se inicia shell, bash lee y ejecuta órdenes desde /etc/bash.bashrc y ~/.bashrc, si existen estos archivos. Esto puede ser inhibido mediante el uso de la opción --norc. La opción de archivo --rcfile forzará bash para leer y ejecutar comandos desde el archivo en lugar de /etc/bash.bashrc y ~/.bashrc.

Así que echar un vistazo a /etc/profile o /etc/bash.bashrc, estos archivos son los lugares adecuados para la configuración global. Poner algo como esto en ellos para establecer una variable environement:

export MY_VAR=xxx 
+0

Tenga en cuenta que en los sistemas Unix clásicos, tanto el shell Bourne como el shell Korn también leen/etc/profile, probablemente sea 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 las ubicaciones por usuario; otros no usan ningún archivo de configuración del entorno del sistema. –

+0

Impresionante, justo lo que estaba buscando en cuanto a la configuración del entorno para usuarios de shell que no inician sesión. –

2

Cada proceso se ejecuta en 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 (generando un subcartera) o el programa de "inicio de sesión" (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 .rc/profile predeterminado, no entrará en vigencia hasta que el proceso sale y vuelve 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 ciertos límites.

NB: Bash no es la única shell en su sistema. Preste especial atención a lo que señala realmente el enlace simbólico/bin/sh. En muchos sistemas, esto podría ser realmente guión que es (de forma predeterminada, sin invocación especial) POSIXLY 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 para evitar la sintaxis que solo bash entiende al editar ambos, también conocido como avoiding bashisms.

35

man 8 pam_env

man 5 pam_env.conf

Si todos los servicios de inicio de sesión utilizar PAM, y todos los servicios de inicio de sesión tiene session required pam_env.so en sus respectivos archivos de configuración /etc/pam.d/*, a continuación, todas las sesiones tendrán algunas variables de entorno establecidas como se especifica en pam_env 's archivo de configuración.

En la mayoría de las distribuciones Linux modernas, esto está todo por defecto, solo agregue las variables de entorno global deseadas a /etc/security/pam_env.conf.

Esto funciona independientemente del shell del usuario, y funciona para los inicios de sesión gráficos también (si xdm/kdm/gdm/entrance/& hellip; está configurado de esta manera).

+1

+1 también necesita reiniciar después de agregar una variable en pam_env.conf causa al instante sobre la marcha $ echo $ nombre de la variable no muestra – YumYumYum

+5

No necesita reiniciar, necesita volver a iniciar sesión. (No reiniciar servidores críticos para mí) –

+0

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/bar' y reinicio (y vuelvo a iniciar sesión), ese archivo no se crea. (Probablemente haya una manera más elegante de probar esto, pero quería estar seguro antes de comentar aquí.) –

3

El uso de PAM es excelente.

# modify the display PAM 
$ cat /etc/security/pam_env.conf 
# BEFORE: $ export DISPLAY=:0.0 && python /var/tmp/myproject/click.py & 
# AFTER : $ python $abc/click.py & 
DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY} 
abc DEFAULT=/var/tmp/myproject 
-3

Si está trabajando en el tipo de ubuntu este comando ~/.bashrc (si está utilizando gedit puede escribir gedit ~/.bashrc) y luego escribir la variable de entorno que desea persistan entre todas las sesiones de terminal, por ejemplo, variable de exportación = "2015"

+0

La pregunta dice "para todos". El ~/.bashrc solo se exportará cuando su usuario específico use el shell. –

+0

Quise decir que la variable persistirá para cada sesión de terminal para el usuario cuya .bashrc se ve afectada. Sin embargo, para la persistencia de variables globales en todos los terminales, uno debe agregar la variable global a/etc/environment y también iniciar una nueva sesión para que se detecten las variables. – Hamfri

-2
  1. Descargar JDK usando wget
  2. localizar la ruta de Java utilizando $ cuales java le mostrará donde JAVA se almacena es decir,/usr/lib/jvm/java-8-openjdk-amd64 // bin/java
  3. Copie la ruta de acceso anterior i.e/usr/lib/jvm/java-8-OpenJDK amd64/
  4. Ahora abra el Bashrc usando el editor nano es decir nano Bashrc
  5. agregar la ruta en el archivo .bashrc es decir JAVA_HOME usando cammand exportación y guardar el archivo es decir export JAVA_HOME =/usr/lib/jvm/java-8-OpenJDK amd64/ y export PATH = $ JAVA_HOME/bin: $ PATH
  6. Ejecutar $ fuente ~/.bashrc
  7. $ echo $ RUTA

el PATH es

+0

Esta respuesta no tiene nada que ver con la pregunta –

Cuestiones relacionadas