Полезные скрипты наструганные на коленке.

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Alex Keda
стреляли...
Сообщения: 34924
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение Alex Keda » 2009-09-17 20:16:47

тупой почтовый робот, на шелле.
задача - каждый месяц нам присылают журнал, по электронной почте - zip архив с набором html страничек этого журнала.
ну, секретари его перекидывают админам, мы его разархивируем и кладём в директорию внутреннего веб-сервера...
кому надо - ходят и смотрят.
[классический секс] =)
написали робота. подбирает файл письма, достаёт из него аттачи, пытается их раззиповать в заданную директорию.
при работе страшно ругается, но все ошибки обрабатывает корректно, если аттачментов много - тоже работает корректно.

Код: Выделить всё

jabber$ cat /root/scripts/expert.sh
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

file="/tmp/file.eml"
tmp="/tmp/$$"
dst_dir="/shares/sites/jabber/data/expert/"

# test ock file
test -f $file.lock && exit 64;

# file exists?
test -f $file || exit 32;

# move file
mv $file $file.$$
file=$file.$$


mkdir $tmp
length="`wc -l $file | awk '{print $1}'`"


cd $tmp
grep "Content-Transfer-Encoding: base64" -n $file | awk -F ':' '{print $1}' |
{
while read line
do
        mkdir -p $tmp
        #echo $line
        cd $tmp
        # дёргаем файл от надписи 'Content-Transfer-Encoding: base64' до конца
        cat $file | tail -`expr $length - $line` > $line.txt
        # ищщем номер превой пустой строки
        first_empty=`grep -n ^\$ $line.txt | head -1 | awk -F ':' '{print $1}'`
        # достаём содержимое файла от первой пустой до конца - начало файла
        # c куском письма теперь будет начало приаттаченного файла файла
        cat $line.txt | tail -`expr $length - $first_empty` > $line.1.txt
        # ищщем пустую строку - теперь это конец файла
        first_empty=`grep -n ^\$ $line.txt | head -1 | awk -F ':' '{print $1}'`
        # считаем дллинну файла - она изменилась
        length_new="`wc -l $line.1.txt | awk '{print $1}'`"
        # достаём файл - обрубаем по найденной позиции пустой строки
        cat $line.1.txt | tail -`expr $length_new - $first_empty` > $line.zip.b64
        # декодируем файл
        b64decode -r $line.zip.b64 > $line.zip

        cd $dst_dir && unzip -o $tmp/$line.zip

        rm -rf $tmp

done
}



rm -rf $tmp

rm $file

jabber$   

письмо туда попадает так:

Код: Выделить всё

jabber$ grep expert /etc/aliases
expert:         /tmp/file.eml
jabber$ 

когда экзим пишет письмо - там присутствует lock файл. в эти моменты скрипт работать не будет.
работает медленно, поэтому файл переименовывается,чтобы не мешаться, так что пока один экземпляр работает можно ещё сыпать и сыпать файлов.
ну, письма, разумеется срезали на входе по отправителю получателю и копии всех валим на робота.
ему пофигу чё там внутри - всё раззипует и сложит =)))
Убей их всех! Бог потом рассортирует...

Z@Zmaster
проходил мимо
Сообщения: 4
Зарегистрирован: 2007-08-14 16:03:04

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение Z@Zmaster » 2009-09-24 9:13:41

Небольшой скрипт для сбора статистики с моего минихостинга. Настругал только что.
Используется AWstats

Код: Выделить всё

#!/bin/sh

www_user_dir="/var/www"
dirs=`ls $www_user_dir`

for dir in $dirs
do
        domains=`ls $www_user_dir/$dir/public_html`
        for domain in $domains
        do
                if ! test -f /usr/local/etc/awstats/awstats.${domain}.conf
                then
                        echo "No config file for $domain. Make new config file!"
                        sed -e "s/D_O_M_A_I_N/$domain/" /usr/local/etc/awstats/awstats.conf.default > /usr/local/etc/awstats/awstats.${domain}.conf.1
                        sed -e "s/L_O_G/\/var\/www\/$dir\/logs\/$domain-access.log/" /usr/local/etc/awstats/awstats.${domain}.conf.1 > /usr/local/etc/awstats/awstats.${domain}.conf
                        rm /usr/local/etc/awstats/awstats.${domain}.conf.1
                fi
                if ! test -d /usr/local/www/stats/${domain}
                then
                        echo "No stats dir for domain ${domain}. Make this dir!"
                        mkdir /usr/local/www/stats/${domain}
                fi
                /usr/bin/perl /usr/local/www/awstats/tools/awstats_buildstaticpages.pl -config="${domain}" -lang=ru -dir=/usr/local/www/stats/${domain} -awstatsprog=/usr/local/www/awstats/cgi-bin/awstats.pl -dir=/usr/local/www/stats/${domain}
                cp /usr/local/www/stats/${domain}/awstats.${domain}.html /usr/local/www/stats/${domain}/index.html
        done
done

и создаём /usr/local/www/stats/index.php

Код: Выделить всё

<?php

$ls = scandir("./");
#print_r(scandir("./"));

for ( $i = 2; $i <= count($ls); $i++ ) {
        if ( !preg_match("/.php/i", $ls[$i]) ) {
                echo '<a href="'.$ls[$i].'/index.html">'.$ls[$i].'</a><br>';
        }
}

?>



Фал /usr/local/etc/awstats/awstats.conf.default это дефолтовый конфик у которого переменные LogFile="L_O_G" и SiteDomain="D_O_M_A_I_N" HostAliases="www.D_O_M_A_I_N".
Вся статистика льётся в /usr/local/www/stats/имядомена
Структура хостинга /var/www/username/{public_html,logs} в public_html лежат директории по имени домена.
Потом просто подключаю алиасом /usr/local/www/stats/ к любому домену

reLax
лейтенант
Сообщения: 638
Зарегистрирован: 2007-04-08 5:50:16

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение reLax » 2009-10-11 10:07:01

Более-менее доделал небольшой скрипт бэкапа с 6-и серверов посредством RAR (индусский код http://lurkmore.ru/%D0%98%D0%BD%D0%B4%D1%83%D1%81).

Код: Выделить всё

#!/bin/sh

ARCH="/usr/local/bin/rar"
RPATH="/usr/local/bin/rsync"
FLAGS="--owner \
       --group \
       --perms \
       --links \
       --update \
       --recursive \
       --delete-after \
       --compress-level=4 \
       --compress \
       --password-file=/usr/local/etc/rsync.passwd \
       --block-size=8192 \
       --timeout=600 \
       --quiet"

USER="rsync"
PORT_OS=874
PORT_NB=875
PORT_BI=876
PORT_DS=877
PORT_KP=878
PORT_MD=879


case "$1" in
     I) PREFIX_DIR="/crypto/RSYNC/INCREMENTAL/SERVERS";;
     D) PREFIX_DIR="/crypto/RSYNC/DIFFERENTIAL/SERVERS"
        I_PREFIX_DIR="/crypto/RSYNC/INCREMENTAL/SERVERS";;
     *) exit 1;;
esac


DEST_OS_1=$PREFIX_DIR/OS/CDOCS
SRC_OS_1="crypto"
DEST_OS_2=$PREFIX_DIR/OS/CDOCS2
SRC_OS_2="crypto2"
DEST_OS_3=$PREFIX_DIR/OS/KDOCS
SRC_OS_3="constructors"
DEST_OS_4=$PREFIX_DIR/OS/LETC
SRC_OS_4="l_etc"
DEST_OS_5=$PREFIX_DIR/OS/ETC
SRC_OS_5="etc"
DEST_OS_6=$PREFIX_DIR/OS/HOME
SRC_OS_6="home"

DEST_NB_1=$PREFIX_DIR/NB/SPRUT
SRC_NB_1="sprut"
DEST_NB_2=$PREFIX_DIR/NB/ARCH
SRC_NB_2="archive"
DEST_NB_3=$PREFIX_DIR/NB/0DAY
SRC_NB_3="0day"

DEST_MD_1=$PREFIX_DIR/MD/1C
SRC_MD_1="1C"
DEST_MD_2=$PREFIX_DIR/MD/1CA
SRC_MD_2="1CA"
DEST_MD_3=$PREFIX_DIR/MD/ACBP
SRC_MD_3="ACBP"

DEST_BI_1=$PREFIX_DIR/BI/EXIM
SRC_BI_1="exim"
DEST_BI_2=$PREFIX_DIR/BI/LETC
SRC_BI_2="l_etc"
DEST_BI_3=$PREFIX_DIR/BI/ETC
SRC_BI_3="etc"
DEST_BI_4=$PREFIX_DIR/BI/HTTPD_JAIL_LETC
SRC_BI_4="httpd_jail_l_etc"
DEST_BI_5=$PREFIX_DIR/BI/HTTPD_JAIL_WWW
SRC_BI_5="httpd_jail_www"
DEST_BI_6=$PREFIX_DIR/BI/BIND_JAIL_CHROOT
SRC_BI_6="bind_jail_chroot"

DEST_DS_1=$PREFIX_DIR/DS/LETC
SRC_DS_1="l_etc"
DEST_DS_2=$PREFIX_DIR/DS/ETC
SRC_DS_2="etc"
DEST_DS_3=$PREFIX_DIR/DS/HOME
SRC_DS_3="home"
DEST_DS_4=$PREFIX_DIR/DS/HTTPD_JAIL_WWW
SRC_DS_4="httpd_jail_www"
DEST_DS_5=$PREFIX_DIR/DS/HTTPD_JAIL_LETC
SRC_DS_5="httpd_jail_letc"

SMALL_SRCS="MD_3"

EXCLUDE_BI_6="random"
EXCLUDE_DS_3="distfiles/***"
EXCLUDE_BI_1="blackhole@velko.ru/***"

ARR_SRV="OS BI DS MD NB"
W_SRV="MD NB"

####################################
### SERVERS RSYNC MODULES BACKUP ###
####################################

fbackup() {

for F_ARGS in $*
    do
        case $F_ARGS in
$1) TYPE=$1

    if   [ "$TYPE" = "D" ]
    then
         LDIR=$(date +%d.%m.%Y)
    elif [ "$TYPE" = "I" ]
    then
          LDIR=LASTDAY
    else
         exit 1;
    fi

         continue
    ;;
$2) if [ "$2" = "ALL" ]
    then
       SRV=$ARR_SRV
    else
       SRV=$2
    fi

    continue
    ;;
$3) if   [ "$TYPE" = "D" ] && [ `expr $3 : '.*'` -ge 2 ]
    then
         WDEL=`echo $3 | sed -e 's/^.\{1\}//'`
    elif [ "$TYPE" = "I" ] && [ "$3" = "N" ]
    then :
    else
         exit 1
    fi

    continue
    ;;
$4) if  [ $4 -eq 0 ]
    then
        ARR="1 2 3 4 5 6 7 8 9"
    else
        ARR=`echo $4 | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\)/\1 \2/;ta'`
    fi

        for SLINE in $SRV
            do
            eval PORT=\$PORT_${SLINE}

        for LINE in $ARR
            do
            eval SRC=\$SRC_${SLINE}_${LINE}
            eval DEST=\$DEST_${SLINE}_${LINE}
            eval EXCLUDE=\$EXCLUDE_${SLINE}_${LINE}

                if  [ -z "$SRC"   ] || [ -z "$DEST"  ] || \
                    [ -z "$PORT"  ] || [ -z "$FLAGS" ]
                then
                    continue
                fi

            if  [ ! -d $DEST/$LDIR ]
            then
                mkdir -p $DEST/$LDIR
            fi

            NDEST=$(echo $DEST | sed -e "s/$(echo $PREFIX_DIR | sed -e 's/\//\\\//g')/$(echo $I_PREFIX_DIR | sed -e 's/\//\\\//g')/g")
            if [ "$TYPE" = "D" ] && [ -z $5 ]
               then
               cp -Rn $NDEST/LASTDAY/ $DEST/$LDIR
               RSYNCDESTDIR=$DEST/$LDIR
               EXTRARARATTR="-dw"
               cd $DEST
               ARCHSRC=$LDIR
            elif [ "$TYPE" = "D" ] && [ $5 = "WITHOUT_CP" ]
               then
               RSYNCDESTDIR=$NDEST/LASTDAY
               cd $NDEST
               ARCHSRC=LASTDAY
            else :
            fi

            RCOM=$($RPATH $FLAGS --exclude=$EXCLUDE --port=$PORT $USER\@localhost::$SRC $RSYNCDESTDIR 2>&1)
            $RCOM
            RCOM_CODE=$?

                for i in 1 2 3
                    do

                        if [ "$RCOM_CODE" -ne 0 ]
                        then
                           sleep 300
                           $RCOM
                        else
                        continue
                        fi

                done

                if  [ "$TYPE" = "D" ] && [ "$RCOM_CODE" -eq 0 ]
                then
                    find $DEST -type f -name '*.rar' -mtime +$WDEL -exec rm -rf {} \;
                    find $DEST -type d -mtime +$WDEL -depth 1 -exec rm -rf {} \;
                    TMPFILE=TMP_$(head -n1 /dev/urandom | od -tx | sed -e 's/.* //;q').txt
                    find $DEST/$LDIR -type f -print > /tmp/$TMPFILE
                    sed -ie "s/$(echo $DEST | sed -e 's/\//\\\//g')\///g" /tmp/$TMPFILE

                        if [ -f ${SLINE}_${SRC}_${LDIR}.rar ]
                        then
                           rm ${SLINE}_${SRC}_${LDIR}.rar
                        fi

                    for SFILES in $SMALL_SRCS
                        do

                            if  [ "${SRV}_${LINE}" = "$SFILES" ]
                            then
                                TFLAG=1
                            else
                                TFLAG=0
                            fi

                    done

                        if  [ $TFLAG -ne 1 ]
                        then
                            $ARCH a -ow -rr5p -ao -m4 -r -tk -inul $EXTRARARATTR $DEST/${SLINE}_${SRC}_${LDIR}.rar $ARCHSRC
                        else
                            while read TLINE
                                do
                                $ARCH a -ow -rr5p -ao -m4 -r -tk -inul ${SLINE}_${SRC}_${LDIR}.rar "$TLINE"
                                rm "$TLINE"
                            done < /tmp/$TMPFILE
                        fi

                    find $DEST -type d ! -regex './[0-9\.]' -depth 1 -exec rm -rf {} \;
                    rm /tmp/$TMPFILE
                    $ARCH t -inul  $DEST/${SLINE}_${SRC}_${LDIR}.rar

                    if  [ "$?" -gt 0 ]
                    then
                        echo "W A R N I N G: RAR exited with code $?"
                    fi
                fi
            done
        done
    ;;
$*) exit 0
    ;;
    esac
done
exit 0
}

fbackup $1 $2 $3 $4 $5



Юзаю в кроне, команды типа:

Код: Выделить всё

[11:05 root@crypto /home/alex]# crontab -l
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
HOME=/var/log
#
#minute hour    mday    month   wday            who     command
##
0       19      *       *       1,2,3,4,5       /usr/local/sbin/rsync-bp.sh I ALL N 0                2>&1
0       1       *       *       3,5             /usr/local/sbin/rsync-bp.sh D OS D7  1               2>&1
0       11      *       *       3,5             /usr/local/sbin/rsync-bp.sh D OS D7  2               2>&1
0       1       *       *       2               /usr/local/sbin/rsync-bp.sh D OS D2  3   WITHOUT_CP  2>&1
0       5       *       *       1,4             /usr/local/sbin/rsync-bp.sh D BI D7  1   WITHOUT_CP  2>&1
30      1       *       *       1               /usr/local/sbin/rsync-bp.sh D MD D14 3   WITHOUT_CP  2>&1
0       3       *       *       *               /usr/local/sbin/rsync-bp.sh D MD D7  1               2>&1
0       1       *       *       6               /usr/local/sbin/rsync-bp.sh D NB D7  123 WITHOUT_CP  2>&1


########################################################################

15      0       *       *       1,2,3,4,5,6,7   /usr/local/sbin/rsync-bp.sh D BI D10 23456           2>&1
30      0       *       *       1,3,5,7         /usr/local/sbin/rsync-bp.sh D MD D5  2               2>&1
0      15       *       *       1,2,3,4,5,6,7   /usr/local/sbin/rsync-bp.sh D DS D10 12345           2>&1
0       0       *       *       1,2,3,4,5,6,7   /usr/local/sbin/mysql-bp.sh   BI D14                 2>&1
0       2       *       *       1,2,3,4,5,6,7   /usr/local/sbin/rsync-bp.sh D OS D10 456             2>&1

В шелле я не силен, так что тапками особо не закидывайте :smile:
Последний раз редактировалось reLax 2009-11-20 21:31:01, всего редактировалось 2 раза.

kenny
мл. сержант
Сообщения: 78
Зарегистрирован: 2008-11-21 15:13:53
Откуда: Москва
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение kenny » 2009-10-16 13:04:28

Код: Выделить всё

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Е2-Е4 Мимо...."

Хороший скрипт, может кому пригодится :-D

Аватара пользователя
serge
майор
Сообщения: 2131
Зарегистрирован: 2006-07-30 15:34:14
Откуда: Саратов
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение serge » 2009-10-16 13:10:47

kenny писал(а):

Код: Выделить всё

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Е2-Е4 Мимо...."

Хороший скрипт, может кому пригодится :-D

Сам то его пробовал ? 8)

kenny
мл. сержант
Сообщения: 78
Зарегистрирован: 2008-11-21 15:13:53
Откуда: Москва
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение kenny » 2009-10-16 13:48:57

.На виртуалке:) игрался, на реальном шосте не делал :-D Изображение

rainy
мл. сержант
Сообщения: 76
Зарегистрирован: 2008-02-01 23:26:45

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение rainy » 2009-10-16 18:41:55

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Е2-Е4 Мимо...."


LOR сюда теперь переедет? со всеми его "полезными скриптами"
есть же тема "приколы"

Аватара пользователя
FenX
ст. прапорщик
Сообщения: 513
Зарегистрирован: 2008-04-23 17:46:53
Откуда: Moscow
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение FenX » 2009-10-16 21:00:57

kenny писал(а):

Код: Выделить всё

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Е2-Е4 Мимо...."

Хороший скрипт, может кому пригодится :-D

на фре rm -rf /* не работает, сотню раз обсуждали.

rainy
мл. сержант
Сообщения: 76
Зарегистрирован: 2008-02-01 23:26:45

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение rainy » 2009-10-16 22:31:25

на фре rm -rf /* не работает, сотню раз обсуждали

я бы не был так уверен :smile:

Код: Выделить всё

# id
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)
# uname
FreeBSD
# mkdir /tmp/test; cp -r /bin /lib /libexec /tmp/test/
# chroot /tmp/test/
csh: Cannot open /etc/termcap.
csh: using dumb terminal settings.
%ls /
bin     lib     libexec
%rm -rf /*
%ls /
ls: Command not found.
%exit
exit
# ls -la /tmp/test/
total 6
drwxr-xr-x   2 root  wheel   512 Oct 16 23:29 .
drwxrwxrwt  29 root  wheel  3072 Oct 16 23:23 ..



Аватара пользователя
Alex Keda
стреляли...
Сообщения: 34924
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение Alex Keda » 2009-10-17 11:25:46

без звёздочки работает тока на линухе
Убей их всех! Бог потом рассортирует...

reLax
лейтенант
Сообщения: 638
Зарегистрирован: 2007-04-08 5:50:16

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение reLax » 2009-10-18 9:12:20

Код: Выделить всё

[10:18 root@darkstar /home/alex]# rm -rf /
rm: "/" may not be removed

rainy
мл. сержант
Сообщения: 76
Зарегистрирован: 2008-02-01 23:26:45

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение rainy » 2009-10-18 9:43:20

без звёздочки работает тока на линухе

предлагается скрипт со звездочкой, поэтому в фре он тоже будет "полезен" :smile:

Аватара пользователя
Syward
мл. сержант
Сообщения: 81
Зарегистрирован: 2008-07-06 22:27:33
Откуда: Mytischi
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение Syward » 2009-11-11 14:12:52

Код: Выделить всё

#!/bin/sh

#текущая дата в формате гг-мм-дд
DATE=`date "+%Y-%m-%d"`

#Название файла на выхлопе
DSTFILE="$1.${DATE}.tar.gz"

#директория, откуда берем папку с бекапом
SOURCE_PATH="/path/to/files"

#временная папка для бекапа (должна существовать)
BACKUP_PATH="/path/to/files"

#папка для дампа базы (должна существовать)
DIR="/path/to/sqldumpfiles"

#Логин и пароль для mysql
SQLUSER="sqluser"
SQLPASS="sqlpass"

#Логин и пароль для ftp
FTPUSER="ftpuser"
FTPPASS="ftppass"
###########################################
SQLQUERY="/usr/local/bin/mysqldump --user=${SQLUSER} --password=${SQLPASS}"
#Дампим базу во временную папку
${SQLQUERY} $2  > ${DIR}/$2.sql

#Тарим нужные директории во временную папку. Тут можно цикл привернуть и список директорий объявить выше...
tar -cpzf ${BACKUP_PATH}/${DSTFILE} \
          ${SOURCE_PATH}/$1/data \
          ${SOURCE_PATH}/$1/cgi-bin \
          ${SOURCE_PATH}/$1/bin \
          ${SOURCE_PATH}/$1/var \
          ${SOURCE_PATH}/$1/tmp \
          ${SOURCE_PATH}/$1/log \
          $DIR/$2.sql
#Сливаем получившийся архив на фтп
ftp -u ftp://${FTPUSER}:${FTPPASS}@backup.domain.net/www-backup/${DSTFILE} ${BACKUP_PATH}/${DSTFILE}

#Убиваем временные файлы
/bin/rm ${BACKUP_PATH}/${DSTFILE}
/bin/rm ${DIR}/$2.sql

проходит у меня по крону раз в сутки, сливает на бекап виртуалхосты
запускается:

Код: Выделить всё

./backup virtualhost database
Существует рoвнo oдин интуитивнo пoнятный интерфейс - сoска. Все остальные oсваиваются путем oбучения или методом тыка...©

Аватара пользователя
azzz
мл. сержант
Сообщения: 72
Зарегистрирован: 2007-05-10 9:01:30
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение azzz » 2009-12-25 15:48:42

Cancer писал(а):Скрипт для перезагрузки модема =) понадобился так как Провайдер мать его ЮТК в 1-40 ночи ребутит циски свои и модем не подхватывает бывает IP. Прошивки не помогли пришлось делать все подручными средствами =)

Проверял на D-link 2500UBRUD / D-link 500T

Нужен пакет из портов

Код: Выделить всё

/usr/ports/lang/expect


Код: Выделить всё

#!/usr/local/bin/expect

spawn telnet 192.168.1.1
expect "Login:"
send "admin\r"
expect "Password:"
send "ПАРОЛЬ\r"
expect ">"

send "reboot\r"
sleep 30
expect eof


Модем D-link 2500 я ребутаю так :)

Код: Выделить всё

#!/bin/sh
wget -q http://192.168.1.1/rebootinfo.cgi

detx
сержант
Сообщения: 245
Зарегистрирован: 2009-02-24 11:12:57
Откуда: Нижний Новгород

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение detx » 2009-12-25 15:56:32

Может сделать поинтересней, проверять на наличие связи, а потом перезагружать. Засунуть в крон и запускать ка каждые 5 минут. Так намного интересней будет.

Аватара пользователя
tray.irk
сержант
Сообщения: 266
Зарегистрирован: 2008-10-22 8:21:36
Откуда: Иркутск
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение tray.irk » 2009-12-26 7:24:55

не судите строго )) простой скриптик для добавления юзверя в Asterisk ))) и присваиваения ему номера ... скрипт написан на коленке и не совсем идеален :)

Код: Выделить всё

echo 'Enter name user:'
read name
echo 'Enter number for user:'
read number
echo 'Enter password for user:'
read pass
echo '['$number']' >> /usr/local/etc/asterisk/sip.conf
echo 'type=friend' >> /usr/local/etc/asterisk/sip.conf
echo 'host=dynamic' >> /usr/local/etc/asterisk/sip.conf
echo 'username='$number >> /usr/local/etc/asterisk/sip.conf
echo 'secret='$pass >> /usr/local/etc/asterisk/sip.conf
echo 'nat=no' >> /usr/local/etc/asterisk/sip.conf
echo 'canreinvite=no' >> /usr/local/etc/asterisk/sip.conf
echo 'context=home' >> /usr/local/etc/asterisk/sip.conf
echo 'callerid='$name '<'$number'>' >> /usr/local/etc/asterisk/sip.conf
echo 'allow=gsm' >> /usr/local/etc/asterisk/sip.conf
echo 'allow=ulaw' >> /usr/local/etc/asterisk/sip.conf
echo 'allow=alaw' >> /usr/local/etc/asterisk/sip.conf
echo '' >> /usr/local/etc/asterisk/sip.conf

echo 'Write in sip.conf >> OK'

echo 'exten => '$number',1, Dial(SIP/'$number',40)' >> /usr/local/etc/asterisk/extensions.conf
echo 'exten => '$number',2, Playback(vm-nobodyavail) >> /usr/local/etc/asterisk/extensions.conf
echo 'exten => '$number',3, Hangup >> /usr/local/etc/asterisk/extensions.conf
echo '' >> /usr/local/etc/asterisk/extensions.conf

# дабавляем номер в список, что бы потом посмотреть из веб морды :)

echo 'name user: '$name >> /usr/local/www/apache22/data/tel.html
echo 'number user: '$number >> /usr/local/www/apache22/data/tel.html
echo 'password user: '$pass >> /usr/local/www/apache22/data/tel.html
echo '----------------------------------------------------------------' >> /usr/local/www/apache22/data/tel.html

echo ''
echo ''
echo ''
echo ''
echo 'config for X-Lite:'
echo 'username: '$number
echo 'password: '$pass
Числа не управляют миром, но могут показать как управляется мир

Аватара пользователя
Cancer
Гл. Кастратор
Сообщения: 1269
Зарегистрирован: 2008-03-25 12:21:36
Откуда: г. Ростов-на-Дону
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение Cancer » 2010-02-18 15:01:22

Простенький скрипт, Мониторинг устройств в сети
Пингует сетевые интерфейсы,
если интерфейс не пингуется отправляет сообщение по Джабберу
Заметьте что если интерфейс не пингуется, то скрипт
отправит сообщение 1раз, и добавит в файл флаг down и последующие разы не будет присылать уведомления
пока не начнет пинговать и добавит в файл флаг up.

Установлен sendxmpp http://www.lissyara.su/articles/freebsd ... /sendxmpp/


Код: Выделить всё

#!/bin/sh
ping="/sbin/ping"
sendxmpp="/usr/local/bin/sendxmpp"
echo="/bin/echo"
log_dir="/var/log"


pdc="Контроллер домена PDC не работает!"
wifi1_sklad="Точка доступа 1 на Складе с IP 192.168.xx.201 не работает!"
wifi2_sklad="Точка доступа 2 на Складе с IP 192.168.xx.202 не работает!"
wifi3_sklad="Точка доступа 3 на Складе с IP 192.168.xx.203 не работает!"

# PDC
$ping -q -c 4 192.168.xx.1 > /dev/null 2>&1
if [ $? != 0 ]; then
cat $log_dir/pdc.log | grep down > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $pdc | $sendxmpp admin@office.jabber.ru -f /root/.sendxmpprc
echo down > $log_dir/pdc.log
fi
else
echo up > $log_dir/pdc.log
fi

# wifi1_sklad
$ping -q -c 4 192.168.xx.201 > /dev/null 2>&1
if [ $? != 0 ]; then
cat $log_dir/wifi1_sklad.log | grep down > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $wifi1_sklad | $sendxmpp admin@office.jabber.ru -f /root/.sendxmpprc
echo down > $log_dir/wifi1_sklad.log
fi
else
echo up > $log_dir/wifi1_sklad.log
fi

# wifi2_sklad
$ping -q -c 4 192.168.xx.202 > /dev/null 2>&1
if [ $? != 0 ]; then
cat $log_dir/wifi2_sklad.log | grep down > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $wifi2_sklad | $sendxmpp admin@office.jabber.ru -f /root/.sendxmpprc
echo down > $log_dir/wifi2_sklad.log
fi
else
echo up > $log_dir/wifi2_sklad.log
fi

# wifi3_sklad
$ping -q -c 4 192.168.xx.203 > /dev/null 2>&1
if [ $? != 0 ]; then
cat $log_dir/wifi3_sklad.log | grep down > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $wifi3_sklad | $sendxmpp admin@office.jabber.ru -f /root/.sendxmpprc
echo down > $log_dir/wifi3_sklad.log
fi
else
echo up > $log_dir/wifi3_sklad.log
fi



Думаю вот добавить еще сделать уведомление о том что интерфейс поднялся!!!!!
Последний раз редактировалось Cancer 2010-02-26 21:17:54, всего редактировалось 1 раз.

Soldier
ст. сержант
Сообщения: 364
Зарегистрирован: 2008-10-02 9:28:30

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение Soldier » 2010-02-26 10:40:17

Пинговалка.
Писал полгода назад:

Код: Выделить всё

#!/bin/sh

i=1;
while [ ${i} -le 8 ];
do
 res=`/usr/local/sbin/fping -t 10 10.10.0.$i | /usr/local/bin/gawk '{ print $3 }'`
 case $res in
  alive) sost1=`/bin/cat /tmp/lping/10.10.0.$i` ;
      case $sost1 in
                0) ;;
                1) query1=`/usr/local/bin/mysql switch -u monitor -N -e "select address from l3 where ip='10.10.0.$i';"` && /bin/echo '0' > /tmp/lping/10.10.0.$i && /usr/bin/printf "\n`/bin/date`\n $query1 \n Host is UP!" | /usr/local/bin/sendxmpp -u yourserver -p shatrik -j 10.10.254.128:5222 -r Home admin@10.10.254.128 ;;
                *) ;;
            esac;;

  unreachable) sost2=`/bin/cat /tmp/lping/10.10.0.$i`;
            case $sost2 in
                1) ;;
                0) query2=`/usr/local/bin/mysql switch -u monitor -N -e "select address from l3 where ip='10.10.0.$i';"` && /bin/echo '1' > /tmp/lping/10.10.0.$i && /usr/bin/printf "\n`/bin/date`\n $query2 \n Host is DOWN!!!" | /usr/local/bin/sendxmpp -u yourserver -p shatrik -j 10.10.254.128:5222 -r Home admin@10.10.254.128 ;;
                *) ;;
            esac;;
 esac
 i=$(expr ${i} + 1 )
done

Преимущества - ведет файл в котором пишется состояние девайса.
Для скрипта надо fpinger, sendxmpp, mysql-server && client. Скрипт мониторит 8 девайсов. (число, естественно, можно поменять.)
Tux: "Kill Bill !!!"

Soldier
ст. сержант
Сообщения: 364
Зарегистрирован: 2008-10-02 9:28:30

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение Soldier » 2010-02-26 10:46:52

А это могучий random. :)

Код: Выделить всё

#!/bin/bash

i=`echo $[ ( $RANDOM % 19 ) ]`
#echo $i

case $i in
0) echo "cs_assault.bsp";;
1) echo "cs_compound.bsp";;
2) echo "de_paris";;
3) echo "cs_italy.bsp";;
4) echo "cs_militia.bsp";;
5) echo "cs_office.bsp";;
6) echo "de_aztec.bsp";;
7) echo "de_cbble.bsp";;
8) echo "de_chateau.bsp";;
9) echo "de_contra.bsp";;
10) echo "de_dust2.bsp";;
11) echo "de_dust.bsp";;
12) echo "de_inferno.bsp";;
13) echo "de_nuke.bsp";;
14) echo "de_piranesi.bsp";;
15) echo "de_port.bsp";;
16) echo "de_prodigy.bsp";;
17) echo "de_tides.bsp";;
18) echo "de_train.bsp";;
 *) ;;
esac

Пользую на серваке с контрой.
Tux: "Kill Bill !!!"

Аватара пользователя
Cancer
Гл. Кастратор
Сообщения: 1269
Зарегистрирован: 2008-03-25 12:21:36
Откуда: г. Ростов-на-Дону
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение Cancer » 2010-03-12 13:22:34

Переписал скрипт мониторинга сети..

Простенький скрипт, Мониторинг устройств в сети
Пингует сетевые интерфейсы,
если интерфейс не пингуется отправляет сообщение по Джабберу о том что хост упал, так же если начал пинговатся отправляет мне соответствующее сообщение
Заметьте что если интерфейс не пингуется, то скрипт
отправит сообщение 1раз о том что он упал, и добавит в файл флаг down в фал и в последующие разы не будет присылать уведомления.
Как только начинает пинговатся отправляет уведомление что хост встал и добавляет флаг active в файл.

Установлен sendxmpp http://www.lissyara.su/articles/freebsd ... /sendxmpp/




Код: Выделить всё

#!/bin/sh
ping="/sbin/ping"
sendxmpp="/usr/local/bin/sendxmpp"
echo="/bin/echo"
log_dir="/var/log"

alert="ICMP failed Service"
active="ICMP succeeded Service"
pdc="Контроллер домена PDC НЕ РАБОТАЕТ!"
pdcup="Контроллер домена PDC работает!"
wifi1_sklad="Точка доступа 1 на Складе с IP 192.168.xx.201 НЕ РАБОТАЕТ!"
wifi1_skladup="Точка доступа 1 на Складе с IP 192.168.xx.201 работает!"
wifi2_sklad="Точка доступа 2 на Складе с IP 192.168.xx.202 НЕ РАБОТАЕТ!"
wifi2_skladup="Точка доступа 2 на Складе с IP 192.168.xx.202 работает!"


# PDC
$ping -q -c 4 pdc > /dev/null 2>&1
if [ $? != 0 ]; then
 cat $log_dir/pdc.log | grep down > /dev/null 2>&1
 if [ $? != 0 ]; then
  $echo $pdc | $sendxmpp admin@office.jabber.ru -s "$alert" -f /root/.sendxmpprc
  $echo down > $log_dir/pdc.log
 fi
else
 cat $log_dir/pdc.log | grep active > /dev/null 2>&1
 if [ $? != 0 ]; then
  $echo $pdcup | $sendxmpp admin@office.jabber.ru -s "$active" -f /root/.sendxmpprc
  $echo active > $log_dir/pdc.log
 fi
fi

# WIFI-1
$ping -q -c 4 192.168.xx.201 > /dev/null 2>&1
if [ $? != 0 ]; then
 cat $log_dir/wifi1.log | grep down > /dev/null 2>&1
 if [ $? != 0 ]; then
  $echo $wifi1_sklad | $sendxmpp admin@office.jabber.ru -s "$alert" -f /root/.sendxmpprc
  $echo down > $log_dir/wifi1.log
 fi
else
 cat $log_dir/wifi1.log | grep active > /dev/null 2>&1
 if [ $? != 0 ]; then
  $echo $wifi1_skladup | $sendxmpp admin@office.jabber.ru -s "$active" -f /root/.sendxmpprc
  $echo active > $log_dir/wifi1.log
 fi
fi

# WIFI-2
$ping -q -c 4 192.168.xx.202 > /dev/null 2>&1
if [ $? != 0 ]; then
 cat $log_dir/wifi2.log | grep down > /dev/null 2>&1
 if [ $? != 0 ]; then
  $echo $wifi2_sklad | $sendxmpp admin@office.jabber.ru -s "$alert" -f /root/.sendxmpprc
  $echo down > $log_dir/wifi2.log
 fi
else
 cat $log_dir/wifi2.log | grep active > /dev/null 2>&1
 if [ $? != 0 ]; then
  $echo $wifi2_skladup | $sendxmpp admin@office.jabber.ru -s "$active" -f /root/.sendxmpprc
  $echo active > $log_dir/wifi2.log
 fi
fi


И запускаю его по крону

Код: Выделить всё

# Запуск Мониторинга каждые 3 минуты с 10-00 до 18-00
#minute hour    mday    month   wday    who     command
*/3     10-17   *       *       *       root    /usr/SCRIPTS/monitoring.sh /dev/null 2>&1

Аватара пользователя
f0s
ст. лейтенант
Сообщения: 1082
Зарегистрирован: 2007-03-13 18:43:31
Откуда: Санкт-Петербург
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение f0s » 2010-03-29 16:29:14

небольшой скрипт, показывающий какй пользователь держит открытым файл (при работе с общими документами, полезно бывает знать, кому звонить, чтобы тот освободил файл для записи)

работает через веб-интерфейс на www.artpaint, в апаче просто ссылка:


Код: Выделить всё

<Directory "/usr/home/artpaint/www/data/www.artpaint/stat/files">
Options FollowSymLinks +ExecCGI
</Directory>



сам скрипт такой:


Код: Выделить всё

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html>
    <head>
    <title>User use file.</title>
</head>
<body>
    <table align=\"center\" border=1>
<tr><th>User</th><th>File</th></tr>
";
for (`ssh 192.168.10.6 smbstatus`) {
    $users{$1} = $2 if (/\s*(\d+)\s+(.+?)\s+(.+)\s+(.+)\s+\((.+)\)/);
    print "          <tr><td>$users{$1}</td><td>$2</td></tr>\n" if (/(\d+).*?\/u
sr\/home\/public\/shared(.*)\s{3}/);
    };
print "
</body>
    </html>"


то есть по ssh подключаемся на 192.168.10.6 и получаем данные по открытым файлам, а далее все это выводим в табличку.

чтобы при подключении по ssh не требовало пароль,

Код: Выделить всё

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/artpaint/.ssh/id_rsa):
Created directory '/home/artpaint/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/artpaint/.ssh/id_rsa.
Your public key has been saved in /home/artpaint/.ssh/id_rsa.pub.
The key fingerprint is:
18:f7:a3:78:ec:9e:36:b4:95:c0:5a:36:c4:b6:88:8b


теперь файлик id_rsa.pub передаем на 192.168.10.6, переименовав его в authorized_keys2 в папку этого же юзера .ssh
named, named, what is my TTL value?..

[FidoNet 2:550/2 && 2:5030/4441]

89
проходил мимо

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение 89 » 2010-04-12 10:37:23

FenX писал(а):
kenny писал(а):

Код: Выделить всё

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Е2-Е4 Мимо...."

Хороший скрипт, может кому пригодится :-D

на фре rm -rf /* не работает, сотню раз обсуждали.

ну так попробуйте

Soldier
ст. сержант
Сообщения: 364
Зарегистрирован: 2008-10-02 9:28:30

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение Soldier » 2010-04-13 17:09:39

89 писал(а):
FenX писал(а):
kenny писал(а):

Код: Выделить всё

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Е2-Е4 Мимо...."

Хороший скрипт, может кому пригодится :-D

на фре rm -rf /* не работает, сотню раз обсуждали.

ну так попробуйте

Ну так не сносит он. Фря орать начинает типа нельзя удалять из / и т.п. Зато сама же предлагает ответ. :)
Tux: "Kill Bill !!!"

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 34924
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение Alex Keda » 2010-04-14 8:29:45

не путайте две разные команды

Код: Выделить всё

lissyara$ su
lissyara# rm -rf /
rm: "/" may not be removed
lissyara#

действительно не работает.
а вот предлагаемая команда

Код: Выделить всё

rm -rf /*

до выполнения шеллом интерпретируется так:

Код: Выделить всё

lissyara# echo rm -rf /*
rm -rf /COPYRIGHT /bin /boot /cdrom /compat /dev /entropy /etc /home /lib /libexec /media /mnt /proc /rescue /restoresymtable /root /sbin /shares /sys /tmp /usr /var
lissyara#

и прекрасно отработает.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
ttys
*BSD
Сообщения: 401
Зарегистрирован: 2009-06-26 8:37:11
Откуда: Ростов-на-Дону
Контактная информация:

Re: Полезные скрипты наструганные на коленке.

Непрочитанное сообщение ttys » 2010-04-14 9:45:35

lissyara писал(а):без звёздочки работает тока на линухе

как то решил попробовать :smile:

Код: Выделить всё

rm -rf /

на OpenBSD 4.5 удалило всё нах...


Вернуться в «SHELL»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя