Archiv der Kategorie: Shell

Linux: Ein bestimmtes Wort in Dateien finden

Das Problem:
Jemand suicht auf seinem Linux-System einige Dateien, die ein bestimmtes Wort enthalten. Es geht also um die Suche nach einem Wort in verschiedenen Dateien auf dem System – nicht um Dateinamen.

Die Lösung:
Da kann mit Bordmitteln gearbeitet werden. Mit grep kommt man da ziemlich schnell ans Ziel:

grep -nrw ‚/Dateipfad/‘ -e „Suchbegriff“

Zur Erklärung:
Was macht „grep“? Hier die Erklärung aus der Ubuntu Manpage:

BESCHREIBUNG

grep sucht in den angegebenen DATEIen (oder der  Standardeingabe, wenn keine  Dateien oder ein einzelner Trenn-/Bindestrich (-) als Dateiname  angegeben  wurde) nach Zeilen, die auf das MUSTER passen. Per Voreinstellung gibt grep die passenden Zeilen aus.

Zu den Parametern:
Ich verwende ’nrw‘, weil ich mir als Eselsbrücke das Bundesland merke 🙂
-n   gibt die Zeilennummer an
-r   (oder auch -R) rekursive Sucht (alle Unterordner werden mit durchsucht)
-w   es muss das ganze Wort gefunden werden

-s   suppress – unterdrückt alle Fehlermeldungen für gescheiterte Dateizugriffe, z:B. wegen fehlender Berechtigungen
Das kann die Ausgabe eventuell sehr viel übersichtlicher machen.

Mit den Optionen ‚-include‘ und ‚-exclude‘ kann man die Suche dann noch verfeinern.

Beispiel:
Ich suche nur *.txt und *.sh Dateien, in denen sich der Autor ‚Bikerpete‘ in den Kommentaren verewigt hat:
grep -include=\*.{txt,sh} -nrw /scripts/ -e „Bikerpete“

Jetzt finde ich im Verzeichnis /scripts alle .txt und .sh files mit dem gesuchten Muster. Sind dann z.B. .h oder .doc Dateien vorhanden, werden diese bei der Ausgabe ignoriert.

Weitere Optionen findet man, wenn man sich die Manpages mit ‚man grep‘ anzeigen läßt.

 

Quelle: Stack Overflow

Linux: Plattenplatz überwachen ohne Nagios/Icinga

Manchmal benötigt man eine Benachrichtigung über den Plattenplatz, ohne ein großes Monitoring Tool wie Nagios/Icinga zur Verfügung zu haben.
Im konkreten Fall war es eine Linux-Appliance, die nach und nach die Systemplatte vollgeschrieben hat.
Leider war hier Icinga nicht nutzbar, da man auf dem System kein snmpd oder die Nagios Clients installieren konnte.

Lösung:
Auf dem Server (Debian) konnte der Konsolen-Mailer „mail“ installiert werden.

  1. Falls nicht schon vorhanden, den ‚mail‘ Konsolenclient installieren
    apt-get install mailutils
  2.  Exim konfigurieren, damit die Mails auch ausserhalb des Systems empfangen werden können:
    dpkg-reconfigure exim4-config
  3. Jetzt benötigen wir noch ein kleines Script:
    vi diskmailer
    Und dann folgenden Text einfügen:

    #!/bin/bash
    CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
    THRESHOLD=90
    
    if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
        mail -s 'Disk Space Alert' mailid@domainname.com << EOF
    Der Plattenplatz deiner root Partition läuft voll. Verwendet: $CURRENT%
    EOF
    fi

    Erklärung:

    Mit CURRENT und TRESHOLD werden zwei Variablen erzeugt, bzw. gesetzt.
    Bevor man das Script einsetzt, kann man die Funktion für die Variable CURRENT überprüfen, in dem man den Befehl in den Klammern in der Shell absetzt:

    df / | grep / | awk '{ print $5}' | sed 's/%//g'

    Dabei sollte jetzt eine ganze Zahl gezeigt werden. Das sind die belegten Prozent der root Partition ‚/‘
    Man kann natürlich auch andere Partitionen so überwachen.
    Mit THRESHOLD gibt man die Warnschwelle an, ab der eine Mail gesendet werden soll. Die Zahl entspricht der belegten Prozent der Partition. Also 90 für eine 90% volle Partition.

    Mit der ‚if‘-Bedingung wird jetzt geprüft, ob die Warnschwelle erreicht wurde:

    if [ "$CURRENT" -gt "$THRESHOLD" ] ; then

    Also wenn der Wert für CURRENT größer ist (-gt) als der Wert für THRESHOLD, dann führe den Mail-Teil aus.
    Der weitere Teil des Scripts ist mehr oder weniger selbsterklärend. Dort wird dann der Betreff (Subject), der Empfänger und der Inhalt der Mail angegeben.

  4. Das Script kann man jetzt z.B. nach /etc/cron.daily legen.
    Nicht vergessen:
    Mit ‚chmod +x‘ ausführbar machen und keine Endung wie ‚.sh‘ in dem Verzeichnis verwenden.
  5. Alternativ kann man das Script auch woanders ablegen und als cronjob laufen lassen.

Hoffe es hilft …

Script-Quelle: linuxjournal