今日は奇妙な行動を見つけました。新しいグループにユーザーを追加すると、次のようになります。
# gpasswd -a test myuser
groups
その後、新しいbashセッションに接続すると、結果は次のようになりますgroups myuser
。
myuser@mycomputer$ groups
wheel myuser
myuser@mycomputer$ groups myuser
wheel myuser test
再起動時にのみ出力はgroups
同じに表示されますが、groups myuser
グループが必ずしも同じ順序で表示されるわけではありません。
だから私の質問は簡単です。なぜですか?
答え1
新しいグループが開始されるまで、グループメンバーシップの変更は適用されないためです。ログインシェル。新しい非ログインインタラクティブシェルセッション(新しい端末を開いたときに取得されるセッション)を開始することは関係ありません。
したがって、を実行すると、groups
ユーザーが現在属しているグループが印刷されます。ただし、これらのグループはユーザーが初めてログインしたときに設定され、再度ログインするまで変更できません。したがって、groups
新しいグループは含まれません。
一方、システムは実行時にgroups myuser
検索しません。現在のユーザーは以下に属します今は、ユーザーが属するグループを見つけますmyuser
。これは/etc/group
設定ファイルを読んで得たものです(おそらく)。ユーザーが新しいグループに属するように設定されているため、/etc/groups
このコマンドはユーザーがグループに属していなくてもその内容も表示します。今もう一度ログインしていないため、すでにこのグループに属しています。
答え2
引数なしで実行すると、
groups
現在のグループのリストが表示されます。プロセス。通常、リストは単に親プロセスから継承されますが、同様に変更されlogin
ますnewgrp
。引数を使用して実行すると、指定された
groups
グループにリストされている(ユーザーデータベースに)グループが表示されます。ユーザー。login
次回このユーザーなどに対して実行時に設定されるグループのリストです。
これがユーザー/グループデータベースの更新が影響を与える理由です。未来ログインセッション - すでに実行中のプロセスが変更されるとは思わないでください。