Log Datei auswerten und andes ausgeben

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von van_haakonnen, 04.01.2006.

  1. #1 van_haakonnen, 04.01.2006
    van_haakonnen

    van_haakonnen Jungspund

    Dabei seit:
    04.01.2006
    Beiträge:
    11
    Zustimmungen:
    0
    Hallo Leute,

    ich habe mal eine Frage an euch... Ich habe hier eine Log Datei. Pro Zeile steht dort ein User drin mit dem Datum wann sein Passwort abläuft. Das sieht dann z.B. so aus:

    y00999999: abgelaufen seit 1 Tagen - (password will expire: Sat Dec 31 13:10:33 2005)

    oder mit richtigem Usernamen:
    willie: abgelaufen seit 1 Tagen - (password will expire: Sat Dec 31 13:10:33 2005)

    Diese Datei enthält tausende solcher Eintragungen mit abgelaufenden Passwörtern von Usern.

    Jetzt will ich ein kleines Script basteln, in dem man einfach als Variable die Zeit eingeben kann seit wann das Passwort abgelaufen ist (die Zeit ruhig in Tagen). Dann sollen alle User deren Pwd. abgelaufen ist untereinander in eine neue Datei geschrieben werden.

    DAs ist eigentlich alles. Aber ich verstehe einfach gerade nicht wie ich das fertig bringe... :hilfe2:

    Ich wäre euch sehr dankbar wenn ihr mir ein bisschen helfen könntet

    Vielen Dank
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. dramen

    dramen Routinier

    Dabei seit:
    13.01.2005
    Beiträge:
    356
    Zustimmungen:
    0
    Ort:
    Wien
    herzlich willkommen!

    wieviele user hast du denn?
    wenn ich das richtig verstehe könnte dir das hier vielleicht helfen:
    cat /var/log/messages | grep username (oder ein anderer string) > datei.txt

    das ablaufdatum wird ja über die datei /etc/shadow bzw. ferner über login.defs definiert. du könntest natürlich aus der shadow-datei den entsprechenden namen herausnehmen und den entsprechenden eintrag mit cut ausschneiden
     
  4. #3 Wolfgang, 04.01.2006
    Zuletzt bearbeitet: 04.01.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Schau dir einfach grep, sed cut und/oder perl an.
    Damit geht sowas sehr leicht zu realisieren.
    Wenn du es als richtiges Script (statt einen Einzeiler) willst,
    Dann schau dir noch an wie man Parameter übergibt.
    Kleines Beispiel:
    Code:
    #!/bin/bash
    P="abgelaufen seit ${1} Tagen";
    FILE=inputfile.log;
    OFILE=output.txt;
    grep  "$P" [b]$FILE[/b]|cut -d: -f1 >>/PATH/TO/$OFILE;
    Ganz ungeprüft auf die Schnelle.
    Natürlich sollten da noch Fehlerprüfungen rein.
    e.g. ob die Datei existiert, lesbar, schreibbar ist und/oder der Parameter korrekt...

    Gruß Wolfgang

    Edit:
    Fiptehler korrigiert ;)
     
  5. #4 van_haakonnen, 04.01.2006
    Zuletzt bearbeitet: 04.01.2006
    van_haakonnen

    van_haakonnen Jungspund

    Dabei seit:
    04.01.2006
    Beiträge:
    11
    Zustimmungen:
    0
    Vielen Dank für deine schnelle Antwort.

    Also es handelt sich hierbei um ein ganz eigenes System. Die Datei die ich hier als Log-Datei habe wird auch schon "nur" durch ein Script erstellt.

    Ich brauche jetzt also ein weiteres Script (das ausschließlich die Informationen aus dieser einen Log-Datei bekommt) um alle Usernamen in eine neue Datei untereinander zu schreiben, dassen Account bereits schon X Tage abgelaufen ist.

    Die Dauer (also wie lange der Account bereits abgelaufen ist) soll man als Variable angeben können.

    Und noch eine Sache... Das klingt blöd aber ich bin ehrlich.. ich habe wirklich keine ahnung. Also auch nicht viel von den bash - Sachen... Bitte immer erklären... :think:


    edit:

    wow - danke für die zweite Anwort Wolfgang! Probiere ich gleich mal aus :-)

    edit2:

    Also da bekomme ich folgendes:
    81-2-133-8:/home/Script2# ./Script.sh
    grep: abgelaufen: No such file or directory
    grep: seit: No such file or directory
    grep: Tagen: No such file or directory

    Wie kann ich denn die Angabe mit den Tagen genauso in eine Variable schreiben wie du es mit den Pfaden gemacht hast?

    und kann es sein, dass FILE gar nicht verwendet wird? Er also gar nicht weiß wo in welcher Datei er danach suchen soll? Weil OFILE z.B. taucht ja später nochmal auf. :)
     
  6. #5 Wolfgang, 04.01.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Noch ein Hinweis:
    So bekommst du natürlich nur die User, deren Passwort Verfallsdatum genau auf den Parameter zutrifft.
    Ob du das so willst, hast du nicht genau angegeben.

    Wenn du alle deren Datum größer als dein Parameter ist haben willst, muss du etwas anders vorgehen.

    Noch ein Beispiel (hoffe diesmal ohne Fehler;))
    Code:
    #!/bin/bash
    FILE=inputfile.log;  #Inputfile
    OFILE=output.txt;    #Outputfile
    I=$1;                #Parameter
    while read USER adummy bdummy T Rest ;#einlesen und die Werte Variablen zuweisen
    do
    if [ $T -gt $I ] ;#Prüfe ob die Zeit größer als unser Parameter ist (-gt)
    # Bei Gleichheit und größer wär es dann -ge
    then
    #wenn ja, ausgeben und Doppelpunkt entfernen
     echo "$USER"|tr -d ":"; #tr -d entfernt den :
     fi;
    done <"$FILE" >"$OFILE" 
    echo "All done";#Ende                           
    Hoffe du kommst mit der Erklärung soweit klar.
    Gruß Wolfgang
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Vielleicht klappt es damit, angenommen, dass Deine Log-Datei ablaufer.log heisst:
    Code:
    #/bin/bash
    grep "abgelaufen seit" ablaufer.log | awk -v SEIT=$1 '{ if ( $4 >= SEIT ) print $0}' | awk --field-separator : '{print $1}'
    
    Mit dem 'grep' Teil (bis zum '|' Zeichen )filterst Du alle Zeilen, in dene etwas ueber 'abgelaufen' steht. Mit dem ersten 'awk' Teil (bis zum zweiten '|' Zeichen) filterst Du alle Zeilen raus, bei denen das 4. Zeichen - als Zahl interpretiert - groesser oder gleich dem ersten Parameter Deines Skriptes ist. Mit dem letzten 'awk' Teil filterst Du aus diesen Zeilen das erste Wort bis (ausschliesslich) dem Doppelpunkt, da Du ja nur die user-Namen wolltest.
    Dieses Skript schreibt nach stdout. Moechtest Du die Ausgabe in eine Datei Umleitung, schreibst Du entweder ans Ende der langen Zeile ein ' > ausgabe.txt' oder rufst Dein Skript mit dieser Umleitung auf.
     
  9. #7 van_haakonnen, 05.01.2006
    Zuletzt bearbeitet: 05.01.2006
    van_haakonnen

    van_haakonnen Jungspund

    Dabei seit:
    04.01.2006
    Beiträge:
    11
    Zustimmungen:
    0
    Jawohl - vielen Dank. Funktioniert ohne Probleme :) Also beide Varianten. Ich habe mich jetzt für die von Wolfgang entschieden.

    Hm... ich werde bestimmt noch weiterhin eure Hlfe brauchen. Ich muss nämlich jetzt von dieser erstellen Userliste aus noch weiter machen... aber da muss ich erst selbst verstehen was ich überhaupt machen soll... 8)

    Dankeeeeschön


    --------------------------------

    Okay - es ist soweit. Ich brauche wieder eure HIlfe. Das ganze wird schwieriger...

    Wir haben jetzt also die Ausgabe sämtlicher User in eine Datei. Jetzt brauche ich das ganze noch ein kleinwenig modifiziert...

    Bei den Benutzerkennungen gibt es zwei Arten. Einmal welche die mit y0..... beginnen und andere die einfach mit dem richtigen Namen anfangen. Ich muss diese voneinander trennen und auch in getrennte Dateien ausgeben lassen.

    Dann geht es leider noch schwieriger weiter und ich bin völlig überfordert:

    Ich habe jetzt dann eine weitere Datei popmail. In dieser Datei stehen die User und Ihre Zuordnung zu Servern.
    Ich muss nun aus den Ergebnissen (also den Usern) der zwei Textdateien (einmal für Benutzer mit y0....-Nummern und allen Anderen Namen) Ihre Serverzugehörigkeit herausfinden.

    Der Inhalt der Datei sieht z.B. so aus:
    y0xxxxxxx@server1.firma.de
    y0yyyyyy@server2.firma.de

    Daraus sollen dann für jeden Server am Ende zwei Textdateien erstellt werden mit Benutzern (y-Nummern und normalen Namen) deren Passwort seit X Tagen abgelaufen ist.

    Also habe ich jetzt diese zwei Dateien:
    1) meine AUsgabe mit den Benutzern deren Passwörter abgelaufen sind
    2) die Datei wo die benutzer nochmals vorkommen mit dem passenden Server

    Am Einfachsten wäre es vielleicht wenn man jetzt den servernamen mit dem @server1.firma.de aus der zweiten Datei jeweils an den benutzernamen aus der ersten hängt.

    Dann hätte man gleich alle Benutzer mit abgelaufendem passwort und den dazugehörigen Server.

    Jetzt müsste man die Benutzer auf die einzelnen Server aufteilen. Also Einzelne dateien erstellen (einmal für y-Nummern und einmal für alle anderen Benutzernamen) pro Server. hmhmhm...
     
Thema:

Log Datei auswerten und andes ausgeben

Die Seite wird geladen...

Log Datei auswerten und andes ausgeben - Ähnliche Themen

  1. Logdatei auswerten und neue Logdatei erstellen => Nur bei bestimmtem Wert

    Logdatei auswerten und neue Logdatei erstellen => Nur bei bestimmtem Wert: Hi Leute, ich bin gerade dabei ein Shell-Script zu schreiben um Logdateien auszuwerten und das Ergebnis in eine neue Datei zu schreiben....
  2. Groesse von Dateien auswerten

    Groesse von Dateien auswerten: hallo, habe bitte seit einigen Stunden ein Problem. Mit dem Kommando du -s * kann man alle Verzeichnisse und Dateien des aktuellen Verzeichnis...
  3. User sollen Dateien speichern und ändern, aber nicht neu anlegen dürfen

    User sollen Dateien speichern und ändern, aber nicht neu anlegen dürfen: Hallo liebe Helfer, welche Einstellungen muss ich in der smb.conf bzw. unter Linux vornehmen, damit User vorhandene Dateien öffnen und speichern...
  4. Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...

    Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...: Ich habe eine Textdatei in der ich Einträge bis zum 3. Leerzeichen mit den restlichen Zeilen (auch nur bis 3. Leerzeichen) vergleichen muss und...
  5. Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

    Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen: Hallo, ich habe ein Verzeichnis, darin enthalten sind mehrere Dateien. Nun möchte ich alle Dateien (Parameter $1) gegen eine konstante Datei...