it-swarm-es.tech

¿Cómo determinar de dónde vino una variable de entorno?

Tengo una instancia de Linux que configuré hace algún tiempo. Cuando lo enciendo e inicio sesión como root hay algunas variables de entorno que configuré pero no puedo recordar ni encontrar de dónde vinieron.

  • He comprobado ~/.bash_profile, /etc/.bash_rc, y todos los scripts de inicio.
  • Ejecuté find y grep en vano.

Siento que debo estar olvidando mirar en algún lugar obvio. ¿Hay algún truco para resolver esto?

177
Joel

Si utiliza el comando env para mostrar las variables, deberían aparecer aproximadamente en el orden en que fueron creadas. Puede usar esto como una guía para determinar si fueron configurados por el sistema muy temprano en el arranque, o por un archivo .profile u otro archivo de configuración posterior. En mi experiencia, los comandos set y export ordenarán sus variables por orden alfabético, por lo que el listado no es tan útil.

63
Ben Combee

Si zsh es su Shell de inicio de sesión:

zsh -xl

Con bash:

PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>&2

Eso simulará un Shell de inicio de sesión y mostrará todo lo que se hace (excepto en áreas donde stderr se redirige con zsh) junto con el nombre del archivo que se está interpretando actualmente.

Entonces, todo lo que necesita hacer es buscar el nombre de su variable de entorno en esa salida. (puede usar el comando script para ayudarlo a almacenar toda la salida de la sesión de Shell, o para el enfoque bash, use 7> file.log en lugar de 7>&2 para almacenar la salida xtrace en file.log en lugar de en la terminal).

Si su variable no está allí, entonces probablemente Shell la heredó al inicio, por lo que se configuró antes, como en la configuración de PAM, en ~/.ssh/environment, o cosas leídas en el inicio de su sesión X11 (~/.xinitrc, ~/.xsession) o establezca la definición de servicio que inició su administrador de inicio de sesión o incluso antes en algún script de arranque. Entonces un find /etc -type f -exec grep -F THE_VAR {} + puede ayudar.

158
Stéphane Chazelas

Algunos lugares para buscar primero:

todo el sistema

  • /etc/environment: específicamente para variables de entorno
  • /etc/env.d/*: variables de entorno, divididas en varios archivos
  • /etc/profile: todos los tipos de scripts de inicialización
  • /etc/profile.d/*: guiones de inicialización
  • /etc/bashrc, /etc/bash.bashrc: destinado a funciones y alias

Específico del usuario

  • ~/.bash_profile: inicialización para shells de inicio de sesión (bash-)
  • ~/.bashrc: inicialización para todos los shells interactivos (bash-)
  • ~/.profile: utilizado para todos los proyectiles
  • ~/.cshrc, ~/.zshrc, ~/.tcshrc: similar para los shells que no son bash
65
beetstra

@Cian es correcto. Aparte de usar find y grep, no hay mucho que pueda hacer para descubrir de dónde vino. Sabiendo que de hecho es una variable de entorno, intentaría enfocar su búsqueda en/etc/y su directorio de inicio. Reemplace VARIABLE con la variable apropiada que está buscando:

$ grep -r VARIABLE /etc/*

$ grep -r VARIABLE ~/.*

34
Aaron Toponce

Si pones set -x en tus .profile o .bash_profile, todos los comandos de Shell posteriores se registrarán en el error estándar y puede ver si uno de ellos establece estas variables. Puedes poner set -x en la cima de /etc/profile para rastrearlo también. El resultado puede ser muy detallado, por lo que es posible que desee redirigirlo a un archivo con algo como exec 2>/tmp/profile.log.

Si su sistema usa PAM, busque pam_env cargar solicitudes en /etc/pam.conf o /etc/pam.d/*. Este módulo carga variables de entorno de los archivos especificados, o de un sistema predeterminado si no se especifica ningún archivo (/etc/environment y /etc/security/pam_env.conf en Debian y Ubuntu). Otro archivo con definiciones de variables de entorno en Linux es /etc/login.defs (busca líneas que comiencen con ENV_).

Verifique sus scripts de inicio para archivos que ellos fuente usando . (punto) o source. Esos archivos podrían estar en otros directorios además de /etc y $HOME.

Para zsh usuarios, el seguimiento de los archivos a los que se accede (durante el inicio) puede ser útil, no son demasiados y uno puede revisarlos uno por uno para encontrar dónde se definió algo.

zsh -o SOURCE_TRACE
4
Erik Zivkovic

las variables de entorno se almacenan en el archivo/etc/profile, así que haga más/etc/profile y simplemente verifique las variables env que desee y si/etc/profile no está presente, busque el archivo .profile en su directorio de inicio

0
Sarvesh Pawar