$lastlog_t = "L a32 a256"; #(your machine maybe differ);
$LEN = length(pack($lastlog_t,0, '', ''));
print "length = $LEN \n";
####
setpwent();
while(@list = getpwent()) {
($login,$home) = @list[0,7];
print "home directory for $login is $home \n";
}
endpwent();
####
#!/usr/bin/perl
$lastlog_t = "L a32 a256"; #(your machine maybe differ);
$LEN = length(pack($lastlog_t,0, '', ''));
open(LASTLOG,'/var/log/lastlog') || die "can't open lastlog file: $! \
+n";
open(PASSWD,'/etc/passwd') || die "can't open passwd file: $! \n";
@month=(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);
while($varrec = ) {
($login,$pass,$uid,$gid,$gcos) = split(/:/,$varrec);
$fullname = $gcos;
# $fullname = ~ s/^[^,]*--(.*)\(.*/$1/ || $fullname =~ s/,.*//;
#try to uncomment code line above, cuz i got weird result
if ($fullname =~ /&/) { #u dont want to know
$name = $login;
substr($name,0,1) = ~ tr/a-z/A-Z/;
$fullname = ~ s/&/$name/;
}
seek(LASTLOG,$uid * $LEN, 0);
read(LASTLOG,$lastlog,$LEN);
($time,$line,$host) = unpack($lastlog_t,$lastlog);
push(@records, "$time:$login:$uid:$fullname");
}
@records = sort numerically @records;
foreach $record(@records) {
($time,$login,$uid,$fullname) = split(/:/,$record);
if ($time) {
($sec,$min,$hour,$mday,$mon,$year) = localtime($time);
$year +=1900;
$date = "$mday $month[$mon] $year";
}
else {
$date = "never";
}
write;
}
sub numerically {$a <=> $b; }
format top =
Uid Login Full Name Last Login
.
format STDOUT =
@>>>>> @<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @||||||||||||
$uid $login $fullname $date