Thread wtmp Log-Washer Script: Klitzekleine Hilfe plz? :) (11 answers)
Opened by FlorianL at 2007-06-11 16:26

FlorianL
 2007-06-11 16:26
#77446 #77446
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
Hallo mal wieder ;)

Diesmal will ich per perlscript "zu alte" einträge aus dem wtmp log löschen, dazu nutze ich unter aix das tool fwtmp um in eine ascii datei zu konvertieren, der output sieht dann z.B so aus:

Quote
root     pts/0          pts/0         7 544768 0000 0000 1181308626 xadmp01.bla-ag.de                Fri Jun  8 15:17:06 MSZ 2007
        pts/0          pts/0         8 544768 0000 0000 1181308692                                  Fri Jun  8 15:18:12 MSZ 2007


Ich hab mir gedacht, ich wandel erstmal den ascii-monats-string um, um dann mit meinem jetzigen datum vergleichen zu können, das funzt zum glück schonmal *g*

Jetzt bin ich wieder bei regex angelangt weil ich split leider nicht nutzen kann (formatierung ist wie man sieht nicht immer gleich)
Oder kann ich vieleicht auch von hinten anfangen zu splitten und nach 6 "treffern" aufhören? Ich hab dazu per google leider nichts passendes gefunden...

Ansonsten, kann mir jemand vieleicht nen kleinen regex basteln der mir den "date" string ausgibt? Das Datum verändert sich ja (logischerweise) viel zu stark als das ich noob ein passendes schneidern könnte ;)

so siehts im moment aus:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/perl

use strict;
use warnings;

my $maxage = '4';               # Maximales alter der Eintraege in Wochen

sub bin2ascii {
       system("/usr/lib/acct/fwtmp < ./wtmp_testfile > /tmp/wtmp.ascii");
}

sub ascii2bin {
       system("/usr/lib/acct/fwtmp -ci < /tmp/wtmp.ascii > ./wtmp_testfile");
}

sub mapmonth {
       my %mnr=('Jan', 1, 'Feb', 2, 'Mar', 3, 'Apr', 4, 'Mai', 5, 'Jun', 6, 'Jul', 7, 'Aug', 8, 'Sep', 9, 'Oct', 10, 'Nov', 11, 'Dec', 12);
       my $monat=$mnr{$_[0]};
       return($monat);
}

sub ripdates {
       my $date = `date`;
       my @date_now = split(/ /,$date);
       my $currentmonth = $date_now[1];
       my $mappedmonth = mapmonth($currentmonth);
#       print $mappedmonth;             # Test ob die funktion mapmonth funzt
       open(WTMP_ASCII,"/tmp/wtmp.ascii");
       chomp(my @wtmp = <WTMP_ASCII>);
       close(WTMP_ASCII);
       foreach (@wtmp) {
               my @wtmplines =~ ######## ?????? #######
               print "$_\n";
       }
}

print("Loesche wtmp Eintraege der letzten 4 Wochen...\n");
bin2ascii();
ripdates();
#ascii2bin();

View full thread wtmp Log-Washer Script: Klitzekleine Hilfe plz? :)