특정 gid를 가진 사용자를 에코합니다.

특정 gid를 가진 사용자를 에코합니다.

나는 기본 그룹이 명령줄의 인수인 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

따라서 각 줄의 첫 번째 필드를 인쇄하려고 합니다.네번째필드는 스크립트에 전달되는 것입니다. "필드"는 콜론으로 구분됩니다.

개인적으로 나는 이에 대한 스크립트를 작성하는 데 신경쓰지 않을 것입니다. 쉘 기능을 사용하겠습니다. 보다:

따라서 필요한 것은 다음과 같습니다.

  • -FAwk 옵션 에 대한 이해
  • Awk의 구문에 대한 기본적인 이해는 다음과 같습니다.condition {action}
  • Awk를 사용할 때 필드를 참조하는 방법에 대한 이해
  • 쉘 변수를 Awk에 전달하는 방법을 이해하고 있다면 도움이 될 것입니다. Awk의 옵션을 살펴보세요 -v.

이러한 사항을 얻으려면 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 passwdawk를 사용하여 사용자 데이터베이스( )를 쿼리하여 그룹 데이터베이스의 기본 그룹 ID에 대해 4번째 필드(기본 그룹 ID)를 확인합니다. 행(사용자 항목)이 일치하면 첫 번째 필드(사용자 이름)가 인쇄됩니다.

관련 정보