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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
NoResponse
мл. сержант
Сообщения: 76
Зарегистрирован: 2007-07-30 1:39:02
Контактная информация:

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

Непрочитанное сообщение NoResponse » 2011-07-15 2:36:58

не секрет что при большом количестве джайлов сложно помнить имена оных
написал вот такое

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

#!/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
Я сам по себе скопище энтропии. А по законам термодинамики, если не принимать никаких действий энтропия стремится к бесконечности. Похоже, так оно и есть.

therb1
ефрейтор
Сообщения: 53
Зарегистрирован: 2011-05-10 2:19:46

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

Непрочитанное сообщение therb1 » 2011-11-02 3:07:00

народ я вообще новичек новичком
хочу наваять скрипт последовательной установки пакето пробвал типа

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

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 не отрабатывает.
дайте пожалуйста хоть кудав копать

Аватара пользователя
bagas
лейтенант
Сообщения: 908
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

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

Непрочитанное сообщение bagas » 2011-11-02 8:20:46

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 пользака вашего.
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

therb1
ефрейтор
Сообщения: 53
Зарегистрирован: 2011-05-10 2:19:46

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

Непрочитанное сообщение therb1 » 2011-11-02 22:26:21

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

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:

Pr0l
рядовой
Сообщения: 20
Зарегистрирован: 2009-03-06 8:56:07

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

Непрочитанное сообщение Pr0l » 2011-11-02 22:35:04

может тупо не хватает знака &&
#!/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 &&

по итогу если где-то касяк то дальше ничего не произойдет, хотя ИМХО это лобовое решение и очень громозкое

Pr0l
рядовой
Сообщения: 20
Зарегистрирован: 2009-03-06 8:56:07

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

Непрочитанное сообщение Pr0l » 2011-11-02 22:47:16

sh -x /usr/download/install вывод смотри где ошибка, + положительный ответ, - отрицательный.
и в скриптах всегда надо указывать прямой путь к программе иначе скрипт будет работать только если руками заводить, по крону ошибки сыпятся.

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

therb1
ефрейтор
Сообщения: 53
Зарегистрирован: 2011-05-10 2:19:46

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

Непрочитанное сообщение therb1 » 2011-11-03 1:10:34

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

192#exec /usr/123 ( этого файла даже не существует)
/usr/123: Command not found.

Freebsd/amd64 (192.168.0.1) (ttyv0)

login:


сама комманда EXEC выкидывает в логин, к чему бы я ее не применял


therb1
ефрейтор
Сообщения: 53
Зарегистрирован: 2011-05-10 2:19:46

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

Непрочитанное сообщение therb1 » 2011-11-03 21:38:35

ну типа это же запуск execuit я так понимаю

Happy_demon
сержант
Сообщения: 194
Зарегистрирован: 2006-08-16 16:33:55
Откуда: Санкт-Петербург

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

Непрочитанное сообщение Happy_demon » 2011-11-17 13:37:12

Если плохо на форуме искал - заранее прошу прощения. Надо сделать 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

Отправили письмо - оно попадает в базу и все письма от этого человека, не зависимо от других проверок к вам гарантировано придут.
Удачи!

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

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

Непрочитанное сообщение zhqetuo » 2011-12-27 23:12:15

#!/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
=======
отправка уведомления при только смене события, скрипт в цикле
:-D может пригодиться кому то

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

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

Непрочитанное сообщение zhqetuo » 2011-12-27 23:28:31

предыдущей скрипт это
скрипт проверки на доступность доступность хоста и отслеживание его состояния на данный момент .
сделан на основании 2-х скриптов взятых из интернета(почти ничего не правилось потому и сумбурно ) часть у Cancer.
много лишних выводов информации, пошаговый :smile:
=

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

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

Непрочитанное сообщение Alex Keda » 2011-12-28 21:16:46

оформление листингов, мы канешно "ниасилили"

простите, вот такие "высеры" даже смотреть нет желания
Убей их всех! Бог потом рассортирует...

Аватара пользователя
m0ps
лейтенант
Сообщения: 986
Зарегистрирован: 2008-05-08 20:18:06
Откуда: Chernigov (Ukraine)
Контактная информация:

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

Непрочитанное сообщение m0ps » 2012-02-28 18:36:13

Буквально сегодня начальство поставило задачу, сказать кому внутри организации определенный пользователь отправлял письма в промежутке определенных дат. почтовик - постфикс, который берет учетки из АД (через лдап). На скорую руку накидал такой скриптик:

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

#!/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

Скрипт запускается со следующими параметрами:

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

userlog.sh user1 2012-01-30 2012-02-20

Как отработает - отправляет руту письмо с датой, адресом получателя и его ФИО.

ЗЫ можно его еще не хило оптимизировать и приукрасить, но руки заняты, делать некогда

Аватара пользователя
QweЯty
лейтенант
Сообщения: 785
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

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

Непрочитанное сообщение QweЯty » 2012-04-12 23:22:51

кто подскажет как сделать скрипт такой..
простейшая форма:

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

test# cat * | grep .bmp

но выдает сразу свю строку..

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

</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> &gt;<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"> &gt; <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>


а надо название файла...

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

sysvol.bmp
volume.bmp
question.bmp
...


пробовал и так:

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

cat * | grep .bmp | awk -F'[<img src="]' '{ print $0 }'
cat * | grep .bmp | awk -F'[<img src="]' '{ print $1/2/3 }'


при 0 выводит тоже самое... а при остальных почти ничего.. пару букв тока из всего и кучу пробелов...
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

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

Непрочитанное сообщение kpp » 2012-04-13 13:42:23

На сколько я понимаю, эта ветка - не для вопросов, а для готовых скриптов.
Поэтому вопрос сразу не заметил.
Мой варинат:

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

cat * | sed 's/<img/\
/g' | sed -n 's/[^"]*"\(.*\.bmp\)\">.*/\1/p'

Не очень элегантно, самому не нравится, но работает.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

es131245
проходил мимо
Сообщения: 8
Зарегистрирован: 2012-05-03 1:00:33

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

Непрочитанное сообщение es131245 » 2012-05-03 2:41:20

Периодическая смена пароля

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

#!/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

Аватара пользователя
QweЯty
лейтенант
Сообщения: 785
Зарегистрирован: 2010-10-12 0:15:15
Откуда: Таганрог, Калининград
Контактная информация:

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

Непрочитанное сообщение QweЯty » 2012-06-24 11:52:23

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

#!/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


скрипт находит в файлах необходимые слова и заменяет их в файлах, и заменяет новые файлы на старые...
Инженер не смотрит порно. Он ведет расчет бабы на усталость © Федор Сумкин
Изображение

Аватара пользователя
AntonioK
рядовой
Сообщения: 38
Зарегистрирован: 2009-12-10 16:26:55

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

Непрочитанное сообщение AntonioK » 2012-11-23 15:28:50

Уничтожаем данные на флешке:

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

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


Рекурсивно удалить пустые каталоги из текущего и вложенных:

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

find . -type d -empty -delete


Считаем количество открытых 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

Vlad5503
сержант
Сообщения: 172
Зарегистрирован: 2010-03-25 5:41:41

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

Непрочитанное сообщение Vlad5503 » 2013-03-27 9:04:17

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}'

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

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

Непрочитанное сообщение kpp » 2013-03-27 12:22:53

Накрутили..

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

grep -o '\([0-9]\+\.\)\{3\}[0-9]\+' "путь к файл" | sort -u
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

densan
ст. сержант
Сообщения: 357
Зарегистрирован: 2007-12-06 10:02:02
Откуда: Penza
Контактная информация:

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

Непрочитанное сообщение densan » 2013-10-11 12:16:30

Скрипт архивации пользовательских данных: есть многоофисная сеть (звезда) с разными каналами. Скрипт, запускается с компьютера в центральном офисе, по 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.
Не хватает знаний для прикручевания к этому хозяйству веб интерфейса с контролем доступа.

lazhu
сержант
Сообщения: 176
Зарегистрирован: 2013-08-10 14:28:38
Контактная информация:

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

Непрочитанное сообщение lazhu » 2013-11-16 10:08:03

Парсер статистики 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Кб файл). На перле, конечно, будет правильнее и быстрее, а эта писанина для любителей "труюниксвэя" ;-)

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

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

Непрочитанное сообщение kpp » 2013-11-19 11:30:13

2 lazhu
Жестковато и не оптимально, хотя вполне работоспособно.
AWK используется не по назначению ;)
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

lazhu
сержант
Сообщения: 176
Зарегистрирован: 2013-08-10 14:28:38
Контактная информация:

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

Непрочитанное сообщение lazhu » 2013-11-20 13:24:29

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% времени работы скрипта. Чтобы сократить время, надо писать скрипт на перле, с чем, я думаю, никто и не спорит.


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

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

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