환경 변수의 출처를 확인하는 방법은 무엇입니까?

환경 변수의 출처를 확인하는 방법은 무엇입니까?

얼마 전에 설정한 Linux 인스턴스가 있습니다. 부팅하고 로그인할 때 root일부 환경 변수를 설정했지만 해당 변수가 어디서 왔는지 기억하거나 찾을 수 없습니다.

  • ~/.bash_profile/etc/.bash_rc모든 시작 스크립트를 확인했습니다 .
  • 나는 아무 소용 find없이 달렸다 grep.

분명 어딘가를 보는 것을 잊어버린 것 같아요. 이 문제를 해결할 수 있는 방법이 있나요?

답변1

zsh로그인 셸인 경우 :

zsh -xl

그리고 bash:

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

이는 로그인 쉘을 에뮬레이트하고 완료된 모든 작업(리디렉션된 stderr을 사용하는 영역 제외 zsh)과 현재 해석 중인 파일 이름을 표시합니다.

따라서 해야 할 일은 해당 출력에서 ​​환경 변수의 이름을 찾는 것뿐입니다. (이 script명령을 사용하면 전체 셸 세션 출력을 저장할 수 있습니다. 또는 이 bash방법 의 경우 출력을 터미널 대신 터미널에 저장하는 7> file.log데 사용할 수 있습니다.)7>&2xtracefile.log

변수가 없으면 쉘이 시작 시 이를 상속할 수 있으므로 이전에 PAM 구성에 설정되었거나 ~/.ssh/environmentX11 세션이 시작될 때 읽은 내용( ~/.xinitrc, ~/.xsession) 또는 로그인 관리자를 시작한 서비스 정의에 설정된 내용입니다. 서버 더 일찍 시작 스크립트가 있습니다. 그러면 find /etc -type f -exec grep -Fw THE_VAR {} +도움이 될 것입니다.

답변2

먼저 살펴볼 곳은 다음과 같습니다.

시스템 전체

  • /etc/environment: 특히 환경 변수용
  • /etc/env.d/*: 여러 파일로 나누어진 환경 변수
  • /etc/profile: 모든 유형의 초기화 스크립트
  • /etc/profile.d/*:초기화 스크립트
  • /etc/bashrc, /etc/bash.bashrc: 함수 및 별칭용

사용자별

  • ~/.profile: 모든 쉘에 대해
  • ~/.pam_environment: Linux 플러그형 인증 모듈의 일부
  • ~/.bash_profile: 로그인(bash-)쉘 초기화
  • ~/.bashrc: 모든 대화형 (bash-)쉘 초기화
  • ~/.cshrc, ~/.zshrc, ~/.tcshrc: bash가 아닌 쉘과 유사

답변3

env명령을 사용하여 변수를 표시하는 경우 변수는 대략 생성된 순서대로 표시되어야 합니다. 이 가이드를 사용하여 부팅 프로세스 초기에 시스템에 의해 설정되었는지, 나중에 .profile 또는 기타 구성 파일에 의해 설정되었는지 확인할 수 있습니다. 내 경험상 setexport명령은 변수를 알파벳순으로 정렬하므로 목록은 그다지 유용하지 않습니다.

답변4

set -x또는 를 입력하면 .profile이후 .bash_profile의 모든 쉘 명령이 표준 오류에 기록되며, 그 중 하나가 이러한 변수를 설정하는지 확인할 수 있습니다. set -x상단에 배치하여 추적 할 수도 있습니다 . /etc/profile출력이 매우 장황할 수 있으므로 exec 2>/tmp/profile.log.

pam_env시스템이 PAM을 사용하는 경우 또는 에서 로드 요청을 찾으십시오 . 이 모듈은 지정된 파일에서 환경 변수를 로드하거나, 파일이 지정되지 않은 경우(Debian 및 Ubuntu의 경우) 시스템 기본값에서 환경 변수를 로드합니다. 환경 변수 정의를 포함하는 Linux의 또 다른 파일은 (으로 시작하는 줄 찾기)입니다./etc/pam.conf/etc/pam.d/*/etc/environment/etc/security/pam_env.conf/etc/login.defsENV_

관련 정보