쉘 스크립트에서 주어진 사용자 이름이 현재 시스템에 존재하는지 어떻게 알 수 있습니까?
/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/shadow
Shadow 기반 시스템의 경우; 주제를 벗어난 쪽지에서 일부 유사한 시스템은 /etc/master.passwd
다른 파일을 사용할 수 있습니다 ).
은 /etc/passwd
일반적으로 사용자가 존재하는지 여부에 대한 결정의 절대 권위로 처리된다. 이 페이지에 설명 된 다른 방법을 사용하고 다른 방법이 기존 사용자를 가리 키지 만 /etc/passwd
그렇지 않은 경우 가장 일반적인 표준을 정의하여 사용자가 시스템에 제대로 존재하지 않는다고 말할 수 있습니다. 소프트웨어에 의존 할 것입니다.
즉, 다른 방법을 사용하여 사용할 수있는 다른 옵션을 추가 할 것입니다.
ls -l /home | grep ^customUserName$<BR>
echo $?
“customuserName”을 확인하려는 사용자 이름으로 바꾸십시오. 시스템이 사용하는 경우 / home을 / users로 바꾸십시오. 특정 사용자에 대해 홈 디렉토리를 만들지 않은 경우 / etc / passwd에서 모든 사용자를 찾지 못할 수 있습니다. 사용자를 단순히 가져온 텍스트 (/ etc / passwd로 텍스트 줄)와 홈 디렉토리가없는 경우 발생할 수 있습니다. 사람이 로그인 할 때까지 /받지 않으면 안됩니다.