私は多数のサーバーで/etc/groupファイルのクリーンアップ操作をスクリプト化する方法を探しています。特定のグループのユーザーを複数回検索します。
つまり、 somegroup::100000:userA, userB, userC, foo, bar, snafu, userB, userB
明らかに小規模なグループの場合、これは簡単で手動で実行できますが、多数のグループとアイテムを含むいくつかのグループファイルがあります。
簡単なのでJavaで書こうと思いましたが、PerlやShellで探すのが好きです。
ありがとうございます!
ショーン
答え1
これを行うPerlスクリプトは次のとおりです。
while (<>) {
chomp;
my ($name, $pass, $gid, $users) = split ':';
my %userset;
my @users = split ',', $users;
# create a set (a hash with undef keys) by assigning to hash slice
@userset{@users} = ();
$users = join ',', sort(keys(%userset));
print join(':', $name, $pass, $gid, $users). "\n";
}
次のように使用してください。
$ ./fixgroups <group >group.tmp
$ diff -u group group.tmp
-somegroup::100000:userA,userB,userC,foo,bar,snafu,userB,userB
+somegroup::100000:bar,foo,snafu,userA,userB,userC
$ mv group.tmp group