it-swarm-ko.tech

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

얼마 전에 설정 한 Linux 인스턴스가 있습니다. 내가 시작하고 root로 로그인하면 설정 한 환경 변수가 있지만 어디에서 왔는지 기억하거나 찾을 수 없습니다.

  • ~/.bash_profile, /etc/.bash_rc 및 모든 시작 스크립트를 확인했습니다.
  • findgrep을 (를) 사용하지 못했습니다.

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

177
Joel

env 명령을 사용하여 변수를 표시하면 변수가 작성된 순서대로 표시됩니다. 부팅 초기에 시스템에 의해 설정되었거나 나중에 .profile 또는 다른 구성 파일에 의해 설정되었는지에 대한 안내서로이 정보를 사용할 수 있습니다. 내 경험상 setexport 명령은 변수를 알파벳 순서로 정렬하므로 목록이 유용하지 않습니다.

63
Ben Combee

zsh가 로그인 쉘인 경우 :

zsh -xl

bash 사용시 :

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

그러면 로그인 셸이 시뮬레이션되고 현재 해석되고있는 파일 이름과 함께 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 {} +가 도움이 될 수 있습니다.

158
Stéphane Chazelas

먼저 살펴볼 곳 :

시스템 전체

  • /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 쉘과 유사
65
beetstra

@Cian이 맞습니다. findgrep를 사용하는 것 외에는 어디에서 왔는지 알 수 없습니다. 그것이 실제로 환경 변수라는 것을 알고, 나는 당신의 검색을/etc /와 홈 디렉토리에 집중하려고 시도합니다. VARIABLE를 검색 할 적절한 변수로 바꾸십시오.

$ grep -r VARIABLE /etc/*

$ grep -r VARIABLE ~/.*

34
Aaron Toponce

set -x 또는 .profile.bash_profile를 넣으면 이후의 모든 셸 명령이 표준 오류로 기록되고 그 중 하나가 이러한 변수를 설정했는지 확인할 수 있습니다. set -x 맨 위에 /etc/profile를 넣어 추적 할 수도 있습니다. 출력은 매우 장황 할 수 있으므로 exec 2>/tmp/profile.log와 같은 파일로 출력을 리디렉션 할 수 있습니다.

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

. (점) 또는 source를 사용하여 they 소스 파일에 대한 시작 스크립트를 확인하십시오. 이러한 파일은 /etc$HOME 이외의 다른 디렉토리에있을 수 있습니다.

zsh 사용자의 경우 (시작하는 동안) 액세스 한 파일을 추적하는 것이 유용 할 수 있으며 너무 많지 않으며 하나씩 정의 된 내용을 찾을 수 있습니다.

zsh -o SOURCE_TRACE
4
Erik Zivkovic

환경 변수는/etc/profile 파일에 저장되므로 더 많은/etc/profile을 수행하고 원하는 env 변수를 확인하고/etc/profile이없는 경우 홈 디렉토리에서 .profile 파일을 lokk하십시오

0
Sarvesh Pawar