У меня есть экземпляр Linux, который я настроил некоторое время назад. Когда я запускаю его и захожу в систему, root
есть некоторые переменные среды, которые я настроил, но я не могу вспомнить или найти, откуда они пришли.
- Я проверил
~/.bash_profile
,/etc/.bash_rc
и все сценарии запуска. - Я бегал
find
иgrep
безрезультатно.
Я чувствую, что, должно быть, забываю посмотреть в каком-то месте очевидном. Есть ли хитрость для выяснения этого?
/etc/environment
это еще один./etc/env.d/*
файлы. Но,grep -R "YOUR_VARIABLE" /etc/
вероятно, лучший способ это выяснить.Ответы:
Если вы используете
env
команду для отображения переменных, они должны отображаться примерно в том порядке, в котором они были созданы. Вы можете использовать это как руководство к тому, были ли они установлены системой очень рано при загрузке, или более поздним .profile или другим файлом конфигурации. В моем опыте,set
иexport
команды будут сортировать свои переменные в алфавитном порядке, так что список не является столь полезным.источник
Если
zsh
ваша оболочка для входа:С
bash
:Это будет имитировать оболочку входа в систему и покажет все, что сделано (за исключением областей, куда перенаправляется stderr
zsh
) вместе с именем файла, который интерпретируется в настоящее время.Поэтому все, что вам нужно сделать, это найти имя вашей переменной среды в этом выводе. (вы можете использовать
script
команду, чтобы помочь вам сохранить весь вывод сеанса оболочки, или для этогоbash
подхода использовать7> file.log
вместо того,7>&2
чтобы сохранятьxtrace
выходные данныеfile.log
вместо терминала).Если вашей переменной там нет, то, вероятно, оболочка унаследовала ее при запуске, поэтому она была установлена ранее, как в конфигурации PAM,
~/.ssh/environment
или в вещах, прочитанных при запуске сеанса X11 (~/.xinitrc
,~/.xsession
), или в определении службы, которое запустило вашу регистрацию менеджер или даже раньше в каком-то загрузочном скрипте. Тогдаfind /etc -type f -exec grep -F THE_VAR {} +
может помочь.источник
zsh -xl 2>&1
, т.е. объединяете выходы stderr и stdout, вы можете использовать grep как обычно.fish
оболочкой?zsh -xl 2>&1
, как-то не могу grep нормально. По-видимому, вывод не содержит правильные переводы строк или что-то.PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>/tmp/$(uuidgen)
, а затем использовать grep для этого случайного файла.Некоторые места, чтобы посмотреть в первую очередь:
Система в целом
/etc/environment
: специально для переменных среды/etc/env.d/*
: переменные среды, разделенные на несколько файлов/etc/profile
: все типы сценариев инициализации/etc/profile.d/*
: сценарии инициализации/etc/bashrc
,/etc/bash.bashrc
предназначен для функций и псевдонимовПользовательский
~/.bash_profile
: инициализация для логина (bash-) оболочек~/.bashrc
: инициализация для всех интерактивных (bash-) оболочек~/.profile
: используется для всех снарядов~/.cshrc
,~/.zshrc
,~/.tcshrc
: Аналогичные для не-Баш оболочекисточник
@ Циан это правильно. Кроме использования
find
иgrep
, вы ничего не можете сделать, чтобы выяснить, откуда она взялась. Зная, что это действительно переменная окружения, я попытался бы сфокусировать ваш поиск в / etc / и вашем домашнем каталоге. ЗаменитеVARIABLE
на соответствующую переменную, которую вы ищете:$ grep -r VARIABLE /etc/*
$ grep -r VARIABLE ~/.*
источник
Если вы введете
set -x
свой.profile
или.bash_profile
, все последующие команды оболочки будут записаны со стандартной ошибкой, и вы сможете увидеть, устанавливает ли одна из них эти переменные. Вы можете поставитьset -x
наверх,/etc/profile
чтобы отследить это. Вывод может быть очень подробным, поэтому вы можете перенаправить его в файл с чем-то вродеexec 2>/tmp/profile.log
.Если ваша система использует PAM, ищите
pam_env
запросы на загрузку в/etc/pam.conf
или/etc/pam.d/*
. Этот модуль загружает переменные среды из указанных файлов или из системного значения по умолчанию, если файл не указан (/etc/environment
и/etc/security/pam_env.conf
в Debian и Ubuntu). Другой файл с определениями переменных среды в Linux - это/etc/login.defs
(ищите строки, начинающиеся сENV_
).источник
Проверьте ваши сценарии запуска на наличие файлов, которые они используют, используя
.
(точка) илиsource
. Эти файлы могут быть в других каталогах, кроме/etc
и$HOME
.источник
Для
zsh
пользователей может оказаться полезным отслеживание файлов, к которым осуществляется доступ (во время запуска), их не так много, и можно просмотреть их один за другим, чтобы найти, где что-то было определено.источник
Переменные окружения хранятся в файле / etc / profile, поэтому сделайте больше / etc / profile и просто проверьте, какие переменные env вам нужны, а если / etc / profile отсутствует, то lokk для файла .profile в вашем домашнем каталоге
источник
/etc/profile
, вы можете определить их там в масштабе всей системы, например,bash
при использовании в качестве оболочки для входа. Они сохраняются процессом оболочки после чтения определений из файлов и / или командной строки.Например, если вы хотите найти переменную HISTFILE и ее значение или хотите узнать, какие переменные определены в истории, введите это в оболочке:
источник
echo "$HISTFILE"
?set
не говорит вам, какой файл определил переменную.