우리는 모두 시스템 사용자와 서비스 사용자가 있다는 것을 알고 있습니다. 시스템 사용자와 서비스 사용자 목록으로 분리하는 방법을 찾고 있습니다.
어떤 방법이 있습니까?
답변
에 gid
따라 시스템 사용자와 서비스 사용자는 다음과 같이 분리 될 수 있습니다 .
/etc/passwd
다른 정보와 함께 모든 사용자의 목록을 포함합니다. 서비스 사용자 또는 실제 사용자는 gid
1000 이상입니다. 따라서 실제 사용자 목록은 다음과 같이 얻을 수 있습니다.
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보다 크며 아무도 사용자 가 아니며 첫 번째 필드, 즉 사용자 이름을 인쇄합니다.
방금 확인한 모든 시스템 사용자를 나열하려면 gid
1000 미만이며 사용자 이름을 인쇄합니다.
편집하다
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