집 위치 재정의

집 위치 재정의

응용 프로그램이 해당 설정을 휴대용으로 저장/로드하도록 스크립트에서 로컬로 사용자의 홈 위치를 재정의하고 싶습니다.

export HOME=$TMPDIR/Data
export XDG_CONFIG_HOME=$TMPDIR/Data

이는 대부분의 경우 작동하지만 여전히 "실제" 기본 경로를 찾을 수 있는 일부 응용 프로그램이 있습니다.

사용자의 집 위치를 재정의하는 방법이 작동하지 않는 이유는 무엇입니까?

답변1

불행하게도 이는 귀하의 애플리케이션이 무엇인지에 따라 많이 달라집니다. 응용프로그램은 다양한 방법으로 사용자의 홈 디렉토리를 표시할 수 있습니다.

  1. $HOME

    당신은 이미 이것을 알고 있습니다. $HOME로그인 구성을 통해 재정의할 수 있는 환경 변수입니다. 예를 들어 파일 .bashrc또는 .bash_profileBash 환경의 파일입니다. 값은 일반적으로 /home/username.

  2. /home/$USER

    나는 이것이 의 변형이라고 생각 하지만 사용자의 홈 디렉토리가 아래에 있어야 한다고 어리석게 가정하여 해당 변수를 추가 하고 사용하는 $HOME일부 응용 프로그램을 만났습니다 ./home$USER

  3. 분석하다/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 데이터베이스 등 무엇이든 될 수 있습니다.

  4. GTK&g_get_home_dir()

    GTK 라이브러리 는 g_get_home_dir().$HOME

    에서 발췌GLib 참조 매뉴얼

    전통적인 Unix 도구와 비교하여 이 기능은 HOME 환경 변수에 대한 passwd 항목을 선호합니다.

  5. 케이드

    KDE는 $HOME을 사용하는 것 같습니다. 먼저 살펴보고 설정되지 않은 경우 KDEHOME 로 돌아갑니다 .$HOME/.kde

    발췌KDE 시스템 관리/KDE 파일 시스템 계층

    이름에서 알 수 있듯이 이 디렉토리 트리는 일반적으로 사용자의 홈 디렉토리에 있습니다. 이 환경 변수가 정의되지 않은 경우 기본 위치 $HOME/.kde4가 사용됩니다.

답변2

현재 사용자의 홈 디렉터리를 가져오는 방법에는 두 가지가 있습니다.

  • 한 가지 방법은 사용자의 비밀번호 항목(에서 /etc/passwd)을 보는 것입니다.
  • HOME또 다른 방법은 환경 변수를 살펴보는 것입니다 . $HOME실제로는 passwd 항목에서 설정됩니다. 이를 설정할 수 있는 애플리케이션에는 터미널 에뮬레이터, 로그인 관리자 및 sudo가 포함됩니다.

스푸핑할 수 없는 애플리케이션이 사용자의 비밀번호 항목을 보고 있을 수 있습니다. 또한 사용자의 홈 디렉토리를 어딘가에 저장하고(아마도 파일이나 디렉토리에 대한 절대 경로의 일부로) HOMEpasswd 항목을 모두 무시할 수도 있습니다.

애플리케이션이 HOME환경 변수를 사용하는지 확인하는 한 가지 방법은 grep을 사용하는 것입니다. 예를 들어, 사용될 수 있음을 나타내는 가 grep HOME /usr/bin/pdftex반환됩니다 .Binary file /usr/bin/pdftex matchespdftex$HOME

보다 명확한 답을 얻으려면 애플리케이션의 소스 코드를 살펴보세요. 소스 코드 분석 속도를 약간 높이는
데 사용됩니다 .grep -r 'getenv\s\?(.*HOME'

관련 정보