Arquivos de grupo “limpos” do Solaris (ou para qualquer arquivo de texto)

2

Estou procurando uma maneira de criar scripts para uma operação de limpeza no arquivo / etc / group em um grande número de servidores. Procurando usuários em um grupo específico mais de uma vez.

i.e. somegroup :: 100000: userA, userB, userC, foo, barra, snafu, userB, userB

Obviamente, para um grupo pequeno isso é fácil e pode ser feito manualmente, mas eu tenho alguns arquivos de grupo com um grande número de grupos e entradas.

Eu pensei em escrevê-lo em java, já que deveria ser bem fácil, mas eu preferiria encontrar algo em perl ou shell.

Obrigado!

Sean

    
por ssbob 06.05.2012 / 06:04

1 resposta

2

Aqui está um script Perl para fazer isso.

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";
}

Use assim:

$ ./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
    
por 06.05.2012 / 06:35