얼마 전에 설정 한 Linux 인스턴스가 있습니다. 내가 시작하고 root
로 로그인하면 설정 한 환경 변수가 있지만 어디에서 왔는지 기억하거나 찾을 수 없습니다.
~/.bash_profile
, /etc/.bash_rc
및 모든 시작 스크립트를 확인했습니다.find
및 grep
을 (를) 사용하지 못했습니다.나는 분명한 곳을 보는 것을 잊어 버린 것 같아요. 이것을 알아내는 트릭이 있습니까?
env
명령을 사용하여 변수를 표시하면 변수가 작성된 순서대로 표시됩니다. 부팅 초기에 시스템에 의해 설정되었거나 나중에 .profile 또는 다른 구성 파일에 의해 설정되었는지에 대한 안내서로이 정보를 사용할 수 있습니다. 내 경험상 set
및 export
명령은 변수를 알파벳 순서로 정렬하므로 목록이 유용하지 않습니다.
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 {} +
가 도움이 될 수 있습니다.
먼저 살펴볼 곳 :
시스템 전체
/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이 맞습니다. 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/*
로드 요청을 찾으십시오. 이 모듈은 지정된 파일 또는 파일이 지정되지 않은 경우 시스템 기본값 (Debian 및 Ubuntu의 /etc/environment
및 /etc/security/pam_env.conf
)에서 환경 변수를로드합니다. Linux에서 환경 변수 정의가있는 다른 파일은 /etc/login.defs
입니다 (ENV_
로 시작하는 행을 찾으십시오).
.
(점) 또는 source
를 사용하여 they 소스 파일에 대한 시작 스크립트를 확인하십시오. 이러한 파일은 /etc
및 $HOME
이외의 다른 디렉토리에있을 수 있습니다.
zsh
사용자의 경우 (시작하는 동안) 액세스 한 파일을 추적하는 것이 유용 할 수 있으며 너무 많지 않으며 하나씩 정의 된 내용을 찾을 수 있습니다.
zsh -o SOURCE_TRACE
환경 변수는/etc/profile 파일에 저장되므로 더 많은/etc/profile을 수행하고 원하는 env 변수를 확인하고/etc/profile이없는 경우 홈 디렉토리에서 .profile 파일을 lokk하십시오