USER 님에게 HOME을받는 방법? USER스크립트에 변수 가 있는데 변수를 HOME기반으로 경로

USER스크립트에 변수 가 있는데 변수를 HOME기반으로 경로 를보고 싶습니다 USER. 어떻게해야합니까?



답변

정보가 /etc/passwdLDAP 와 같은 로컬 파일 또는 다른 방법 으로 저장되는지 여부에 관계없이 사용자 정보를 검색하는 유틸리티가 있습니다 . 이라고 getent합니다.

사용자 정보를 가져 오려면을 실행 getent passwd $USER합니다. 다음과 같은 줄이 다시 나타납니다.

[jenny@sameen ~]$ getent passwd jenny
jenny:*:1001:1001:Jenny Dybedahl:/home/jenny:/usr/local/bin/bash

이제 예를 들어 cut을 사용하여 홈 디렉토리를 간단히 잘라낼 수 있습니다.

[jenny@sameen ~]$ getent passwd jenny | cut -d: -f6
/home/jenny


답변

eval누군가의 홈 디렉토리를 얻는 데 사용할 수 있습니다 .

eval echo "~$USER"

적어도 로컬 사용자에게는 이것이 확실합니다. LDAP와 같은 원격 사용자가으로 처리되는지 모르겠습니다 eval.


답변

일반적인 장소는입니다 만 /home/$USER, 보편적 일 필요는 없습니다. 이러한 정보를 검색 할 수있는 확실한 장소는 파일 안에 있습니다 /etc/passwd.

해당 파일은 누구나 읽을 수 있으므로 누구나 읽을 수 있으므로 내용에 액세스 할 수 있습니다.
$ USER가 파일에 존재하면, 이전의 마지막 항목은 사용자 HOME 디렉토리입니다.

항목을 선택하고 HOME 디렉토리를 인쇄합니다.

awk -v FS=':' -v user="$USER" '($1==user) {print $6}' "/etc/passwd"

보다 복잡한 (원격) 시스템의 경우 getent는 NSS (Name Service Switch 라이브러리) 시스템에서 사용자 정보를 가져 오는 일반적인 명령입니다.

의 명령

echo $(getent passwd $USER )| cut -d : -f 6

동등한 정보를 제공합니다 (사용 가능한 경우).


답변

사용자가 존재하지 않으면 getent오류를 반환합니다.

종료 코드를 무시하지 않는 작은 쉘 함수는 다음과 같습니다 getent.

get_home() {
  local result; result="$(getent passwd "$1")" || return
  echo $result | cut -d : -f 6
}

사용 예는 다음과 같습니다.

da_home="$(get_home missing_user)" || {
  echo 'User does NOT exist!'; exit 1
}

# Now do something with $da_home
echo "Home directory is: '$da_home'"


답변

루트로 로그인 USER했거나의 비밀번호 를 알고 있거나 USER비밀번호가없는 경우 다음은 또 다른 옵션입니다.

    su -c 'echo ~' ${USER}

표준 su동작에서 USERundefined 또는 empty 인 su경우 명령을 루트로 실행하려고합니다.

의 값이 USER유효한 사용자 이름이 아닌 경우 적절한 오류가 발생 su: user <user> does not exist합니다..

여기에 이미 많은 좋은 답변이 있지만 이것은 여전히 ​​누군가를 도울 수 있습니다.


답변