Полезные скрипты наструганные на коленке.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- проходил мимо
- Сообщения: 5
- Зарегистрирован: 2009-02-13 10:55:50
Re: Полезные скрипты наструганные на коленке.
не обязательно крон, запускай его привычным способом.
Услуги хостинговой компании Host-Food.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/
Тарифы на виртуальные сервера (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: Полезные скрипты наструганные на коленке.
Наш скрипт для поднятия инета после реконекта, мои скромные 5 копеек
Код: Выделить всё
#!/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: Полезные скрипты наструганные на коленке.
Используйте mpd, там есть реконнект
Чем больше я познаю FreeBSD, тем больше я считаю себя ламером
-
- лейтенант
- Сообщения: 638
- Зарегистрирован: 2007-04-08 5:50:16
Re: Полезные скрипты наструганные на коленке.
Столкнулся однажды с проблемой отсутствия массивов в 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
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Полезные скрипты наструганные на коленке.
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#
-
- лейтенант
- Сообщения: 638
- Зарегистрирован: 2007-04-08 5:50:16
Re: Полезные скрипты наструганные на коленке.
~./script.sh D OS U 4 123456789
А так ?
А так ?
-
- лейтенант
- Сообщения: 638
- Зарегистрирован: 2007-04-08 5:50:16
Re: Полезные скрипты наструганные на коленке.
Я читал просто когда-то, что в sh то больше 9-и аргументов не может быть в командной строке. Здесь, конечно, было бы удобнее заюзать getopts, но я этого воздержался. И самое интересное. Если назначать одинаковые аргументы в ком-строке, то они шеллом воспринимаются как предыдущий аргумент )))
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Полезные скрипты наструганные на коленке.
reLax писал(а):~./script.sh D OS U 4 123456789
А так ?
Код: Выделить всё
zg# ./1.sh D OS U 4 123456789
D
OS
U
4
123456789
zg#
просто первые девять аргументы доступны через $1 ... $9, но это не ограничение как таковоеreLax писал(а):Я читал просто когда-то, что в sh то больше 9-и аргументов не может быть в командной строке.
пример покажи, просто так не совсем понятно -)reLax писал(а):Если назначать одинаковые аргументы в ком-строке, то они шеллом воспринимаются как предыдущий аргумент )))
-
- лейтенант
- Сообщения: 638
- Зарегистрирован: 2007-04-08 5:50:16
Re: Полезные скрипты наструганные на коленке.
Тестовый скрипт:zg писал(а):reLax писал(а):~./script.sh D OS U 4 123456789
А так ?Код: Выделить всё
zg# ./1.sh D OS U 4 123456789 D OS U 4 123456789 zg#
просто первые девять аргументы доступны через $1 ... $9, но это не ограничение как таковоеreLax писал(а):Я читал просто когда-то, что в sh то больше 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
-
- лейтенант
- Сообщения: 638
- Зарегистрирован: 2007-04-08 5:50:16
Re: Полезные скрипты наструганные на коленке.
Код: Выделить всё
[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: Полезные скрипты наструганные на коленке.
мб кому пригодится))
у мну крутится bind9 использующий для хранения зон базу данных ldap
ессно задолбался я руками каждый раз делать там какие-либо записи...
вот накатал небольшой скриптик, добавляет A записи поддоменов в зону.
SOA и остальное не тянет, для них выложу попозжее, как допилю ))
у мну крутится 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: Полезные скрипты наструганные на коленке.
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: Полезные скрипты наструганные на коленке.
Ситуация:
Почтовый relay - Postfix + RBL + KAS + SpamAssassin.
По RBL-ям более 100 тысяч срабатываний в сутки, DNS-трафик тратиться более 40 Мбайт в день (и это через кэширующий Bind).
Короче жаба давно меня на это дело душила - написал сегодня простой скрипт, пополняющий таблицу блокировки этих IP (засвеченных в RBL) с помощью PF:
Скрипт можно выполнять так часто, как хочется (т.к. срабатывает моментально). Проанализировав логи за неделю получил уже 65 тысяч уникальных IP в /etc/PF/spammerip.
PS: Как использовать эту таблицу в PF думаю, описывать не нужно
PSS: Два прохода нужно для того, чтобы избавиться от дублирующих записей в /etc/PF/spammerip (PF - штука умная - пусть он и работает)
Почтовый 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
PS: Как использовать эту таблицу в PF думаю, описывать не нужно
PSS: Два прохода нужно для того, чтобы избавиться от дублирующих записей в /etc/PF/spammerip (PF - штука умная - пусть он и работает)
- Cancer
- Гл. Кастратор
- Сообщения: 1269
- Зарегистрирован: 2008-03-25 12:21:36
- Откуда: г. Ростов-на-Дону
- Контактная информация:
Re: Полезные скрипты наструганные на коленке.
Данный скрипт предназначен для того что бы следить за логами почтового сервера Exim
А именно если негодяй был замечен то он появится в этом отчете
Естественно в переменную event="denied|deny|failed" добавляем любое событие которое вас может потревожить
Сообщение получите такое
А именно если негодяй был замечен то он появится в этом отчете
Естественно в переменную 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: Полезные скрипты наструганные на коленке.
Скрипт для перезагрузки модема понадобился так как Провайдер мать его ЮТК в 1-40 ночи ребутит циски свои и модем не подхватывает бывает IP. Прошивки не помогли пришлось делать все подручными средствами
Проверял на D-link 2500UBRUD / D-link 500T
Нужен пакет из портов
Проверял на 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
-
- проходил мимо
Re: Полезные скрипты наструганные на коленке.
Вопрос по sed
может кто помочь - нада сидом заменить урл в файле на другой - которий передается параметром в командной строке -
sed 's/<property name="tc037.url.toinstall" value=".*"\/>/<property name="tc037.url.toinstall" value='\"http://ya.ru"\'/>/g' имя файла
пробовал неработает
Вместо http://ya.ru - будет значение переменной (тоесть переданий в командной строке параметр)
если в статике можна екранировать косие то как сделать если параметром берется - незнаю
Может кто помочь?
может кто помочь - нада сидом заменить урл в файле на другой - которий передается параметром в командной строке -
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: Полезные скрипты наструганные на коленке.
скобки использовать.xfOx писал(а):если в статике можна екранировать косие то как сделать если параметром берется - незнаю
-
- проходил мимо
Re: Полезные скрипты наструганные на коленке.
можна пример? команда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: Полезные скрипты наструганные на коленке.
сам спросил - сам и отвечаю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: Полезные скрипты наструганные на коленке.
Маленький скрипт на 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";
}
}
Код: Выделить всё
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: Полезные скрипты наструганные на коленке.
Не уверен что вообще кому-то пригодиться, но всё же.
смысл такой - скипт создаёт дневную полную копию шар
монтирует по NFS бэкапный сервер
если он смонтировался - находит файл изменявшиеся за последние сутки, копирует их с сохраннеим структуры отдельно.
конвертирует кодировку.
архивит изменивщиеся файлы.
как-то так...
решение не коробочное. только для представления КАК можно реализовать.
аккуратней с ним. одна незаданная переменная будет вам стоить всего сервера.
смысл такой - скипт создаёт дневную полную копию шар
монтирует по 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: Полезные скрипты наструганные на коленке.
Правильнее будет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/;
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету
-
- рядовой
- Сообщения: 33
- Зарегистрирован: 2008-08-13 8:54:33
Re: Полезные скрипты наструганные на коленке.
Приветствую всех!
Скрипт проверяет можно ли достучаться до шлюза по умолчанию и сбрасывает модем/перезапускает РРР если связи нет. Дело в том, что раз в сутки мой провайдер (МТС Украина/3G CDMA) разрывает соединение так, что модем становится "в такую позу", что PPP уже не в состоянии его восстановить, если не перезапустить модем (AnyData-ADU500A) отрубанием питания ...
Итак вот он (может пригодится кому):
Скрипт засунут в крон и выполняется каждые 2мин...
Может что-то можно было сделать и правильнее (редко пишу скрипты) - критика принимается ...
Скрипт проверяет можно ли достучаться до шлюза по умолчанию и сбрасывает модем/перезапускает РРР если связи нет. Дело в том, что раз в сутки мой провайдер (МТС Украина/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
Может что-то можно было сделать и правильнее (редко пишу скрипты) - критика принимается ...
-
- сержант
- Сообщения: 245
- Зарегистрирован: 2009-02-24 11:12:57
- Откуда: Нижний Новгород
Re: Полезные скрипты наструганные на коленке.
Если провайдер разрывает соединение раз в сутки, зачем же ему выполняться каждые 2 минуты???
-
- рядовой
- Сообщения: 33
- Зарегистрирован: 2008-08-13 8:54:33
Re: Полезные скрипты наструганные на коленке.
Раз в сутки стабильно, но бывают еще разные несистематические проблемы, например, пропал сигнал, разорвалось соединение (не по описанной причине) и т.п. результат один - модем висит. Так что каждые 2мин. для надежностиdetx писал(а):Если провайдер разрывает соединение раз в сутки, зачем же ему выполняться каждые 2 минуты???