bashファイルを使用してグループメンバーをファイルとして印刷する

bashファイルを使用してグループメンバーをファイルとして印刷する

だから正直に言って、これは宿題なのですが、コンピュータに穴を開けると思います。オンラインで探してみましたが、質問が間違っているかどうか。

デフォルトでは、私はbashスクリプトを作成してファイルを生成し、グループをインポートしてファイルとして印刷し、1行ずつ印刷する必要があります。

タッチで簡単にファイルを作成できます。

touch /dir/output.txt

私はコードが次のようになると思います。

for each group member in group length
printf "name,password,group" >> /dir/output.txt

私の質問は、このファイルにグループメンバーシップを印刷する方法です。

挨拶、

精神的に疲れた学生。

ベストアンサー1

グループのメンバーを一覧表示するには、groupNSSデータベースにグループ名を照会して、gidとメンバーをインポートする必要があります。

passwdまた、そのgidを持つユーザーを確認するには(ユーザー)データベースに問い合わせる必要があります。とともに:

group_name=somegroup
awk -F: '
  !groups_processed {
    gid[$3] # record gid in gid hash
    split($4, members, ",") # extract members
    for (i in members) users[members[i]] # unique members listed as
                                         # keys of users hash
    next
  }
  $4 in gid {
    users[$1] # also record users with corresponding gid
  }
  END {
    for (i in users) print i
  }' <(getent -- group "$group_name") \
     groups_processed=1 \
     <(getent passwd) | sort

通常、データベースにはグループ名ごとに1つのエントリしかありませんが、複数のデータベース(ファイルやLDAPなど)があるシステムではより多くのエントリが見つかる可能性があります。これには、ベストプラクティスでもそうでないかもしれないすべてのGIDが記録されます。さらに、他のグループは同じGIDを持つことができます。ここには、同じ GID を持つ別のグループのメンバーとしてリストされたユーザーは含まれません。


1 GNUシステムでは、getent groupこれらすべてが個別にリストされていますが、getent group thegroupnameそのうちの1つだけが返されることがわかりました。

おすすめ記事