Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Languages
 С
 GNU С Library 
 Qt 
 STL 
 Threads 
 C++ 
 Samples 
 stanford.edu 
 ANSI C
 Libs
 LD
 Socket
 Pusher
 Pipes
 Encryption
 Plugin
 Inter-Process
 Errors
 Deep C Secrets
 C + UNIX
 Linked Lists / Trees
 Asm
 Perl
 Python
 Shell
 Erlang
 Go
 Rust
NEWS
Последние статьи :
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
  SQL 30.07   
  JFS 10.06   
  B-trees 01.06   
 
TOP 20
 P.Collins...1335 
 Steve Pate 1...751 
 QT->Qt3...362 
 Trees...355 
 Python...320 
 Steve Pate 3...287 
 TCP 2...267 
 Rodriguez 6...251 
 Максвелл 3...249 
 Daniel Bovet 4...246 
 Linux Inline Assembly...244 
 MySQL & PosgreSQL...242 
 TCP 3...241 
 Rubni-Corbet -> Глав...237 
 Rodriguez 2...230 
 Mod_perl 2...229 
 Robert Love 2...229 
 UML 3...223 
 C++ Templates 4...222 
 Стивенс 9...218 
 
  01.05.2017 : 2190164 посещений 

iakovlev.org

Shell Мониторинг

 
  Вначале несколько слов о команде find :
 Формат команды: find <список поиска> <выражение>
 
      Find рекурсивно просматривает директории для каждого  эле-
 мента списка поиска, отыскивая файлы, удовлетворяющие  логичес-
 кому <выражению>, записанному с помощью приведенных ниже прими-
 тивов. В их описаниях n используется как целое десятичное  чис-
 ло, +n означает больше, чем n, -n - меньше, чем n.
 
 -name <файл>    истина, если текущий файл удовлетворяет шаблону
                 <файл>
 -perm onum      истина, если код защиты файла в точности  равен
                 onum (см. chmod)
 -type c         истина, если тип файла c, где c - b, c,  d,  p,
                 или f - блок- или символьноориентированный спе-
                 циальный файл,  директория,  канал  (pipe)  или
                 обычный файл
 -links n        истина, если файл имеет n связей
 -user uname     истина, если UID файла совпадает с uname
 -group gname    истина, если GID файла совпадает с gname
 -size n[c]      истина, если файл занимает  n  блоков  (по  512
                 байт). Если указана буква c,  то  размер  файла
                 задается в символах
 -atime n        истина, если файл не читался в последние n дней
 -mtime n        истина, если файл не модифицировался в  послед-
                 ние n дней
 -ctime n        истина, если права доступа к файлу не  менялись
                 в последние n дней
 -exec cmd       истина, если после выполнения команды cmd возв-
                 ращается нулевой код возврата. Cmd может закан-
                 чиваться точкой с запятой, которая должна  быть
                 экранирована. Аргумент  команды  {}  заменяется
                 именем текущего файла
 -ok cmd         то же, что и exec, за исключением того, что
                 перед выполнением cmd запрашивается подтвержде-
                 ние и cmd выполняется только при ответе y
 -print          всегда истина; выводит имя файла
 (выражение)     истина, если истинно заключенное в скобки выра-
                 жение (скобки должны быть экранированы)
 
      Примитивы могут комбинироваться с помощью следующих опера-
 ций (в порядке уменьшения приоритета):
 
 1) Отрицание (! - унарная операция NOT)
 2) Конкатенация (операция AND, обозначается пробелом)
 3) Выбор (-о - операция OR)
 
      Пример. Удалить все файлы с именами a.out или *.o, которые
 не открывались в течение недели:
 
 find / \( -name a.out -o -name '*.o' \) -atime +7 -exec rm {} \;
 
 
 
 
 
 
  Следующий скрипт выполняет следующие действия :
   1. Проверяет изменения в системных файлах
         /etc/passwd 
         /etc/shadow 
         /etc/group
   2. Проверяет , какие файлы были изменены в последнее время в каталоге
         /etc
   3. Выводит статистику о смонтированных файловых системах .	
   4. Выводит сетевую информацию .
 
  Скрипт запускается в каталоге /0 .  
 
 #!/bin/sh
 
 PATH=/bin:/usr/bin:/sbin:/usr/sbin
 LC_ALL=C; export LC_ALL
 LANG=C; export LANG
 
 umask 077
 
 
 N_weekday=`date +"%w"`
 DATE=`date +"%d/%m/%Y %H:%M"`
 bak=/0
 
 TMPDIR=/0
 
 TMPMAIL=/0/reports
 
 CONFIGDIRS="/etc/"
 
 echo "" >$TMPMAIL
 
 echo "Checking passwd:" >>$TMPMAIL
 if [ ! -f $bak/passwd.bak ] ; then
 	echo "no $bak/passwd.bak" >>$TMPMAIL
 	cp -p /etc/passwd $bak/passwd.bak 2>&1 >>$TMPMAIL
 fi
 if cmp -s /0/passwd.bak /etc/passwd; then :; else
 	echo "$host passwd diffs:" >>$TMPMAIL
 	diff    /0/passwd.bak /etc/passwd |\
 	sed 's/^\([<>] [^:]*\):[^:]*:/\1:(password):/' >>$TMPMAIL
 	mv $bak/passwd.bak $bak/passwd.bak2 2>&1 >>$TMPMAIL
 	cp -p /etc/passwd $bak/passwd.bak 2>&1 >>$TMPMAIL
 fi
 
 echo "done" >>$TMPMAIL
 
 echo "Checking shadow:" >>$TMPMAIL
 # Shadow
 if [ ! -f $bak/shadow.bak ] ; then
 	echo "no $bak/shadow.bak" >>$TMPMAIL
 	cp -p /etc/shadow $bak/shadow.bak 2>&1 >>$TMPMAIL
 fi
 if cmp -s $bak/shadow.bak /etc/shadow; then :; else
 	echo "$host shadow diffs:" >>$TMPMAIL
 	diff    $bak/shadow.bak /etc/shadow |\
 	sed 's/^\([<>] [^:]*\):[^:]*:/\1:(password):/' >>$TMPMAIL
 	mv $bak/shadow.bak $bak/shadow.bak2 2>&1 >>$TMPMAIL
 	cp -p /etc/shadow $bak/shadow.bak 2>&1 >>$TMPMAIL
 fi
 echo "done" >>$TMPMAIL
 
 echo "Checking group:" >>$TMPMAIL
 # Groups
 if [ ! -f $bak/group.bak ] ; then
 	echo "no $bak/group.bak" >>$TMPMAIL
 	cp -p /etc/group $bak/group.bak 2>&1 >>$TMPMAIL
 fi
 if cmp -s $bak/group.bak /etc/group; then :; else
 	echo "$host group diffs:" >>$TMPMAIL
 	diff -u $bak/group.bak /etc/group >>$TMPMAIL
 	mv $bak/group.bak $bak/group.bak2 2>&1 >>$TMPMAIL
 	cp -p /etc/group $bak/group.bak 2>&1 >>$TMPMAIL
 fi
 echo "done" >>$TMPMAIL
 
 echo "Checking tcpwrapper config files:" >>$TMPMAIL
 for i in hosts.deny hosts.allow ; do
     if [ -f /etc/$i ] ; then 
 	if [ ! -f $bak/$i.bak ] ; then
 	    echo "no $bak/$i.bak" >>$TMPMAIL
 	    cp -p /etc/$i $bak/$i.bak 2>&1 >>$TMPMAIL
 	fi
 	if cmp -s $bak/$i.bak /etc/$i; then :; else
 	    echo "$host $i diffs:" >>$TMPMAIL
 	    diff -u $bak/$i.bak /etc/$i >>$TMPMAIL
 	    mv $bak/$i.bak $bak/$i.bak2 2>&1 >>$TMPMAIL
 	    cp -p /etc/$i $bak/$i.bak 2>&1 >>$TMPMAIL
 	fi
     fi
 done
 echo "done" >>$TMPMAIL
 
 
 find $CONFIGDIRS -mtime -1 -type f -print > $TMPDIR/change.$N_weekday.lst
 CHLIST=`cat $TMPDIR/change.$N_weekday.lst`
 if [ -n "$CHLIST" ]; then  
 tar cvfz $BACKUPDIR/$HOSTNAME.$N_weekday $CHLIST >/dev/null 2>/dev/null
 cat $TMPDIR/change.$N_weekday.lst >> $TMPMAIL
 fi
 if [ "$N_weekday" = "$CONFARCDAY" ]; then
 rm -f $BACKUPDIR/$HOSTNAME >/dev/null 2>/dev/null
 tar cvfz $BACKUPDIR/$HOSTNAME $CONFIGDIRS >/dev/null 2>/dev/null
 fi
 
 
 echo "" >>$TMPMAIL
 echo "" >>$TMPMAIL
 echo "Checking subsystem status:" >>$TMPMAIL
 echo "" >>$TMPMAIL
 echo "disks:" >>$TMPMAIL
 df -k -l >>$TMPMAIL
 echo "" >>$TMPMAIL
 echo "mail:" >>$TMPMAIL
 
 
 echo "" >>$TMPMAIL
 echo "network:" >>$TMPMAIL
 if [ -x /sbin/ip ]; then
     /sbin/ip -s link >>$TMPMAIL
 else 
     netstat -ni >>$TMPMAIL
 fi
 
 
 if [ -d /var/spool/rwho ]; then
     if [ -n "`ls -1 /var/spool/rwho/`" ] ; then
 	A="`ruptime -t`"
 	if [ -n "$A" ]; then 
 	    echo "" >>$TMPMAIL
 	    echo "hosts uptimes:" >>$TMPMAIL
 	    echo "$A"  >>$TMPMAIL
 	fi
     fi
 fi
 
 
  	
 
 
 
Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье
Влад
  немогу понять эту грофу. find $CONFIGDIRS -mtime -1 -type f -print > $TMPDIRchange.$N_weekday.lst
2006-05-10 20:06:53
Яковлев Се�
  find - ищем файлы в каталоге etc

2 параметра команды find :
-mtime -1    -  модифицированные в течение последнего дня
-type f         - ищем обычные файлы

Куда выводим результата - в файл :
-print > $TMPDIRchange.$N_weekday.lst    - результат выводим в файл change.3.lst ,
который лежит в каталоге 0
2006-05-10 22:50:57