perl脚本之------向/etc/aliases邮件组添加删除用户

来源:互联网 发布:免费php分类信息系统 编辑:程序博客网 时间:2024/06/05 16:42
下面三脚本是向/etc/aliases中已建立的邮件组中添加或删除用户之用

1,向邮件组中添加用户:

CODE:

#!/usr/bin/perl -w
#name:aliases-add-user.pl
#
use strict;
my $id=shift;
my $group=shift;

my $dir="/etc";
my $file="aliases";
my $all="all";

my @groups=split(/,/,$group);
my $group_tmp=join(" ",@groups);
push @groups,$all if($group_tmp !~ $all);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
$mon=$mon+1;
$mon='0'.$mon if($mon<10);
$year=$year+1900;
$mday='0'.$mday if($mday<10);
my $ext=$year.$mon.$mday;

if(-f "$dir//$file/.$ext"){
    system("rm -f $dir//$file/.$ext");
    system("mv $dir//$file $dir//$file/.$ext");
    }else{
        system("mv $dir//$file $dir//$file/.$ext");
        }
my $bak_file="$file/.$ext";
open(FILE,"$dir//$bak_file") or die "connot open $!";
my @aliases=<FILE>;


foreach my $line(@groups){
    for(my $i=0;$i<@aliases;$i++){
        if($aliases[$i]=~/^$line:/){
            chomp($aliases[$i]);
            $aliases[$i]="$aliases[$i]".",$id"."/n" ;
            }
        }
    }
   
foreach my $str(@aliases){
    open FH,">>$dir//$file" or die $!."/n";
    print FH $str;
    close(FH);
    }
   

close(FILE);
system("/usr/bin/newaliases");



2,从邮件组中删除指定用户,并从系统中删除指定用户

CODE:

#!/usr/bin/perl -w
#name:aliases-del-user.pl
use strict;
my $id=shift;
my $dir="/etc";
my $file="aliases";

exit if($id eq "root");

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
$mon=$mon+1;
$mon='0'.$mon if($mon<10);
$year=$year+1900;
$mday='0'.$mday if($mday<10);
my $ext=$year.$mon.$mday;
system("/usr/sbin/userdel $id");

if(-f "$dir//$file/.$ext"){
    system("rm -f $dir//$file/.$ext");
    system("mv $dir//$file $dir//$file/.$ext");
    }else{
        system("mv $dir//$file $dir//$file/.$ext");
        }

my $bak_file="$file/.$ext";
open(FILE,"$dir//$bak_file") or die "$!/n";
my @aliases=<FILE>;
foreach my $line(@aliases){       
    if($line=~//b$id/b/){
        $line=~ s//b$id/b//g;
        }
    if($line =~ //w,+/w/){
        $line=~s/,+/,/g;
        }
    if($line =~ /,$/){
        $line=~s/,+$//;
        }
    }
foreach my $str(@aliases){
    open FH,">>$dir//$file" or die $!."/n";
    print FH $str;
    close(FH);
    }
close(FILE);
system("/usr/bin/newaliases");





3,从指定邮件组中删除指定用户,但是不从系统中删除用户

CODE:

#!/usr/bin/perl -w
#name:aliases-del-fromgroup.pl
use strict;
my $id=shift;
my $group=shift;
my $dir="/etc";
my $file="aliases";

exit if($id eq "root");

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
$mon=$mon+1;
$mon='0'.$mon if($mon<10);
$year=$year+1900;
$mday='0'.$mday if($mday<10);
my $ext=$year.$mon.$mday;

if(-f "$dir//$file/.$ext"){
    system("rm -f $dir//$file/.$ext");
    system("mv $dir//$file $dir//$file/.$ext");
    }else{
        system("mv $dir//$file $dir//$file/.$ext");
        }

my $bak_file="$file/.$ext";
open(FILE,"$dir//$bak_file") or die "$!/n";
my @aliases=<FILE>;
foreach my $line(@aliases){       
    if($line=~/^$group:/){
        $line=~ s//b$id/b//g;
        }
    if($line =~ //w,+/w/){
        $line=~s/,+/,/g;
        }
    if($line =~ /,$/){
        $line=~s/,+$//;
        }
    }
foreach my $str(@aliases){
    open FH,">>$dir//$file" or die $!."/n";
    print FH $str;
    close(FH);
    }
close(FILE);
system("/usr/bin/newaliases");