얼마 전에 설정한 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>&2
xtrace
file.log
변수가 없으면 쉘이 시작 시 이를 상속할 수 있으므로 이전에 PAM 구성에 설정되었거나 ~/.ssh/environment
X11 세션이 시작될 때 읽은 내용( ~/.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 또는 기타 구성 파일에 의해 설정되었는지 확인할 수 있습니다. 내 경험상 set
및 export
명령은 변수를 알파벳순으로 정렬하므로 목록은 그다지 유용하지 않습니다.
답변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.defs
ENV_