Tengo una instancia de Linux que configuré hace algún tiempo. Cuando lo enciendo e inicio sesión, root
hay algunas variables de entorno que configuré pero no puedo recordar ni encontrar de dónde provienen.
- He comprobado
~/.bash_profile
,/etc/.bash_rc
y todos los scripts de inicio. - He corrido
find
y fuegrep
en vano.
Siento que debo estar olvidando mirar en algún lugar obvio. ¿Hay algún truco para resolver esto?
/etc/environment
Es otro./etc/env.d/*
archivos. Pero hacergrep -R "YOUR_VARIABLE" /etc/
es probablemente la mejor manera de averiguarlo.Respuestas:
Si usa el
env
comando para mostrar las variables, deben aparecer aproximadamente en el orden en que fueron creadas. Puede usar esto como una guía para saber si fueron establecidos por el sistema muy temprano en el arranque, o por un archivo .profile u otro archivo de configuración posterior. En mi experiencia, lasset
yexport
los comandos clasificará sus variables por orden alfabético, por lo que la lista no es tan útil.fuente
Si
zsh
es su shell de inicio de sesión:Con
bash
:Eso simulará un shell de inicio de sesión y mostrará todo lo que se hace (excepto en las áreas donde se redirige stderr
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
script
comando para ayudarlo a almacenar toda la salida de la sesión de shell, o para elbash
enfoque, use en7> file.log
lugar de7>&2
almacenar laxtrace
salida enfile.log
lugar de en el terminal).Si su variable no está allí, entonces probablemente el shell la heredó en el 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 en la definición del servicio que inició su inicio de sesión gerente o incluso antes en algún script de arranque. Entonces afind /etc -type f -exec grep -F THE_VAR {} +
puede ayudar.fuente
zsh -xl 2>&1
, es decir, fusionar las salidas stderr y stdout, puede grep como de costumbre.fish
shell?zsh -xl 2>&1
, de alguna manera no puedo grep normalmente. Aparentemente, la salida no contiene nuevas líneas adecuadas o algo así.PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>/tmp/$(uuidgen)
, luego grep en ese archivo aleatorio también.Algunos lugares para buscar primero:
Sistema de ancho
/etc/environment
: específicamente destinado a variables de entorno/etc/env.d/*
: variables de entorno, divididas en múltiples 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 aliasUsuario específico
~/.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 depósitos~/.cshrc
,~/.zshrc
,~/.tcshrc
: Similar para proyectiles no de bashfuente
@Cian es correcto. Aparte de usar
find
ygrep
, no hay mucho que puedas 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. ReemplaceVARIABLE
con la variable apropiada que está buscando:$ grep -r VARIABLE /etc/*
$ grep -r VARIABLE ~/.*
fuente
Si coloca
set -x
su.profile
o.bash_profile
, todos los comandos de shell posteriores se registrarán en el error estándar y podrá ver si uno de ellos establece estas variables. También puede colocarloset -x
en la parte superior/etc/profile
para rastrearlo. El resultado puede ser muy detallado, por lo que es posible que desee redirigirlo a un archivo con algo parecidoexec 2>/tmp/profile.log
.Si su sistema usa PAM, busque
pam_env
solicitudes de carga 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
(busque líneas que comiencen porENV_
).fuente
Verifique en sus scripts de inicio los archivos que obtienen usando
.
(punto) osource
. Esos archivos podrían estar en otros directorios además de/etc
y$HOME
.fuente
Para los
zsh
usuarios, el rastreo 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.fuente
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
fuente
/etc/profile
, puede definirlas en todo el sistema, por ejemplo,bash
cuando se usa como un shell de inicio de sesión. El proceso de shell los almacena después de leer las definiciones de los archivos y / o la línea de comandos.Por ejemplo, si desea encontrar la variable HISTFILE y su valor o desea saber qué variables se definen sobre el historial, escriba esto en el shell:
fuente
echo "$HISTFILE"
?set
no le dice qué archivo definió la variable.