Shell Script zum Anzeigen der zuletzt geänderten Dateien

Donnerstag, 01. August 2013

Spätestens nachdem die erste Webseite gehackt wurde, wünscht man sich ein besseres Frühwarnsystem, falls Dateien auf dem Server verändert wurden. Hier ein kurzes Shell-Script, dass alle geänderten Dateien innerhalb eines bestimmten Zeitraumes (daysBack) anzeigt.

Dabei werden bestimmte temporäre Verzeichnisse nicht beachtet (hier die klassischen Typo3 Cache-Ordner und Dateien)

#!/bin/bash
 
pathFiles="/is/htdocs/wp1173376_J08YWYUG8J/www/"
daysBack=2
 
find ${pathFiles} \( -name "temp_*" -o -path "*typo3temp*" \) -prune -o \( -name "*.js" -o -name "*.php" -o -name "*.html" \) -mtime -${daysBack} -print | while read line
do
	filemtime=`date -d "1970-01-01 + $(stat -c '%Z' $line ) secs" '+%d.%m.%y %X'`
	echo "${results}${filemtime}: ${line/${pathFiles}/}"
done

Das Script kann durch eine Mail-Funktion erweitert werden – allerdings funktioniert “mail” auf Shell-Ebene nur bei bestimmten Server-Konfigurationen (und fast nie bei Shared Hosting Umgebungen).

Eine Idee, automatische E-Mails zu versenden wäre es, den Cron-Job 1x täglich auf eine PHP-Datei zu lenken, das dann das Shell-Script aufruft und bei Rückgabe von geänderten Dateien eine Mail über mail() versendet:

<?php
   $str = shell_exec("perl /pfad/zum/scan/script");
   if ($str) {
      mail('deine@email.de', 'Files modified: '.$_SERVER['SERVER_NAME'], $str, 'From: der@ufpasser.de');
   }
?>

Für Suchmaschinen: Unix geänderte Dateien finden zeigen, Terminal zuletzt geänderte Dateien zeigen, shell find mehrere Suffixe, shell find mehrere Dateitypen, multiple file types, ssh find exclude folders, Ordner bei shell find ausschließen, bestimmte Ordner bei find ignorieren, bestimmte Ordner bei shell script find nicht durchsuchen, Datum der letzten Änderung ausgeben, Dateien filtern.