Показать полную графическую версию : Маленькие скрипты на каждый день
В этой теме будут публиковаться маленькие скрипты, помогающие выполнять рутинную работу.
Скрипт меняет кодировку всех файлов в текущей директории с cp1251 на UTF-8
#/bin/sh
dir=.
for i in $dir/*
do
if [ -f $i ]
then
cp $i $i.utf
iconv -f cp1251 -t utf-8 $i -o $i.utf
mv $i.utf $i
fi
done
Скрипт меняет строку charset=windows-1251 на charset=UTF-8 в каждом файле текущей директории
#bin/sh
dir=.
for i in $dir/*
do
if [ -f $i ]
then
cp $i $i.ed
sed 's/charset=windows-1251/charset=UTF-8/g' $i > $i.ed
mv $i.ed $i
fi
done
Способ использования: скопировать текст, создать новый текстовый файл в любом текстовом редакторе, вставить скопированный текст, сохранить под именем, например, script.sh, затем в консоли дать команду
chmod +rx script.sh
Запуск скрипта на исполнение выполняется из каталога со скриптом командой
./script.sh
А как ети скрипты вообще применять? Можно по-подробнее только :)
(MaNDRIVa)
Очищаем все файлы в каталоге и подкаталогах.
#!/bin/bash
path='/var/garbage'
for i in `ls $path`;do
if [ ! -d $path$i ] ;then
echo '' > $path$i;
fi
if [ -d $path$i ];then
for s in `ls $path$i`;do
echo '' > $path$i'/'$s;
done
fi
done
Не буду говорить что я великий и могучий скриптописатель... Приятель попросил сделать задание на лабу - посчитать количество файлов в каталогах из $PATH и вывести на экран, отсортировав по количеству файлов:
#!/bin/bash
LANG=C
for i in `echo $PATH | sed -n s/\:/\ /gp`; do
echo -ne "$i:\t"; ls -1R $i/ 2>/dev/null | grep -vE 'total|^$|\:$' | wc -l;
done | sort -k 2nr
Скрипт для подбора кодировки текстового файла:
#!/bin/sh
ENC=KOI8-R # в какую кодировку переводить
FILE=/tmp/file.txt # файл
for i in `iconv -l | sed -e 1,5d -e 's/\/\///g'`; do
echo -e "\n\n-----\n$i\n-----\n";
iconv -c -f $i -t $ENC $FILE
read;
done
Простой скрипт для отслеживания сайтов (англ. яз.) (http://applications.linux.com/article.pl?sid=07/05/30/1433232)
Сам скрипт:
#!/bin/sh
# webtrack.sh
RECIP=user@host # where notifications get sent
DUMPCMD="w3m -dump" # text browser invocation
for url in $(cat list.txt); do
md5=$(echo "$url" | md5sum | cut -d\ -f 1)
touch $md5.txt
$DUMPCMD "$url" > tmp.txt
if diff $md5.txt tmp.txt >/dev/null; then
: #echo no changes
else
: #echo "changes: "
diff -Napu $md5.txt tmp.txt > diff.txt
mv tmp.txt $md5.txt
mail -s "Changes in $url found." "$RECIP" <<eof
The diff has $(wc -l diff.txt | cut -d\ -f 1) lines.
Changes are below.
$(cat diff.txt)
eof
fi
done
Вспомогательный скрипт:
#!/bin/sh
# ww-add.sh
# if the list is local
echo '$1' >> /path/to/list.txt
# if the list is remote
ssh user@host "echo '$1' >> /path/to/list.txt"
Показать 5 ip-адресов, с которых установлено больше всего коннектов на 25-й порт на сервер. Вместо 1.2.3.4 подставьте ваш ip-адрес :) Полезно для вылавливания спамеров.
netstat -antp|grep "1.2.3.4:25" |awk '{a=$5;split (a,b,":");g[b[1]]++}END{for (h in g) print g[h]" "h}'|sort -n|tail -5
Скрипт для очистки очереди Qmail от спама.
Путь /var/qmail/ при необходимости заменяем на свой путь к qmail-у.
Длинную строчку find ... при необходимости модифицируем, с учётом специфики спама на вашем сервере :)
#!/bin/bash
TS=`date +%d.%m.%Y.%s`
find /var/qmail/queue/mess/ -type f -exec grep -lEi 'failure notice|ssbhomes.com|Unknown Recipient|WATCHDOG|nlarge your|Returned mail|The Best For Your Health|Hot Se with Viagra|Pharmacy for Everyone|Delivery Status Notification|failure notice|Mailer-daemon@|herbal|agra|ialis|vitra|porn|xgenconsulting.com|postmaster@|penis|Home Depot gift card|Your Loan Pre-Approval|Your Mortgage Pre-Approval|Happy NW|Time to make it bigger!|Do away with everything you are indebted for without paying an other cent|Size, Does It Really Matter!?!|Make it larger!|Hey MAN!|Ink & Toner - 2007 Bonanza Super Sale|Time to make it larger NOW!' {} \; >> /tmp/76K_q.${TS}
/var/qmail/bin/qmail-qstat
/etc/init.d/qmail stop
sleep 5
/etc/init.d/qmail stop
sleep 5
cat /tmp/76K_q.${TS} | while read fn
do
rm -f -- ${fn}
echo ${fn} | sed "s/mess/local/g" | xargs rm -f --
echo ${fn} | sed "s/mess/remote/g" | xargs rm -f --
echo ${fn} | sed "s/mess/info/g" | xargs rm -f --
echo ${fn} | sed "s/mess/todo/g" | xargs rm -f --
short_fn=`echo ${fn} | sed 's#^.*/##'`
rm -f -- /var/qmail/queue/bounce/${short_fn} /var/qmail/queue/intd/${short_fn} /var/qmail/queue/todo/${short_fn}
echo ${fn}
done
/etc/init.d/qmail start
/var/qmail/bin/qmail-qstat
alive_corpse
13-08-2007, 22:43
Простой и короткий, но полезный скрипт, меняющий в директории и всех поддиректориях права доступа к файлам в зависимости от их расширения. В данном примере файлы с расширением php и tcl получат права доступа 755, а все остальные - 655.
#!/bin/bash
find . -name \*.* -exec chmod 655 {} \;
find . -name \*.php -exec chmod 755 {} \;
find . -name \*.tcl -exec chmod 755 {} \;
Скрипт для создания бэкапов.
#!/bin/bash
DATE=`date '+%F'`
BACKUP="/Backup/office_$DATE.sql"
mysqldump -uuser -hlocalhost office > $BACKUP
Бэкапы делаю, на отдельный жесткий диск.
Вот еще полезный, скрипт на perl для отправки сообщения на вашу почту, возможности использования актуальны.
#!/usr/bin/perl -w
use Net::SMTP; #модуль для отправки
$smtp = Net::SMTP->new('smtp.masterhost.ru'); # сервер отправки
$smtp->mail('от кого');
$smtp->to('кому');
$smtp->data();
$smtp->auth("имя","пароль");
$smtp->datasend("From: <имя\@домен>\n");
#$smtp->datasend("To: <имя\@домен>\n");
$smtp->datasend("Subject:Ваша тема\n");
$smtp->datasend("Content-Type: text/plain; charset=windows-1251\n");
$smtp->datasend("Content-Transfer-Encoding: 8bit\n");
$smtp->datasend("\n");
$smtp->datasend("ваш текст\n");
$smtp->dataend();
$smtp->quit;
Еще можно добавить возможность прикреплять файл. Но пока не нашел, не селен в perl.
Если есть гуру по правьте.
Генерим несколько паролей(количество - как повезет, но не больше 10), альфанумеричных, длиной 8 символов:
cut -b 0-104857600 /dev/urandom | head -n 1000 | strings -n 8 | cut -b 0-8 | egrep "^[a-zA-Z0-9]*$"
Перевел с kdialog на zenity скрипт (http://ylsoftware.com/?action=news&na=viewfull&news=405), меняющий кодировку с файле.
#!/bin/sh
# Получаем имя исходного файла
SRCFILENAME=`zenity --title="Выберите исходный файл" --file-selection`
# Если имя файла не пустое идём дальше
if (test ${SRCFILENAME}1 != "1") then
# Получаем имя конечного файла
DSTFILENAME=`zenity --title="Выберите конечный файл" --file-selection --save`
# Если имя файла не пустое идём дальше
if (test ${DSTFILENAME}1 != "1") then
# Если конечный и начальный файл один и тот же -
# Завершаем скрипт с сообщением об ошибке
if (test ${SRCFILENAME} = ${DSTFILENAME}) then
zenity --error --text="Нельзя перекодировать файл сам в себя!" --title="Ошибка"
exit 1
fi
# Получаем список доступных кодировок
ENCODINGLIST=`iconv -l | sed 's/\/\///'| awk '{ print $1 " " $1}'|sort`
# Запрашиваем кодировку исходного файла
ENCODING=`zenity --list --text="Выберите кодировку:" --column="Кодировка" ${ENCODINGLIST}`
# Если кодировка выбрана - перекодируем файл и сообщаем об
# успешном завершении скрипта
if (test ${ENCODING}1 != "1") then
iconv -f ${ENCODING} -t utf-8 ${SRCFILENAME} > ${DSTFILENAME}
zenity --info --text="Перекодирование выполнено!"
fi
fi
fi
Скрипт делает бэкап нужных, нам конфигов.
#!/bin/bash
#Читаем содержимое файла, и копируем его файлы.
FILES=`cat /var/package.cfg`
#Добавим дату, к каталогу.
DATE=`date '+%F'`
#Создадим папку + Дата.
mkdir /backup/conf_$DATE
#Укажем куда копировать.
CR=/backup/conf_$DATE/
#Копируем файлы указанные в package.cfg
cp -f $FILES $CR
#создадим архив.
tar -cvzf /backup/conf_$DATE.gz $CR/*
#Удаляем файлы, после архивации.
rm -Rf /backup/conf_$DATE
must die
27-03-2008, 15:05
Генерим несколько паролей(количество - как повезет, но не больше 10), альфанумеричных, длиной 8 символов: »
Может удобнее pwgen
NordWest
08-06-2008, 13:30
Был у меня когда-то скрипт, который меняет владельца для всех файлов и подддиректорий. Сосед-линуксойд написал. Очень полезно было... Не создадите тут?
must die
09-06-2008, 14:37
NordWest,
chown -R user:group /dir_name
Нет PGP Disk ? Не беда =)
#!/bin/bash
MNTPT=/home/Amin/dm_crypt_test/mount_point
CCNTR=/home/Amin/dm_crypt_test/container.dmc
start() {
echo " "
echo "----- Mount CryptoContainer ----------------------"
/sbin/losetup /dev/loop0 $CCNTR
/sbin/cryptsetup create u /dev/loop0
mount -t ext2 /dev/mapper/u $MNTPT
MLINE=`mount | grep $MNTPT`;
if [ -n "$MLINE" ]; then
echo "----- Mount CryptoContainer Complete ! ---------";
else echo '----- ERROR - Bad password -----------------';
stop ;
fi
echo " "
}
stop() {
echo " "
echo "----- Unmount CryptoContainer --------------------"
sync
umount $MNTPT
/sbin/cryptsetup remove u
/sbin/losetup -d /dev/loop0
echo "----- Unmount CryptoContainer Complete ! ---------"
echo " "
}
case "$1" in
start)
start ;;
stop)
stop ;;
*)
MLINE=`mount | grep $MNTPT`
if [ -n "$MLINE" ]; then
stop;
else
stop;
clear;
start;
fi
esac
exit 0;
К счастью, в Федоре все необходимое для шифрования файлов уже есть, поэтому ничего качать/ставить/пересобирать не пришлось.
Вот только одного не понимаю - криптография в ядре есть уже тыщу лет, а написать к этому простой интерфейс а-ля PGP Disk так никто вроде и не удосужился (хотел бы в этом ошибиться).
P.S. Отправной точкой взял вот эту статейку - http://www.xakep.ru/magazine/xa/090/104/1.asp (я юзал только секцию "Раздел в виде файла на диске", 5-я страница), только вместо reiser сделал ext2 . Для себя еще раз сделал вывод, что хоть "ксакеп" и пальцовый журнал, но найти там кое-что полезное все же можно. Впрочем, из любителей хихикать в сторону "ксакепа" практически никто не смог создать проект даже близкого уровня. Флуд ведь разводить гораздо легче, чем реально что-то полезное сделать.
===== Заметки для меня =====
touch cryptdisk.cds # создаем новый контейнер
shred -n1 -s50M cryptdisk.cds # затрем в контейнере 50 Мб /* размер */
# подготовим диск :
losetup /dev/loop0 ~/cryptdisk.cds # соединение с loop-устройством
cryptsetup -y create mydisk /dev/loop0 # создание в /dev/mapper своего диска
mkfs /dev/mapper/mydisk # форматирование раздела
HINT #1 : cryptsetup туп как пробка, и никаких паролей он не проверяет. То есть применяет алгоритм "в лоб". Поэтому даже если вы подсунете кривой (поврежденный) контейнер или неверный пароль, то cryptsetup все равно его подключит (ему похоже фиолетово, что там в loop-устройстве и какой там пароль), только в устройстве будет мусор. Проверка пароля делается mount'-ом =)
HINT #2 : если сделать только losetup + cryptsetup, но не выполнять mount, то в /dev/mapper/mydisk будет голое устройство, которое можно, например, проверить с помощью fsck после нештатной ситуации вроде сбоя питания.
Скрипт закачки обновлений к Kaspersky
Кумулятивные:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Скрипт для загрузки обновлений к Kaspersky AntiVirus
import os
import datetime
import time
from ftplib import FTP
author="Александр Теленьга"
print "-----------------------------------------------------"
print "Скрипт для загрузки обновлений к Kaspersky AntiVirus"
print "Автор: "+author
print "-----------------------------------------------------"
print "Начинаем работу..."
print
flag=False
while not flag:
try:
ftph = FTP('ftp.downloads1.kaspersky-labs.com')
except:
print "Хост в ауте. Ждем..."
time.sleep (10)
exit
else:
print "Хост живой. Начинаем скачивать..."
flag=True
cumul_URL="ftp://ftp.downloads1.kaspersky-labs.com/zips/av-i386\&ids-cumul.zip"
os.system('rm -Rf /media/LAN/install/Updates/Kaspersky\ Bases/cumul/*')
save_path="/media/LAN/install/Updates/Kaspersky\ Bases/cumul/"
os.system('wget -c -t 100 %s' %(cumul_URL))
os.system('mv av-i386\&ids-cumul.zip %s' %(save_path))
print "Работа скрипта завершена."
Ежедневные (с распаковкой кумулятивных и ежедневных в соответствующие папки):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Скрипт для загрузки обновлений к Kaspersky AntiVirus
import os
import datetime
import time
from ftplib import FTP
author="Александр Теленьга"
print "-----------------------------------------------------"
print "Скрипт для загрузки обновлений к Kaspersky AntiVirus"
print "Автор: "+author
print "-----------------------------------------------------"
print "Начинаем работу..."
print
flag=False
while not flag:
try:
ftph = FTP('ftp.downloads1.kaspersky-labs.com')
except:
print "Хост в ауте. Ждем..."
time.sleep (10)
exit
else:
print "Хост живой. Начинаем скачивать..."
flag=True
daily_URL="ftp://ftp.downloads1.kaspersky-labs.com/zips/av-i386\&ids-daily.zip"
os.system('rm -Rf /media/LAN/install/Updates/Kaspersky\ Bases/daily/*')
save_path="/media/LAN/install/Updates/Kaspersky\ Bases/daily/"
os.system('wget -c -t 100 %s' %(daily_URL))
os.system('mv av-i386\&ids-daily.zip %s' %(save_path))
print "Начинаем извлечение из архива..."
current_path="/media/LAN/install/Updates/Kaspersky\ Bases/current/cumul"
os.system('rm -Rf %s/*' %(current_path))
os.system('unzip -o /media/LAN/install/Updates/Kaspersky\ Bases/cumul/av-i386\&ids-cumul -d %s' %(current_path))
current_path="/media/LAN/install/Updates/Kaspersky\ Bases/current/daily"
os.system('rm -Rf %s/*' %(current_path))
os.system('unzip -o /media/LAN/install/Updates/Kaspersky\ Bases/daily/av-i386\&ids-daily -d %s' %(current_path))
print "Работа скрипта завершена."
censored
10-12-2008, 12:55
Помогите со скриптом. Нужно чтобы файлы старше 7 дней удалялись автоматом.
find /tmp -type f -mtime 7 -print0 | xargs -0 rm -f
добавьте это в крон
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.