사용자 이름이 존재하는지 확인 존재하는지 어떻게 알 수 있습니까? /etc/passwd와 /etc/shadow불완전.

쉘 스크립트에서 주어진 사용자 이름이 현재 시스템에 존재하는지 어떻게 알 수 있습니까?


/etc/passwd/etc/shadow불완전. OS X의 디렉토리 서비스 또는 마찬가지로 Active Directory가 통합 된 Linux를 고려하십시오.



답변

가장 기본적인 도구 중 하나는 아마입니다 id.

#!/bin/bash
if id "$1" >/dev/null 2>&1; then
        echo "user exists"
else
        echo "user does not exist"
fi

어느 생산

$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist


답변

겟트

이 명령은 / etc 파일과 LDAP, AD, NIS / Yellow Pages, DNS 등과 같은 다양한 원격 서비스가 지원할 수있는 데이터베이스 항목을 수집하도록 설계되었습니다.

비밀번호 이름 지정 서비스 중 하나가 사용자 이름을 알고 있는지 확인하려면 다음을 실행하십시오.

getent passwd username

이것은 OS 및 구현에 따라 그룹, 호스트 및 기타와 함께 작동합니다.


답변

finger

의 출력을 구문 분석하십시오 finger -m <username>. 유감스럽게도 사용자를 찾지 못하면 오류 코드가 없지만 찾지 못하면 오류 출력이 작성됩니다. 지금까지 단점이 없습니다.

finger -ms <username> 2>&1 1>/dev/null | wc -l

0사용자가 발견되면 (오류 출력이 없기 때문에) 인쇄 하고 그렇지 않으면 더 큰 숫자를 인쇄합니다.

chown

놀랍게도 모든 사용자로 실행하십시오.

T=$( mktemp -t foo.XXX ) ; chown <username> $T

로 실패 root하면 계정 이름이 유효하지 않은 것입니다.

root사용자 가 아닌 사용자 로 실패하면 허용되지 않는 조작 또는 유효하지 않은 사용자 (또는 동등한 사용자)에 대해 현지화 된 출력을 구문 분석하십시오 . LANG이를 확실하게 수행하도록 미리 설정하십시오 .


답변

나는 당신이 의존 /etc/passwd하고 비슷 하다고 말하고 싶습니다 (예 : /etc/shadowShadow 기반 시스템의 경우; 주제를 벗어난 쪽지에서 일부 유사한 시스템은 /etc/master.passwd다른 파일을 사용할 수 있습니다 ).

/etc/passwd일반적으로 사용자가 존재하는지 여부에 대한 결정의 절대 권위로 처리된다. 이 페이지에 설명 된 다른 방법을 사용하고 다른 방법이 기존 사용자를 가리 키지 만 /etc/passwd그렇지 않은 경우 가장 일반적인 표준을 정의하여 사용자가 시스템에 제대로 존재하지 않는다고 말할 수 있습니다. 소프트웨어에 의존 할 것입니다.

즉, 다른 방법을 사용하여 사용할 수있는 다른 옵션을 추가 할 것입니다.

ls -l /home | grep ^customUserName$<BR>
echo $?

“customuserName”을 확인하려는 사용자 이름으로 바꾸십시오. 시스템이 사용하는 경우 / home을 / users로 바꾸십시오. 특정 사용자에 대해 홈 디렉토리를 만들지 않은 경우 / etc / passwd에서 모든 사용자를 찾지 못할 수 있습니다. 사용자를 단순히 가져온 텍스트 (/ etc / passwd로 텍스트 줄)와 홈 디렉토리가없는 경우 발생할 수 있습니다. 사람이 로그인 할 때까지 /받지 않으면 안됩니다.


답변