모든 사용자 및 그 그룹 표시


70

기존 그룹과 사용자가 있지만 관련성이 확실하지 않습니다. 모든 사용자 또는 모든 그룹을 나열하는 데 사용할 수있는 쉘 명령과 지정된 사용자 / 그룹에 대한 모든 그룹 / 사용자를 나열하는 명령이 있습니까?

따라서 showusers모든 사용자를 나열하고 showgroups -u thisuser그 안에있는 모든 그룹을 표시 thisuser합니다.


그러한 명령은 없습니다. 스스로 작성해야합니다.
Chris

방법에 대한cat /etc/passwd
Sudip 반 다리

답변:


93

모든 사용자들:

$ getent passwd

모든 그룹 :

$ getent group

특정 사용자가있는 모든 그룹 :

$ getent group | grep username

speech-dispatcher그룹 오디오 (에 기반한)에 속하는 이름의 사용자가 있음을 발견했습니다 groups speech-dispatcher. 그러나 getent group명령 아래에 나열되지 않았습니다 ! 무엇이 문제입니까?
PHP Learner

3
@PHPLearner 다른 질문이 있으면 의견이 아닌 질문을 게시 하십시오 .
EEAA

+1은 기존 /etc/passwd/etc/group파일 에서 찾을 수없는 사용자 / 그룹을 나열 합니다. 즉, 시스템이 사용자 / 그룹 열거를 지원하는 한 NIS 및 LDAP 또는 다른 대체 사용자 / 그룹 데이터베이스와 같은 중앙 디렉토리를 사용하도록 구성된 경우 .
HBruijn

열거가 꺼져 있으면 ldap 또는 sssd 구성의 모든 사용자와 그룹이 반환되지는 않습니다.
Jens Timmerman

16

사용자 및 그룹을 나열하십시오.

for user in $(awk -F: '{print $1}' /etc/passwd); do groups $user; done

그룹 및 사용자 목록 :

cat /etc/group | awk -F: '{print $1, $3, $4}' | while read group gid members; do
    members=$members,$(awk -F: "\$4 == $gid {print \",\" \$1}" /etc/passwd);
    echo "$group: $members" | sed 's/,,*/ /g';
done

1
그것이 효과가 있을지 모르지만,이 작업을 수행하는 데 아주 좋은 간단한 원샷 명령이있을 때 약간 복잡해 보이지 않습니까?
EEAA

중앙 저장소에있는 것은 아무것도 얻지 못할 것입니다. 그리고 그것은 당신이보고 싶은 정보입니다.
Magellan

매우 도움이되는 것은 별개의 명령이라는 것을 언급하는 것이 좋습니다.
미안 아스 밧 아마드

5

LDAP 또는 NIS와 같은 원격 사용자를 신경 쓰지 않으면 간단한 방법으로 사용자 및 관련 그룹을 나열하십시오.

cut -d: -f1 /etc/passwd | xargs groups

산출;

root : root
myuser : root www-data fuse 
anotheruser : anotheruser   cdrom floppy audio dip video plugdev scanner bluetooth netdev

1
이는 LDAP, NIS 등의 데이터베이스에서 시작된 사용자 / 그룹을 무시한다는 점에서 Chang의 대답과 같은 문제가 있습니다.
MadHatter

이것은 매우 깔끔한 형식으로 정보를 깔끔하게 출력하므로 여전히 유용한 첫 단계가 될 수 있습니다. / etc / group 및 / etc / passwd의 구문과 관련하여 내 기억을 뛰어 넘는 데 도움이되었습니다!
Chris Woods

3

모든 사용자 목록

cut -d':' -f 1 /etc/passwd

또는

awk -F ':' '{print $1}' /etc/passwd

하지만 고양이 / etc / passwd에이 모든 사용자 (및 기타 물건의 무리)를 보여줍니다 -f (1) : ''-d 잘라 구분 기호로하고 (사용자가 단지 첫 번째 필드를 추출 : ''각 행을 분할하는 간단한 방법입니다 ). awk 버전과 거의 동일합니다.

모든 그룹 나열

cut -d':' -f 1 /etc/group

또는

awk -F ':' '{print $1}' /etc/group

목록 사용자와 매우 비슷한 것을 추측하십시오. 대신 / etc / group을 구문 분석하십시오 .

OP가 원했던 것에 더 가까운 또 다른 흥미로운 방법은 compgen 입니다. 그래도 호환성 문제는 확실하지 않습니다.

compgen -u
compgen -g

2
Elliot Baily 님, 서버 결함에 오신 것을 환영합니다! 이 질문은 5 년이 넘었으며 이미 정답이 수락되었습니다. 또한 사용자가 / etc / passwd에 저장된 경우에만 솔루션이 작동합니다. 허용되는 답변은 다른 사용자 데이터베이스 (예 : NIS 또는 LDAP)에서도 작동합니다. 오래된 질문에 답하고 싶다면 (완전히 괜찮습니다!) 답이없는 질문 목록을 보고 싶을 수도 있습니다 .
marcelm

-1

데비안

cat /etc/passwd # show all users
cat /etc/group # show all groups
cat /etc/passwd | grep group # show all users with specified group

2
이미 승인 된 것과는 달리 LDAP, NIS 등과 같은 원격 사용자 데이터베이스에서 시작된 사용자 / 그룹은 나열되지 않습니다.
HBruijn

-2

이처럼 :

sudo cat /etc/gshadow |grep group
sudo cat /etc/gshadow |grep username

1
아니요. /etc/gshadow그룹 구성원을 포함하지 않으며 ( /etc/group하지 않습니다) 4.5 년 전의 승인 된 답변은 원격 그룹도 처리하므로 훨씬 일반적입니다.
Sven

-2

특정 그룹의 모든 그룹 및 사용자를 가져 오려면이 명령을 사용하십시오.

grep '
> ' /etc/group
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.