Как составить список всех пользователей в группе Linux? - PullRequest
268 голосов
/ 14 мая 2010

Как мне перечислить всех членов группы в Linux (и, возможно, других объединений)?

Ответы [ 19 ]

2 голосов
/ 29 июня 2015

Существует удобный пакет Debian и Ubuntu под названием ' members ', который обеспечивает эту функциональность:

Описание: показывает участников группы; по умолчанию все участники members - дополнение групп: поскольку groups показывает группы, к которым принадлежит указанный пользователь, members отображает пользователей принадлежность к указанной группе.

... Вы можете попросить первичных, вторичных членов, как на одна строка, каждая на отдельной строке.

2 голосов
/ 14 мая 2010

просто немного grep и tr:

$ grep ^$GROUP /etc/group | grep -o '[^:]*$' | tr ',' '\n'
user1
user2
user3
1 голос
/ 20 июля 2016
getent group insert_group_name_here | awk -F ':' '{print $4}' | sed 's|,| |g'

Возвращает разделенный пробелами список пользователей, которые я использовал в скриптах для заполнения массивов.

for i in $(getent group ftp | awk -F ':' '{print $4}' | sed 's|,| |g')
    do
        userarray+=("$i")
    done

или

userarray+=("$(getent group GROUPNAME | awk -F ':' '{print $4}' | sed 's|,| |g')")
0 голосов
/ 17 апреля 2019

Я думаю, что самым простым способом являются следующие шаги, вам не нужно устанавливать какой-либо пакет или программное обеспечение:

  1. Во-первых, вы узнаете GID группы, которую вы хотите знать пользователям, для этого есть много способов: cat / etc / group (последний столбец - GID) идентификатор пользователя (пользователь принадлежит к группе)

  2. Теперь вы перечислите всех пользователей в файле / etc / passwd, но вы примените некоторые фильтры со следующим продолжением команд, чтобы получить только членов предыдущей группы.

cut -d: -f1,4 / etc / passwd | grep GID (GID - это число, полученное на шаге 1)

команда cut выберет только некоторые «столбцы» файла, параметр d устанавливает разделитель «:», в этом случае параметр -f выбирает «поля» (или столбцы), которые будут отображаться 1 и 4 в регистр (в файле / etc / passwd столбец 1º - это имя пользователя, а 4º - это GID группы, к которой принадлежит пользователь), для завершения | grep GID отфильтрует только группу (в столбце 4º ) что вы выбрали.

0 голосов
/ 16 декабря 2013

Вот скрипт, который возвращает список пользователей из / etc / passwd и / etc / group он не проверяет NIS или LDAP, но показывает пользователей, которые имеют группу в качестве группы по умолчанию Протестировано на Debian 4.7 и Solaris 9

#!/bin/bash

MYGROUP="user"

# get the group ID
MYGID=`grep $MYGROUP /etc/group | cut -d ":" -f3`
if [[ $MYGID != "" ]]
then
  # get a newline-separated list of users from /etc/group 
  MYUSERS=`grep $MYGROUP /etc/group | cut -d ":" -f4| tr "," "\n"`
  # add a newline
  MYUSERS=$MYUSERS$'\n'
  # add the users whose default group is MYGROUP from /etc/passwod 
  MYUSERS=$MYUSERS`cat /etc/passwd |grep $MYGID | cut -d ":" -f1`

  #print the result as a newline-separated list with no duplicates (ready to pass into a bash FOR loop)
  printf '%s\n' $MYUSERS  | sort | uniq
fi

или в виде однострочника вы можете вырезать и вставлять прямо отсюда (измените имя группы в первой переменной)

MYGROUP="user";MYGID=`grep $MYGROUP /etc/group | cut -d ":" -f3`;printf '%s\n' `grep $MYGROUP /etc/group | cut -d ":" -f4| tr "," "\n"`$'\n'`cat /etc/passwd |grep $MYGID | cut -d ":" -f1`  | sort | uniq
0 голосов
/ 25 февраля 2017
getent group groupname | awk -F: '{print $4}' | tr , '\n'

У этого есть 3 части:

1 - getent group groupname показывает строку группы в файле "/ etc / group". Альтернатива cat /etc/group | grep groupname.

2 - awk выводит только элементы в одной строке, разделенные символом ','.

3 - tr замените ',' на новую строку и напечатайте каждого пользователя подряд.

4 - Необязательно: Вы также можете использовать другой канал с sort, если пользователей слишком много.

Привет

0 голосов
/ 10 февраля 2016

Я попытался grep 'sample-group-name' /etc/group, в котором будут перечислены все члены группы, которую вы указали на основе примера здесь

0 голосов
/ 17 января 2016

Вот очень простой скрипт awk, который учитывает все распространенные ошибки, перечисленные в других ответах:

getent passwd | awk -F: -v group_name="wheel" '
  BEGIN {
    "getent group " group_name | getline groupline;
    if (!groupline) exit 1;
    split(groupline, groupdef, ":");
    guid = groupdef[3];
    split(groupdef[4], users, ",");
    for (k in users) print users[k]
  }
  $4 == guid {print $1}'

Я использую это с моей настройкой с поддержкой ldap, работает на любом оборудовании со стандартом getent & awk, включая solaris 8+ и hpux.

0 голосов
/ 11 ноября 2015

В UNIX (в отличие от GNU / Linux) есть команда listusers.См. Справочную страницу Solaris для списков пользователей .

Обратите внимание, что эта команда является частью проекта семейной реликвии с открытым исходным кодом .Я предполагаю, что это отсутствует в GNU / Linux, потому что RMS не верит в группы и разрешения.: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...