Linux に newgrp というグループを変更するコマンドがあります。
このコマンド、設定ファイルなどを変更するコマンドではなく su コマンドのように一時的に状態を変更するコマンドです。
まずグループについてですが、 Linux のユーザは 次の例のように複数のグループに属することができます。
$ id uid=501(hoge) gid=502(develop) groups=497(manage),502(develop)
id コマンドで出力される groups は、補助グループと呼ばれる
ユーザが属しているグループです。
gid の方は、一次グループと呼ばれ、ファイルを作成したときは
このグループの権限が設定されます。
次のコマンドで、一次グループを変更することができます。
$ newgrp manage $ id uid=501(hoge) gid=497(manage) groups=497(manage),502(develop)
ファイルを作成するとグループが変わっているのがわかります。
$ ls -l -rw-r--r-- 1 hoge develop 0 2010-06-01 22:55 a.txt -rw-r--r-- 1 hoge manage 0 2010-06-01 22:56 b.txt
次の場合、newgrp するときにパスワードの入力が求められます。
su コマンド同様、root の場合はパスワードの入力が不要です。
newgrp すると su と同様に新しいシェルが起動します。
$ pstree init┬ ├ ├sshd─sshd─bash─pstree $ newgrp manage $ pstree init┬ ├ ├sshd─sshd─bash─bash─pstree
su コマンドと同様に環境を初期化するには "-" を指定します。
$ newgrp - manage
また、sg という newgrp とほぼ同機能のコマンドもあります。
newgrp との大きな違いとして、su コマンドと同様に
"-c" オプションでコマンドを実行することができます。
$ sg --help
usage: sg group [[-c] command ]
ちなみに、sg コマンドは newgrp のシンボリックリンクのようです。
$ ls -l /usr/bin/newgrp /usr/bin/sg -rwsr-xr-x 1 root root 27080 Mar 8 2004 /usr/bin/newgrp lrwxrwxrwx 1 root root 6 Jan 20 2004 /usr/bin/sg -> newgrp