답변:
정보가 /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
~foo
변수와 함께 사용할 수 없습니다 bash
. 어쨌든 직접적으로는 아닙니다.
~
탭 확장하지만,에 보인다, 그리고 또 다른 spec'd 행동 물결표 접두사는 사용하여 얻은 로그인 이름과 관련된 초기 작업 디렉토리의 경로명으로 교체해야 getpwnam()
기능을 그래서 아마 조회가 꽤 좋다고합니다. 나는 탭 확장을 좋아하지 않지만 탭을 입력하는 것을 좋아합니다.
eval
누군가의 홈 디렉토리를 얻는 데 사용할 수 있습니다 .
eval echo "~$USER"
적어도 로컬 사용자에게는 이것이 확실합니다. LDAP와 같은 원격 사용자가으로 처리되는지 모르겠습니다 eval
.
eval
가 필요합니다. ~foo
변수 확장 후 Bash가 처리되지 않습니다 .
USER
. 대신 LDAP 사용자의 사용자 이름이 포함 된 변수를 사용하십시오 .
$USER
으로 확장을 단지 알파벳 문자의 단일 문자열.
일반적인 장소는입니다 만 /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
동작에서 USER
undefined 또는 empty 인 su
경우 명령을 루트로 실행하려고합니다.
의 값이 USER
유효한 사용자 이름이 아닌 경우 적절한 오류가 발생 su: user <user> does not exist
합니다..
여기에 이미 많은 좋은 답변이 있지만 이것은 여전히 누군가를 도울 수 있습니다.