기본 그룹이 명령줄 인수인 ID를 가진 그룹과 동일한 사용자의 사용자 이름을 에코하는 쉘 스크립트를 작성해야 합니다.
답변1
그룹이 아닌 GID로 찾고 있기 때문에이름, 그리고 당신 말이 옳습니다기초적인각 사용자에 대한 GID는 Awk를 사용하면 매우 간단합니다.
형식은 /etc/passwd
에 설명되어 있습니다 man 5 passwd
. 매뉴얼 페이지를 인용하면 다음과 같습니다.
There is one entry per line, and each line has the format:
account:password:UID:GID:GECOS:directory:shell
따라서 각 줄의 첫 번째 필드를 인쇄하고 싶습니다.네번째필드는 스크립트에 전달되는 것입니다. 여기서 "필드"는 콜론으로 구분됩니다.
개인적으로 나는 이를 위해 스크립트를 사용하지 않고 쉘 함수를 사용합니다. 바라보다:
따라서 필요한 것은 다음과 같습니다.
-F
Awk 옵션 이해- awk 구문에 대한 기본적인 이해는 다음과 같습니다.
condition {action}
- Awk를 사용할 때 필드를 참조하는 방법을 알아보세요.
- Awk에 쉘 변수를 전달하는 방법을 알고 있다면 도움이 될 것입니다.
-v
awk의 옵션을 살펴보세요.
이러한 사항에 대해서는 Awk 매뉴얼 페이지를 확인하십시오.
나는 당신을 위해 숙제를하지 않을 것입니다 - 요점은 배우는 것입니다암호, 복사하여 붙여넣는 방법을 배우지 마세요. 하지만 이에 대해 혼란스럽다면 이 질문에 댓글을 달아주세요. 필요한 경우 세부정보를 더 추가할 수 있습니다. (약 일주일 후에 완전한 솔루션을 포함하도록 업데이트될 수 있습니다.)
참고 사항: 실제 세계에서는 다른 답변에서 볼 수 있듯이 사용자를 찾는 것과 관련된 복잡성이 훨씬 더 큽니다. 사용자가 물건을 저장하는 방법에는 여러 가지가 있으며 이러한 복잡성을 설명하는 것은... 복잡할 수 있습니다.
하지만 귀하의 질문은 Awk를 사용하여 쉽게 수행할 수 있는 맞춤형 과제인 것 같고, 현실 세계에서 유용한 실용적인 응용 프로그램이기도 합니다.
답변2
사용자 데이터베이스가 항상 열거 가능한 것은 아니기 때문에 이것이 항상 가능한 것은 아닙니다.
passwd
데이터베이스( /etc/passwd
LDAP, mysql, NIS+ 등 또는 조합) 에서 기본 키는 사용자 이름입니다. (여러 사용자가 동일한 uid 또는 다른 gid를 가질 수 있습니다.)
주어진 사용자 이름에 대해 언제든지 사용자 데이터베이스를 쿼리할 수 있지만 항상 전체 사용자 목록을 검색할 수는 없습니다.
당신은 시도 할 수 있습니다. 표준 명령은 없지만 많은 시스템에 getent
사용할 수 있는 명령이 있습니다.
getent passwd
사용자 목록은 csv(콜론으로 구분) 형식으로 반환됩니다. 첫 번째 필드는 사용자 이름이고 네 번째 필드는 기본 gid입니다. 따라서 gid를 알고 있다면 를 사용하여 사용자 목록을 쉽게 반환할 수 있습니다 awk
.
getent -- group "$group"
지정된 그룹 데이터베이스를 쿼리 $group
하고 세 번째 필드가 gid인 csv 행을 반환합니다. cut
추출하면 충분합니다.
사용자 데이터베이스가 열거 가능하지 않은 경우 가능한 각 uid 번호를 개별적으로 쿼리하려고 할 수 있습니다(일부 시스템은 최대 2 31 까지 uid를 지원함 ). 하지만 이 경우에도 여러 사용자가 있을 수 있으므로 가능한 모든 사용자를 반환한다고 보장할 수는 없습니다. UID당 사용자는 한 명이며, 비밀번호 데이터베이스 쿼리는 일반적으로 한 명의 사용자만 반환합니다.
답변3
#!/bin/sh
if [ $# -ne 1 ]
then
echo "Usage: $0 gid"
exit 1
fi
getent passwd | awk -F: -v pgid=$gid '$4 == pgid { print $1 }'
매개변수 존재에 대한 오류 확인 후 스크립트 getent passwd
는 awk를 사용하여 사용자 데이터베이스( )를 쿼리하여 그룹 데이터베이스의 기본 그룹 ID에 대해 네 번째 필드(기본 그룹 ID)를 확인합니다. 행(사용자 항목)이 일치하면 첫 번째 필드(사용자 이름)가 인쇄됩니다.