Arquivo da categoria: Script

Salvar arquivos como UTF-8 no VI (VIM)

você enviou os arquivos html para o servidor e os acentos ficaram como caracteres estranhos ?!
é possível que seu ambiente esteja configurado para usar o padrão de codificação ISO e o servidor UTF-8.
para forcar salvar o arquivo na codificação UTF-8, no vim, use o comando:
:w ++enc=utf-8

Script nagios plugin shoutcast ouvintes ativos

#!/bin/bash
# Nagios shoutcast plug-in
# By Rafael Padilha (rafael.delete@gmail.com)
# AND Juliano Jeziorny (djkadu@gmail.com)
# Rev 0.1
# 01/12/2015

WARN=90 # default Warning threshold if none is specified
ALER=75 # default Alert thresshold if none is specified
CURL=`which curl` # you can also specify the full path to curl
[[ -z $CURL ]] && exit 3 # if curl is not present exit with unknown error

while getopts “:H:p:w:a:” OPT; do # check supplied arguments
case $OPT in
H ) HOST=$OPTARG;;
p ) PORT=$OPTARG;;
w ) WARN=$OPTARG;;
a ) ALER=$OPTARG;;
esac
done
if [[ -n $HOST && -n $PORT ]] # test if minimum required arguments are present
then
STR=`$CURL http://$HOST:$PORT/status-json.xsl -A Mozilla/4.0 -s -m 5`
case $? in
0 ) ;;
6 ) echo “Invalid Host”; exit 1;;
7 ) echo “SHOUTCAST ALERT – Failed to connect to host on port $PORT”; exit 2;;
* ) echo “SHOUTCAST UNKNOWN – Unknown error”; exit 3;;
esac
CUR=`echo $STR |cut -d, -f21 |cut -d: -f2` # cut out current listenens
MAX=`echo $STR |cut -d, -f20 |cut -d: -f2` # cut out maximum listeners
LEVEL=”OK” && EXIT=0 # if we got to this point with no error assume level is OK
[[ “$CUR” -ge “$WARN” ]] && LEVEL=”WARNING” && EXIT=1 # check if current listeners is higher than warning theashold
[[ “$CUR” -ge “$ALER”-1 ]] && LEVEL=”ALERT” && EXIT=2 # check if current listeners is higher than alarm threshold
echo “SHOUTCAST $LEVEL – $CUR out of $MAX listeners on port $PORT”
exit $EXIT
fi
echo “Usage:
check_shoutcast -H -p [-w warning level (default 75 listeners)] [-a alert level (default 90 listeners)]”

Script para redundancia de link

O Script a baixo é para quem possui dois links de internet, e quer que o alternativo entre em ação quando o principal cair. esse script fará isso automaticamente se colocado na crontab.

#!/bin/bash
#criar o arquivo se ele não existe
log=”/var/log/internet.log”
data=`date`

#link padrão sempre é o link2, nesta caso o link GVT

link1=”oi”
link2=”GVT”
gw_link1=”192.168.1.1″
gw_link2=”192.168.25.1″
destino_link1=”200.176.2.10″
destino_link2=”200.160.2.3″

route_link1=`/sbin/route -n |grep ^0.0.0.0 |grep $gw_link1 |wc -l`;
route_link2=`/sbin/route -n |grep ^0.0.0.0 |grep $gw_link2 |wc -l`;

#rota link1
/sbin/route add -host 200.176.2.10 gw $gw_link1
#rota link2
/sbin/route add -host 200.160.2.3 gw $gw_link2

if(ping -c 1 -w 2 $destino_link1 > /dev/null);then
echo “$data $destino_link1 $link1 OK” >> $log
/sbin/route del -host 200.176.2.10 gw $gw_link1
else
echo “$data $destino_link1 $link1 falhou” >> $log
fi;

if(ping -c 1 -w 2 $destino_link2 > /dev/null);then
echo “$data $destino_link2 $link2 OK” >> $log
/sbin/route del -host 200.160.2.3 gw $gw_link2
if [ $route_link2 = “0” ]; then
/sbin/route del default gw $gw_link1
/sbin/route add default gw $gw_link2
fi;

else
# clear
echo “$data $destino_link2 $link2 falhou” >> $log
echo “$data ativando link da $link1” >> $log
/sbin/route del default gw $gw_link2
/sbin/route add default gw $gw_link1
fi;

exit 0

shell script para listar leases do DHCP

awk ‘/lease/{IP=$2} /ethernet/{MAC=$3} /hostname/ {HOST=substr($2,2,length($2)-3); printf(“%s – %s – %s \n”,IP,HOST,MAC)}’ < /var/lib/dhcp/dhcpd.leases |sort |uniq

Script em python para exibir leases do dhcp

Script para coletar os leases do dhcp e exibir de forma organizada.
Não é de minha autoria.

#!/usr/bin/python
import datetime, bisect

def parse_timestamp(raw_str):
tokens = raw_str.split()

if len(tokens) == 1:
if tokens[0].lower() == ‘never’:
return ‘never’;

else:
raise Exception(‘Parse error in timestamp’)

elif len(tokens) == 3:
return datetime.datetime.strptime(‘ ‘.join(tokens[1:]),
‘%Y/%m/%d %H:%M:%S’)

else:
raise Exception(‘Parse error in timestamp’)

def timestamp_is_ge(t1, t2):
if t1 == ‘never’:
return True

elif t2 == ‘never’:
return False

else:
return t1 >= t2

def timestamp_is_lt(t1, t2):
if t1 == ‘never’:
return False

elif t2 == ‘never’:
return t1 != ‘never’

else:
return t1 < t2 def timestamp_is_between(t, tstart, tend): return timestamp_is_ge(t, tstart) and timestamp_is_lt(t, tend) def parse_hardware(raw_str): tokens = raw_str.split() if len(tokens) == 2: return tokens[1] else: raise Exception('Parse error in hardware') def strip_endquotes(raw_str): return raw_str.strip('"') def identity(raw_str): return raw_str def parse_binding_state(raw_str): tokens = raw_str.split() if len(tokens) == 2: return tokens[1] else: raise Exception('Parse error in binding state') def parse_next_binding_state(raw_str): tokens = raw_str.split() if len(tokens) == 3: return tokens[2] else: raise Exception('Parse error in next binding state') def parse_rewind_binding_state(raw_str): tokens = raw_str.split() if len(tokens) == 3: return tokens[2] else: raise Exception('Parse error in next binding state') def parse_leases_file(leases_file): valid_keys = { 'starts': parse_timestamp, 'ends': parse_timestamp, 'tstp': parse_timestamp, 'tsfp': parse_timestamp, 'atsfp': parse_timestamp, 'cltt': parse_timestamp, 'hardware': parse_hardware, 'binding': parse_binding_state, 'next': parse_next_binding_state, 'rewind': parse_rewind_binding_state, 'uid': strip_endquotes, 'client-hostname': strip_endquotes, 'option': identity, 'set': identity, 'on': identity, 'abandoned': None, 'bootp': None, 'reserved': None, } leases_db = {} lease_rec = {} in_lease = False for line in leases_file: if line.lstrip().startswith('#'): continue tokens = line.split() if len(tokens) == 0: continue key = tokens[0].lower() if key == 'lease': if not in_lease: ip_address = tokens[1] lease_rec = {'ip_address' : ip_address} in_lease = True else: raise Exception('Parse error in leases file') elif key == '}': if in_lease: for k in valid_keys: if callable(valid_keys[k]): lease_rec[k] = lease_rec.get(k, '') else: lease_rec[k] = False ip_address = lease_rec['ip_address'] if ip_address in leases_db: leases_db[ip_address].insert(0, lease_rec) else: leases_db[ip_address] = [lease_rec] lease_rec = {} in_lease = False else: raise Exception('Parse error in leases file') elif key in valid_keys: if in_lease: value = line[(line.index(key) + len(key)):] value = value.strip().rstrip(';').rstrip() if callable(valid_keys[key]): lease_rec[key] = valid_keys[key](value) else: lease_rec[key] = True else: raise Exception('Parse error in leases file') else: if in_lease: raise Exception('Parse error in leases file') if in_lease: raise Exception('Parse error in leases file') return leases_db def round_timedelta(tdelta): return datetime.timedelta(tdelta.days, tdelta.seconds + (0 if tdelta.microseconds < 500000 else 1)) def timestamp_now(): n = datetime.datetime.utcnow() return datetime.datetime(n.year, n.month, n.day, n.hour, n.minute, n.second + (0 if n.microsecond < 500000 else 1)) def lease_is_active(lease_rec, as_of_ts): return timestamp_is_between(as_of_ts, lease_rec['starts'], lease_rec['ends']) def ipv4_to_int(ipv4_addr): parts = ipv4_addr.split('.') return (int(parts[0]) << 24) + (int(parts[1]) << 16) + \ (int(parts[2]) << 8) + int(parts[3]) def select_active_leases(leases_db, as_of_ts): retarray = [] sortedarray = [] for ip_address in leases_db: lease_rec = leases_db[ip_address][0] if lease_is_active(lease_rec, as_of_ts): ip_as_int = ipv4_to_int(ip_address) insertpos = bisect.bisect(sortedarray, ip_as_int) sortedarray.insert(insertpos, ip_as_int) retarray.insert(insertpos, lease_rec) return retarray ############################################################################## myfile = open('/var/lib/dhcp/dhcpd.leases', 'r') leases = parse_leases_file(myfile) myfile.close() now = timestamp_now() report_dataset = select_active_leases(leases, now) print('+------------------------------------------------------------------------------') print('| DHCPD ACTIVE LEASES REPORT') print('+-----------------+-------------------+----------------------+-----------------') print('| IP Address | MAC Address | Expires (days,H:M:S) | Client Hostname ') print('+-----------------+-------------------+----------------------+-----------------') for lease in report_dataset: print('| ' + format(lease['ip_address'], '<15') + ' | ' + \ format(lease['hardware'], '<17') + ' | ' + \ format(str((lease['ends'] - now) if lease['ends'] != 'never' else 'never'), '>20′) + ‘ | ‘ + \
lease[‘client-hostname’])

print(‘+—————–+——————-+———————-+—————–‘)
print(‘| Total Active Leases: ‘ + str(len(report_dataset)))
print(‘| Report generated (UTC): ‘ + str(now))
print(‘+——————————————————————————‘)

usando o comando find para excluir arquivos

Normalmente usamos o comando find para procurar arquivos
find /ondeprocurar -name “oqueprocurar”
mas podemos também executar comandos e passar outros parametros para refinar a busca:

procurando com data:
o comando abaixo procura todos os arquivos .txt mais antigos que 7 dias
find /pasta/ -name “*.txt” -type f -mtime +7
podemos tambem adicionar o parametro -delete no final da linha para excluir esses arquivos (ao inves de listar)
ficando assim:
find /pasta/ -name “*.txt” -type f -mtime +7 -delete

Podemos também copiar os arquivos mais antigos que 10 dias:
o comando a baixo copia todos os arquivos .txt mais antigos que 10 dias da pasta /home/rafael/ para /tmp/
find /home/rafael/ -name “*.txt” -type f -mtime +10 -exec cp {} /tmp/ \;

note que existe um \; que indica o final do comando a ser executado.

script para alterar palavra em mais de um arquivo (recursivo)

#altera a string 200 pela string 100
for i in ` grep "200" -R * |awk -F: '{print $1}' |uniq`

do
cp $i ${i}.bkp
cp $i ${i}.new
sed "s/200/100/g" ${i}.new > $i
rm ${i}.new
done

echo " substituicao realizada!"

Pausar ou aguardar interação em um BAT no windows

Você pode usar o comando timeout dentro de um script .bat para aguardar um tempo na execução, ou aguardar uma interação

“timeout /t 10 /nobreak” ignora a interação
“timeout /t 10 >nul” para o comando não aparecer
“timeout /t -1” vai esperar eternamente, até alguma tecla ser pressionada

script php para backup mysql

/backup/mysql/$NARQUIVO.sql`;
}//fecha o while
//entra no diretorio /backup/mysql e compacta os arquivos
$resp = `cd /backup/mysql/; gzip *.sql`;
?>

para rodar, pode ser na linha de comando ( tem q ter o php-cli instalado )

$php backup_mysql.php
não esqueça de criar os diretorios (e personalizar..)

script cut para pegar os ultimos caracteres

Pegar os 4 últimos caracteres sem saber o tamanho da variável ou posição, neste exemplo retorna “este”.

echo “pegarsomenteeste” | rev | cut -b-4 | rev

Fonte:
http://www.bestlinux.com.br/index.php/dicas/127/4993