별도의 시스템 사용자와 서비스 사용자 사용자와 서비스

우리는 모두 시스템 사용자와 서비스 사용자가 있다는 것을 알고 있습니다. 시스템 사용자와 서비스 사용자 목록으로 분리하는 방법을 찾고 있습니다.

어떤 방법이 있습니까?



답변

gid따라 시스템 사용자와 서비스 사용자는 다음과 같이 분리 될 수 있습니다 .

/etc/passwd다른 정보와 함께 모든 사용자의 목록을 포함합니다. 서비스 사용자 또는 실제 사용자는 gid1000 이상입니다. 따라서 실제 사용자 목록은 다음과 같이 얻을 수 있습니다.

awk -F: '($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd

또한 시스템 사용자 목록 ( gid<1000)은 다음과 같이 추출 할 수 있습니다.

awk -F: '($3<1000){print $1}' /etc/passwd

작동 원리

내용 /etc/passwd은 같다

    root:x:0:0:root:/root:/bin/bash
    ...
    souravc:x:1001:1001:Souravc:/home/souravc:/bin/bash

awk함께 사용 -F:하면 행의 내용이 :필드 구분 기호로 취급되는 여러 필드로 분할 됩니다. 첫 번째 필드에는 사용자 이름이 있고 세 번째 필드에는가 있습니다 gid.

따라서 실제 사용자를 추출 awk하려면 세 번째 필드의 값을 확인하는 것이 1000보다 크며 아무도 사용자 가 아니며 첫 번째 필드, 즉 사용자 이름을 인쇄합니다.

방금 확인한 모든 시스템 사용자를 나열하려면 gid1000 미만이며 사용자 이름을 인쇄합니다.

편집하다

root실제 사용자 목록에 (gid = 0) 을 나열하고 싶습니다 . 실제 사용자를

awk -F: '($3==0)||($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd

시스템 사용자를

awk -F: '($3<1000)&&($1!="root"){print $1}' /etc/passwd

참고 항상 nobody사용자를 무시하고 있습니다.


답변

로그인 할 수있는 로컬 (시스템 사용자)을 나열하고 homedir 및 GID가 1000보다 작은 경우

 cat /etc/passwd | cut -d: -f 1,3,6 | grep "[1-9][0-9][0-9][0-9]" | grep "/home" | cut -d: -f1

다른 모든 사용자를 나열하려면 : (주로 시스템 사용자이고 GID가 1000보다 작음) :

cat /etc/passwd | cut -d: -f 1,3,6 | grep -v "[1-9][0-9][0-9][0-9]"  | cut -d: -f1


답변