Eu tenho uma instância do Linux que configurei há algum tempo. Quando eu inicio e faço o login, root
existem algumas variáveis de ambiente que eu configuro, mas não consigo me lembrar ou descobrir de onde elas vieram.
- Eu verifiquei
~/.bash_profile
,/etc/.bash_rc
e todos os scripts de inicialização. - Eu corri
find
egrep
sem sucesso.
Sinto que devo estar esquecendo de parecer óbvio em algum lugar. Existe um truque para descobrir isso?
/etc/environment
é outro./etc/env.d/*
arquivos. Mas fazergrep -R "YOUR_VARIABLE" /etc/
é provavelmente a melhor maneira de descobrir.Respostas:
Se você usar o
env
comando para exibir as variáveis, elas deverão aparecer aproximadamente na ordem em que foram criadas. Você pode usar isso como um guia para se eles foram definidos pelo sistema muito cedo na inicialização ou por um arquivo .profile ou outro arquivo de configuração posterior. Na minha experiência, os comandosset
eexport
classificarão suas variáveis por ordem alfabética, para que a listagem não seja tão útil.fonte
Se
zsh
é o seu shell de login:Com
bash
:Isso simulará um shell de login e mostrará tudo o que é feito (exceto nas áreas em que o stderr é redirecionado
zsh
) junto com o nome do arquivo atualmente sendo interpretado.Portanto, tudo o que você precisa fazer é procurar o nome da sua variável de ambiente nessa saída. (você pode usar o
script
comando para ajudá-lo a armazenar toda a saída da sessão do shell ou, para abash
abordagem, use em7> file.log
vez de7>&2
armazenar axtrace
saída emfile.log
vez de no terminal).Se sua variável não estiver lá, provavelmente o shell a herdou na inicialização, por isso foi definida antes, como na configuração do PAM, nas
~/.ssh/environment
coisas ou lidas na inicialização da sessão do X11 (~/.xinitrc
,~/.xsession
) ou na definição de serviço que iniciou seu login gerente ou até mais cedo em algum script de inicialização. Então umfind /etc -type f -exec grep -F THE_VAR {} +
pode ajudar.fonte
zsh -xl 2>&1
, por exemplo, mesclar as saídas stderr e stdout, poderá cumprimentar como de costume.fish
shell?zsh -xl 2>&1
, de alguma forma eu não posso grep normalmente. Aparentemente, a saída não contém novas linhas apropriadas ou algo assim.PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>/tmp/$(uuidgen)
, então grep nesse arquivo aleatório também.Alguns lugares para procurar primeiro:
No âmbito do sistema
/etc/environment
: especificamente destinado a variáveis de ambiente/etc/env.d/*
: variáveis de ambiente, divididas em vários arquivos/etc/profile
: todos os tipos de scripts de inicialização/etc/profile.d/*
: scripts de inicialização/etc/bashrc
,/etc/bash.bashrc
: destinado a funções e aliasesEspecífico do usuário
~/.bash_profile
: inicialização para shells de login (bash-)~/.bashrc
: inicialização para todos os shells interativos (bash-)~/.profile
: usado para todas as conchas~/.cshrc
,~/.zshrc
,~/.tcshrc
: Semelhante para os reservatórios não festançafonte
@Cian está correto. Além de usar
find
egrep
, não há muito que você possa fazer para descobrir de onde veio. Sabendo que é de fato uma variável de ambiente, eu tentaria focar sua pesquisa no / etc / e no diretório inicial. SubstituaVARIABLE
pela variável apropriada que você está procurando:$ grep -r VARIABLE /etc/*
$ grep -r VARIABLE ~/.*
fonte
Se você colocar
set -x
seu.profile
ou.bash_profile
, todos os comandos shell subsequentes serão registrados com erro padrão e você poderá ver se um deles define essas variáveis. Você pode colocarset -x
no topo/etc/profile
para rastreá-lo também. A saída pode ser muito detalhada, portanto, você pode redirecioná-la para um arquivo com algo parecidoexec 2>/tmp/profile.log
.Se o seu sistema usa o PAM, procure
pam_env
solicitações de carregamento em/etc/pam.conf
ou/etc/pam.d/*
. Este módulo carrega variáveis de ambiente dos arquivos especificados ou de um padrão do sistema se nenhum arquivo for especificado (/etc/environment
e/etc/security/pam_env.conf
no Debian e Ubuntu). Outro arquivo com definições de variáveis de ambiente no Linux é/etc/login.defs
(procure linhas começando comENV_
).fonte
Verifique nos scripts de inicialização os arquivos que eles utilizam usando
.
(ponto) ousource
. Esses arquivos podem estar em outros diretórios além de/etc
e$HOME
.fonte
Para os
zsh
usuários, o rastreamento dos arquivos acessados (durante a inicialização) pode ser útil, eles não são muitos e é possível procurá-los um por um para descobrir onde algo foi definido.fonte
variáveis de ambiente são armazenadas no arquivo / etc / profile, faça mais / etc / profile e verifique as variáveis de ambiente desejadas e se o / etc / profile não estiver presente, lokk para o arquivo .profile em seu diretório pessoal
fonte
/etc/profile
, você pode defini-las no sistema inteiro, por exemplo,bash
quando usadas como um shell de login. Eles são armazenados pelo processo do shell após a leitura nas definições dos arquivos e / ou linha de comando.Por exemplo, se você deseja encontrar a variável HISTFILE e seu valor ou deseja saber quais variáveis são definidas sobre o histórico, digite isso no shell:
fonte
echo "$HISTFILE"
:?set
não informa qual arquivo definiu a variável.