얼마 전에 설정 한 Linux 인스턴스가 있습니다. root
환경 변수가 설정되어 있지만 시작 위치를 기억하거나 찾을 수 없으므로 실행 하고 로그인 할 때 .
- 나는 확인했습니다
~/.bash_profile
,/etc/.bash_rc
그리고 모든 시작 스크립트. - 나는 실행했습니다
find
과grep
아무 소용.
나는 분명한 곳을 보는 것을 잊어 버린 것 같아요. 이것을 알아내는 트릭이 있습니까?
답변
env
명령을 사용하여 변수를 표시하는 경우 변수가 작성된 순서대로 표시되어야합니다. 부팅 초기에 시스템에서 설정했거나 나중에 .profile 또는 다른 구성 파일에서 설정 한 경우이 안내서를 지침으로 사용할 수 있습니다. 내 경험상, set
and export
명령은 변수를 알파벳 순서로 정렬하므로 목록이 유용하지 않습니다.
답변
경우 zsh
로그인 쉘입니다 :
zsh -xl
로 bash
:
PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>&2
로그인 쉘을 시뮬레이션하고 zsh
현재 해석중인 파일의 이름과 함께 수행 된 모든 것을 보여줍니다 (stderr로 리디렉션되는 영역 제외 ).
따라서 해당 출력에서 환경 변수의 이름을 찾기 만하면됩니다. (이 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
에서로드 요청을 찾으십시오 . 지정된 파일에서이 모듈로드 환경 변수 또는 시스템 기본에서 파일을 지정하지 않으면 ( 그리고 데비안과 우분투). Linux에서 환경 변수 정의가있는 다른 파일은 (로 시작하는 줄을 찾습니다 )./etc/pam.conf
/etc/pam.d/*
/etc/environment
/etc/security/pam_env.conf
/etc/login.defs
ENV_
답변
이 파일을 시작 스크립트를 확인 그들이 소스 사용 .
(점) 또는 source
. 해당 파일은 /etc
및 이외의 다른 디렉토리에있을 수 있습니다 $HOME
.
답변
들어 zsh
(시작시) 액세스 파일 유용 할 수 있습니다 추적 사용자, 그들은 너무 많이 있습니다 하나는 뭔가가 정의 된 위치를 하나씩 찾아 그들을 통해 볼 수있다.
zsh -o SOURCE_TRACE