回答:
grepを使用できます。
grep '^group_name_here:' /etc/group
これは、補助グループメンバーシップのみをリストし、このグループをプライマリグループとして持つユーザーはリストしません。また、LDAPなどのネットワークサービスのグループではなく、ローカルグループのみを検索します。
sudo lid -g {group}
はこの回答がグループ内の8人のユーザーをsudo lid -g {group}
リストするのに対し、10をリストするシステムを持っているので、これを避けるべきだと思います
getent
以下の@Murray Jensenによる回答をご覧ください
私はgetentコマンドを使用することを好みます...
getentはシステムと同じネームサービスを使用するため、getentは、LDAPなどのネットワーク情報ソースから取得した情報を含む、すべての情報を表示します。
したがって、グループの場合は、次を使用する必要があります...
getent group name_of_group
どこname_of_groupを調べたい基で置換されています。これは補足グループメンバーシップのみを返すことに注意してください。このグループをプライマリグループとして持っているユーザーは含まれません。
実行できるルックアップは他にもたくさんあります... passwd
もう1つの便利なもので、プライマリグループをリストする必要があります。
sudo lid -g {group}
はこの回答がグループ内の8人のユーザーをsudo lid -g {group}
リストするのに対し、10をリストするシステムを持っているので、これを避けるべきだと思います
簡単に groups [username]
すべてのローカルユーザーとローカルグループを一覧表示する場合は、次の操作を実行できます。
cat /etc/passwd | awk -F':' '{ print $1}' | xargs -n1 groups
「groups:command not found」というメッセージが表示された場合は、環境のパスを編集して、パスをリセットしてください。 PATH=$(getconf PATH)
| grep {group}
追加された場合、特定のグループに対して機能し、getent group name_of_group
またはgrep '^group_name_here:' /etc/group
cat /etc/passwd
、gentent passwd
nis / ldapのユーザーが引き続きリストされるように使用する必要があります。唯一の欠点は、かなり時間がかかることです。
groupmems -g groupname -l
指定されたグループのすべてのユーザーをリストします。
groupmems
ほとんどのLinuxディストリビューションで使用されるシャドウユーティリティの一部であることに注意してください。ただしgroupmems
、現在Debianおよび派生物には存在しません(バグは修正済みですが、まだリリースに含まれていません(2016年11月現在))
groupmems
グループで/etc/group
はなく、グループのみを処理し、/ etc / gshadowを開こうとするとスーパーユーザー権限が必要になることに注意してください。
cut
および友人)の追加の解析を必要としないため、特定の状況に最適です。
sudo lid -g {group}
。私はこの回答がグループ内の8人のユーザーをsudo lid -g {group}
リストするのに対し、10をリストするシステムを持っています。
OPは、groupsコマンドを使用する可能性を排除するために質問を述べました。これはLinuxのcoreutilsの一部であるため、(a)削除されたか、(b)OPが名前の入力ミスです。
groups
たとえば、OPは次のように使用できます。
for name in $(cut -d: -f1 /etc/passwd);do groups $name|grep -w sudo|awk '{print $1;}';done
1つは、のグループ名に対するgrepだけの回答を提案しました/etc/group
。意図したとおりに機能することもあります。
grepを少し上手に使用するには、次の構文を考慮します/etc/group
。
group_name:password:GID:user_list
したがって、最初のコロンの前の部分のみが有効なグループ名になります。構文に関係のない単純なgrepは、ファイルから誤解を招く一致を拾う可能性があります(そしてそうするでしょう)。正規表現を使用して、必要なものとgrepを正確に一致させます。
grep -E '^users:' /etc/group |sed -e 's/^.*://'
または、シェル変数を使用します。
grep -E '^'$groupname':' /etc/group |sed -e 's/^.*://'
ただし、それはデフォルトグループにないもののみをリストします。それらを追加するには、パスワードファイルを考慮する必要があります。たとえば、からgroup-id番号を抽出し、から/etc/group
デフォルトグループに一致するユーザーを印刷します。/etc/passwd
たとえば、
grp=$(awk -F: '$1 ~ /^users$/ {print $3; }' </etc/group)
awk -F: '$4 ~ /^'$grp'$/ { print $1; }' </etc/passwd
grepとsedを使用して同じことを実行できますが、awkを使用するよりも多くの作業が必要です。
を使用して提案された別の提案された回答はgetent
、Linuxマシン上にもある可能性があります(Debianでは、GNU libcの一部です)。ただし、それを簡単に確認すると、/etc/group
コンテンツのみが提供されていることがわかります。
私は(ほとんどのように)持っていないlibusers
か、lid
インストールされていないので、OPの条件を満たすかどうかについてコメントすることはできません。
id
グループ情報を提供するプログラムもあります。誰かが可能な答えとしてそれを拡張するかもしれません。
sed -n "s/^$groupname:.*://p" /etc/group
、グループ名にRE演算子が含まれていると、間違った結果が報告される可能性.
があります(たとえば、グループ名で珍しいことではありません)。
getent
はLDAP / NISも照会しますが、グループデータベースで列挙が明示的に無効になっている場合はそうではありません。
groups
与えられたグループのメンバーのリストとは対照的に、与えられたユーザーがメンバーであるグループをリストするので、助けにはならないことに注意してください。
チャームのように機能します:
cut -d: -f1,4 /etc/passwd | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1
sudo lid -g
リストは8です。@ Bhavik受け入れられた答えも正しくありません。
libuser(「lid」の場合)またはmembers(「members」の場合)をインストールするように指示する人もいます。しかし、ログイングループメンバーシップでこの問題を処理したhttps://unix.stackexchange.com/a/349648/77959の答えに基づいて、そのスクリプトでカバーされていない別のグループが見つかりました。だから-ここに両方のアプローチの最高の組み合わせがあります:
#!/bin/bash
if [ $# -eq 1 ]; then
list_a=`cut -d: -f1,4 /etc/passwd | grep $(getent group "$1"| cut -d: -f3) | cut -d: -f1`
list_b=`getent group "$1"|cut -d: -f4|sed 's/,/\n/g'`
echo -e "$list_a\n$list_b"|grep -v "^$"|sort|uniq
else
echo "pass me a group to find the members of"
fi
getent
、grep を含む回答とは異なり、私のシステムで正しく機能しました'^group_name_here:' /etc/group
user3717722アプローチのこの変更により、NISデータベース内のグループメンバーがリストされます。
ypcat passwd | cut -d: -f1,4 | grep $(getent group <groupname> | cut -d: -f3) | cut -d: -f1
groups
コマンドです。これはcoreutilsの一部であるため、Linuxで使用することはほとんどありません。