Juste une petite remarque. Change le shebang :
#!/bin/sh
C’est plus portable (comme tu n’utilise pas de proproiété propre à bash)
Juste une petite remarque. Change le shebang :
#!/bin/sh
C’est plus portable (comme tu n’utilise pas de proproiété propre à bash)
Ajoutes-y une gestion incrémentale afin d’éviter toute surprise !
J’avais posté un script python (dans cette rubrique) pour le backup où je gère justement cela.
Juste pour dire que pour l’incrémental il y a rdiff-backup qui est pas mal.
Qu’est ce que ça fout dans un fil sur les scripts perso ? T’as des actions dans rdiff-backup ?
excuses moi mais c’étais juste pour proposer une solution , tu peux supprimer si tu veux.
Un petit script qui peut servir, en fonction de ce post-ci: Installer Xen
#! /bin/bash
#
# Description:
# ------------
#
# Script interactif de sauvegarde pour machine virtuelle Xen.
#
#####################################
# Dernière modification - 2008.03.22
#####################################
# Variables connues
VMS=$(find /etc/xen -type f | grep [*.cfg]$ )
# Chemin du fichier
printf "================================================\n"
printf "Quel est le chemin du fichier de configuration ?\n"
printf "================================================\n\n\n"
printf "Les fichiers trouvés dans /etc/xen:\n"
printf "$VMS \n"
read path_vm
if [[ `ls "$path_vm" ` != "$path_vm" ]];
then
printf "Le chemin spécifié n'existe pas\n"
exit 3
fi
if [ ! `echo -n "$path_vm" | grep "cfg$"` ];
then
printf "\nVous devez entrer un chemin valide !\n"
printf "Les fichiers disponible(s) se trouve dans /etc/xen/ par défaut\n"
printf "\n"
printf "`ls /etc/xen/ `\n";
exit 3
else
printf "Le chemin est ' "$path_vm" ' \n\n"
fi
# Nom de la machine
printf "================================================\n"
printf "Le nom de la machine à sauvegarder ?\n"
printf "================================================\n\n\n"
printf "Les machines en cours de fonctionements:\n"
printf "`xm list | grep ^[^Name*] | grep ^[^D*]`\n"
printf "\n\n Les machines potentiellement opérationnelles: \n"
printf "`echo -n "$VMS" | grep [*.cfg]$ | cut -d/ -f4 | cut -d. -f1`\n"
read name_vm
if [[ ! `echo -n "$name_vm"` ]];
then
printf "\n Vous devez entrer un nom !\n\n\n"
printf "La/Les Machine(s) disponible(s)\n"
printf "\n"
printf "`xm list` \n"
exit 3
fi
# Nom du volume groupe ( LVM )
printf "================================================\n"
printf "Quel est le chemin du disque ?\n"
printf "================================================\n"
printf "\t ( Volumes logique seulement (LVM) )\n\n\n"
printf "Liste des volumes logiques:\n"
printf "`lvdisplay | grep LV | grep Name | awk -F " " '{print$3}'`\n"
read path_lv
path_lv=`echo "$path_lv" | sed -e 's/^\ //g'`
if [[ ! ` echo -n "$path_lv" ` ]];
then
printf "\n Le chemin est vide ! \n\n\n"
printf "Le(s) volume(s) logique(s) disponible(s) : \n"
printf "`lvdisplay | grep $name_vm` \n"
exit 3
fi
# Redémarrage de la machine virtuelle après l'opération
printf "Voulez-vous redémarrer la machine virtuelle après le backup"
printf "(Oui/Non)O/N ? :"
read resp_on
resp=`echo $resp_on | tr [":upper:"] [":lower:"]`
if [[ ! `echo $resp | grep "[o\|n]\|[oui\|non]" ` ]];
then
printf "Vous devez répondre par Oui/Non !\n"
exit 3
fi
# Variable date
date=$(date)
date_c=$(date +%F)
# On lance le back up
printf "\n\n\n==============================\n"
printf " BACKUP starting ...\n"
printf "==============================\n\n\n"
printf "Il est $date \nLe backup commence dans 30 secondes\n\n\n\n\n"
sleep 30s
printf "Wait...\n\n\n\n\n"
if [[ ! `xm list | grep $name_vm | cut -d\ -f1` ]];
then
`dd if=$path_lv of=/home/$name_vm-bkp-$date_c.img bs=1M `
else
xm shutdown $name_vm && sleep 20s && dd if=$path_lv of=/home/$name_vm-bkp-$date_c.img bs=1M
fi
# Redémarrage ?
if [ `echo -n "$resp" | cut -c1` = "o" ];
then
xm create $path_vm
printf "\n\n\n=========================================================================\n"
printf "\tBack up fini à $date\n"
printf "=========================================================================\n"
else
printf "\n\n\n=========================================================================\n"
printf "\tBack up fini à $date\n"
printf "=========================================================================\n"
fi
exit
Voici mon script netfilter. Je me suis largement inspiré de celui de ricardo pour pouvoir séparer le scripte des rêgles.
#!/bin/sh
CONFIG='/etc/parfeu'
IPTABLES='/sbin/iptables'
RESTORE='/sbin/iptables-restore'
SAVE='/sbin/iptables-save'
function secure ()
{
if [ ! -f $CONFIG ]; then
touch $CONFIG;
fi
chmod 500 $CONFIG
}
function help ()
{
echo "Usage : " $0 "[start|stop|restart|save|store]"
exit -1
}
function restore ()
{
$RESTORE < $CONFIG
}
function stop ()
{
$IPTABLES -t filter -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -t raw -F
$IPTABLES -t filter -P INPUT ACCEPT
$IPTABLES -t filter -P OUTPUT ACCEPT
$IPTABLES -t filter -P FORWARD ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -t mangle -P POSTROUTING ACCEPT
$IPTABLES -t mangle -P FORWARD ACCEPT
$IPTABLES -t mangle -P INPUT ACCEPT
$IPTABLES -t raw -P OUTPUT ACCEPT
$IPTABLES -t raw -P PREROUTING ACCEPT
}
function save ()
{
$SAVE > $CONFIG
}
secure
case $1 in
'start' )
restore
;;
'stop' )
stop
;;
'restart' )
stop && restore
;;
'save' )
save
;;
'store' )
restore
;;
* )
help
;;
esac
Le fichier des rêgles est dans /etc, je ne suis pas sur que ce soit sa place mais bon. J’interdit sa lecture à fin que d’autres utilisateurs ne voient pas d’éventuelles erreur sur les rêgles (oui je suis sur une machine avec personne d’autres dessus mais je préfère prendre de bonnes habitudes).
Puisqu’il y a des gens qui mettent des scripts iptables, j’en poste un que j’avais crée il y a “longtemps”
http://pagesperso-orange.fr/remy.pagniez/admin/rc.firewall
Cela dit, j’ai abandonné iptables en production à cause de la lourdeur de la syntaxe. Je préfère nettement installer un FreeBSD avec pf
Cela dit, le script ci-dessus fonctionne encore trés bien (je m’en sers chez moi)…
Entre PF et NF c’est une histoire de goût je trouve.
(mais je connais pas d’équivalent à Nufw pour pf)
Tout est histoire de goût!
Je dois avouer que je n’ai jamais utilisé NuFw ou d’équivalent car je n’en ai pas encore eu le besoin et le temps. Cependant je sais que pf gère les authentification avec authpf, mais cela semble assez loin de ce que NuFw sait faire…
Les différences sont expliquées sur la page:
http://www.nufw.org/Foire-Aux-Questions.html
J’ai eu besoin de connaître la liste des adresses IP de mon réseau local ce soir pour trouver l’adresse IP du nouveau routeur. Je me suis donc fais un petit scaneur de réseau en perl.
#!/usr/bin/perl
use strict;
use Net::Ping;
$|++;
print "Scan de ordinateurs :\n";
my $nb = 0;
my $ping = Net::Ping->new("icmp", 0.3);
foreach my $i ( 1 .. 254 ){
if ($ping->ping("192.168.1.".$i)){
++$nb;
print "192.168.1.$i\n";
}else{
print '.';
}
}
$ping->close();
print "Il y a $nb ordinateurs sur le réseau local.\n";
un timeout de 0.3 est nettement suffisant. Je me suis largement inspiré des perles de mongueurs (pour l’idée comme pour l’écriture)
articles.mongueurs.net/magazines … es-28.html
Pratique, j’en avais justement besoin ce matin !!!
J’ai refait un peut la coquille :
#!/usr/bin/perl
use strict;
use Net::Ping;
$|++;
print "Scan des ordinateurs :\n";
my $nb = 0;
my $boucle = 0;
my $ping = Net::Ping->new("icmp", 0.3);
foreach my $i ( 1 .. 254 ){
if ($ping->ping("192.168.1.".$i)){
++$nb;
print "192.168.1.$i\n";
}else{
if ($boucle==4) {$boucle=0; }
if ($boucle==0) {print "|\b";}
if ($boucle==1) {print "/\b";}
if ($boucle==2) {print "-\b";}
if ($boucle==3) {print "\\\b"; }
++$boucle;
}
}
$ping->close();
print "Il y a $nb ordinateurs sur le réseau local.\n";
J’y connais rien en Perl, j’ai improvisé
#!/usr/bin/perl
use strict;
use Switch;
use Net::Ping;
$|++;
print "Scan des ordinateurs :\n";
my $nb = 0;
my $boucle = 0;
my $ping = Net::Ping->new("icmp", 0.3);
foreach my $i ( 1 .. 254 ){
if ($ping->ping("192.168.1.".$i)){
++$nb;
print "192.168.1.$i\n";
}else{
switch($boucle %= 4){
case 0 {print "|\b";}
case 1 {print "/\b";}
case 2 {print "-\b";}
case 3 {print "\\\b";}
case 4 {}
}
}
}
$ping->close();
print "Il y a $nb ordinateurs sur le réseau local.\n";
Pas testé mais ça devrais marcher.
[edit par ashgenesis]Il manquait un ; après ++$nb[/edit]
#!/usr/bin/perl
use strict;
use Switch;
use Net::Ping;
# Initialisation
sub sizetot ()
{
return `stty -a | grep columns | cut -d ' ' -f7 | tr -d ';'` - 7;
}
my $nb = 0;
my $boucle = 0;
my $ping = Net::Ping->new("icmp", 0.3);
my $pourcent = 0;
my $bar = "[]";
my $size = 0;
$|++;
# Déroulement
print "Scan des ordinateurs :\n";
print "$bar";
foreach my $i ( 1 .. 254 ){
$size=$i/254*sizetot();
$pourcent=int($size/sizetot()*100);
my $u = length($bar) + 5;
if ($pourcent > 9){
++$u;
}
if ($ping->ping("192.168.1.".$i)){
++$nb;
print "\b" x $u;
print " " x ($u + 1);
print "\b" x ($u + 1);
print "192.168.1.$i\n";
}
print "\b" x $u;
print " " x ($u + 1);
print "\b" x ($u + 1);
$bar = ("=" x $size);
print "[$bar>]$pourcent%";
}
$ping->close();
print "\nIl y a $nb ordinateurs sur le réseau local.\n";
J’avais dans l’idée de montrer un petit exemple d’utilisation de GTKDialog
, mais la modification apporté par ash dans mon précédent post m’a donné envie d’améliorer le scanneur. Alors voila le nouveau possède une jolie barre de progression.
#!/bin/sh
function affiche (){
retour=`gtkdialog --program=MAIN_DIALOG | awk -F\" '{ print $2}'` # | grep 'Lire le mail'
if [ "$retour" == 'Lire le mail (web)' ]; then
iceweasel -new-tab 'http://www.gmail.com'
fi
if [ "$retour" == 'Lire le mail (claws)' ]; then
sylpheed-claws-gtk2 &
fi
}
export MAIN_DIALOG='
<window title="Nouveau mail" icon-name="help">
<vbox>
<text>
<label>Il y a un nouveau mail</label>
</text>
<hbox>
<vbox>
<button>
<label>Lire le mail (web)</label>
</button>
<button>
<label>Lire le mail (claws)</label>
</button>
</vbox>
<button>
<label>Exit</label>
</button>
</hbox>
</vbox>
</window>'
affiche
Voici le script GTKDialog, il me sert en fait pour quand j’ai un mail. Le notifier l’exécute. J’arrive pas à positionner la fenêtre où je veux sur l’écran mais c’est pas grave.
Pour reparler du wiki, si certains sont prêt à m’aider je veux bien me lancer pour en mettre un sur pied. Parce que moi qui débute sous Debian, ça me manque bcp par rapport à Ubuntu.
Avis aux amateurs.
je peux aider de temps en temps et plus une fois que j’aurai récupéré mon nouveau job et fini mes stages de perfectionnement en anglais…
Mieux vaut compléter celui là : wiki.debian.org/PageD’Accueil
Disperser les informations est une mauvaise idée.
Fait longtemps que j’ai pas contribué :s
Aller hop un ch’tit script
#!/bin/bash
##
#
# But : Outil de crytpage/decryptage de fichier
#
##
#set -x
###########################################################
# Fonctions #
###########################################################
encrypt()
{
gpg --passphrase-fd coucou --output $2 --symmetric --cipher-algo AES192 $1
}
decrypt() {
gpg --output $2 --decrypt $1
}
usage() {
echo "usage : krytpme.sh [-c|-d|-h] <Fichier_De_Entree> <Fichier_De_Sortie>"
echo ""
echo " -h : Description de la syntaxe"
echo " -c : Permet de crypter un fichier"
echo " -d : Permet de decrypter un fichier"
}
check() {
if [ $? = 0 ]
then
echo "OK :)"
else
echo "KO :("
fi
}
###########################################################
# Main #
###########################################################
case $1 in
-c)
encrypt $2 $3
check
;;
-d)
decrypt $2 $3
check
;;
*)
usage
;;
esac
Bon c’est sur c’est pas un truc de bardu mais je vais le faire évoluer
Bonjour,
J’ai fait mon propre script pour savoir le nombre d’ordinateurs sur le réseau suite à la lecture de vos scripts, mais plutôt que de lancer un seul ping à la fois, je bourrine un peu.
#!/bin/sh
# network
IP_PREFIX=192.168.0
# for temporary file
TMP_FILE=/var/tmp/.ping_count
# send $PING_NUMBER "ECHO_REQUEST" packets (-c ping option)
PING_NUMBER=1
# ~500 process for 100
MAX_SIMULTANEUS_PING=130
if [ -e $TMP_FILE ]
then
echo "abort! file $TMP_DIR/.ping_count exits."
exit 1
fi
touch $TMP_FILE
# all ip
for i in $(seq 1 254)
do
if [ $(ping -c$PING_NUMBER $IP_PREFIX.$i \
| grep -e 'bytes from' | wc -l ) \
-ne 0 ]
then
echo $IP_PREFIX.$i
echo "1" >> $TMP_FILE
fi &
if [ $(jobs | grep ping | wc -l) -gt $MAX_SIMULTANEUS_PING ]
then
wait $(jobs -p | head -n1)
fi
done
while [ $(jobs -p | wc -l) -ne 0 ]
do
wait $(jobs -p | tail -n1)
done
echo "$(wc -l < $TMP_FILE) computer(s)"
rm $TMP_FILE
La sortie :
$ time ./network\ count.sh
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.30
192.168.0.104
192.168.0.254
6 computer(s)
real 0m8.307s
user 0m0.680s
sys 0m1.688s