환경 변수의 출처를 결정하는 방법은 무엇입니까? 인스턴스가 있습니다. root환경 변수가 설정되어 있지만 시작

얼마 전에 설정 한 Linux 인스턴스가 있습니다. root환경 변수가 설정되어 있지만 시작 위치를 기억하거나 찾을 수 없으므로 실행 하고 로그인 할 때 .

  • 나는 확인했습니다 ~/.bash_profile, /etc/.bash_rc그리고 모든 시작 스크립트.
  • 나는 실행했습니다 findgrep아무 소용.

나는 분명한 곳을 보는 것을 잊어 버린 것 같아요. 이것을 알아내는 트릭이 있습니까?



답변

env명령을 사용하여 변수를 표시하는 경우 변수가 작성된 순서대로 표시되어야합니다. 부팅 초기에 시스템에서 설정했거나 나중에 .profile 또는 다른 구성 파일에서 설정 한 경우이 안내서를 지침으로 사용할 수 있습니다. 내 경험상, setand export명령은 변수를 알파벳 순서로 정렬하므로 목록이 유용하지 않습니다.


답변

경우 zsh로그인 쉘입니다 :

zsh -xl

bash:

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

로그인 쉘을 시뮬레이션하고 zsh현재 해석중인 파일의 이름과 함께 수행 된 모든 것을 보여줍니다 (stderr로 리디렉션되는 영역 제외 ).

따라서 해당 출력에서 ​​환경 변수의 이름을 찾기 만하면됩니다. (이 script명령을 사용하면 전체 쉘 세션 출력을 저장하는 데 도움이되거나 bash접근 방식에서는 터미널 대신 출력을 저장하는 7> file.log대신 사용 ) 할 수 있습니다.7>&2xtracefile.log

변수가 없으면 시작시 셸이 변수를 상속 했으므로 PAM 구성에서와 같이 이전에 설정 ~/.ssh/environment되었거나 X11 세션 시작시 읽은 내용 ( ~/.xinitrc, ~/.xsession) 또는 로그인을 시작한 서비스 정의에 설정되었습니다. 관리자 또는 심지어 일부 부팅 스크립트에서. 그렇다면 find /etc -type f -exec grep -F THE_VAR {} +도움 이 될 수 있습니다.


답변

먼저 살펴볼 곳 :

시스템 전체

  • /etc/environment: 환경 변수를위한 것
  • /etc/env.d/*: 환경 변수, 여러 파일로 분할
  • /etc/profile: 모든 유형의 초기화 스크립트
  • /etc/profile.d/*: 초기화 스크립트
  • /etc/bashrc, /etc/bash.bashrc: 함수 및 별명을 의미

사용자 별

  • ~/.bash_profile: 로그인 (bash-) 쉘 초기화
  • ~/.bashrc: 모든 대화식 (bash-) 셸 초기화
  • ~/.profile: 모든 껍질에 사용
  • ~/.cshrc, ~/.zshrc, ~/.tcshrc: 비 bash는 쉘 비슷

답변

@Cian이 맞습니다. 사용하는 것보다 다른 findgrep, 당신이 어디에서 왔는지 발견 할 수있는 일은 거의 없다. 그것이 실제로 환경 변수라는 것을 알고, 나는 검색을 / 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에서로드 요청을 찾으십시오 . 지정된 파일에서이 모듈로드 환경 변수 또는 시스템 기본에서 파일을 지정하지 않으면 ( 그리고 데비안과 우분투). Linux에서 환경 변수 정의가있는 다른 파일은 (로 시작하는 줄을 찾습니다 )./etc/pam.conf/etc/pam.d/*/etc/environment/etc/security/pam_env.conf/etc/login.defsENV_


답변

이 파일을 시작 스크립트를 확인 그들이 소스 사용 .(점) 또는 source. 해당 파일은 /etc및 이외의 다른 디렉토리에있을 수 있습니다 $HOME.


답변

들어 zsh(시작시) 액세스 파일 유용 할 수 있습니다 추적 사용자, 그들은 너무 많이 있습니다 하나는 뭔가가 정의 된 위치를 하나씩 찾아 그들을 통해 볼 수있다.

zsh -o SOURCE_TRACE