我正在寻找一种方法来对大量服务器上的 /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