Страница 10 из 11
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2011-07-15 2:36:58
NoResponse
не секрет что при большом количестве джайлов сложно помнить имена оных
написал вот такое
Код: Выделить всё
#!/bin/sh
. /etc/rc.conf
case $1 in
[Ll][Ii][Ss][Tt])
printf " JID\033[7GHostname\033[30GJailname\033[65GPath\n -----------------------------------------------------------------------------\n"
for JN in ${jail_list} ;do
eval JH=\${$(echo jail_${JN}_hostname)}
eval JP=\${$(echo jail_${JN}_rootdir)}
Jid=`jls | awk '{if ("'${JP}'"==$4) print $1}'`
printf " ${Jid}\033[7G${JH}\033[30G${JN}\033[65G${JP}\n"
done
;;
[Ss][Tt][Oo][Pp]|[Ss][Tt][Aa][Rr][Tt])
/etc/rc.d/jail $*
;;
*)
printf "Usage: `basename $0` (list|start|stop) [jailname]\n"
#set
esac
но толкнуло меня на написание этого творения следующий кусок из rc.conf который в свою очередь появился после того как меня задолбало переписывать в дцатый раз
это "чудо" проходит по указанным директориям и из всех поддиректорий создает джайл с "уникальным" именем (буква J+md5)
в ручную созданным джайлам
не мешает
Код: Выделить всё
...
################################################################################
jail_enable="YES"
jail_set_hostname_allow="YES"
jail_devfs_enable="YES"
jail_flags="-l -U root"
#==============================================================================#
jail_path_list="jails"
jail_prefix_list="64 32"
jail_list="pattern"
#==============================================================================#
for JPL in $jail_path_list; do
for JPrL in $jail_prefix_list; do
for JAIL in `find /${JPL}/${JPrL} -mindepth 1 -maxdepth 1 -type d`; do
JN=`basename ${JAIL}`
JP="/${JPL}/${JPrL}"
JIP="${JP}/jails.ips"
Jmd5="J"`md5 -qs "${JN}"`
jail_list=${jail_list}" "${Jmd5}
[ -f ${JIP} ] && eval jail_${Jmd5}_ip=`cat ${JIP} | awk '{if ($1=="'${JN}'") print $2}'`
eval jail_${Jmd5}_rootdir="${JAIL}"
eval jail_${Jmd5}_hostname="${JN}"
[ -f ${JP}/rc.jail ] && eval jail_${Jmd5}_exec_prestart0="/bin/sh\ ${JP}/rc.jail\ ${JAIL}"
[ -f ${JP}/rc.jail ] && eval jail_${Jmd5}_exec_poststop0="/bin/sh\ ${JP}/shutdown.jail\ ${JAIL}"
[ -f ${JP}/rc.jail-${JN} ] && eval jail_${Jmd5}_exec_prestart1="/bin/sh\ ${JP}/rc.jail-${JN}"
[ -f ${JP}/shutdown.jail-${JN} ] && eval jail_${Jmd5}_exec_poststop1="/bin/sh\ ${JP}/shutdown.jail-${JN}"
done
done
done
#==============================================================================#
jail_pattern_rootdir="/jails/.bsd_8.2-stable_64"
jail_pattern_hostname="ccc"
jail_pattern_ip="172.31.255.12"
################################################################################
...
единственное пришлось айпишники вынести в отдельный файл
формат файла
Код: Выделить всё
folder_name1 1.1.1.1
folder_name2 1.1.1.2,2.2.2.2
folder_name3 1.1.1.3
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2011-11-02 3:07:00
therb1
народ я вообще новичек новичком
хочу наваять скрипт последовательной установки пакето пробвал типа
Код: Выделить всё
pkg_add -r mc
sleep 300
pkg_add -r lynx
sleep 300
pkg_add -r wget
он не отрабатывает это пытался запустить командой
Код: Выделить всё
exec /usr/download/install (install это имя скрипта)
он меня выкидывает из под рута и говорит мол введите логин и пасс. что за?
когда пытаюсь их просто ctrl+shift+v то sleep не отрабатывает.
дайте пожалуйста хоть кудав копать
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2011-11-02 8:20:46
bagas
Re: Полезные скрипты наструганные на коленке.
Сообщение therb1 » 2011-11-02 4:07:00
народ я вообще новичек новичком
хочу наваять скрипт последовательной установки пакето пробвал типа
Код: Выделить всё
pkg_add -r mc
sleep 300
pkg_add -r lynx
sleep 300
pkg_add -r wget
он не отрабатывает это пытался запустить командой
Код: Выделить всё
exec /usr/download/install (install это имя скрипта)
Чуть не понятно, ваши действия,
Возможно изо того, что вы не пользуетесь знаками препинания.
попробуй так
Код: Выделить всё
#!/bin/sh
/usr/sbin/pkg_add -r mc
/usr/sbin/pkg_add -r lynx
/usr/sbin/pkg_add -r wget
Можно добавить этот скрипт в крон и по расписанию его запустить.
он меня выкидывает из под рута и говорит мол введите логин и пасс. что за?
Вы точно уверены что под root`om запускаете процесс установки?
Покажите
id root
и
id пользака вашего.
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2011-11-02 22:26:21
therb1
Код: Выделить всё
192# id root
uid=0 (root) gid=0 (wheel) groups=0 (wheel), 5 (operator)
192# id therb1
uid= 1001(therb1) gid=0 (wheel) groups=0 (wheel)
Код: Выделить всё
192#exec /usr/123 ( этого файла даже не существует)
/usr/123: Command not found.
Freebsd/amd64 (192.168.0.1) (ttyv0)
login:
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2011-11-02 22:35:04
Pr0l
может тупо не хватает знака &&
#!/bin/sh
/usr/sbin/pkg_add -r mc &&
/usr/sbin/pkg_add -r lynx &&
/usr/sbin/pkg_add -r wget
чтобы у тебя не началась установка софта в 3 потока?
хотя по мне проще зайти в порт и сделать make && make install && make clean
по мне так сразу пиши апдейт портов

/usr/sbin/portsnap fetch &&
/usr/sbin/portsnap extract &&
потом прописываешь
/usr/ports/ПОРТкакойХочешьУстановить make && make install && make clean &&
/usr/ports/ПОРТкакойХочешьУстановить make && make install && make clean &&
/usr/ports/ПОРТкакойХочешьУстановить make && make install && make clean &&
по итогу если где-то касяк то дальше ничего не произойдет, хотя ИМХО это лобовое решение и очень громозкое
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2011-11-02 22:47:16
Pr0l
sh -x /usr/download/install вывод смотри где ошибка, + положительный ответ, - отрицательный.
и в скриптах всегда надо указывать прямой путь к программе иначе скрипт будет работать только если руками заводить, по крону ошибки сыпятся.
да и вообще МС так просто не поставиться, потому что кто будет конфигу выбирать какие зависимости ставить, если ты конечно заранее не соберешь конф под каждый устанавливаемый порт
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2011-11-03 1:10:34
therb1
Код: Выделить всё
192#exec /usr/123 ( этого файла даже не существует)
/usr/123: Command not found.
Freebsd/amd64 (192.168.0.1) (ttyv0)
login:
сама комманда EXEC выкидывает в логин, к чему бы я ее не применял
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2011-11-03 6:59:26
Pr0l
а для чего она тебе?
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2011-11-03 21:38:35
therb1
ну типа это же запуск execuit я так понимаю
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2011-11-17 13:37:12
Happy_demon
Если плохо на форуме искал - заранее прошу прощения. Надо сделать auto-whitelist, но для postfix и по простому, без mysql.
Код: Выделить всё
#!/usr/local/bin/bash
DATE_INS=0
DATE=`date`
prefix=/usr/local/etc/postfix
for LINE in `sed -ne 's/^.*to=<\([^>]*\)>, relay=[^(local)].*status=sent.*$/\1/p' \
/var/log/maillog | grep -v ВАШ_ПОЧТОВЫЙ_ДОМЕН(Ы) | sort -u`
do
if grep -q $LINE $prefix/whitelist
then
continue
fi
if grep -q $LINE $prefix/autowhitelist
then
continue
fi
if [ $DATE_INS -lt 1 ]
then
echo "### $DATE" >> $prefix/autowhitelist
DATE_INS=1
fi
printf "%-77s OK\n" $LINE >> $prefix/autowhitelist
done
/usr/local/sbin/postmap $prefix/autowhitelist
соответственно в main.cf есть запись
Код: Выделить всё
smtpd_recipient_restrictions =
permit_mynetworks
reject_unauth_destination
check_sender_access hash:/usr/local/etc/postfix/autowhitelist
А в крон добавляем по вкусу
Код: Выделить всё
#autowhitelist for postfix
*/5 8-20 * * * root /usr/local/etc/postfix/autowhitelist.sh 1>/dev/null 2>/dev/null
Отправили письмо - оно попадает в базу и все письма от этого человека, не зависимо от других проверок к вам гарантировано придут.
Удачи!
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2011-12-27 23:12:15
zhqetuo
#!/bin/sh
while :
do
log_dir="/var/log"
target="192.168.1.51";
fping_path="/usr/local/sbin/fping"
datenow="$(date +%Y%m%d%H%M%S)"
echo "$datenow"
flags_path="/var/log/fping-$datenow.log"
res=` $fping_path -i 60 $target |grep -o 'alive' > $flags_path && grep 'alive' $flags_path | wc -l && rm $flags_path`; #
ans=0;
if [ $res>$ans ];
then
echo "Link is UP $datenow" >> /tmp/reserver.log
echo "$date"
echo "YES"
cat $log_dir/pdc.log | grep up > /dev/null 2>&1
if [ $? != 0 ]; then
echo ===
тут скрипт отправки все отлично====
echo up > $log_dir/pdc.log
fi
else
echo "Link is DOWN $datenow" >> /tmp/reserver.log
echo "$date"
echo "NO"
cat $log_dir/pdc.log | grep down > /dev/null 2>&1
if [ $? != 0 ]; then
echo ==
=тут скрипт отправки что все плохо====
echo down > $log_dir/pdc.log
fi
fi
echo telo scripta 1
sleep 1
echo povtor 1
done
=======
отправка уведомления при только смене события, скрипт в цикле

может пригодиться кому то
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2011-12-27 23:28:31
zhqetuo
предыдущей скрипт это
скрипт проверки на доступность доступность хоста и отслеживание его состояния на данный момент .
сделан на основании 2-х скриптов взятых из интернета(почти ничего не правилось потому и сумбурно ) часть у Cancer.
много лишних выводов информации, пошаговый

=
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2011-12-28 21:16:46
Alex Keda
оформление листингов, мы канешно "ниасилили"
простите, вот такие "высеры" даже смотреть нет желания
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2012-02-28 18:36:13
m0ps
Буквально сегодня начальство поставило задачу, сказать кому внутри организации определенный пользователь отправлял письма в промежутке определенных дат. почтовик - постфикс, который берет учетки из АД (через лдап). На скорую руку накидал такой скриптик:
Код: Выделить всё
#!/bin/sh
user=$1
firstdate=$2
seconddate=$3
files=`find /var/log/ -name "maillog*" -newermt $firstdate ! -newermt $seconddate`
for i in $(echo $files)
do
zcat $i | grep from=$user | awk -F" " '{ print $1, $2, $3, $8 }' | grep domain.com >> /tmp/$user
done
for y in $(cat /tmp/$user | awk -F"=" '{ print $2}' | sed -e 's/,$//')
do
ldapsearch -x -LLL -h domain.com -D user -w pass -b "ou=users,dc=domain,dc=com" -s sub "(mail=$y)" cn | grep "cn::" | awk '{print $2}' | base64 -d | iconv -f UTF-8 -t KOI8-R >> /tmp/$user.txt
echo "" >> /tmp/$user.txt
done
paste -d ' ' /tmp/$user /tmp/$user.txt | mail -s "$user's mail log between $firstdate and $seconddate" root
rm /tmp/$user
rm /tmp/$user.txt
Скрипт запускается со следующими параметрами:
Как отработает - отправляет руту письмо с датой, адресом получателя и его ФИО.
ЗЫ можно его еще не хило оптимизировать и приукрасить, но руки заняты, делать некогда
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2012-04-12 23:22:51
QweЯty
кто подскажет как сделать скрипт такой..
простейшая форма:
но выдает сразу свю строку..
Код: Выделить всё
</li><li>Tap <img src="appointment.bmp"> and then tap <b>Accept</b>, <b>Tentative</b>, or <b>Decline</b>. If you want, you can also include a written message with the response. The response will be sent the next time that you synchronize or connect to your e-mail server, and your device Calendar will be updated.</li></ol>
<a name="editpics"></a><p><b>Edit Pictures</b></p> <p>You can rotate, crop, zoom, and adjust the brightness and color contrast of your .jpg pictures. </p><ul><li>Tap<img src="rotate.bmp"> to rotate a picture 90 degrees counter-clockwise.</li><li>Tap <img src="crop.bmp">to crop a picture by dragging and selecting the crop area. Tap outside of the box to stop cropping.</li><li>Tap <img src="zoom.bmp">to display the Zoom panel, from which you can zoom in or out of a picture, or return a picture to full-screen size.</li><li>Tap <b>Edit </b> ><b> Brightness and Contrast</b> to adjust the brightness and contrast levels of a picture.
<table cellspacing="2" cellpadding="2"><tr valign="top"><td><p><img src="light.2bp"></p></td><td>Tap<img src="scard.2bp">to view pictures stored on a storage card. Tap<img src="device.bmp">to view pictures stored in your My Pictures folder.</td></tr><tr><td></td><td><img src="line.2bp"></td></tr></table>
<ul><li>In Pictures, tap <img src="slideshow.bmp">to view pictures as a slideshow.</li></ul>
<td width=20 valign=top><img src="msn_mail.bmp"></td>
<li>For information about a program, tap <img src="flag.2bp"> > <b>Help</b> while using the program. For help with a dialog box or wizard, tap <img src="question.bmp">. Use the Up/Down control to scroll, and the Action button to close Help. To quickly find information, tap <b>Find</b> and enter a word or item for which you need information. </li>
<p><b>Change System Volume </b></p><p>You can adjust the volume for system sounds, such as the sound you hear when you tap on program names and menu options.</p> <ol><li>Tap <img src="volume.bmp">.</li><li>Under <img src="sysvol.bmp">, move the system volume slider to the desired volume level. </li><li>To mute system sounds, select <b>Off</b>.</li></ol>
а надо название файла...
пробовал и так:
Код: Выделить всё
cat * | grep .bmp | awk -F'[<img src="]' '{ print $0 }'
cat * | grep .bmp | awk -F'[<img src="]' '{ print $1/2/3 }'
при 0 выводит тоже самое... а при остальных почти ничего.. пару букв тока из всего и кучу пробелов...
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2012-04-13 13:42:23
kpp
На сколько я понимаю, эта ветка - не для вопросов, а для готовых скриптов.
Поэтому вопрос сразу не заметил.
Мой варинат:
Код: Выделить всё
cat * | sed 's/<img/\
/g' | sed -n 's/[^"]*"\(.*\.bmp\)\">.*/\1/p'
Не очень элегантно, самому не нравится, но работает.
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2012-05-03 2:41:20
es131245
Периодическая смена пароля
Код: Выделить всё
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin
export PATH
HOME=/root
export HOME
StartTime=`date +%s`
echo -e `date`"\n"`id`
echo 'user1qwerty'`date +"%d"` | pw mod user user1 -h 0
if [ $? -eq 0 ];then echo 'User Password: Changed'; else echo 'User Password: Error';
echo 'rootqwerty'`date +"%d"` | pw mod user root -h 0
if [ $? -eq 0 ];then echo 'Root Password: Changed'; else echo 'Root Password: Error';
echo -e 'Done in '$((`date +"%s"` - $StartTime))' seconds'"\n"
exit
BackUp на винт
Код: Выделить всё
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin
export PATH
HOME=/root
export HOME
StartTime=`date +"%s"`
echo -e `date`"\n"`id`
if [ "`df | grep /mnt`" ]; then echo 'Mount: Was Mounted';
else
count=1
while [ $count -le 5 ]
do
mount /dev/ad1s1a /mnt
if [ $? -eq 0 ]
then
echo "Mount: Done in $count try"
break
else
count=$(($count+1))
sleep 3
if [ $count -eq 6 ]; then echo 'Mount: Time Out, Abourting!'; exit; fi
fi
done
fi
dd if=/dev/ad2 of=/mnt/mbr.`date +"%Y-%m-%d"` bs=512 count=1
dump -0aLf - `cat /etc/fstab | grep ' / ' | awk '{print $1;}'` | gzip -9 > /mnt/dump.
for u in `cat /etc/fstab | awk '{print $2;}'`
do
case `sed -n "$n p" /etc/fstab | awk '{print $2;}'` in
'/')dump -0aLf - `cat /etc/fstab | grep ' / ' | awk '{print $1;}'` | gzip -9 > /mnt
'/usr')dump -0aLf - `cat /etc/fstab | grep ' /usr ' | awk '{print $1;}'` | gzip -9
'/var')dump -0aLf - `cat /etc/fstab | grep ' /var ' | awk '{print $1;}'` | gzip -9
'/usr/local/www/forum.lissyara.su')dump -0aLf - `cat /etc/fstab | grep 'source'
*)continue;
esac
done
mysqldump --user='bamper' --password='pppfffffffff=)' --all-databases |
chmod 600 /mnt/dump.*.`date +"%Y-%m-%d"`.gz /mnt/mbr.`date +"%Y-%m-%d"`
ls -lhAoG /mnt/mbr.`date +"%Y-%m-%d"` /mnt/dump.*.`date +"%Y-%m-%d"`.gz
count=1
while [ $count -le 5 ]
do
umount /mnt
if [ $? -eq 0 ]
then
echo "Umount: Done in $count try"
break
else
count=$(($count+1))
sleep 3
if [ $count -eq 6 ];then echo 'Umount: Time Out';fi
fi
done
echo -e 'Done in '$((`date +"%s"` - $StartTime))' seconds'"\n"
exit
Периодическая чиста BackUp'a (винт не unlimited ж)
Код: Выделить всё
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin
export PATH
HOME=/root
export HOME
StartTime=`date +"%s"`
echo -e `date`"\n"`id`
if [ "`df | grep /mnt`" ]; then echo 'Mount: Was Mounted';
else
count=1
while [ $count -le 5 ]
do
mount /dev/ad6s1a /mnt
if [ $? -eq 0 ]
then
echo "Mount: Done in $count try"
break
else
count=$(($count+1))
sleep 3
if [ $count -eq 6 ]; then echo 'Mount: Time Out, Abourting!'; exit; fi
fi
done
fi
dd if=/dev/ad4 of=/mnt/mbr.`date +"%Y-%m-%d"` bs=512 count=1
dump -0aLf - `cat /etc/fstab | grep ' / ' | awk '{print $1;}'` | gzip -9 > /mnt/dump.root.`date +"%Y-%m-%d"`.gz
for u in `cat /etc/fstab | awk '{print $2;}'`
do
case `sed -n "$n p" /etc/fstab | awk '{print $2;}'` in
'/')dump -0aLf - `cat /etc/fstab | grep ' / ' | awk '{print $1;}'` | gzip -9 > /mnt/dump.root.`date +"%Y-%m-%d"`.gz;;
'/usr')dump -0aLf - `cat /etc/fstab | grep ' /usr ' | awk '{print $1;}'` | gzip -9 > /mnt/dump.root.`date +"%Y-%m-%d"`.gz;;
'/var')dump -0aLf - `cat /etc/fstab | grep ' /var ' | awk '{print $1;}'` | gzip -9 > /mnt/dump.root.`date +"%Y-%m-%d"`.gz;;
'/usr/local/http/sites/source.y-es.ru')dump -0aLf - `cat /etc/fstab | grep 'source' | awk '{print $1;}'` | gzip -9 > /mnt/dump.root.`date +"%Y-%m-%d"`.gz;;
*)continue;
esac
done
mysqldump --user='bamper' --password='y)|(e_HE_CMEwHO' --all-databases | gzip -9 > /mnt/dump.sql.`date +"%Y-%m-%d"`.gz
chmod 600 /mnt/dump.*.`date +"%Y-%m-%d"`.gz /mnt/mbr.`date +"%Y-%m-%d"`
ls -lhAoG /mnt/mbr.`date +"%Y-%m-%d"` /mnt/dump.*.`date +"%Y-%m-%d"`.gz
count=1
while [ $count -le 5 ]
do
umount /mnt
if [ $? -eq 0 ]
then
echo "Umount: Done in $count try"
break
else
count=$(($count+1))
sleep 3
if [ $count -eq 6 ];then echo 'Umount: Time Out';fi
fi
done
echo -e 'Done in '$((`date +"%s"` - $StartTime))' seconds'"\n"
if[ "`ls /var/log/maillog.*`"];then rm /var/log/maillog.*; fi
if[ "`ls /var/log/messages.*`"];then rm /var/log/messages.*; fi
if[ "`ls /var/log/wtmp.*`"];then rm /var/log/wtmp.*; fi
if[ "`ls /var/log/auth.*.bz2`"];then rm /var/log/auth.*.bz2*; fi
if[ "`ls /var/log/maillog.*`"];then rm /var/log/maillog.*; fi
for u in `/var/log/`
do
echo -n > $u
done
exit
и регулярное копирования сайтов от оцепяток rm -rf
Код: Выделить всё
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin
export PATH
HOME=/root
export HOME
StartTime=`date +%s`
echo -e `date`"\n"`id`
rm -rf /usr/local/www/BackUp/pre/*
mv /usr/local/www/BackUp/last/* /usr/local/www/BackUp/pre/
cp -Rp `ls -d /usr/local/www/sites/* | grep -v "файлообменик"` /usr/local/www/BackUp/last/
echo -e 'Done in '$((`date +"%s"` - $StartTime))' seconds'"\n"
exit
все запускается cronom
Код: Выделить всё
1,30 * * * * /bin/sh /etc/scripts/cron/regular.sh >> /var/log/log.cron.regular.sh
0 1 * * * /bin/sh /etc/scripts/cron/daily.sh >> /var/log/log.cron.daily.sh
0 3 * * 1 /bin/sh /etc/scripts/cron/weekly.sh >> /var/log/log.cron.weekly.sh
0 5 28 * * /bin/sh /etc/scripts/cron/monthly.sh >> /var/log/log.cron.monthly.sh
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2012-06-24 11:52:23
QweЯty
Код: Выделить всё
#!/bin/sh
for i in `find . -name "*.xml" -exec grep -H 'ingredient id="5962"' {} \; | awk -F":" '{print $1}' | uniq | xargs` ; do `sed 's/ingredient\ id=\"5962\"/ingredient\ id=\"57\"/g' $i >> $i'_1' | mv $i'_1' $i `;
done
скрипт находит в файлах необходимые слова и заменяет их в файлах, и заменяет новые файлы на старые...
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2012-11-23 15:28:50
AntonioK
Уничтожаем данные на флешке:
Код: Выделить всё
dd if=/dev/urandom of=/dev/da0 bs=1M && dd if=/dev/zero of=/dev/da0 bs=1M
Вывести сортированный по размеру список файлов из текущей и вложенных папок:
Код: Выделить всё
find . -type f -print0 | xargs -0 ls -l | sort -k5,5rn
Рекурсивно удалить пустые каталоги из текущего и вложенных:
Считаем количество открытых tcp-соединений:
Код: Выделить всё
netstat -an | grep tcp4 | grep -v LISTEN | wc -l
Принудительно дропнуть все FIN_WAIT соединения:
Код: Выделить всё
netstat -an | grep FIN_WAIT_1 | perl -pe 's/.*\s((?:\d+\.){3}\d+)\.(\d+)\s*((?:\d+\.){3}\d+)\.(\d+).*/tcpdrop $1 $2 $3 $4/' | sh -x
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2013-03-27 9:04:17
Vlad5503
proxy-man писал(а):Мудохаюсь с одним таском

- нужно было распарсить текстовый фал в несколько тысяч строк и вычленить из него IP-адреса. Ну собственно дело получилось, но в конечный результат попали так же "левые строки" for example: 90/1212121 etc... их было собственно таких строчек фигня, несколько десятков и решил я этот "последний промежуточный вариант" еще раз "пропарсить". Наваял такого рода скриптик:
Код: Выделить всё
# вытягиваем в отдельный массив "левые строки"
ARR=(`cat ./hp_ip.txt|awk '/90\//'|uniq`)
# используем цикл и перебираем каждый член массива на предмет
# его нахождения в исходном файле, а затем при помощи утилиты tr
# типа "стираем" строчки из STDOUT и запихиваем в другой файл уже
# "чистые" строки
for STRING in ${ARR}; do
tr -d ${STRING} < /usr/home/father/Desktop/hp_ip_f.txt > ./IPADD.txt
done
Однако в "другой файл" сыпется "мусор" - т.е tr -d стирает в "нормальных" строках кое-какие цифровые символы...
Может быть кто-то подтолкнет в нужном направлении, как сделать erase "левым" строкам?
ЗЫ0 - пытался процесс стирания реализовать через sed, типа sed '/^$PATTERN/d' - херасе
ЗЫ1 - понятно, что на perl-е будет цивильно, но я его еще хреновато знаю, могу делать только простые вещи ...
Может такой вариант подойдёт?
Код: Выделить всё
cat "путь к файл" | grep -o '\([0-9]\+\.\)\{3\}[0-9]\+' | sort | uniq -c |awk '{print $2}'
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2013-03-27 12:22:53
kpp
Накрутили..
Код: Выделить всё
grep -o '\([0-9]\+\.\)\{3\}[0-9]\+' "путь к файл" | sort -u
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2013-10-11 12:16:30
densan
Скрипт архивации пользовательских данных: есть многоофисная сеть (звезда) с разными каналами. Скрипт, запускается с компьютера в центральном офисе, по rsync получает измененные данные с серверов (Windows) в удаленных офисах, посредством zfs через снапшоты получается глубина архива, на пуле куда все это хозяйство льется включено сжатие и дедупликация.
Т.к. при дедупликации zfs делает хэши для каждого блока, а хранятся хэши в озу, то при включении такого режима просчитайте необходимый объем озу. Если объем небольшой - выставите меньшее значение глубины архива.
стартующий скрипт
Код: Выделить всё
cat start.sh
#!/bin/sh
log="/var/log/rsync/rsync-all.log"
config="/usr/local/etc/rsyncd/servers"
zfs_backup="zfsstripe/backup"
rootdir="/data/stripe/backup"
script_name="/usr/local/etc/rsyncd/sync.sh"
# Глубина архива 31 день
count_backup="32"
echo="/bin/echo"
date="/bin/date"
ping="/sbin/ping"
rsync="/usr/local/bin/rsync"
mkdir="/bin/mkdir"
touch="/usr/bin/touch"
rm="/bin/rm"
awk="/usr/bin/awk"
df="/bin/df -k"
zfs="/sbin/zfs"
head="/usr/bin/head"
du="/usr/bin/du -k"
wc="/usr/bin/wc"
#удаляем старый и создаем новый файл лога
$rm $log
$touch $log
$echo "`$date +%F_%H-%M-%S` Start backup" >> $log
# Получаем объем свободного места в разделе куда льется бэкап
free="`$df | grep $zfs_backup | $awk '{print $4}'`"
$echo "Free space partition $zfs_backup=`expr $free / 1048576` Gb" >> $log
# Получаем объем каталога с бэкапом
# Использую получение размера backup_size через показания df,
# т.к. du занимает много времени.
#backup_size="`$du -s $rootdir | $awk '{print $1}'`"
backup_size="`$df | grep $zfs_backup | $awk '{print $3}'`"
$echo "Backup space=`expr $backup_size / 1048576` Gb" >> $log
let bk=$backup_size*2
#Если объем свободного места меньше чем 2-х кратный объем бэкапа
#удаляем старые снапшоты
while [ $free -le $bk ]
do
last_date="`$zfs list -t snapshot | grep $zfs_backup| $awk -F@ '{print($2)}' | $awk '{print($1)}' | $head -n 1`"
$echo "No free space" >> $log
$echo "List snapshots:"
$zfs list -t snapshot >> $log
$echo "Delete the oldest snapshot $last_date" >> $log
$zfs destroy $zfs_backup@$last_date
done
# Подсчитываем глубину архива и удаляем старые снапшоты
# глубина архива задается в count_backup
k=`$zfs list -t snapshot |$wc -l`
while [$k -ge $count_backup ]
do
last_date="`$zfs list -t snapshot | grep $zfs_backup| $awk -F@ '{print($2)}' | $awk '{print($1)}' | $head -n 1`"
$echo "Delete the oldest snapshot $last_date" >> $log
$zfs destroy $zfs_backup@$last_date
k=`$zfs list -t snapshot |$wc -l`
done
$echo "===================================================================" >> $log
while read server dir speed
do
#проверяем доступность IP сервера по пингу
$ping -q -c 4 $server > /dev/null 2>&1
if [ $? -eq 0 ]; then
$echo "`$date +%F_%H-%M-%S` Server $server ping=OK" >> $log
else
$echo "`$date +%F_%H-%M-%S` WARNING!!!!! Server $server down" >> $log
exit 0;
fi
# Удаляем старые логи
$rm /var/log/rsync/rsync-$dir.log
$touch /var/log/rsync/rsync-$dir.log
#создаем каталог куда будет писать rsync
k="$rootdir/$dir/profiles"
$mkdir -p $k
#высчитываем лимит скорости для rsync, оставляем 20KBs для остального трафика
let b=$speed/8-20
sh ${script_name} $server $dir $b /var/log/rsync/rsync-$dir.log $rootdir/$dir/profiles profiles >> log 2>&1 &
if [ ${dir} = 'cp' ]; then
k="$rootdir/$dir/private"
$mkdir -p $k
sh ${script_name} $server $dir $b /var/log/rsync/rsync-$dir.log $rootdir/$dir/private private>> log 2>&1 &
fi
done < $config
$echo "===================================================================" >> $log
файл с именями серверов, название папки куда лить с данного сервера данные и скорость с которой rsync будет сливать данные с этого сервера.
Код: Выделить всё
cat servers
exvs-pnz-fl-th1 cp 102400000
exvs-pnz-fl-ar1 ar 2048
exvs-pnz-fl-sr1 sr 4096
exvs-pnz-fl-pr1 pr 2048
exvs-pnz-fl-vl2 vl 2048
exvs-pnz-fl-tr1 tr 2048
exvs-pnz-fl-yp2 yp 4096
exvs-pnz-fl-kz1 kz 2048
exvs-pnz-fl-nk1 nk 2048
exvs-pnz-fl-km1 km 1024
exvs-pnz-fl-sd1 sd 1024
exvs-pnz-fl-nl1 nl 1024
exvs-pnz-fl-zr1 zr 2048
скрипт вызова rsync
Код: Выделить всё
cat sync.sh
#!/bin/sh
#
rsync="/usr/local/bin/rsync"
echo="/bin/echo"
server=$1
dir=$2
speed=$3
log=$4
localdir=$5
source=$6
k="$rsync --archive --exclude-from=/usr/local/etc/rsyncd/exclude.txt --time-limit=600 --bwlimit=$speed --compress-level=9 --delete-after --quiet --8-bit-output $server::$source $localdir"
$echo "Start command $k" >> $log
$k >> $log 2>&1
скрипт для составления отчета и отсылки его админам
Код: Выделить всё
cat report.sh
#!/bin/sh
#
date="/bin/date"
config="/usr/local/etc/rsyncd/servers"
report="/var/log/rsync/report-`$date +%F`"
mail_to="admin@domain.local"
start_log="/var/log/rsync/rsync-all.log"
zfs_backup="zfsstripe/backup"
backup_patch="/data/stripe/backup"
mail="/usr/bin/mail"
touch="/usr/bin/touch"
rm="/bin/rm"
cat="/bin/cat"
echo="/bin/echo"
df="/bin/df"
zdb="/usr/sbin/zdb"
zpool="/sbin/zpool"
zfs="/sbin/zfs"
# Делаем снапшот.
$zfs snapshot zfsstripe/backup@`$date +%F`
#Формируем файл отчета и сливаем в него лог старта rsync
$touch $report
$echo "`$date +%F_%H-%M-%S` Start reports" >> $report
$cat $start_log>> $report
#Сливаем в файл отчета лог rsync по каждому серверу
while read server dir speed
do
$echo "Server $server"
$cat "/var/log/rsync/rsync-$dir.log" >> $report
done < $config
$zfs list -t snapshot >> $report
$zdb -DD zfsstripe >> $report
$zpool status -v >> $report
$df -h >> $report
$echo "`$date +%F_%H-%M-%S` Stop reports" >> $report
#Отсылаем репорт на почту
#$cat $report | /usr/local/bin/iconv -f UTF-8 -t MS-CYRL | $mail -s "Rsync report" $mail_to
$cat $report | $mail -s "Rsync report" $mail_to
каталог с пользовательскими данными (по состоянию на прошедшую ночь) расшарен для группы админов, с ведением лога кто куда... через самбу. Для получения данных из снапшота нужно с консоли выполнить mount -t zfs zfsstripe/backup@2013-05-27 /mnt.
Не хватает знаний для прикручевания к этому хозяйству веб интерфейса с контролем доступа.
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2013-11-16 10:08:03
lazhu
Парсер статистики ng_ipacct в MySQL.
Prerequisites:
Код: Выделить всё
#cat /usr/local/etc/ng_ipacct.conf
...
#скрипт для внутреннего интерфейса
ng_ipacct_<int_if>_checkpoint_script="/usr/local/bin/ipacct.sh <int_if>"
#скрипт для внешнего интерфейса
ng_ipacct_<ext_if>_checkpoint_script="/usr/local/bin/ipacct.sh <ext_if> ext"
Создание базы описывать не буду, оно очевидно.
Сам скрипт:
Код: Выделить всё
#!/bin/sh
# Путь к ipacctctl
cmd="/usr/local/sbin/ipacctctl"
# Обрабатываемый интерфейс
iface=$1
# Путь к логу
log="/var/log/ipacct/ng_ipacct.log"
# IP внутреннего интерфейса
ip="<int_if_ip>"
# Данные для коннекта к MySQL
user="<user>"
passwd="<password>"
db="<database>"
# команда SQL-клиента
sql="/usr/local/bin/mysql --user=${user} --password=${passwd} --database=${db}"
# Дампим статистику (для внешнего интерфейса - входящий трафик, для внутреннего - исходящий)
if [ "$2" = "ext" ]; then
${cmd} -i ${iface}_ip_acct:${iface} checkpoint
else
${cmd} -o ${iface}_ip_acct:${iface} checkpoint
fi
${cmd} ${iface}_ip_acct:${iface} show >> ${log}
${cmd} ${iface}_ip_acct:${iface} clear
# Удаляем локальный трафик и парсим лог
awk '!/'${ip}'/' ${log} |
{
while read line; do
count=1; cols=""; vals=""
for col in src_ip src_port dst_ip dst_port protocol packets bytes; do
cols="${cols}, \`${col}\`"
vals="${vals}, '`echo ${line} | awk '{print $'${count}'}'`'"
count=$(( ${count}+1 ))
done
date=`echo ${line} | awk '{print $'${count}'}'`
query="${query}(FROM_UNIXTIME(${date})${vals}),"
done
echo "INSERT INTO \`${iface}\` (\`date\`${cols}) VALUES" ${query}
} | sed 's/,$/;/' | ${sql}
# Удаляем лог
rm ${log}
Статистику за полчаса на моем HP Microserver N40L с 8Гб ECC парсит минут 8-10 (~500Кб файл). На перле, конечно, будет правильнее и быстрее, а эта писанина для любителей "труюниксвэя"

Re: Полезные скрипты наструганные на коленке.
Добавлено: 2013-11-19 11:30:13
kpp
2
lazhu
Жестковато и не оптимально, хотя вполне работоспособно.
AWK используется не по назначению

Re: Полезные скрипты наструганные на коленке.
Добавлено: 2013-11-20 13:24:29
lazhu
kpp писал(а):2
lazhu
Жестковато и не оптимально, хотя вполне работоспособно.
AWK используется не по назначению

Можно, конечно, упростить синтакс, например вот так:
Код: Выделить всё
{
while read line; do
values=""
for i in `seq 1 7`; do
values="${values}, '`echo ${line} | awk '{print $'${i}'}'`'"
done
date=`echo ${line} | awk '{print $8}'`
query="${query}(FROM_UNIXTIME(${date})${values}),"
done
echo 'INSERT INTO `'${iface}'` (`date`, `src_ip`, `src_port`, `dst_ip`, `dst_port`, `protocol`, `packets`, `bytes`) VALUES' ${query}
}
или рубить файл cut'ом вместо awk. Но суть от этого не изменится - построчная обработка файла занимает ~99.9% времени работы скрипта. Чтобы сократить время, надо писать скрипт на перле, с чем, я думаю, никто и не спорит.