사용자가 주어지면 홈 페이지로 돌아가는 방법은 무엇입니까?

사용자가 주어지면 홈 페이지로 돌아가는 방법은 무엇입니까?

내 스크립트에 USER변수가 있고 HOME해당 변수를 기반으로 USER그의 경로를 보고 싶습니다. 어떻게 해야 하나요?

답변1

/etc/passwd로컬 파일(예: LDAP 또는 기타 방법) 에 저장되어 있는지 여부에 관계없이 사용자 정보를 찾을 수 있는 유틸리티가 있습니다 . 그것은 알려져 있습니다 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

답변2

이것을 사용하여 eval누군가의 홈 디렉토리를 얻을 수 있습니다.

eval echo "~$USER"

적어도 로컬 사용자에게는 확실히 작동합니다. LDAP와 같은 원격 사용자가 사용되는지는 모르겠습니다 eval.

답변3

일반적인 장소는 이지만 /home/$USER반드시 보편적인 것은 아닙니다. 이 정보를 검색할 수 있는 최종 위치는 파일입니다 /etc/passwd.

파일은 누구나 읽을 수 있으므로 모든 사용자가 해당 내용에 액세스할 수 있습니다.
$USER가 파일에 존재하는 경우 마지막 항목은 사용자의 홈 디렉터리입니다.

그러면 항목이 선택되고 홈 디렉터리가 인쇄됩니다.

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

보다 복잡한(원격) 시스템의 경우 getent는 NSS(Name Service Exchange) 시스템에서 사용자 정보를 얻는 일반적인 명령입니다.

명령

getent passwd "$USER" | cut -d : -f 6

가능한 경우 동등한 정보가 제공됩니다.

답변4

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

    su -c 'echo ~' ${USER}

표준 su동작 에서 USER정의되지 않았거나 비어 있으면 su명령을 루트로 실행하려고 시도합니다.

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

여기에는 이미 좋은 답변이 많이 있지만 여전히 누군가에게 도움이 될 수 있습니다.

관련 정보