Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/12/2006, 22h40   #1
Rédacteur
 
Inscription : juillet 2004
Messages : 2 573
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : juillet 2004
Messages : 2 573
Points : 1 973
Points : 1 973
Par défaut Vos scripts shell

Bonjour,

J'ai décidé d'ouvrir ce thread qui va vous permettre de poster tous les scripts shell que vous avez personnellement développé.

Tous les scripts sont la bienvenue. Veuillez s'il vous plait respecter la présention proposée ci-dessous.

Nom du script: convertisseur

Compatible avec: Bash

Descriptif: permet de convertir des francs en euros et inversement.

Pré-requis: le paquetage libmap, c'est juste pour l'exemple

Code:
Code :
Le code de mon programme
ou

Téléchargement: [Visualiser]

Si votre script est trop long, veuillez insèrer un lien (voir ci-dessus) sinon, postez votre code avec bien entendu la balise code. Les postes qui ne respètent pas la présentation par défaut seront supprimés directement. Faites en sorte que votre code soit bien indenté, afin d'en faciliter sa lecture.

Merci à tous

PS: vous pouvez également proposer des améliorations aux scripts déjà présent dans ce thread.
__________________
.Olivier
Olivier Regnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2006, 13h14   #2
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 944
Points : 4 944
Bonjour,

Un script pour mettre en ligne simultanément plusieurs sites en parallèle (même site stocké à plusieurs endroit).

Nom du script: ftpsite

Compatible avec: bash

Descriptif: téléchargement automatique, d'un fichier, d'une arborescence sur des sites ftp.

Téléchargement: [Télécharger] : il contient plusieurs fichiers.

PS: j'ai fait quelque chose d'équivalent pour faire les articles de devevoloppez.com et ensuite les mettre en ligne. Je peux les passer aux rédacteurs
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2006, 02h27   #3
Expert Confirmé Sénior

 
Avatar de Luc Hermitte
 
Inscription : août 2003
Messages : 4 323
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : août 2003
Messages : 4 323
Points : 5 121
Points : 5 121
Nom du script: cyg-wrapper.sh

Ecrit pour : bash, utilisable depuis n'importe quoi (bash, ksh, mutt, ...) qui tourne sous cygwin (la notion ne compatibilité n'a pas vraiment de sens, son shebang est explicite, et il ne peut être utilisé que sur une seule plateforme, cf les pré-requis)

Descriptif: Permet de lancer des programmes natifs Windows depuis l'environnement cygwin, tout en leur passant des fichiers en paramètres.

Les chemins façon POSIX sont transformés en chemins façon DOS/Windows. Les liens symbôliques sont suivis, il est possible de spécifier des paramètres d'option qui ne peuvent pas être des chemins à convertir, on peut demander à convertir ou neutraliser des variables d'environnement, ...
Code :
1
2
# Pour plus d'informations:
cyg-wrapper.sh --help | less
Pré-requis: Cygwin, bash, cygUtils

Téléchargement: [Visualiser] -- [Homepage]
__________________
FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média.
Luc Hermitte est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2007, 16h37   #4
Membre émérite
 
Inscription : juin 2006
Messages : 1 117
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juin 2006
Messages : 1 117
Points : 989
Points : 989
Nom du script : convencodingfilename.sh
Compatible avec : fonctionne avec Bash
Descriptif : Convertit tous les noms de fichier du répertoire courant du format ISO8859-15 vers UTF8 standard. Pratique par exemple dans le cas d'une upgrade de sarge vers etch dont l'encodage standard est maintenant UTF8, ou même simplement pour des noms de fichiers Windows.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
#!/bin/bash
 
for i in ${1}/*; do
        orig=$i
        trad=$(echo ${i} | iconv -f ISO8859-15 -t UTF8 )
 
        if [ $trad != $orig ]; then
                if [ ! -d $orig ]; then
                         mv $orig $trad
                fi;
        fi;
done;
#Change l'encodage des nom de fichiers dont le format
#n'est pas reconnu par votre Unix/Linux vers l'encodage de votre
#système d'exploitation (ici de ISO8859-15 vers UTF8)
#Le répertoire contenant les fichiers à modifier est le
#premier et seul argument du script. Cela peut être modifié pour
#passer les formats d'encodage en paramètres au script.
#"man iconv" et "iconv --list" pour plus d'informations
Pré-requis : iconv, mv
kromartien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2007, 12h51   #5
Membre expérimenté
 
Avatar de iblis
 
Inscription : janvier 2007
Messages : 510
Détails du profil
Informations personnelles :
Âge : 45

Informations forums :
Inscription : janvier 2007
Messages : 510
Points : 510
Points : 510
Envoyer un message via Yahoo à iblis
Par défaut Afficher / masquer le bureau gnome

Nom du script : showdesktop.sh
Compatible avec : bash (pas testé : sh, csh, tcsh)
Descriptif : Affiche ou masque le bureau gnome. A utiliser en ligne de commande ou avec un lanceur, particulièrement pour utilisation avec Avant Window Navigator.
Pré-requis: wmctrl (exemples d'utilisation)
Code:
Code :
1
2
3
4
5
6
#!/bin/bash
if wmctrl -m | grep -q '"showing the desktop" mode: ON'; then
    wmctrl -k off
else
    wmctrl -k on
fi
Téléchargement: [Visualiser]
iblis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2007, 15h38   #6
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 446
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 446
Points : 7 546
Points : 7 546
Nom du script : SaveFile.ksh
Compatible avec : ksh
Descriptif : Renomme un fichier source en sauvegardant les versions antérieures en ajoutant la date (et l'heure) au nom de fichier.
Pré-requis: Aucun
Remarque : Ce code est exécuté indifféremment sous AIX et Cygwin, d'où les " autour des noms de fichiers qui pourraient contenir des espaces.
Code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/ksh
#
# SaveFile.ksh
#
# Renomme le fichier source en conservant les versions antérieures
#
# Options    :  Aucune  
#
# Paramètres :  $1  Nom du fichier Source
#               $2  Nom du fichier Cible
#
# Affichage  :  Aucun
#
# Code retour : 0   Bonne exécution
#               n   Erreur quelconque
#
# Dépendances : find
#
# Création  :   al1_24  10/10/2007
#
# Exemple : SaveFile.ksh tmp/tempo.txt rpt/report.txt
#   si tmp/tempo.txt n'existe pas, aucune opération, retour 1
#   si rpt/report.txt du 16/10/2007 existe déjà, il est renommé en rpt/report.20071016.txt
#   si rpt/report.20071016.txt du 16/10/2007 à 10:54:35 existe déjà, il est renommé en rpt/report.20071016-105435.txt
#   finalement, tmp/tempo.txt est renommé en rpt/report.txt
#
# set -x
#-------------------------------------------------------------------#
#   Fonctions utilitaires 
#-------------------------------------------------------------------#
function    GetFileDate
#   Récupère la date (et l'heure) du fichier
{   typeset _Prm="$1"   # Format de retour : D = date, T = Date et heure
    typeset _File="$2"  # Fichier testé
    # Le fichier existe et il y a un paramètre de format
    if [[ -e "${_File}" ]] && [[ -n "${_Prm}" ]]
    then
        typeset _Fmt='' # Format de retour
        case "${_Prm}" in
        D|d) _Fmt='%TY%Tm%Td\n' ;;  # YYYYMMDD  
        T|t) _Fmt='%TY%Tm%Td-%TH%TM%TS\n'   ;;  # YYYYMMDD-HHMMSS
        *)  return 1    ;;
        esac
        # Afficher la date ou l'heure de dernière modification
        find "$(dirname "${_File}")" -name "$(basename "${_File}")" -maxdepth 1 -printf ${_Fmt}
    else
        return 1
    fi
} 
#-------------------------------------------------------------------#
#   Commande SaveFile
#-------------------------------------------------------------------#
typeset _SrcFile="$1"   # Nom de fichier source
typeset _SaveFile="$2"  # Nom de fichier à créer
# Si les paramètres sont renseignés et la source existe
if [[ -n "${_SrcFile}" ]] && [[ -n "${_SaveFile}" ]] && [[ -e "${_SrcFile}" ]]
then
    # Si les fichiers sont différents 
    if ! [[ "${_SrcFile}" -ef "${_SaveFile}" ]]
    then
        # Si la cible existe déjà
        if [[ -e "${_SaveFile}" ]] 
        then
            # Extraire les parties 
            typeset _FileExt="${_SaveFile##*.}"
            typeset _FileName="${_SaveFile%.*}"
            # Préparer les noms de fichier
            typeset _AddExt=$(GetFileDate d "${_SaveFile}")
            typeset _TempFile="${_FileName}.${_AddExt}.${_FileExt}"
            # Si une sauvegarde existe déjà
            if [[ -e "${_TempFile}" ]]
            then
                # Renommer la sauvegarde existante
                _AddExt=$(GetFileDate t "${_TempFile}")
                mv "${_TempFile}" "${_FileName}.${_AddExt}.${_FileExt}" || return $?
            fi
            # Renommer le fichier à sauvegarder
            mv "${_SaveFile}" "${_TempFile}" || return $?
        fi
        # Enregistrer la nouvelle version
        mv "${_SrcFile}" "${_SaveFile}" || return $?
    else 
        return 0
    fi
else
    return  1
fi
# EoF SaveFile.ksh
Pour ceux qui recherchent une version complète de ksh93 pour Linux ou Cygwin, on peut la trouver en open source sur le site de AT&T.
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 11h36   #7
Membre éprouvé
 
Avatar de diden138
 
Développeur Web
Inscription : mai 2006
Messages : 684
Détails du profil
Informations personnelles :
Âge : 23

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 684
Points : 475
Points : 475
Envoyer un message via Skype™ à diden138
Par défaut equivalent de la commande ps en shell

Bonjour,
enfin un endroit ou on peut déposer nos scripts
Nom du script : Processlist.sh
Compatible avec : sh
Descriptif :Liste tous les processus (équivalent à un ps-e).
Pré-requis: Aucun.
Code :
1
2
3
4
5
6
7
8
 
#!/bin/sh
#script shell  qui liste tous les processus en exécution 
if (("$#">"0"));then if test $1="-h";then echo "PID | CMD ";else cat plistehelp;fi;fi;
cd ../../proc ;
for i in $(ls); do if (("$i">"0"));then [[ -d $i ]] && echo -n "$i| ";if test -f $i/cmdline ;then cat $i/cmdline;fi ;echo ;fi;done;
echo "script réalisé par cherif mohieddine belkacem";
cd ../$HOME;
et le petit help de la commande qui va avec
Plistehelp.sh
Code :
1
2
3
4
5
6
 
utilisation : sh pliste.sh [-h]
              ./ pliste.sh [-h]
affiche la liste des processus (PID | CMD)
    -h :  affiche l'entete du tableau PID | CMD
sans option il n'affiche pas l'entete
cordialement @+
__________________
et vint le 20siècle et l'homme se mit à réflechir comme la machine auteur: diden138
Langage: Pascal,OCaml,Delphi,c/c++.
Langages web:Xhtml,Css,Php/Mysql,Javascript,Actionscript 2.0
Plate forme:Windows XP Pro SP2./Red Hat 9.0/SUSE 10.2
Config :Intel P4 3.2GHZ,2MO cach,512 RAM.
Outils:Tp7,objective caml,Delphi 6 perso, C++builder 6,Visual C++ Express edition sous win,code-block sous linux(Ubuntu) .
diden138 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 16h10   #8
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 446
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 446
Points : 7 546
Points : 7 546
Nom du script: _GetIni

Compatible avec: ksh

Descriptif: Retourne la valeur d'une chaîne dans un fichier .ini au format CHAINE=VALEUR.
Si la chaine n'existe pas, une valeur par défaut peut être précisée.

Pré-requis: La chaine recherchée ne doit pas contenir le caractère =
Il ne doit pas y avoir d'espace autour du caractère = dans la ligne du ficheir .ini

Code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#----------------------------------------------------------
# Fonction _GetIni : Cherche une chaîne dans un fichier .ini 
#----------------------------------------------------------
function _GetIni
{    typeset    _IniFile="$1"    # Nom du fichier ini
    typeset    _IniStr="$2"    # Chaîne à rechercher
    typeset    _IniDef="$3"    # Valeur par défaut
    typeset    _IniRes=''        # Valeur retournée
    # Si le fichier existe et la chaîne est définie
    if [[ -s "${_IniFile}" ]] && [[ -n "${_IniStr}" ]]
    then
        # Extraire le contenu de la ligne de définition
        _IniRes=$(egrep "^${_IniStr}=" ${_IniFile} | cut -d'=' -f2-)
    fi
    # Prendre la valeur par défaut si non définie
    print "${_IniRes:-${_IniDef}}"
}
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2009, 01h47   #9
Candidat au titre de Membre du Club
 
Inscription : septembre 2006
Messages : 34
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 34
Points : 12
Points : 12
Par défaut script de sauvegarde sur bande

bonjour,

Nom du script: sauve

Compatible avec: sh

Descriptif: ce script vous permettra d'appliquer une stratégie de sauvegarde journalière à trois niveaux sur un mois.
supposons que vous voulez sauvegarder le répertoire /home. Prenons, par exemple, le lundi. Le premier lundi du mois, vous faites une sauvegarde totale:
Les autres lundi, vous sauvegarder les fichiers qui ont été modifiés depuis le premier lundi du mois.
le deuxième lundi du mois (s come semaine):
le troisième:
Ainsi de suite jusqu'au mois suivant.
Les autres jours, vous sauvegarder tous les fichiers modifiés depuis le dernier lundi.
Le mardi (j comme jours):
le mercredi:
Et ainsi de suite jusqu'à dimanche

Pré-requis: tar, cpio, find, mt

Code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/bin/sh
 
#    sauve, a backup script
#    Copyright (C) 2007 2009 Mathieu SERPA
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
 
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
 
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
#    matser1973@free.fr
 
list(){
case "$1" in
"-t")
   shift
   find "$@";;
"-i")
   moment="$2"
   shift
   shift
   find "$@" -daystart -mtime "$moment";;
*)
   echo usage:
   echo "sauve -t répertoire(s) | -j nb_jours répertoire(s) | -s nb_semaines répertoire(s)"
esac
}
 
sauve_incr1(){
if [ $1 -le 4 ]; then
   etendue=$(($1*7))
   shift
   (
      while [ $etendue -ge 0 ];do
         list -i $etendue $@
         etendue=$(($etendue-1))
      done
   )|cpio -ovBH crc>/dev/st0
else
   echo le nombre de semaine ne doit pas être spérieur à 4
fi
}
 
sauve_incr2(){
if [ $1 -le 6 ]; then
   etendue=$1
   shift
   (
      while [ $etendue -ge 0 ];do
         list -i $etendue "$@"
         etendue=$(($etendue-1))
      done
   )|cpio -ovBH crc>/dev/st0
else
   echo le nombre de jours ne doit pas être supérieu à 6
fi
}
if [ $(whoami) = 'root' ]; then
   cd $HOME
   if [ -e sauve-etc.tar.bz2 ]; then
      rm sauve-etc.tar.bz2
   fi
   tar -jcvf sauve-etc.tar.bz2 /etc
   mt -f /dev/st0 retension
   case $1 in
   "-t")
      shift
      list -t "$@"|cpio -ovBH crc>/dev/st0;;
   "-s")
      etendue="$2"
      shift
      shift
      sauve_incr1 $etendue "$@";;
   "-j")
      etendue="$2"
      shift
      shift
      sauve_incr2 $etendue "$@";;
   *)
      echo usage:
      echo "sauve -t répertoire(s) | -j nb_jours répertoire(s) | -s nb_semaine répertoire(s)";;
   esac
   mt -f /dev/st0 rewind
   mt -f /dev/st0 eject
else
   echo vous devez être root pour utiliser ce script
fi
matser est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2009, 12h10   #10
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 245
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 245
Points : 1 902
Points : 1 902
Nom du script: HDFullnessCheck

Compatible avec: Bash

Descriptif:Vérification que les partitions ne s'engorgent pas et envoi de mail le cas échéant

Pré-requis: adresse mail / adapter les variables

Code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/bash
# Auteur : Anonyme - cf http://www.debian-administration.org/articles/143 #
# Licence : GPL                                                           #
# Note : ce script fonctionne en bash pas en sh
 
# CONSTANTES
HOSTNAME=$(hostname)
DOMAINE="@mondomaine.fr"
 
myscriptname="HDFullnessCheck"
pidfile="/var/run/$myscriptname.pid"
logfile="/var/log/localscript/$myscriptname.log"
 
# a adapter :
mailing_list=administrateur$DOMAINE
 
# pourcentage limite d'occupation du disque
LIMIT=90
mail_body_file=$(mktemp)
 
log_failure()
{
	echo "`date` [echec]" >> $logfile
}
log_success()
{
        echo "`date` [succes]" >> $logfile
}
 
# Ecriture du contenu du message dans un fichier temporaire
write_mail_body()
{
cat << EOF >> $mail_body_file
Bonjour.
 
La partition $partition sur $HOSTNAME necessite votre intervention.
Elle est remplie a $percent % : il reste $disp
 
Cordialement.
EOF
}
 
# Ecriture du contenu du message dans un fichier temporaire
write_error_body()
{
cat << EOF >> $mail_body_file
Bonjour.
 
$pidfile existe. Cela indique que le script ne s'est pas termine correctement.
 
Cordialement.
EOF
}
 
# string vide
if [ -z "$pidfile" ]
then
	mail_subject="[$HOSTNAME] Alerte : erreur $pidfile"
	write_error_body
	mail -s "$mail_subject" $mailing_list < $mail_body_file
	log_failure
	exit 1
fi
# fichier existe
if [ -e "$pidfile" ]
then
        mail_subject="[$HOSTNAME] Alerte : erreur $pidfile"
        write_error_body
        mail -s "$mail_subject" $mailing_list < $mail_body_file
	log_failure
        exit 1
fi
 
echo $! > $pidfile
 
# SCRIPT
# on evite les disquettes, les partages nfs et tout ce qui ne commence pas par /
for line in $( df -Ph -x nfs | grep "^/" | grep -v "^/dev/fd[0-9]" | sed -r "s/ {1,}/@/g" ); do
 
	percent=$( echo "$line" | awk -F@ '{print$5}' | tr -d '%' )
	partition=$( echo "$line" | awk -F@ '{print$6}')
	disp=$( echo "$line" | awk -F@ '{print$4}')
 
	if [ $percent -ge $LIMIT ]; then
		mail_subject="[$HOSTNAME] Alerte : Partition $partition pleine a $percent%"
		write_mail_body
		mail -s "$mail_subject" $mailing_list < $mail_body_file
	fi
done
 
rm -f $pidfile
log_success
 
exit 0
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2009, 12h15   #11
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 245
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 245
Points : 1 902
Points : 1 902
Nom du script: wakewatcher

Compatible avec: Bash

Descriptif:Vérification qu'une machine est allumée et envoi de mail aux personnes concernées

Pré-requis: adresse mail / adapter les variables

Code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash
 
data_directory=/var/lib/wakewatcher
computer=nomdelamachine
 
mail_sent="$data_directory"/"$computer"
 
mail_body_file=$(mktemp)
mail_subject="[Message automatique] Alerte:$computer $(date) "
mailing_list="administrateur@mondomaine.fr,utilisateur1@mondomaine.fr,utilisateur2@mondomaine.fr"
 
ping_test=$( ping -c3 -f $computer | grep " 0% packet loss" ) 
 
file_missing_error="Erreur : $mail_sent n'existe pas"
 
(! test -f $mail_sent ) && echo $file_missing_error && exit
 
# Ecriture du contenu du message dans un fichier temporaire
write_mail_body()
{
cat << EOF >> $mail_body_file
Bonjour.
 
L'ordinateur $computer ne repond pas.
Il se peut qu'il soit eteint.
Il se peut egalement qu'il ne reponde pas a cause d'une defaillance du reseau.
 
Cordialement.
EOF
}
 
# si l'on ne recupere rien, c'est que le ping n'a pas eu lieu correctement, et donc que l'ordi est eteint
if [ -z "$ping_test" ] ; then
	# si l'on a deja envoye un mail, pas besoin d'en renvoyer un
	if [ $(cat $mail_sent) = "1" ] ; then
		exit
	# sinon on l'envoie
	else
		write_mail_body
		#sans oublier de signaler qu'on l'a envoye dans le fichier
		( mail -s "$mail_subject" $mailing_list < $mail_body_file ) && echo 1 > $mail_sent
	fi
else
	#Ecriture dans le fichier qu'on n'a pas envoye de mail, et pour cause, l'ordinateur repond
	( test -d $src_directory ) && echo 0 > $mail_sent
fi
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2009, 12h20   #12
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 245
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 245
Points : 1 902
Points : 1 902
Nom du script: checkvir

Compatible avec: Bash

Descriptif:scan antivirus et envoi de mail de rapport

Pré-requis: clamav / adresse mail

Code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/bin/bash
HOSTNAME=$(hostname)
DOMAINE="@mondomaine.fr"
 
myscriptname="checkvir"
pidfile="/var/run/$myscriptname.pid"
logfile="/var/log/localscript/$myscriptname.log"
 
# mail
mailing_list=administrateur$DOMAINE
mail_body_file=$(mktemp)
 
#
ScannedDirectories="/home /chemin /encore/unchemin "
Quarantine="/chemin/quarantaine"
# En Ko
FichierTailleMax="204800"
 
log_failure()
{
	echo "`date` [echec]" >> $logfile
}
log_success()
{
        echo "`date` [succes]" >> $logfile
}
 
# Ecriture du contenu du message dans un fichier temporaire
write_mail_body()
{
mail_subject="[$HOSTNAME] Scan antivirus de $ScannedDirectories du $(date)"
 
cat << EOF >> $mail_body_file
Scan de $ScannedDirectories du $(date)
$(cat $bufferlogfile)
EOF
}
 
# Ecriture du contenu du message dans un fichier temporaire
write_error_body()
{
cat << EOF >> $mail_body_file
Bonjour.
 
$pidfile existe. Cela indique que le script $PWD/$0 ne s'est pas termine correctement.
 
Cordialement.
EOF
}
 
# string vide
if [ -z "$pidfile" ]
then
	mail_subject="[$HOSTNAME] Alerte : erreur $pidfile string vide"
	write_error_body
	mail -s "$mail_subject" $mailing_list < $mail_body_file
	log_failure
	exit 1
fi
# fichier existe
if [ -e "$pidfile" ]
then
        mail_subject="[$HOSTNAME] Alerte : erreur $pidfile fichier present"
        write_error_body
        mail -s "$mail_subject" $mailing_list < $mail_body_file
	log_failure
        exit 1
fi
 
echo $! > $pidfile
 
bufferlogfile=$(mktemp)
 
# SCRIPT
find $ScannedDirectories -type f -mtime -1 -ctime -1 -print0 | xargs -0 clamscan -v --stdout -l $bufferlogfile --move=$Quarantine --max-filesize=$FichierTailleMax
 
cat $bufferlogfile >> $logfile
 
write_mail_body
mail -s "$mail_subject" $mailing_list < $mail_body_file
 
log_success
 
rm -f $pidfile
rm $bufferlogfile
 
exit 0
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2009, 12h25   #13
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 245
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 245
Points : 1 902
Points : 1 902
Nom du script: sauvegarde

Compatible avec: Bash

Descriptif: sauvegarde de base de données, de données, ldap, avec rotation des sauvegardes ...

Pré-requis: rsync, paramétrer les variables du fichier de configuration .dat, renommer en fonction
Code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
 
#!/bin/bash
 
configuration_file="/usr/local/script/sauvegarde.dat"
 
source $configuration_file
 
# options de rsync
RSYNC_OPTIONS="-va --delete --force --ignore-errors"
 
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
 
# Variables dynamiques
HOSTNAME=$(hostname)
TMPFILE=$(mktemp -t)
 
# Variables dependantes d'autres variables
PURPOSE="[Sauvegarde $HOSTNAME > $DISTANTCOMPUTER]"
DATEDEBUT=$(date +'%F')
HEUREDEBUT=$(date +'%T')
MAILSUBJECT="$PURPOSE[$DATEDEBUT][$HEUREDEBUT>"
 
# Declarations des fonctions
 
# renommage du repertoire $ARCHIVEROOT$BACKUPDIR.$1 en $ARCHIVEROOT$BACKUPDIR.$2 si $ARCHIVEROOT$BACKUPDIR.$1 existe
do_rsync_rotate()
{
if [ -d "$ARCHIVEROOT$BACKUPDIR.$1" ]; then
        mv $ARCHIVEROOT$BACKUPDIR.$1 $ARCHIVEROOT$BACKUPDIR.$2 >> $TMPFILE 2>&1
fi
}
 
# rotation des repertoires de sauvegarde s'ils existent 
do_rsync()
{
	echo " Rotation des repertoires $ARCHIVEROOT$BACKUPDIR ">>$TMPFILE
	# suppression du repertoire 3
	if [ -d "$ARCHIVEROOT$BACKUPDIR.3" ]; then
		rm -rf "$ARCHIVEROOT$BACKUPDIR.3" >> $TMPFILE 2>&1
	fi
	# renommage du repertoire 2 en repertoire 3
	do_rsync_rotate 2 3
   	# renommage du repertoire 1 en repertoire 2
	do_rsync_rotate 1 2
	# copie du contenu du repertoire 0 en repertoire 1
	if [ -d "$ARCHIVEROOT$BACKUPDIR.0" ]; then
		cp -al "$ARCHIVEROOT$BACKUPDIR.0" "$ARCHIVEROOT$BACKUPDIR.1" >> $TMPFILE 2>&1
	fi
 
	rsync $RSYNC_OPTIONS $BACKUPDIR "$ARCHIVEROOT$BACKUPDIR.0" 2>&1
}
 
# compte rendu de sauvegarde
do_accounting()
{
cat << EOF >> $TMPFILE
 * Repertoire 	Source		: $(du -sh "$BACKUPDIR")
 		Destination	: $(du -sh "$ARCHIVEROOT$BACKUPDIR.0")
EOF
}
 
do_backupfile_rotate()
{
if [ -e "$LOCALBACKUPPATH/$BACKUPFILE.$1" ]; then
        mv $LOCALBACKUPPATH/$BACKUPFILE.$1 $LOCALBACKUPPATH/$BACKUPFILE.$2 >> $TMPFILE 2>&1
fi
}
 
do_backupfile()
{
	# rotation des fichiers de sauvegarde s'ils existent
	if [ -e "$LOCALBACKUPPATH/$BACKUPFILE.4" ]; then
                rm "$LOCALBACKUPPATH/$BACKUPFILE.3" >> $TMPFILE 2>&1
	fi
	do_backupfile_rotate 3 4
	do_backupfile_rotate 2 3
	do_backupfile_rotate 1 2
	do_backupfile_rotate 0 1
	if [ -e "$LOCALBACKUPPATH/$BACKUPFILE" ]; then
                ln "$LOCALBACKUPPATH/$BACKUPFILE" "$LOCALBACKUPPATH/$BACKUPFILE.0" >> $TMPFILE 2>&1
	else
		echo "/!\ Attention, $LOCALBACKUPPATH/$BACKUPFILE n'existe pas." >> $TMPFILE 2>&1
	fi
}
 
# Verification de l'integrite des variables principales
if_empty_exit()
{
if [ -z "$(eval echo $1)" ] ; then
        echo "/!\ $1 est vide." >> $TMPFILE
	cat $TMPFILE >> $LOGFILE
        DATEFIN=$(date +'%T')
        MAILSUBJECT="$MAILSUBJECT>$DATEFIN] : Echec"
        mail -s "$MAILSUBJECT" $MAILADDR < $TMPFILE
	exit
fi
}
 
# verification de l'accessibilite d'un repertoire
if_access_denied_exit()
{
ls $(eval echo $1) > /dev/null 2>&1
if [ $? -ne 0 ]; then
        echo "/!\ acces a $1 impossible." >> $TMPFILE
        cat $TMPFILE >> $LOGFILE
	DATEFIN=$(date +'%T')
	MAILSUBJECT="$MAILSUBJECT>$DATEFIN] : Echec"
        mail -s "$MAILSUBJECT" $MAILADDR < $TMPFILE
        exit
fi
}
 
introduction()
{
cat << EOF >> $TMPFILE
################################################
Sauvegarde du $DATEDEBUT pour $HOSTNAME:
################################################
EOF
}
 
conf_report()
{
(test -n "$PSQL_BACKUP_WANTED") && echo "# Sauvegarde Postgresql : $PSQL_DATABASE_NAMES" >> $TMPFILE
(test -n "$MYSQL_BACKUP_WANTED") && echo "# Sauvegarde MySql : $MYSQL_DATABASE_NAMES" >> $TMPFILE
(test -n "$LDAP_BACKUP_WANTED") && echo "# Sauvegarde Ldap " >> $TMPFILE
 
cat << EOF >> $TMPFILE
## Fichier de configuration
# $configuration_file
## Fichier temporaire utilise pour les logs
# $TMPFILE
## Fichier de logs
# $LOGFILE
## Repertoire temporaire
# $TMPDIRECTORY
## Repertoire local pour les fichiers des bases de donnees
# $LOCALBACKUPPATH
## Repertoire racine de la sauvegarde distante
# $ARCHIVEROOT
# $(mount | grep $MOUNT_POINT)
## Liste des repertoires a sauvegarder
# $directory_list
## Adresse mail de rapport
# $MAILADDR
################################################
EOF
}
 
conf_check()
{
variable_list="\$configuration_file \$TMPFILE \$LOGFILE \$TMPDIRECTORY \$LOCALBACKUPPATH \$ARCHIVEROOT \$directory_list \$DISTANTCOMPUTER"
directory_list_to_check="\$TMPDIRECTORY \$LOCALBACKUPPATH \$ARCHIVEROOT"
	for variable in $variable_list
	do
		if_empty_exit $variable
	done
 
	for directory in $directory_listt_to_check
	do
		if_access_denied_exit $directory
	done
 
}
 
conclusion()
{
cat << EOF >> $TMPFILE
 
################################################
Sauvegarde terminee : $(date +'%F a %T')
################################################
EOF
}
 
# sauvegarde de la liste des programmes installes
pkg_list()
{
BACKUPFILE="selections"
cat << EOF >> $TMPFILE
 
################################################
Sauvegarde de la liste des paquets dans $LOCALBACKUPPATH/$BACKUPFILE
EOF
dpkg --get-selections > $LOCALBACKUPPATH/$BACKUPFILE
ls -Al $LOCALBACKUPPATH/$BACKUPFILE >> $TMPFILE 2>&1
cat << EOF >> $TMPFILE
################################################
EOF
}
 
# sauvegarde de la base ldap
ldap_dump()
{
BACKUPFILE="ldap"
cat << EOF >> $TMPFILE
 
################################################
Sauvegarde de la base ldap dans $LOCALBACKUPPATH/$BACKUPFILE
EOF
 
do_backupfile
slapcat -l $LOCALBACKUPPATH/$BACKUPFILE >> $TMPFILE 2>&1
ls -Al $LOCALBACKUPPATH/$BACKUPFILE >> $TMPFILE 2>&1
cat << EOF >> $TMPFILE
################################################
EOF
}
 
# sauvegarde des bases de donnees postgresql
psql_dump()
{
cat << EOF >> $TMPFILE
 
################################################
Sauvegarde des bases de donnees POSTGRESQL $PSQL_DATABASE_NAMES  dans $LOCALBACKUPPATH
EOF
for BACKUPFILE in $PSQL_DATABASE_NAMES
do
	do_backupfile
        echo " * Sauvegarde de la base $BACKUPFILE dans $LOCALBACKUPPATH/$BACKUPFILE" >> $TMPFILE
	su postgres -c "/usr/bin/pg_dump -d $BACKUPFILE > $TMPDIRECTORY/$BACKUPFILE" >> $TMPFILE 2>&1
        mv $TMPDIRECTORY/$BACKUPFILE "$LOCALBACKUPPATH/$BACKUPFILE" >> $TMPFILE 2>&1
	ls -Al $LOCALBACKUPPATH/$BACKUPFILE >> $TMPFILE 2>&1
done
cat << EOF >> $TMPFILE
################################################
EOF
}
 
# sauvegarde des base mysql
mysql_dump()
{
cat << EOF >> $TMPFILE
 
################################################
Sauvegarde des bases de donnees MYSQL $MYSQL_DATABASE_NAMES  dans $LOCALBACKUPPATH
EOF
 
for BACKUPFILE in $MYSQL_DATABASE_NAMES
do
	do_backupfile
        echo " * Sauvegarde de la base $BACKUPFILE dans $LOCALBACKUPPATH/$BACKUPFILE" >> $TMPFILE
	mysqldump -u sauvegarde $BACKUPFILE > $TMPDIRECTORY/$BACKUPFILE
	mv $TMPDIRECTORY/$BACKUPFILE "$LOCALBACKUPPATH/$BACKUPFILE" >> $TMPFILE 2>&1
        ls -Al $LOCALBACKUPPATH/$BACKUPFILE >> $TMPFILE 2>&1
done
cat << EOF >> $TMPFILE
################################################
EOF
}
 
 
# Test d'accessibilite du media ou l'on sauvegarde
test_destination()
{
# le fait d'etre monte ne signifie pas que cela fonctionne
# pour tester l'accessibilite ... on essaie d'y acceder
ls $ARCHIVEROOT > /dev/null 2>&1
if [ $? -ne 0 ] ; then
 
cat << EOF >> $TMPFILE
$(ls $ARCHIVEROOT)
$ARCHIVEROOT est inaccessible.
La sauvegarde n'a pas pu avoir lieu.
EOF
        cat $TMPFILE >> $LOGFILE
        DATEFIN=$(date +'%T')
	MAILSUBJECT="$MAILSUBJECT>$DATEFIN] :Echec"
        mail -s "$MAILSUBJECT" $MAILADDR < $TMPFILE
        exit
fi
}
 
effective_backup()
{
# sauvegardes des repertoires
cat << EOF >> $TMPFILE
 
################################################
Sauvegarde effective des repertoires $directory_list vers $ARCHIVEROOT
EOF
 
for BACKUPDIR in $directory_list
do
	do_rsync && do_accounting
done
cat << EOF >> $TMPFILE
################################################
EOF
}
 
# verification que les repertoires necessaires sont bien presents sur la destination et creation s'ils n'existent pas
check_destination_directories()
{
upper_dir=""
#echo "\$directory_list = $directory_list"
for i in $directory_list
do
upper_dir="$upper_dir $( dirname $i | sed '/^\/$/d' )"
done
final_upper_dir_list=$(echo $upper_dir | sed 's/ /\
/g' | uniq)
 
for i in $final_upper_dir_list
do
#	echo "\$ARCHIVEROOT = $ARCHIVEROOT \$i = $i"
	if [ ! -d "$ARCHIVEROOT$i" ] ; then
		echo "/!\ Attention le script de sauvegarde cree un repertoire $ARCHIVEROOT$i" >> $TMPFILE
        	mkdir -p $ARCHIVEROOT$i >> $TMPFILE 2>&1
	fi
done
}
 
# Envoi du mail signalant la reussite de la sauvegarde
final_mail()
{
	DATEFIN=$(date +'%T')
	MAILSUBJECT="$MAILSUBJECT>$DATEFIN] : Succes"
	mail -s "$MAILSUBJECT" $MAILADDR < $TMPFILE
}
 
# Ecriture du contenu du message dans un fichier temporaire
write_error_body()
{
cat << EOF >> $TMPFILE
 
Bonjour.
 
$mypidfile existe. Cela indique que le script ne s'est pas termine correctement.
 
Cordialement.
 
EOF
}
 
# string vide
if [ -z "$mypidfile" ]
then
	MAILSUBJECT="[$HOSTNAME] Alerte : erreur $pidfile"
	write_error_body
	mail -s "$MAILSUBJECT" $MAILADDR < $TMPFILE
	exit 1
fi
# fichier existe
if [ -e "$mypidfile" ]
then
        MAILSUBJECT="[$HOSTNAME] Alerte : erreur $pidfile"
        write_error_body
        mail -s "$MAILSUBJECT" $MAILADDR < $TMPFILE
        exit 1
fi
 
echo $! > $mypidfile
 
 
# ecriture du debut de la sauvegarde dans le fichier temporaire
introduction
 
# Rapport de la configuration de la sauvegarde
conf_report
 
# Verification qu'on n'a pas des variables importantes manquantes
conf_check
 
# sauvegarde de la liste des programmes installes
pkg_list
 
# sauvegarde de la base ldap
(test -n "$LDAP_BACKUP_WANTED") && ldap_dump
 
# sauvegarde des base postgresql
(test -n "$PSQL_BACKUP_WANTED") && psql_dump
 
# sauvegarde des base postgresql
(test -n "$MYSQL_BACKUP_WANTED") && mysql_dump
 
 
# test accessibilite du repertoire destination
test_destination
 
# test de presence des repertoires necessaires a la sauvegarde dans la destinations
check_destination_directories
 
# la sauvegarde commence vraiment, les fichier sont transferes vers leur destination
effective_backup
 
# ecriture de la fin de la sauvegarde dans le fichier temporaire
conclusion
 
# le fichier ou l'on a enregistre le deroulement et concatene au fichier de log
cat $TMPFILE >> $LOGFILE
 
# envoi d'un mail pour prevenir
final_mail
 
rm -f $mypidfile
Code du fichier de configuration sourcé :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
#!/bin/bash
MAILADDR=administrateur@mondomaine.fr
 
## Repertoire accessible, de preferance distant, un partage nfs fait tres bien le travail
ARCHIVEROOT=/mnt/sauvegarde_distante/nommachinesauvegardee
MOUNT_POINT=/mnt/sauvegarde_distante
 
## machine laquelle on sauvegarde. Elle peut ne pas etre distante.
## ce parametre ne rentre pas en ligne de compte pour la sauvegarde, il est uniquement la a titre informatif. Le montage d'ARCHIVEROOT n'est pas integre au script donc ca n'est pas dynamique. Ce parametre influe sur le nom du logname et sur le contenu du titre du mail
DISTANTCOMPUTER=nommachinedistante
 
myscriptname="sauvegarde"
mypidfile="/var/run/$myscriptname.pid"
 
 
## Fichiers de logs, la compte rendu n'y est copie qu'une fois la sauvegarde achevee
## il contient toutes les comptes rendus de sauvegardes precedents
## un fichier temporaire est utilise pour l'envoi du mail, il sera naturellement nettoye par la crontab
## on envoie le nom de ce fichier pour analyser les erreurs eventuelles qui n'aurait pas pu etre
## repercutee dans le fichier de log
LOGFILE="/var/log/localscript/sauvegarde/vers_$DISTANTCOMPUTER.log"
 
## repertoire utilise pour la copie des bases de donnees. Il est accessible par tout le monde
## l'avantage etant que pour generer les dump, il faut endosser l'identite d'un utilisateur
## autre que root
TMPDIRECTORY=/tmp
 
## repertoire local pour les sauvegardes de base de donnees
LOCALBACKUPPATH=/home/fauxutilisateur
 
## liste des repertoires a sauvegarder
directory_list="/root /home /etc /et/encore/des/chemins"
 
## si ces variables sont non vides, on sauvegarde la bdd associee
LDAP_BACKUP_WANTED="OK"
#MYSQL_BACKUP_WANTED="OK"
PSQL_BACKUP_WANTED="OK"
 
## liste des noms de bases de donnees
PSQL_DATABASE_NAMES="nomdebasededonnes"
#MYSQL_DATABASE_NAMES="blabla"
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 00h29   #14
Rédacteur
 
Avatar de nyal
 
Inscription : septembre 2002
Messages : 611
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2002
Messages : 611
Points : 811
Points : 811
Envoyer un message via MSN à nyal
Nom du script : libadialog

Compatible : bash

Descriptif : Bibliothèque d'abstraction des logiciels "dialog" (xdialog, zenity, kdialog, dialog, console (manually with bash), wish)

Pré-requis : Cela dépend l'affichage qu'on souhaite. On peut n'utiliser que le mode "console" par exemple. Je n'ai pas testé depuis un moment mais cela doit fonctionner encore aujourd'hui. (il peut y avoir des bugs)

Lien : http://nyal.developpez.com/mplayer/d...r-setup.tar.gz

Il y'a un fichier "sh" selon le mode qu'on souhaite. Par exemple, si on veut la version "console", on doit utiliser "console_func.sh".
Vous trouverez des screenshots ici : http://nyal.developpez.com/mplayer/i...age=screenshot

Exemple d'utilisation :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
#!/bin/bash
 
. console_func.sh
 
info_text "YES" "Welcome!!!"
 
id=`question_select "Proxy Support" "Did you use a Proxy ?"`
return_value=$?
echo "question return = $return_value" > /tmp/result.txt
 
PATH_TO_DECOMPRESS=`entry_text "Config Install" "Choose the Path to decompress archives" "TEST"`
return_value=$?
echo "entry result = $PATH_TO_DECOMPRESS" >> /tmp/result.txt
echo "entry return = $return_value" >> /tmp/result.txt
 
checklist="TRUE \"test 1\"
FALSE \"test 2\""
selection=`checklist_select "test" "Information" "$checklist"`
return_value=$?
echo "checklist result = $selection" >> /tmp/result.txt
echo "checklist return = $return_value" >> /tmp/result.txt
 
# BUG!!!!
size=`radiolist_select "Local Installation" "Choose Size of Font" "TRUE 14
FALSE 18
FALSE 24
FALSE 28"`
return_value=$?
echo "radiolist result = $size" >> /tmp/result.txt
echo "radiolist return = $return_value" >> /tmp/result.txt
 
selection=`files_selection "My Install" "Select Files"`
return_value=$?
echo "selection result = $selection" >> /tmp/result.txt
echo "selection return = $return_value" >> /tmp/result.txt
nyal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2009, 14h38   #15
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
Par défaut Mise à jour des règles de SELinux

Bonjour,

Nom du script: SEupdate

Compatible avec: Bash

Descriptif: Met à jour les règles de SELinux lorsqu'une nouvelle application veut accéder à un fichier sensible que SELinux interdit. Le script crée simplement les nouvelles règles et donne la commande pour les appliquer.

Pré-requis: Avoir SELinux qui tourne, bien sûr. Normalement, les alarmes arrivent dans /var/log/audit/audit.log. Si ce n'est pas le cas, changer le script et mettre à la place /var/log/messages.

Environnement: j'ai mis le script dans /root/selinux. Deux fichiers sont créés et doivent rester là pour l'exécution suivante, lorsqu'une prochaine alarme surviendra.

Lancement du script: La première fois, le fichier en paramètre n'existe pas. Ce n'est pas grave, il sera créé à la fin du script.

Code :
1
2
3
sudo -i               # si le fichier /etc/sudoers est bon, passage root sans mot de passe :-)
cd selinux            # j'ai mis l'exéctable dans /root/selinux
./SEupdate selinux.te # lancement du script avec le nom du fichier de règles
Code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/bin/bash

# init
execName=$(basename $0)
tmpDir=$(mktemp -d /tmp/$execName.XXXXXX)
tmpFile=$tmpDir/$execName

# manage arguments
if [[ $# != 1 ]]
then
  echo "Usage: $execName <Type_Enforcement_file>"
  exit 1
fi
dstDir=$(dirname $1)
dstFile=$(basename $1)
dstFile=${dstFile%.te}
if [[ ! -s $1 ]]
then
  echo "WARNING: <Type_Enforcement_file> non-existent or empty, creating it..."
  touch $1
fi
cp $1 $tmpFile.te.src

# create new type enforcement file from audit file
audit2allow -m local -l -i /var/log/audit/audit.log > $tmpFile.te.add

# set header file
echo "
module local 1.0;

require {" > $tmpFile.te.new

# format and merge type lines
awk '
/^[[:space:]]*type / \
{
  sub("^[[:space:]]*", " ")
  print
}' $tmpFile.te.src > $tmpFile.type.src
awk '
/^[[:space:]]*type / \
{
  sub("^[[:space:]]*", " ")
  print
}' $tmpFile.te.add > $tmpFile.type.add
sort -u -k 2,2 $tmpFile.type.src $tmpFile.type.add >> $tmpFile.te.new

# format and merge class lines
awk '
/^[[:space:]]*class / \
{
  sub("^[[:space:]]*", " ")
  if ($0 !~ "[{}]")
  {
    $2=$2 " {"
    if (length($NF) == 1) $NF="}" $NF
    else sub(".$", " };", $NF)
  }
  print
}' $tmpFile.te.src | sort -k 3,3 > $tmpFile.class.src
awk '
/^[[:space:]]*class / \
{
  sub("^[[:space:]]*", " ")
  if ($0 !~ "[{}]")
  {
    $2=$2 " {"
    if (length($NF) == 1) {$NF="}" $NF}
    else {sub(".$", " };", $NF)}
  }
  print
}' $tmpFile.te.add | sort -k 3,3 > $tmpFile.class.add
[[ ! -s $tmpFile.class.src ]] && cp $tmpFile.class.add $tmpFile.class.src
while read srcLine
do
  options=$(echo "$srcLine" | awk '
    BEGIN {OFS="\n"}
    {
      for (i=4; i<NF; i++) {print $i}
    }')
  className=$(echo "$srcLine" | awk '{print $2}')
  addOptions=$(awk -v c=$className '
    BEGIN {OFS="\n"}
    $2 == c \
    {
      for (i=4; i<NF; i++) {print $i}
    }' $tmpFile.class.add)
  [[ -n $addOptions ]] && options+=$'\n'$addOptions
  line=" class $className { $(echo "$options" | sort -u | tr "\n" " ")};"
  echo "$line" >> $tmpFile.te.new
done < $tmpFile.class.src

# close require block
echo "}" >> $tmpFile.te.new

# sort rules and format options
awk '
/^allow / \
{
  if ($4 !~ "^{")
  {
    $4="{ " $4
    sub(".$", " };", $NF)
  }
  print
}' $tmpFile.te.src $tmpFile.te.add |
  sort -k 2,3 > $tmpFile.te.rules

# merge rules with same first three fields
cp -f $tmpFile.te.rules $tmpFile.te.rules.to.merge
> $tmpFile.te.rules.merged
while read ruleLine
do
  selector=$(echo $ruleLine | cut -d " " -f 1-3)
  options=$(awk -v s="$selector" '
    BEGIN {OFS="\n"}
    {
      if ($0 ~ "^"s) {for (i=5; i<NF; i++) {print $i}}
    }' $tmpFile.te.rules.to.merge)
  mergedOptions=$(echo "$options" | sort -u | tr "\n" " ")
  echo "$selector { $mergedOptions };" >> $tmpFile.te.rules.merged
  sed -i '/^'"$selector"'/d' $tmpFile.te.rules.to.merge
done < $tmpFile.te.rules
sort -u -k 1,3 $tmpFile.te.rules.merged > $tmpFile.te.rules.uniq

# format rules by blocks
awk '
{
  if ($2 != prevApp)
  {
    prevApp=$2
    printf "\n#============= %s ==============\n", $2
  }
  print
}' $tmpFile.te.rules.uniq >> $tmpFile.te.new

# compile file
checkmodule -M -m -o $tmpFile.mod $tmpFile.te.new

# create policy package file
semodule_package -o $tmpFile.pp -m $tmpFile.mod

# replace policy package file
cp -f $tmpFile.pp $dstDir/$dstFile.pp

# replace type enforcement file
cp -f $tmpFile.te.new $dstDir/$dstFile.te

# clean temp dir up
rm -rf $tmpDir

# tell the next step to do, to install updated SELinux rules
echo "Now, run the command 'semodule -i $dstDir/$dstFile.pp'"
J'ai débugué au mieux, mais peut-être reste-t-il encore des erreurs. Si vous en trouvez, dites-le moi.
__________________
Un problème bien posé est déjà résolu (H. Bergson).
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2009, 23h34   #16
Membre chevronné
 
Avatar de hornetbzz
 
Homme
Directeur commercial
Inscription : octobre 2009
Messages : 475
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 44
Localisation : France

Informations professionnelles :
Activité : Directeur commercial

Informations forums :
Inscription : octobre 2009
Messages : 475
Points : 680
Points : 680
Envoyer un message via Skype™ à hornetbzz
Par défaut Script Shell last_files_list

Mon premier script de super noob, merci pour l'accueil modéré

Nom du script: last_files_list <n_minutes>

Compatible avec: sh

Descriptif: permet de lister les fichiers vieux de n minutes pour une utilisation sur certaines distro "allégées", par ex celles des NAS, qui ne comportent pas la commande FIND avec toutes les options ( et notamment -amin -mmin -cmin...) permettant justement de lister les fichiers de moins de 1 jour.

Pré-requis: void

Code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/bin/sh
 
# *******************************************************************
# *		LOOK FOR THE LAST MODIFIED FILES since m minute_nows			*
# *		FIND cmde is uncomplete on the QNAP Linux version			*
# *		script call : my_find_lasted_files m, where m=minute_nows		*
# *		bug included: do not work for midnight research... (hour = 00) *
# *******************************************************************
 
# ***************************
# *		INIT & GET TIME		*
# ***************************
month_now=`date | awk '{print $2}'`
day_now=`date | awk '{print $3}'`
hour_now=`date | awk '{print $4}' | cut -d ':' -f 1`
minute_now=`date | awk '{print $4}' | cut -d ':' -f 2`
second_now=`date | awk '{print $4}' | cut -d ':' -f 3`
today_nowsfiles="/tmp/today_nowsfiles"
found_files="/tmp/foundfiles"
[[ -e $found_files ]] && rm $found_files
[[ -e $today_nowsfiles ]] && rm $today_nowsfiles
 
# format the input parameter required for the next search function : add a blank space if m-minute_now < 10
if [ ! -z $1 ]
then
	if [ $1 -lt 10 ]
	then
		newerthan="0$1"
	elif [ $1 -lt 60 ]
	then
		newerthan="$1"
	else
		newerthan="59"
	fi
else
	newerthan="05" #seek for files newer than 5 minute_nows
fi
 
# End searching time
hour_end=$hour_now
minute_end=$minute_now
 
# Start searching time
if [ $minute_now -gt $newerthan ]
then
	hour_start=$hour_now
	let "minute_start=$minute_now-$newerthan"
else
	if [ $hour_now -gt 01 ]
	then
		let "hour_start=$hour_now-1"
		let "minute_start=60-$newerthan+$minute_now"
	else
		let "hour_start=0"
		let "minute_start=60-$newerthan+$minute_now"
	fi
fi
 
# Convert time into minutes
if [[ $minute_start -lt 10 ]]
then
	minute_start="0$minute_start"
fi
let "start_research_time=60*hour_start+$minute_start"
let "end_research_time=60*hour_end+$minute_end"
 
# debug
# echo "now $hour_now:$minute_now"
# echo "start $hour_start:$minute_start"
# echo "end $hour_end:$minute_end"
 
# format the spacer required for the next search function : add a blank space if d-day_now < 10 of the month_now
if [ $day_now -lt "10" ]
then
spacer="  "
else
spacer=" "
fi
 
# debug
# echo "grep $month_now$spacer$day_now"
 
# get names of the files of today_now
# ls -ltsha | grep "$month_now$spacer$day_now" | awk '{print $10}'
 
# get hh:mm of the files of today_now
# ls -ltsha | grep "$month_now$spacer$day_now" | awk '{print $9}'
 
# get hh of the files of today_now
# ls -ltsha | grep "$month_now$spacer$day_now" | awk '{print $9}' | cut -d ':' -f 1
 
# get mm of the files of today_now
# ls -ltsha | grep "$month_now$spacer$day_now" | awk '{print $9}' | cut -d ':' -f 2
 
# ***************************************
# *	User msg						 	*
# ***************************************
echo "Looking for files having been modified over the last $newerthan minutes between $hour_start:$minute_start and $hour_end:$minute_end ... pls wait"
 
 
# *******************************************
# *	list of last 2 hours modified files 	*
# *******************************************
# Nota : add option -u to get last accessed time, instead of getting the file last modified time (by default)
echo "Building list ..."
ls -RltshaA 2>/dev/null | grep "$month_now$spacer$day_now $hour_start" > $today_nowsfiles
ls -RltshaA 2>/dev/null | grep "$month_now$spacer$day_now $hour_end" >> $today_nowsfiles
 
# debug
# cat $today_nowsfiles | more
# exit
 
# *******************************************************
# *	Seek for files newer than $newerthan in the list	*
# *******************************************************
let "count=1"
nb_of_files_today_now=`cat $today_nowsfiles | wc -l`
touch $found_files
 
while read file_line_i
do
	# get the file informations
	file_hour_i=`echo $file_line_i | cut -d ' ' -f 9 | cut -d ':' -f 1`
	file_minute_i=`echo $file_line_i | cut -d ' ' -f 9 | cut -d ':' -f 2`
	let "file_time_i=60*$file_hour_i+$file_minute_i"
	file_name=`echo ${file_line_i##* }`
	file_size=`echo $file_line_i | cut -d ' ' -f 6`
 
	if [[ $file_time_i -ge $start_research_time ]] && [[ $file_time_i -le $end_research_time ]]
	then
		in_the_range=true
	else
		in_the_range=false
	fi
 
	# record files in the time range
	if [[ $in_the_range ]]
	then
		if [ -f $file_name ] && [ ! -L $file_name ] && [ $file_name != "." ] && [ $file_name != ".." ]  && [ $file_name != "0" ] && [ $file_name != $found_files ] && [ $file_name != $today_nowsfiles ] && [ $file_size != "0" ]
		then
			echo "found: $file_line_i"
			echo -e "file $count: $file_line_i" >> $found_files
			let "count=$count+1"
		fi
	fi
done < $today_nowsfiles
 
# *******************
# *	Show results	*
# *******************
nb_files_found=`cat $found_files | wc -l`
echo "cat $found_files | more"
echo "----------------------------------------------------------------------------------"
echo "$nb_files_found modified files in the last $newerthan minutes between $hour_start:$minute_start and $hour_end:$minute_end"
cat $found_files | more
echo "----------------------------------------------------------------------------------"
 
# *******************
# *	clean & Get out	*
# *******************
rm $found_files
rm $today_nowsfiles
exit
et le bonus du Super Noob: afficher l'arborescence :
Citation:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ * /' -e 's/-/|/'
hornetbzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2010, 22h43   #17
Invité de passage
 
herve daniel
Inscription : janvier 2010
Messages : 1
Détails du profil
Informations personnelles :
Nom : herve daniel

Informations forums :
Inscription : janvier 2010
Messages : 1
Points : 1
Points : 1
Par défaut shell - interpretation des caracteres speciaux

Nom du script: essai.ksh

Compatible avec: ksh

Descriptif: exporter des variables dans un fichier.
Le probleme est que le(s) caractere(s) * sont interpretes dans
la chaine OA_REMOVE_FILES_CRON alors que je souhaiterai voir
dans la premier for un affichage de la chaine
OA_REMOVE_FILES_CRON (cad: 0 1 * * *)
et dans le deuxieme for, un affichage de la chaine
(dans le fichier FILE_ENV)
export OA_REMOVE_FILES_CRON="0 1 * * *"
Merci de votre aide
Hervé

Pré-requis: aucun

Code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
FILE_ENV=/tmp/OA.log
 
OAOPTIONLIST="OA_REMOVE_FILES_CRON"
 
 
if [ -z "$OA_REMOVE_FILES_CRON" ]; then
     OA_REMOVE_FILES_CRON="0 1 * * *"
fi
 
echo "Loaded environment variables are:"
for var in $OAOPTIONLIST
do
    if [ -n "$(eval echo \$$var)" ]; then
      echo "  $var=$(eval echo \$$var)"
    fi 
done 
 
# Add to environment file the OA_ variables (without code markers)
  for option in $OAOPTIONLIST
  do
    option_value=`eval echo '$'$option`
    if [ "$option_value" != "" ];then
       echo "export $option=\"$option_value\"" >> $FILE_ENV
    fi
  done
yeye_yeye_65 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2010, 12h15   #18
Membre chevronné
 
Avatar de hornetbzz
 
Homme
Directeur commercial
Inscription : octobre 2009
Messages : 475
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 44
Localisation : France

Informations professionnelles :
Activité : Directeur commercial

Informations forums :
Inscription : octobre 2009
Messages : 475
Points : 680
Points : 680
Envoyer un message via Skype™ à hornetbzz
Nom du script: ip wan

Compatible avec: sh

Descriptif: permet d'obtenir son IP publique, utile notamment derrière un firewall et quand on n'a qu'une busybox basique avec seulement nc (et donc sans wget par exemple..).

Pré-requis: void

Code:
Code :
1
2
3
4
5
6
7
8
#!/bin/sh
FILE=http_req2.txt
echo "GET /automation/n09230945.asp HTTP/1.0" > $FILE
echo "Host: www.whatismyip.com" >> $FILE
echo -e "\n\n" >> $FILE
IP=$(cat $F2 | nc www.whatismyip.com 80 | tail -n 1)
echo "ip publique: $IP"
exit 0
EDIT: pas testé en bash, car pas d'intérêt (wget) mais ça devrait fonctionner tel quel.
EDIT2: en bash c'est l'histoire d'une ligne:
Code :
SERVER_IP=$(wget -q http://www.monip.org/ -O- | grep "IP :" | cut --characters=-80 | sed -e 's/^.* \(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*$/\1/')
hornetbzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2010, 13h38   #19
Membre chevronné
 
Avatar de hornetbzz
 
Homme
Directeur commercial
Inscription : octobre 2009
Messages : 475
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 44
Localisation : France

Informations professionnelles :
Activité : Directeur commercial

Informations forums :
Inscription : octobre 2009
Messages : 475
Points : 680
Points : 680
Envoyer un message via Skype™ à hornetbzz
C'est ma journée créativité :-)

Nom du script: my_bash_cleanup

Compatible avec : bash

Descriptif:
"nettoie" un fichier bash en supprimant les lignes de commentaires et les lignes vides. Utile avant une mise en production par exemple. Le fichier d'origine est conservé bien sûr. Il y a moyen de faire nettement mieux, c'est clair. Mais j'ai voulu décomposer.

Pré-requis:
perl (uniquement pour l'aspect "graphique" du script, sinon, juste supprimer la ligne "local underline=`perl...")

Points d'intérêt:
  • Les commandes stat et sed.
  • La récupération/duplication des droits et owner du fichier d'origine. Comme je n'ai pas utilisé l'option "-i" de sed mais des cp/mv, les droits d'origine se perdent du fait de l'utilisateur (sudo => root) executant le script. Il faut donc les rétablir à l'identique du fichier orginal.

Code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/bin/bash
 
# ################################################################################
# CLEAN UP BASH SCRIPTs for production purposes
# usage: my_bash_cleanup <local_file_path>
# ################################################################################
 
 
# ################################################################################
# TODO
# adapt to other coding languages (like php, js and perl for example)
# ################################################################################
 
# ################################################################################
# CHANGE LOGS
# 03/12/2010: release 1.0
# ################################################################################
 
function next_step(){
	local msg=$1
	local FG_color="1;30m"
	local BG_color="40m"
	let STEP="$STEP+1"
	local mystring="\n# sub-step $STEP : $msg"
	local length=${#mystring}
	local underline=`perl -e "print '-' x $length;"`
	echo -ne "\033[$FG_color\033[$BG_color$underline\033[00m"
	echo -ne "$mystring\033[00m"
}
 
next_step "RUN $0\n"
 
#
# Input datas
#
next_step "Control input datas"
FILE2CLEAN=$1
EXEC_MODE="manual"
TMP_DIR=/tmp
MODIFIER=".mod"
echo
 
#
# Define standard Cleaned FILENAME
#
next_step "Rename file to clean: "
BASENAME=$(basename $FILE2CLEAN)
SOURCE_DIR=$(dirname $FILE2CLEAN)
FILE_CLEANED=${BASENAME%\.*}"_cleaned."${BASENAME##*.}
echo "done ($FILE_CLEANED)"
 
#
# check file (existing, regular and not empty)
#
next_step "Check if $FILE2CLEAN is a regular file: "
[ ! -e $FILE2CLEAN ] && echo "$0: file not existing" && exit 1
[ ! -f $FILE2CLEAN ] && echo "$0: file is not a regular file (directories or /dev files not allowed)" && exit 1
[ ! -s $FILE2CLEAN ] && echo "$0: file is empty" && exit 1
echo "Ok"
 
#
# secure file: not possible to clean root owned files
#
next_step "Check $FILE2CLEAN owner: "
OWNER=$(ls -o $FILE2CLEAN | cut -d" " -f3)
GROUP=$(ls -l $FILE2CLEAN | cut -d" " -f4)
RECTAL_PERM=$(stat -c '%a' $FILE2CLEAN)
[ "$OWNER" = "root" ] && echo "$0: not allowed to be cleaned (owner= root)" && exit 1
echo "Ok (not belongs to root)"
 
#
# backup the original file to tmp
#
next_step "Backup $FILE2CLEAN :"
cp -p $FILE2CLEAN $TMP_DIR/$BASENAME
cp -p $FILE2CLEAN $TMP_DIR/$FILE_CLEANED
FILE_CLEANED=$TMP_DIR/$FILE_CLEANED
echo "done"
 
#
# COMMENTS clean up (only lines starting with comments, not inline comments)
#
next_step "Remove commented lines except shebang :"
REMOVE_COMMENTS='1p; /^[[:blank:]]*#/d; s/[[:blank:]][[:blank:]]*#.*//'
cat $FILE_CLEANED | sed "$REMOVE_COMMENTS" > $FILE_CLEANED$MODIFIER
mv $FILE_CLEANED$MODIFIER $FILE_CLEANED
echo "done"
 
#
# CHECK SHEBANG PRESENCE
#
# TODO
 
#
# REMOVE empty lines
#
next_step "remove empty lines :"
REMOVE_EMPTYLINES="/^$/d"
cat $FILE_CLEANED | sed -e "$REMOVE_EMPTYLINES" >  $FILE_CLEANED$MODIFIER
mv $FILE_CLEANED$MODIFIER $FILE_CLEANED
echo "done"
 
#
# ADD std "headers" (eg. copyright, owner, date...)
#
 
#
# Save the cleaned file back to the source directory
#
next_step "Copy cleaned file to source directory $SOURCE_DIR:"
cp $FILE_CLEANED $SOURCE_DIR
echo "done"
 
#
# CHMOD/CHOWN
#
next_step "Set cleaned file permissions and owner :"
NEW_BASENAME=$(basename $FILE_CLEANED)
NEW_PATH=$(find $SOURCE_DIR -type f -name $NEW_BASENAME)
[ -f $NEW_PATH ] && chown $OWNER:$GROUP $NEW_PATH && chmod $RECTAL_PERM $NEW_PATH
echo "done"
 
#
# SHOW changes
#
# TODO
 
#
# LOG changes
#
# TODO
 
 
#
# Remove tmp files
#
next_step "Remove tmp files :"
[ -f $FILE_CLEANED$MODIFIER ] && rm $FILE_CLEANED$MODIFIER
# TODO rm other created files
echo "done"
 
#
# Closure
#
echo "end"
exit 0
hornetbzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 23h32   #20
Membre chevronné
 
Avatar de hornetbzz
 
Homme
Directeur commercial
Inscription : octobre 2009
Messages : 475
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 44
Localisation : France

Informations professionnelles :
Activité : Directeur commercial

Informations forums :
Inscription : octobre 2009
Messages : 475
Points : 680
Points : 680
Envoyer un message via Skype™ à hornetbzz
Par défaut SVN

Nom du script: my_svn_install.sh

Compatible avec : sh

Descriptif:
Installe/configure un serveur svn sous Apache2 sur une Debian Lenny.

Pré-requis:
Distro Debian
Serveur Apache2 fonctionnel

Points d'intérêt:
* Les packages nécessaires/pré-requis pour svn
* J'ai écrit un script similaire, peut-être plus complet, pour TRAC, ainsi que 2 autres scripts pour ajouter des serveurs svn et TRAC aux existants.


Avertissements:
Je poste le script car plusieurs personnes me l'ont demandé : il fonctionne sur mon serveur, cependant ce type d'installation reste étroitement lié à votre config, il est donc fortement recommandé de bien comprendre ce que vous faites, bien relire le shell avant execution, et adapter ce qui doit l'être, comme par exemple, la création du vhost Apache. (Step 13)
Fichiers attachés
Type de fichier : txt my_svn_install.txt (23,5 Ko, 9 affichages)
hornetbzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h29.


 
 
 
 
Partenaires

Hébergement Web