응용 프로그램이 해당 설정을 휴대용으로 저장/로드하도록 스크립트에서 로컬로 사용자의 홈 위치를 재정의하고 싶습니다.
export HOME=$TMPDIR/Data
export XDG_CONFIG_HOME=$TMPDIR/Data
이는 대부분의 경우 작동하지만 여전히 "실제" 기본 경로를 찾을 수 있는 일부 응용 프로그램이 있습니다.
사용자의 집 위치를 재정의하는 방법이 작동하지 않는 이유는 무엇입니까?
답변1
불행하게도 이는 귀하의 애플리케이션이 무엇인지에 따라 많이 달라집니다. 응용프로그램은 다양한 방법으로 사용자의 홈 디렉토리를 표시할 수 있습니다.
$HOME
당신은 이미 이것을 알고 있습니다.
$HOME
로그인 구성을 통해 재정의할 수 있는 환경 변수입니다. 예를 들어 파일.bashrc
또는.bash_profile
Bash 환경의 파일입니다. 값은 일반적으로/home/username
./home/$USER
나는 이것이 의 변형이라고 생각 하지만 사용자의 홈 디렉토리가 아래에 있어야 한다고 어리석게 가정하여 해당 변수를 추가 하고 사용하는
$HOME
일부 응용 프로그램을 만났습니다 ./home
$USER
분석하다
/etc/passwd
이는 사용자의 홈 디렉토리를 얻는 최악의 방법이라는 점에서 아마도 최악의 범죄자일 것입니다. 그러나 많은 도구와 스크립트가 이를 수행합니다. 대부분은 그들이 사용하는 곳에서 이것의 변형입니다.
getent
주문하다:$ getent passwd | grep $1 | awk -F: '{ print $6 }' # for example (user "saml") $ getent passwd | grep saml | awk -F: '{ print $6 }' /home/saml
사용자 정보를 저장하는 백엔드 "데이터베이스"는
/etc/passwd
파일, NIS, LDAP 데이터베이스 등 무엇이든 될 수 있습니다.GTK&
g_get_home_dir()
GTK 라이브러리 는
g_get_home_dir()
.$HOME
에서 발췌GLib 참조 매뉴얼
전통적인 Unix 도구와 비교하여 이 기능은 HOME 환경 변수에 대한 passwd 항목을 선호합니다.
케이드
KDE는 $HOME을 사용하는 것 같습니다. 먼저 살펴보고 설정되지 않은 경우
KDEHOME
로 돌아갑니다 .$HOME/.kde
이름에서 알 수 있듯이 이 디렉토리 트리는 일반적으로 사용자의 홈 디렉토리에 있습니다. 이 환경 변수가 정의되지 않은 경우 기본 위치 $HOME/.kde4가 사용됩니다.
답변2
현재 사용자의 홈 디렉터리를 가져오는 방법에는 두 가지가 있습니다.
- 한 가지 방법은 사용자의 비밀번호 항목(에서
/etc/passwd
)을 보는 것입니다. HOME
또 다른 방법은 환경 변수를 살펴보는 것입니다 .$HOME
실제로는 passwd 항목에서 설정됩니다. 이를 설정할 수 있는 애플리케이션에는 터미널 에뮬레이터, 로그인 관리자 및 sudo가 포함됩니다.
스푸핑할 수 없는 애플리케이션이 사용자의 비밀번호 항목을 보고 있을 수 있습니다. 또한 사용자의 홈 디렉토리를 어딘가에 저장하고(아마도 파일이나 디렉토리에 대한 절대 경로의 일부로) HOME
passwd 항목을 모두 무시할 수도 있습니다.
애플리케이션이 HOME
환경 변수를 사용하는지 확인하는 한 가지 방법은 grep을 사용하는 것입니다. 예를 들어, 사용될 수 있음을 나타내는 가 grep HOME /usr/bin/pdftex
반환됩니다 .Binary file /usr/bin/pdftex matches
pdftex
$HOME
보다 명확한 답을 얻으려면 애플리케이션의 소스 코드를 살펴보세요. 소스 코드 분석 속도를 약간 높이는
데 사용됩니다 .grep -r 'getenv\s\?(.*HOME'