Pour les scripts : c'est ici

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.

http://www.nongnu.org/rdiff-backup/

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” :slightly_smiling:
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 :slightly_smiling:

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! :slightly_smiling:

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é :wink:

#!/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. :slightly_smiling:

#!/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… :slightly_smiling:

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 :slightly_smiling:

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

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. :laughing:

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