나는 많은 수의 서버에서 /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