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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Darwin.ggl
проходил мимо
Сообщения: 5
Зарегистрирован: 2009-02-13 10:55:50

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

Непрочитанное сообщение Darwin.ggl » 2009-02-14 4:22:05

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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Time
сержант
Сообщения: 195
Зарегистрирован: 2008-09-04 4:31:16
Откуда: Абакан
Контактная информация:

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

Непрочитанное сообщение Time » 2009-02-24 6:58:37

Наш скрипт для поднятия инета после реконекта, мои скромные 5 копеек :oops:

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

#!/bin/sh
ip="213.180.204.8"
d=`date`;
echo "start $d" >> /var/log/reconnect_log;
pingresult=`/sbin/ping -c 1 $ip|grep icmp_seq`;
echo "ping $pingresult" >> /var/log/reconnect_log;
  if ["$pingresult" = ""];
  then
 echo "reconnect $d" >> /var/log/reconnect_log;
 killall ppp;
 sleep 40;
 /usr/sbin/ppp -ddial inet >> /var/log/reconnect_log;
 echo "end reconnect" >> /var/log/reconnect_log;
 sleep 40;
fi

Аватара пользователя
RusBiT
лейтенант
Сообщения: 635
Зарегистрирован: 2007-08-03 11:43:53
Откуда: Красноярск
Контактная информация:

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

Непрочитанное сообщение RusBiT » 2009-02-24 7:00:40

Используйте mpd, там есть реконнект :smile:
Чем больше я познаю FreeBSD, тем больше я считаю себя ламером :)

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

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

Непрочитанное сообщение reLax » 2009-03-08 9:03:14

Столкнулся однажды с проблемой отсутствия массивов в sh. Вообщем из командной строки передавались скрипту численные параметры, их было много, в 9 штук ну никак не помещалось. Задача была разбить их посимвольно (по одному символу), подставить в функцию, представив их в виде некоего простого массива и назначить в зависимости от их значения динамические переменные. Может кому этот метод пригодится :)

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

[...]
PORT_5=873
PORT_6=874
[..]
for F_ARGS in $*; do
    case $F_ARGS in
[...]
$5) ARR=`echo $5 | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\)/\1 \2/;ta'`
    for SLINE in $ARR
    do
    eval PORT=\$PORT_${SLINE}
[...]
done

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2009-03-08 9:36:57

reLax писал(а):в 9 штук ну никак не помещалось.

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

zg# cat 1.sh
#!/bin/sh

while [ $# -ge 1  ]; do
  echo $1
  shift
done

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

zg# ./1.sh 1 2 3 4 5 6 7 8 9 10 11 12 13
1
2
3
4
5
6
7
8
9
10
11
12
13
zg#


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

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

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

Я читал просто когда-то, что в sh то больше 9-и аргументов не может быть в командной строке. Здесь, конечно, было бы удобнее заюзать getopts, но я этого воздержался. И самое интересное. Если назначать одинаковые аргументы в ком-строке, то они шеллом воспринимаются как предыдущий аргумент )))

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2009-03-08 10:28:09

reLax писал(а):~./script.sh D OS U 4 123456789

А так ?

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

zg# ./1.sh D OS U 4 123456789
D
OS
U
4
123456789
zg#
reLax писал(а):Я читал просто когда-то, что в sh то больше 9-и аргументов не может быть в командной строке.
просто первые девять аргументы доступны через $1 ... $9, но это не ограничение как таковое
reLax писал(а):Если назначать одинаковые аргументы в ком-строке, то они шеллом воспринимаются как предыдущий аргумент )))
пример покажи, просто так не совсем понятно -)

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

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

Непрочитанное сообщение reLax » 2009-03-08 10:52:00

zg писал(а):
reLax писал(а):~./script.sh D OS U 4 123456789

А так ?

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

zg# ./1.sh D OS U 4 123456789
D
OS
U
4
123456789
zg#
reLax писал(а):Я читал просто когда-то, что в sh то больше 9-и аргументов не может быть в командной строке.
просто первые девять аргументы доступны через $1 ... $9, но это не ограничение как таковое
reLax писал(а):Если назначать одинаковые аргументы в ком-строке, то они шеллом воспринимаются как предыдущий аргумент )))
пример покажи, просто так не совсем понятно -)
Тестовый скрипт:

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

#!/bin/sh -vx
RPATH="/usr/local/bin/rsync"
U_FLAGS="--owner \
         --group \
         --perms \
         --xattrs \
         --links \
         --update \
         --recursive \
         --delete-after \
         --compress-level=4 \
         --compress \
         --password-file=/usr/local/etc/rsync.passwd
         --verbose"
W_FLAGS="--owner \
         --group \
         --perms \
         --links \
         --update \
         --recursive \
         --delete-after \
         --compress-level=4 \
         --compress \
         --password-file=/usr/local/etc/rsync.passwd
         --verbose"
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";;
     *) exit 1;;
esac


DEST_OS_1=$PREFIX_DIR/OS/CDOCS
SRC_OS_1="crypto"
DEST_OS_2=$PREFIX_DIR/OS/KDOCS
SRC_OS_2="constructors"

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"

ARR_SRV="OS BI DS MD NB"
W_SRV="MD NB"
####################################
### SERVERS RSYNC MODULES BACKUP ###
####################################

fbackup() {

#  USAGE:
#  First ARG  = Type of backup
#  Second ARG = Server name. May be ALL
#  Third ARG  = How much days to leave files
#  Fourth ARG = Rsync modules digits number (equal 1234 etc)

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 0; fi
    continue
    ;;
$2) if [ "$2" = "ALL" ]
    then SRV=$ARR_SRV
    else SRV=$2
    fi
    continue
    ;;
$3) SYS=$3
    continue
    ;;
$4) if [ "$TYPE" = "D" ] && [ $4 -ge 1 ]
    then WDEL=$4
    elif [ "$TYPE" = "I" ] && [ "$4" = "N" ]
    then
    :
    else exit 0
    fi
    continue
    ;;
$5) ARR=`echo $5 | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\)/\1 \2/;ta'`
    for SLINE in $SRV
    do
    eval PORT=\$PORT_${SLINE}
    for OSLINE in $W_SRV
    do
    if [ "$OSLINE" = "$SLINE" ]
    then SYS="W"; fi
    done
    eval FLAGS=\$${SYS}_FLAGS
    for LINE in $ARR
    do
    eval SRC=\$SRC_${SLINE}_${LINE}
    eval DEST=\$DEST_${SLINE}_${LINE}
    if [ -z "$SRC"   ] || \
       [ -z "$DEST"  ] || \
       [ -z "$PORT"  ] || \
       [ -z "$FLAGS" ]
       then
       continue
    fi
    if [ ! -d $DEST/$LDIR ]
    then mkdir -p $DEST/$LDIR;fi
    $RPATH $FLAGS --port=$PORT $USER\@localhost::$SRC $DEST/$LDIR
    if [ "$TYPE" = "D" ]
    then
    find $DEST -type f -name '*.tar.gz' -mtime +$WDEL -exec rm -rf {} \;
    find $DEST -type d -mtime +$WDEL -depth 1 -exec rm -rf {} \;
    find $DEST/$LDIR -print > /tmp/tmplist
    cd $DEST
    if tar zcf /$LDIR.tar.gz $LDIR/* --from-file /tmp/tmplist
    then rm -rf $LDIR
    fi
    fi
    done
    done
    ;;
$*) exit 0
    ;;
   esac
done
}


#######################################
###      DOING TAR OF BACKUPS       ###
#######################################

tar() {
case "$*" in
$1) echo $1
if [ ! -d $PREFIX_DIR/$1 ]
   then exit 0; fi
   cd $PREFIX_DIR/$1
if tar zcf $LDIR.tar.gz $LDIR/*
   then find $1 -type d -depth 1 -exec rm -rf {} \;;fi
   ;;
*) exit 0
   ;;
esac
}

fbackup $1 $2 $3 $4 $5

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

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

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

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

[10:53 root@crypto /home/alex]# ./rsync4.sh D OS U 1 1
#!/bin/sh -vx

RPATH="/usr/local/bin/rsync"
+ RPATH=/usr/local/bin/rsync
U_FLAGS="--owner \
         --group \
         --perms \
         --xattrs \
         --links \
         --update \
         --recursive \
         --delete-after \
         --compress-level=4 \
         --compress \
         --password-file=/usr/local/etc/rsync.passwd
         --verbose"
+ U_FLAGS=--owner          --group          --perms          --xattrs          --links          --update          --recursive          --delete-after          --compress-level=4          --compress          --password-file=/usr/local/etc/rsync.passwd
         --verbose
W_FLAGS="--owner \
         --group \
         --perms \
         --links \
         --update \
         --recursive \
         --delete-after \
         --compress-level=4 \
         --compress \
         --password-file=/usr/local/etc/rsync.passwd
         --verbose"
+ W_FLAGS=--owner          --group          --perms          --links          --update          --recursive          --delete-after          --compress-level=4          --compress          --password-file=/usr/local/etc/rsync.passwd
         --verbose
USER="rsync"
+ USER=rsync
PORT_OS=874
+ PORT_OS=874
PORT_NB=875
+ PORT_NB=875
PORT_BI=876
+ PORT_BI=876
PORT_DS=877
+ PORT_DS=877
PORT_KP=878
+ PORT_KP=878
PORT_MD=879
+ PORT_MD=879


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


DEST_OS_1=$PREFIX_DIR/OS/CDOCS
+ DEST_OS_1=/crypto/RSYNC/DIFFERENTIAL/SERVERS/OS/CDOCS
SRC_OS_1="crypto"
+ SRC_OS_1=crypto
DEST_OS_2=$PREFIX_DIR/OS/KDOCS
+ DEST_OS_2=/crypto/RSYNC/DIFFERENTIAL/SERVERS/OS/KDOCS
SRC_OS_2="constructors"
+ SRC_OS_2=constructors

DEST_NB_1=$PREFIX_DIR/NB/SPRUT
+ DEST_NB_1=/crypto/RSYNC/DIFFERENTIAL/SERVERS/NB/SPRUT
SRC_NB_1="sprut"
+ SRC_NB_1=sprut
DEST_NB_2=$PREFIX_DIR/NB/ARCH
+ DEST_NB_2=/crypto/RSYNC/DIFFERENTIAL/SERVERS/NB/ARCH
SRC_NB_2="archive"
+ SRC_NB_2=archive
DEST_NB_3=$PREFIX_DIR/NB/0DAY
+ DEST_NB_3=/crypto/RSYNC/DIFFERENTIAL/SERVERS/NB/0DAY
SRC_NB_3="0day"
+ SRC_NB_3=0day

DEST_MD_1=$PREFIX_DIR/MD/1C
+ DEST_MD_1=/crypto/RSYNC/DIFFERENTIAL/SERVERS/MD/1C
SRC_MD_1="1C"
+ SRC_MD_1=1C
DEST_MD_2=$PREFIX_DIR/MD/1CA
+ DEST_MD_2=/crypto/RSYNC/DIFFERENTIAL/SERVERS/MD/1CA
SRC_MD_2="1CA"
+ SRC_MD_2=1CA
DEST_MD_3=$PREFIX_DIR/MD/ACBP
+ DEST_MD_3=/crypto/RSYNC/DIFFERENTIAL/SERVERS/MD/ACBP
SRC_MD_3="ACBP"
+ SRC_MD_3=ACBP

DEST_BI_1=$PREFIX_DIR/BI/EXIM
+ DEST_BI_1=/crypto/RSYNC/DIFFERENTIAL/SERVERS/BI/EXIM
SRC_BI_1="exim"
+ SRC_BI_1=exim
DEST_BI_2=$PREFIX_DIR/BI/LETC
+ DEST_BI_2=/crypto/RSYNC/DIFFERENTIAL/SERVERS/BI/LETC
SRC_BI_2="l_etc"
+ SRC_BI_2=l_etc
DEST_BI_3=$PREFIX_DIR/BI/ETC
+ DEST_BI_3=/crypto/RSYNC/DIFFERENTIAL/SERVERS/BI/ETC
SRC_BI_3="etc"
+ SRC_BI_3=etc

ARR_SRV="OS BI DS MD NB"
+ ARR_SRV=OS BI DS MD NB
W_SRV="MD NB"
+ W_SRV=MD NB
####################################
### SERVERS RSYNC MODULES BACKUP ###
####################################

fbackup() {

#  USAGE:
#  First ARG  = Server
#  Second ARG = OS Type
#  Third ARG  = How much days to leave files
#  Fourth ARG = Rsync modules digits number (equal 1234 etc)

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 0; fi
    continue
    ;;
$2) if [ "$2" = "ALL" ]
    then SRV=$ARR_SRV
    else SRV=$2
    fi
    continue
    ;;
$3) SYS=$3
    continue
    ;;
$4) if [ "$TYPE" = "D" ] && [ $4 -ge 1 ]
    then WDEL=$4
    elif [ "$TYPE" = "I" ] && [ "$4" = "N" ]
    then
    :
    else exit 0
    fi
    continue
    ;;
$5) ARR=`echo $5 | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\)/\1 \2/;ta'`
    for SLINE in $SRV
    do
    eval PORT=\$PORT_${SLINE}
    for OSLINE in $W_SRV
    do
    if [ "$OSLINE" = "$SLINE" ]
    then SYS="W"; fi
    done
    eval FLAGS=\$${SYS}_FLAGS
    for LINE in $ARR
    do
    eval SRC=\$SRC_${SLINE}_${LINE}
    eval DEST=\$DEST_${SLINE}_${LINE}
    if [ -z "$SRC"   ] || \
       [ -z "$DEST"  ] || \
       [ -z "$PORT"  ] || \
       [ -z "$FLAGS" ]
       then
       continue
    fi
    if [ ! -d $DEST/$LDIR ]
    then mkdir -p $DEST/$LDIR;fi
    $RPATH $FLAGS --port=$PORT $USER\@localhost::$SRC $DEST/$LDIR
    if [ "$TYPE" = "D" ]
    then
    find $DEST -type f -name '*.tar.gz' -mtime +$WDEL -exec rm -rf {} \;
    find $DEST -type d -mtime +$WDEL -depth 1 -exec rm -rf {} \;
    find $DEST/$LDIR -print > /tmp/tmplist
    cd $DEST
    if tar zcf /$LDIR.tar.gz $LDIR/* --from-file /tmp/tmplist
    then rm -rf $LDIR
    fi
    fi
    done
    done
    ;;
$*) exit 0
    ;;
   esac
done
}


#######################################
###      DOING TAR OF BACKUPS       ###
#######################################

tar() {
case "$*" in
$1) echo $1
if [ ! -d $PREFIX_DIR/$1 ]
   then exit 0; fi
   cd $PREFIX_DIR/$1
if tar zcf $LDIR.tar.gz $LDIR/*
   then find $1 -type d -depth 1 -exec rm -rf {} \;;fi
   ;;
*) exit 0
   ;;
esac
}

fbackup $1 $2 $3 $4 $5
+ fbackup D OS U 1 1
+ TYPE=D
+ [ D = D ]
+ date +%d.%m.%Y
+ LDIR=08.03.2009
+ continue
+ [ OS = ALL ]
+ SRV=OS
+ continue
+ SYS=U
+ continue
+ [ D = D ]
+ [ 1 -ge 1 ]
+ WDEL=1
+ continue
+ [ D = D ]
+ [ 1 -ge 1 ]
+ WDEL=1
+ continue

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

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

Непрочитанное сообщение FenX » 2009-03-23 19:02:57

мб кому пригодится))
у мну крутится bind9 использующий для хранения зон базу данных ldap
ессно задолбался я руками каждый раз делать там какие-либо записи...
вот накатал небольшой скриптик, добавляет A записи поддоменов в зону.
SOA и остальное не тянет, для них выложу попозжее, как допилю :)))

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

#!/bin/sh
ldapdc="dc=domen,dc=com"
ldapcn="cn=root,$ldapdc"
ldapou="ou=dns,$ldapdc"
cnpass="mysuperpassword"

echo -n "domain name: " && read dname;
echo -n "zone name: " && read zname;
echo -n "ip address: " && read dipaddr;

echo "dn: relativeDomainName=$dname,zoneName=$zname,$ldapou
objectClass: top
objectClass: dNSZone
zoneName: $zname
relativeDomainName: $dname
dNSClass: IN
aRecord: $dipaddr" | ldapadd -x -D "$ldapcn" -w $cnpass

Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2009-03-25 7:11:22

lshal-grep.sh - grep для lshal с выводом всего udi

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

#! /bin/sh

lshal | awk '
$1 == "udi" {
    while(length($0) > 0) {
	s=s $0"\n"

	if(/'"$*"'/ > 0)
	    found=1

	getline
	}

	if(found > 0)
	    result=result s"\n"

	s=""
	found=0
}

END {
    print result
}'
пример

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

$ lshal-grep.sh input
udi = '/org/freedesktop/Hal/devices/usb_device_46d_c01e_noserial_if0'
  freebsd.device_file = '/dev/ums0'  (string)
  freebsd.driver = 'ums'  (string)
  freebsd.unit = 0  (0x0)  (int)
  info.addons = {'hald-addon-mouse-sysmouse'} (string list)
  info.bus = 'usb'  (string)
  info.capabilities = {'input', 'input.mouse'} (string list)
  info.category = 'input.mouse'  (string)
  info.parent = '/org/freedesktop/Hal/devices/usb_device_46d_c01e_noserial'  (string)
  info.product = 'USB-PS/2 Optical Mouse'  (string)
  info.subsystem = 'usb'  (string)
  info.udi = '/org/freedesktop/Hal/devices/usb_device_46d_c01e_noserial_if0'  (string)
  info.vendor = 'Logitech'  (string)
  input.device = '/dev/sysmouse'  (string)
  input.x11_driver = 'mouse'  (string)
  input.x11_options.ZAxisMapping = '5 4'  (string)
  usb.freebsd.devname = 'ums0'  (string)
  usb.interface.class = 3  (0x3)  (int)
  usb.interface.description = ''  (string)
  usb.interface.number = 0  (0x0)  (int)
  usb.interface.protocol = 2  (0x2)  (int)
  usb.interface.subclass = 1  (0x1)  (int)
  usb_device.bus_number = 0  (0x0)  (int)
  usb_device.can_wake_up = true  (bool)
  usb_device.configuration = ''  (string)
  usb_device.configuration_value = 1  (0x1)  (int)
  usb_device.device_class = 0  (0x0)  (int)
  usb_device.device_protocol = 0  (0x0)  (int)
  usb_device.device_revision_bcd = 512  (0x200)  (int)
  usb_device.device_subclass = 0  (0x0)  (int)
  usb_device.is_self_powered = false  (bool)
  usb_device.level_number = 1  (0x1)  (int)
  usb_device.max_power = 98  (0x62)  (int)
  usb_device.num_configurations = 1  (0x1)  (int)
  usb_device.num_interfaces = 1  (0x1)  (int)
  usb_device.num_ports = 0  (0x0)  (int)
  usb_device.port_number = 2  (0x2)  (int)
  usb_device.product = 'USB-PS/2 Optical Mouse'  (string)
  usb_device.product_id = 49182  (0xc01e)  (int)
  usb_device.serial = ''  (string)
  usb_device.speed = 1.5 (1.5) (double)
  usb_device.speed_bcd = 336  (0x150)  (int)
  usb_device.vendor = 'Logitech'  (string)
  usb_device.vendor_id = 1133  (0x46d)  (int)
  usb_device.version = 2.0 (2) (double)

udi = '/org/freedesktop/Hal/devices/usb_device_45e_dd_noserial_if0'
  freebsd.driver = 'ukbd'  (string)
  freebsd.unit = 0  (0x0)  (int)
  info.bus = 'usb'  (string)
  info.capabilities = {'input', 'input.keyboard'} (string list)
  info.category = 'input.keyboard'  (string)
  info.parent = '/org/freedesktop/Hal/devices/usb_device_45e_dd_noserial'  (string)
  info.product = 'product 0x00dd'  (string)
  info.subsystem = 'usb'  (string)
  info.udi = '/org/freedesktop/Hal/devices/usb_device_45e_dd_noserial_if0'  (string)
  info.vendor = 'Microsoft'  (string)
  input.device = ''  (string)
  input.x11_driver = 'kbd'  (string)
  input.xkb.layout = 'us(dvorak),ru(typewriter)'  (string)
  input.xkb.model = 'microsoftprousb'  (string)
  input.xkb.options = 'grp:caps_toggle,grp_led:caps,shift:breaks_caps,compose:rwin'  (string)
  usb.freebsd.devname = 'ukbd0'  (string)
  usb.interface.class = 3  (0x3)  (int)
  usb.interface.description = ''  (string)
  usb.interface.number = 0  (0x0)  (int)
  usb.interface.protocol = 1  (0x1)  (int)
  usb.interface.subclass = 1  (0x1)  (int)
  usb_device.bus_number = 0  (0x0)  (int)
  usb_device.can_wake_up = true  (bool)
  usb_device.configuration = ''  (string)
  usb_device.configuration_value = 1  (0x1)  (int)
  usb_device.device_class = 0  (0x0)  (int)
  usb_device.device_protocol = 0  (0x0)  (int)
  usb_device.device_revision_bcd = 512  (0x200)  (int)
  usb_device.device_subclass = 0  (0x0)  (int)
  usb_device.is_self_powered = false  (bool)
  usb_device.level_number = 2  (0x2)  (int)
  usb_device.max_power = 100  (0x64)  (int)
  usb_device.num_configurations = 1  (0x1)  (int)
  usb_device.num_interfaces = 2  (0x2)  (int)
  usb_device.num_ports = 0  (0x0)  (int)
  usb_device.port_number = 3  (0x3)  (int)
  usb_device.product = 'product 0x00dd'  (string)
  usb_device.product_id = 221  (0xdd)  (int)
  usb_device.serial = ''  (string)
  usb_device.speed = 1.5 (1.5) (double)
  usb_device.speed_bcd = 336  (0x150)  (int)
  usb_device.vendor = 'Microsoft'  (string)
  usb_device.vendor_id = 1118  (0x45e)  (int)
  usb_device.version = 2.0 (2) (double)



Аватара пользователя
Dorlas
сержант
Сообщения: 257
Зарегистрирован: 2008-07-18 22:17:49

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

Непрочитанное сообщение Dorlas » 2009-04-24 19:46:31

Ситуация:

Почтовый relay - Postfix + RBL + KAS + SpamAssassin.

По RBL-ям более 100 тысяч срабатываний в сутки, DNS-трафик тратиться более 40 Мбайт в день (и это через кэширующий Bind).

Короче жаба давно меня на это дело душила - написал сегодня простой скрипт, пополняющий таблицу блокировки этих IP (засвеченных в RBL) с помощью PF:

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

#!/bin/sh

/usr/bin/grep "blocked using" /var/log/postfix.log | /usr/bin/awk '{print $10}' | /usr/bin/cut -d '[' -f2 | cut -d ']' -f1 >> /etc/PF/spammerip
/sbin/pfctl -f /etc/pf.conf
/sbin/pfctl -t spammerip -T show > /etc/PF/spammerip
/sbin/pfctl -f /etc/pf.conf
Скрипт можно выполнять так часто, как хочется (т.к. срабатывает моментально). Проанализировав логи за неделю получил уже 65 тысяч уникальных IP в /etc/PF/spammerip.

PS: Как использовать эту таблицу в PF думаю, описывать не нужно :)
PSS: Два прохода нужно для того, чтобы избавиться от дублирующих записей в /etc/PF/spammerip (PF - штука умная - пусть он и работает) :)

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

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

Непрочитанное сообщение Cancer » 2009-04-28 21:47:24

Данный скрипт предназначен для того что бы следить за логами почтового сервера Exim
А именно если негодяй был замечен то он появится в этом отчете ;)
Естественно в переменную event="denied|deny|failed" добавляем любое событие которое вас может потревожить

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

#!/bin/sh

event="denied|deny|failed"
ip="([0-9])+\.([0-9])+\.([0-9])+\.([0-9])+"
trusted="127.0.0.1|192.168.1.|192.168.55."
maillog="/var/log/maillog"
event_log="/usr/home/event.log"
ip_log="/usr/home/ip.log"
ipsort_log="/usr/home/ipsort.log"
norepeatip_log="/usr/home/norepeatip.log"
banlist="/usr/home/banlist.log"

if
# 1.Парсим по событию
cat $maillog | egrep "$event" > $event_log
# 2.Выдераем только IP
cat $event_log | egrep -o "$ip" > $ip_log
# 3.Сортируем IP
sort $ip_log > $ipsort_log
# 4.Удаляем дублированные IP
uniq $ipsort_log > $norepeatip_log
# 5.Убираем из отчета IP локальных сетей итд итп
cat $norepeatip_log | egrep -v "$trusted" > $banlist
# 6.Отправляем отчет на мыло админа
then
mail -s ban_list cancer@domain.ru < $banlist
fi
Сообщение получите такое

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

125.161.56.xxx
201.29.81.xxx
212.182.89.xxx
Последний раз редактировалось Cancer 2010-02-09 14:55:55, всего редактировалось 2 раза.

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

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

Непрочитанное сообщение Cancer » 2009-04-28 22:08:17

Скрипт для перезагрузки модема =) понадобился так как Провайдер мать его ЮТК в 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

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

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

Непрочитанное сообщение xfOx » 2009-06-05 11:01:03

Вопрос по sed
может кто помочь - нада сидом заменить урл в файле на другой - которий передается параметром в командной строке -
sed 's/<property name="tc037.url.toinstall" value=".*"\/>/<property name="tc037.url.toinstall" value='\"http://ya.ru"\'/>/g' имя файла
пробовал неработает
Вместо http://ya.ru - будет значение переменной (тоесть переданий в командной строке параметр)
если в статике можна екранировать косие то как сделать если параметром берется - незнаю
Может кто помочь?

Аватара пользователя
abanamat
сержант
Сообщения: 255
Зарегистрирован: 2007-03-15 11:24:26
Откуда: Питер
Контактная информация:

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

Непрочитанное сообщение abanamat » 2009-06-05 11:32:09

xfOx писал(а):если в статике можна екранировать косие то как сделать если параметром берется - незнаю
скобки использовать.

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

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

Непрочитанное сообщение xfOx » 2009-06-05 11:41:07

abanamat писал(а):
xfOx писал(а):если в статике можна екранировать косие то как сделать если параметром берется - незнаю
скобки использовать.
можна пример? команда
sed 's/<property name="tc037.url.toinstall" value=".*"\/>/<property name="tc037.url.toinstall" value='\"$my_cmd_arg"\'/>/g' имя файла

my_cmd_arg = http://10.0.0.151/download/archive.tgz ( к примеру)

Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2009-06-05 15:18:16

xfOx писал(а):
abanamat писал(а):
xfOx писал(а):если в статике можна екранировать косие то как сделать если параметром берется - незнаю
скобки использовать.
можна пример? команда
sed 's/<property name="tc037.url.toinstall" value=".*"\/>/<property name="tc037.url.toinstall" value='\"$my_cmd_arg"\'/>/g' имя файла

my_cmd_arg = http://10.0.0.151/download/archive.tgz ( к примеру)
сам спросил - сам и отвечаю
вот как надо
sed -i "s#<property name=\"tc037.url.toinstall\" value=\".*\"\/>#<property name=\"tc037.url.toinstall\" value=\"'$link'\"/>#g' c

Аватара пользователя
Dorlas
сержант
Сообщения: 257
Зарегистрирован: 2008-07-18 22:17:49

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

Непрочитанное сообщение Dorlas » 2009-07-03 20:21:42

Маленький скрипт на Perl, позволяющий проанализировать лог-файл RSYNC-сервера и получить некую общую статистику использования :)

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

#!/usr/local/bin/perl

my %rsync;

open (RSYNC, "/var/log/rsyncd.log");
while ($line = <RSYNC>)
{
        my ($date, $time, $pid, $status, $sent, $hostname, $ip, $receive, $other) = split /\s+/, $line, 9;
        if ($status =~ 'connect')
        {
                $rsync{$pid}->{'date'} = $date;
                $rsync{$pid}->{'time'} = $time;
                $rsync{$pid}->{'hostname'} = $hostname;
                $rsync{$pid}->{'ip'} = $ip;
        }
        if ($status =~ 'sent')
        {
                $rsync{$pid}->{'sent'} = $sent;
                $rsync{$pid}->{'receive'} = $receive;
        }
}

print "Date  \t\tTime  \tIP \t\t Sent Bytes \t Receive Bytes\n";

foreach my $pid (sort { $rsync{$a}->{'date'} cmp $rsync{$b}->{'date'} } keys %rsync)
        {
        $rsync{$pid}->{'ip'} =~ s/\((\d+\.\d+\.\d+\.\d+)\)/$1/;
        if ($rsync{$pid}->{'sent'} =~ /([0-9]+)/ )
                {
                print "$rsync{$pid}->{'date'}  $rsync{$pid}->{'time'}  $rsync{$pid}->{'ip'} \t $rsync{$pid}->{'sent'} \t $rsync{$pid}->{'receive'} \n";
                }
        }
Комментировать думаю не нужно, пример сырого лога (без мусора типа ошибок прав и т.д. 8) ):

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

2009/07/01 07:58:48 [35309] building file list
2009/07/01 07:59:55 [35309] sent 37822135 bytes  received 902165 bytes  total size 132841017999
2009/07/02 07:58:46 [84738] connect from raduga-ufa.ru (81.30.213.102)
2009/07/02 07:58:46 [84738] rsync on ftp/FreeBSD/ports/distfiles/ from raduga-ufa.ru (81.30.213.102)
2009/07/02 07:58:46 [84738] building file list
2009/07/02 07:59:55 [84738] sent 37822357 bytes  received 929935 bytes  total size 132877377250
2009/07/03 07:58:52 [21494] connect from raduga-ufa.ru (81.30.213.102)
2009/07/03 07:58:52 [21494] rsync on ftp/FreeBSD/ports/distfiles/ from raduga-ufa.ru (81.30.213.102)
2009/07/03 07:58:52 [21494] building file list
2009/07/03 08:00:02 [21494] sent 38365191 bytes  received 934394 bytes  total size 132877377250
Результат работы скрипта:

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

Date            Time    IP               Sent Bytes      Receive Bytes
2009/03/08  23:03:11  89.189.158.194     1539635         839
2009/03/11  08:07:21  89.189.158.194     171780847       531796
2009/03/13  08:07:17  89.189.158.194     155419902       514505
2009/03/14  08:07:30  94.41.23.135       281920501       605598
2009/03/15  08:07:29  94.41.23.135       153144487       518707
2009/03/16  08:07:37  94.41.23.135       153144487       518707
2009/03/17  13:32:55  94.41.23.135       1539630         834
2009/03/21  16:01:36  92.50.175.199      1553147         839
2009/03/22  08:08:27  92.50.175.199      153153717       521987
2009/03/23  08:58:38  92.50.175.199      50157318        11285

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

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

Непрочитанное сообщение Alex Keda » 2009-08-21 9:56:19

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

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

#!/bin/sh

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

# директории для бэкапов
backup_dir="/shares/array/backup"
remote_backup_dir="/mnt/nas/data/`hostname -s`/diff/`date -v-1d +%Y-%m-%d`"

# монтируем бэкапную шару
mount_nfs -i -s -T -t 2 -R 3 backup:/shares /mnt/nas
is_mount=$?


cd /shares/array/
rm -rf $backup_dir/*

mkdir -p $backup_dir

for dir in departments share_data user_data profiles
do
        cp -Rp $dir $backup_dir/
        # если бэкапная шара смонтировалась - делаем набор дополнительных действий
        if [ "$is_mount" = "0" -a "$dir" != "profiles" ]
        then
                # создаём директорию для шары
                mkdir -p $remote_backup_dir
                # ищщем все файлы что модифицировались за последний день
                cd $backup_dir/$dir
                find . -type f -mtime -1 |
                {
                while read file
                do
                        # достаём директорию где он лежит
                        filedir=`dirname "$file"`
                        # создаём директорию
                        mkdir -p "$remote_backup_dir/$dir/$filedir"
                        # копируем файл
                        cp -p "$file" "$remote_backup_dir/$dir/$filedir/"
                done
                }

                cd $remote_backup_dir/
                # конвертируем, чтоб нормально под виндой открывалось
                convmv -r -f koi8-r -t cp866 --notest $dir
                # делаем zip архив того что наковыряли
                find $dir -type f | zip -r $dir.zip -@
                rm -rf $remote_backup_dir/$dir
        fi
done

# отмонтируем шару
cd
umount /mnt/nas &
# поспим, и ещё разик принудительно отмонтируем
sleep 600 && umount -f /mnt/nas &

exit
решение не коробочное. только для представления КАК можно реализовать.
аккуратней с ним. одна незаданная переменная будет вам стоить всего сервера.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

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

Непрочитанное сообщение thefree » 2009-08-26 8:57:08

Dorlas писал(а):

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

        $rsync{$pid}->{'ip'} =~ s/\((\d+\.\d+\.\d+\.\d+)\)/$1/;
Правильнее будет

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

$rsync{$pid}->{'ip'} =~ s/\((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\)/$1/;
вдруг проскочит что-то в духи ... (23434.23.45.90)
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Шаманъ
рядовой
Сообщения: 33
Зарегистрирован: 2008-08-13 8:54:33

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

Непрочитанное сообщение Шаманъ » 2009-09-05 16:54:23

Приветствую всех!

Скрипт проверяет можно ли достучаться до шлюза по умолчанию и сбрасывает модем/перезапускает РРР если связи нет. Дело в том, что раз в сутки мой провайдер (МТС Украина/3G CDMA) разрывает соединение так, что модем становится "в такую позу", что PPP уже не в состоянии его восстановить, если не перезапустить модем (AnyData-ADU500A) отрубанием питания ...

Итак вот он (может пригодится кому):

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

#!/bin/sh

#Сюда будем писать наш лог
PPP_RESTART_LOG="/var/log/ppp_restart.log"

#Формат даты и времени запуска
FMT="+%d-%m-%Y %H:%M:%S UTC"

#Ищем модем среди USB устройств, выделяем номер шины и адрес на шине
MODEM=`usbconfig | grep AnyDATA | sed -e's/ugen\([0-9]*\)\.\([0-9]*\).*/-u \1 -a \2/'`

if [ -z "${MODEM}" ]
then
#Ниче не нашли - сворачиваемся...
   echo `date "${FMT}"` "[WARNING] No modem found!" >> ${PPP_RESTART_LOG}
   exit
fi

#Получаем IP адрес шлюза по умолчанию
DEFAULT_GW=`netstat -rn | grep default | sed -e's/default[[:blank:]]*\([0-9.]*\).*/\1/`

#Проверяем удалось ли его получить
if [ -n "${DEFAULT_GW}" ]
then
#Пингуем шлюз и считаем сколько раз получилось
   PINGS=`ping -c 3 ${DEFAULT_GW} | grep -c "64 bytes"`
else
#Если адрес шлюза не нашли, вероятно PPP не был поднят или 
#что-то пошло не так в прошлый раз - перезапускаем (возможно 
#есть смысл в таком случае просто закончить работу, тогда 
#скрипт не будет задалбывать, если РРР был отключен вручную)
   PINGS=0
   echo `date "${FMT}"` "[WARNING] No default GW was found..." >> ${PPP_RESTART_LOG}
fi

if [ ${PINGS} -eq 0 ]
then
#Нет ответа --> пишим в лог и перезапускаем все
   echo `date "${FMT}"` "[ERROR] No reply from the default GW (${DEFAULT_GW}) - restarting link..." >> ${PPP_RESTART_LOG}

#Убиваем РРР
   killall ppp > /dev/null
#Отключаем модем
   usbconfig ${MODEM} power_off
   sleep 5
#Включаем модем
   usbconfig ${MODEM} power_on
   sleep 5
#Поднимаем РРР (подкорректируйте команду с учетом Ваших настроек РРР)
   ppp -ddial MTC

   echo `date "${FMT}"` "[INFO] The link was restarted..." >> ${PPP_RESTART_LOG}
fi
Скрипт засунут в крон и выполняется каждые 2мин...

Может что-то можно было сделать и правильнее (редко пишу скрипты) - критика принимается :oops: ...

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

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

Непрочитанное сообщение detx » 2009-09-07 8:25:13

Если провайдер разрывает соединение раз в сутки, зачем же ему выполняться каждые 2 минуты???

Шаманъ
рядовой
Сообщения: 33
Зарегистрирован: 2008-08-13 8:54:33

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

Непрочитанное сообщение Шаманъ » 2009-09-07 9:25:58

detx писал(а):Если провайдер разрывает соединение раз в сутки, зачем же ему выполняться каждые 2 минуты???
Раз в сутки стабильно, но бывают еще разные несистематические проблемы, например, пропал сигнал, разорвалось соединение (не по описанной причине) и т.п. результат один - модем висит. Так что каждые 2мин. для надежности :oops: