Initiation aux scripts shell pour automatiser des tâches – Structures de contrôle

Après avoir survécu à la canicule, nous repartons en quête de l’automatisation de tâches avec notre fidèle ami le Shell. Dans les articles précédents, nous avons vu comment créer un script Shell, puis la création et consultation de variables. Maintenant, afin de pouvoir analyser et réagir avec les données contenues dans ces variables, nous allons avoir besoin de structures de contrôle.

Les structures de contrôle sont le pilier fondamental de la programmation. Ce sont ces structures qui vont nous permettre de prendre une décision si une valeur spécifique a été atteinte. A nous de bien préciser laquelle (lesquelles). Avec les structures de contrôle dont nous allons parler ci-dessous et qui ont déjà été vues dans d’autres langages (voir article), il est possible de traiter la plupart des cas de figures connus en Shell.

Bonnes pratiques

Voici un petit rappel sur les bonnes pratiques à respecter lorsque vous faîtes de la programmation (peu importe le langage).

Bien commenter son code

En Shell, tout ce qui suit un # jusqu’à la fin de la ligne est considéré comme un commentaire. Un commentaire c’est du texte qui n’est pas interprété mais dont la présence doit être utile au lecteur pour bien comprendre le code. Même si vous ne le faîte pas pour les autres, faîtes le au moins pour vous, car relire son propre code 6 mois après peut s’avérer parfois compliqué.

La condition if

La condition if (SI) est une structure de contrôle indispensable à tout langage de programmation. C’est une base pour d’autres structures plus complexe et permet de prendre une décision face à un cas de figure défini.

SI [ $ELEMENT = VALEUR ]
ALORS
    # Instruction à exécuter
SINON
    # Instruction à exécuter
FIN

Pour la suite de cet article, nous aurons besoin de vérifier si un dossier est vide ou pas. Une commande et un if vont nous permettre d’y parvenir simplement.

#!/bin/sh
 
dossier="/tmp/mon_dossier"
# Cette méthode permet d'obtenir le nombre de fichiers présent dans $dossier
# La variable $# contient normalement le nom d'argument passé au script, ici il s'agit du nombre d'éléments retournés
set - ls $dossier
# Si il y a 0 fichier, le dossier est vide
if [ $# = 0 ]
then
    echo "$dossier est vide"
else
    echo "$dossier non vide"
fi

La structure case (switch)

Cette structure particulière, permet d’écrire simplement des instructions pour chaque cas de figure à traiter. Attention toutefois, ce n’est qu’une facilité d’écriture, car dans les faits, cette structure se comporte comme un if, else if, else.

Une petite représentation logique pour case

CAS $variable POUR
    Valeur1)
        # Instructions spécifiques si $variable = Valeur1
        # Ne pas oublier de terminer chaque condition par un ;; (break dans les autres langages) sinon les autres conditions seront exécutées aussi.
        ;;
    ValeurX)
        # Instructions spécifiques si $variable = ValeurX uniquement
    ValeurY)
        # Instructions spécifiques si $variable = ValeurX et ValeurY
        ;;
    *)
        # Instructions à exécuter pour tous les autres cas de figure
FIN

Voici un exemple d’utilisation de la structure case en shell. On retrouve très souvent cette structure dans les scripts de lancement et d’arrêt des services dans /etc/init.d sur Linux.

#!/bin/sh
 
# On prend une décision en fonction du premier argument passé au script
case $1 in
    start)
        echo "Démarrage du service"
        ;;
    stop)
        echo "Arrêt du service"
        ;;
    reload)
        reload=1
    restart)
        if [ reload = 1 ]
        then
            echo "Rechargement du fichier de configuration"
        else
            echo "Redémarrage du service"
        fi
        ;;
    *)
        echo "Erreur! Les argument autorisé en paramètres sont : start, stop, reload, restart"
esac

La fonction

En shell, la fonction est une structure de contrôle qui se comporte comme l’appel à un script externe. Il faut voir ça comme un script dans un script. Un fonction est une série d’instructions regroupées dans un espace logique que nous pouvons exécuter avec des arguments et qui peut retourner une valeur.

Voici la représentation logique d’une fonction

function nom_fonction {
    # Instruction à exécuter
    return code_retour
}

# Pour appeler la fonction
nom_fonction arg1 arg2
# Afficher le code retour de la fonction
echo $?

Voici une petite fonction en shell qui traite des arguments et retourne une valeur.

#!/bin/sh
 
function multiplie {
    ret=`expr $1 "*" $2`
 
    return $ret
}
 
echo -en "2 multiplié par 3 = "
multiplie 2 3
# Affiche le code retour de la fonction appelée
echo $? # Affichera 6

La boucle while

Si vous devez traiter un fichier texte par ligne, alors cette boucle sera sans doute votre meilleure amie. En effet, la boucle while (TANT QUE) répète les mêmes instructions tant qu’une condition est vraie. Plutôt que de réécrire les mêmes instructions pour traiter (par exemple) chaque ligne d’un fichier, while vous propose de les réutiliser tant qu’il y a des lignes à traiter.

Voici ce que donne une boucle while logiquement.

TANT QUE condition vraie
ALORS
    # Instructions à exécuter
FIN

Afin d’illustrer l’utilisation de cette boucle, nous allons traiter un fichier texte ligne par ligne en shell.

#!/bin/sh
 
# Le fichier à traiter est passé en argument
$fichier = $1
# On définit le symbole séparateur de champs
IFS=';'
# Numéro de ligne courant
nl=1
 
# On teste si le fichier existe
if [ -f $fichier ]
then
    # Pour chaque ligne du fichier lue, on applique le séparateur de champs ; qui sera remplacé par un espace afin de séparer les champs
    cat $fichier | while read ligne
    do
        # ajout.pl ajoute la ligne avec les champs à une base de données existante
        ajout.pl $ligne
        # Cas d'erreur
        if [ $? = 1 ]
        then
            echo "Erreur de traitement à la ligne $nl du fichier $fichier"
        fi
        # Incrémentation de la ligne en cours
        nl=expr $nl "+" 1
    done
else
    echo "Le fichier $fichier n'existe pas"
    return 1
fi

La boucle for

La boucle for va nous permettre comme son nom l’indique, d’exécuter en boucle la même série d’instructions pour tous les éléments d’une liste. Autrement dit, plutôt que de réaliser le même travail pour les 10 éléments d’une liste, nous allons l’écrire une fois et la structure l’appliquera à chacun des éléments.

Voici à quoi ressemble une boucle for d’un point de vue logique

POUR $ELEMENT DANS $LISTE
    FAIRE
    # Instructions à exécuter
FIN

Un petit exemple pour illustrer son utilité. Nous avons des agences situées dans différentes villes en France : Auxerre, Beauvais, Bordeaux, Grenoble, Lyon, Nantes, Paris, Valence qui déposent des fichiers sur notre serveur. Tous les soirs à 19h, un script planifié (par Cron) s’exécute pour traiter les fichiers envoyés par les agences puis les supprime après traitement. On part du principe que le traitement archive les fichiers.

Voici en Shell ce que cela pourrait donner… Bien entendu, il est possible de faire mieux (autrement), mais c’est pour illustrer un exemple d’utilisation.

#!/bin/sh
 
# La fonction liste le dossier passé en argument
# Retourne 0 si le dossier est vide, sinon, retourne la liste des fichiers
function liste_dossier {
    # Le premier argument de la fonction est le dossier à contrôler
    set - ls $1
    # Si il y a 0 fichier, le dossier est vide
    if [ $# = 0 ]
    then
        return 0
    # Si il y a des fichiers, on retourne la liste
    else
        return $*
    fi
}
 
# On définit la liste des agences (attention au respect des majuscules/minuscules dans le nom des dossiers)
agences='Auxerre Beauvais Bordeaux Grenoble Lyon Nantes Paris Valence'
# on définit le dossier racine des agences
racine='/var/www/data/agences'
# Pour chaque agence
for $a in $agences
do
    # Constitution du chemin vers le dossier de l'agence
    dossier=${racine}"/"{$a}
    # Analyse du dossier de l'agence
    $fichiers=liste_dossier $dossier
    if [ $fichiers = 0 ]
    then
        # Un peu d'affichage à titre informatif
        echo "Pas de fichier à traiter pour l'agence $a"
    else
        # Pour chaque fichier de l'agence, on exécute le traitement: traitement.pl (script en perl)
        for $f in $fichiers
        do
            echo "Traitement du fichier $f de l'agence $a"
            # On concatène (assemble) les variables afin de générer le chemin vers le fichier à traiter
            /home/spec/bin/traitement.sh $dossier"/"$f
            # Contrôle d'erreur du traitement
            if [ $? = 0 ]
            then
                echo "Traitement sans erreur pour le fichier $f de l'agence $a"
            else
                echo "Le traitement a rencontré des erreurs dans le fichier $f de l'agence $a"
            fi
        done
    fi
done

Astuce : Ne cherchez pas d’information sur les conditions possibles dans man if ou man while, mais dans man test, toutes les conditions applicables aux structures étudiées plus haut (if, while) sont représentées dans cette manpage.

Dans les prochains articles consacrés au shell, nous ferons le tour de quelques commandes utiles pour vos scripts.

Initiation aux scripts shell pour automatiser des tâches – Les variables

Vous en avez marre de taper les mêmes commandes tous les jours pour réaliser une opération quelconque qui pourrait très bien se passer de vous? Marre d’être esclave de la machine alors cela devrait être le contraire? Dans cette série d’articles consacrée aux scripts shell, nous mettons au travail nos neurones pour déléguer une partie (la moins intéressante) de nos tâches afin de rendre notre quotidien plus intéressant.

Dans l’article précédent, nous avons vu comment créer notre premier script shell, le rendre exécutable et enfin comme lui faire prendre en compte des arguments. Dans cet article, nous allons parler des variables.

Avant d’aller plus loin, si vous ne savez pas qu’est une variable ou que vous souhaitez en savoir plus, je vous invite à lire cet article d’initiation à la programmation consacré aux variables.

Les variables

En shell une variable se défini comme suit:

variable=valeur
 

variable est le mot qui, à chaque appel précédé d’un dollar $, vous permettra d’accéder à la valeur. En shell, une variable peut contenir les données ci-dessous:

# Le résultat d'une commande (liste ou chaîne de caractères)
resultats=`commande`
# Une liste, qui, traité par la structure de contrôle adaptée se comportera un peu comme une variable tableau
# Chaque élément de la liste est séparé de l'autre par un espace
liste="elem1 elem2 elem3 elem4 elem5 elem6"
# Une valeur numérique
nombre=123
# Une chaîne de caractère
chaine="blablabla"
# La valeur d'une autre variable (ne pas oublier de placer un dollar <strong>$</strong> devant le nom de la variable appelée)
# Ici copie contiendra la liste de valeurs "elem1 elem2 elem3 elem4 elem5 elem6"
copie=$liste

Les variables d’environnement

Les variables d’environnement sont propres à chaque système d’exploitation. Elles sont en général définies dans des scripts au démarrage du système et seront indispensables bon fonctionnement de ce dernier. A chaque lancement de terminal ou d’un script shell, les variables d’environnement seront chargées à partir de scripts existants. (/home/user/.bashrc, /home/user/.profile, /etc/environment)

Voici quelque exemples de variables d’environnement (la commande printenv permet d’afficher les variables d’environnement):

  • PATH : Chemin de recherche pour les commandes (à la saisie d’une commande, le shell partira à sa recherche dans les chemins définis)
  • SHELL : Contient le chemin vers l’interpréteur de commandes utilisé.
  • SSH_TTY : Chemin vers le numéro de terminal utilisé
  • HOME : Dossier utilisateur (home directory)

Pour définir une variable d’environnement, il suffit de saisir la commande export NomVariable (où NomVariable est à remplacer par le nom de votre variable).

Les variables spéciales

Comme dans la plupart des système de programmation, il existe un certain nombre de variables spéciales qui sont prédéfinies.

  • $@ : Liste des paramètres (séparés par des espaces) passés au script lors de son exécution
  • $* : Liste des paramètres (séparés par le caractère défini dans la variable spéciale IFS) passés au script lors de son exécution (dépend de l’interpréteur utilisé)
  • $# : Affiche le nombre de paramètres passés au script lors de son exécution
  • $? : Contient le code retour de la dernière commande exécutée. Permet de contrôler le déroulement d’une commande afin de réaliser des traitements conditionnels
  • $$ : Contient le numéro du processus du script en cours d’exécution. Programmes ou scripts, chaque processus possède un numéro unique pour l’identifier (voir commande ps)

Bien entendu il existe d’autres variables prédéfinie mais elles sont réservées à des utilisations spécifiques que nous ne verrons pas dans cet article. Ici nous parlons du shell en général (sh), mais certains shell très aboutis comme BASH possèdent de nombreuses variables spéciales et permettent de réaliser des opérations complexes sur les variables (découpage et traitement des mots).

Quelques exemples

Stocker le résultat d’une commande dans une variable

# Resu va contenir le résultat de la commande ls /tmp
resu=`ls /tmp`
# On appelle le contenu de la variable avec la commande echo et en précédant son nom d'un dollar <strong>$</strong>
echo $resu
# Le résultat affiché devrait ressembler à quelque chose comme ça (une liste dont chaque élément est séparé par un espace)
hsperfdata_root lost+found mc-root wsdl-jmch-c392d33ea3aa33c8796f5613216f2edb

Enrichir une variable existante

#Ajoute un dossier au PATH (chemin de recherche pour l'éxécution des commandes)
PATH=$PATH:/home/dir/bin
 
# Affiche le résultat
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/dir/bin

Récupérer le code retour d’une commande

# Effectue une recherche de motClé dans tous les fichiers contenu dans /var/www/dossier
grep -r "motClé" /var/www/dossier
# Stocke le code retour de la commande dans la variable ctrl
ctrl=$?
# Affiche le code retour
echo "Le code retour de la commande grep est : " $ctrl

Substitutions

Certains traitement spéciaux permettent de découper ou remplacer le contenu des variables selon certaines conditions. Cela s’appelle la substitution. Une fois encore, certains interpréteur plus évolués permettrons des substitutions bien plus pratiques et nombreuses.

# Définition du contenu de la variable toto
toto="machin"
# Affiche le contenu de la variable toto
echo ${toto} # Affiche : machin
 
# Contenu de substitution si la variable titi est nulle (non définie). Ce qui est le cas ici présent
# Le contenu de la variable n'est pas affecté, c'est seulement une valeur de remplacement qui sera utilisé pour cet affichage
echo ${titi:-autrechose} # Affiche : autrechose
 
# Contenu de substitution si la variable titi est nulle (non définie). Ce qui est le cas ici présent
# Cette fois le contenu de la variable est remplacé
echo ${titi:=autrechose} # Affiche : autrechose
 
# Affiche un message sur la sortie d'erreur standard (stderr) si la variable n'est pas définie
toto={$titi:?Valeur absente} # Affiche : Valeur absente
 
# Contenu de substitution si la variable titi existe (contenu défini)
# N'affecte pas le contenu de la variable, il s'agit d'une valeur de remplacement utilisée pour cet affichage
echo ${titi:+remplacement} # Affiche : remplacement
 
# Découpage du contenu par caractère
# Au préalable on définit la valeur de titi avec un texte long
titi="total 4 -rw-r--r-- 1 jmch jmch 1749 Jun 29 02:44 out.txt"
# On commence l'affichage de la variable à partir du caractère n°48
echo ${titi:48} # Affiche : out.txt
# On commence l'affichage de la variable à partir du caractère n°48 et on le limite à 6 caractères seulement
echo ${titi:48:6} # Affiche : out.t

Nous venons de faire un bref tour des possibilités concernant les variables. Comme dit plus haut, il existe de nombreuses autres possibilités qui vont dépendre de l’interpréteur de commande utilisé. Dans les prochains articles nous allons parler des structures de contrôle qui nous permettront d’analyser des résultats afin de prendre des décision ou encore de traiter des listes de valeurs.

Initiation aux scripts shell pour automatiser des tâches sur Linux

Vous réalisez les mêmes tâches tous les jours ou de manière régulière (sauvegarder des fichiers ou une base de données, envoyer des emails de rappel ou d’alerte)? Savez vous que vous pouvez automatiser ces tâches? Les systèmes UNIX / Linux bien qu’austères en apparence, permettent d’exécuter des ensembles de tâches sous forme de script. Il s’agit de scripts shell, mais vous entendrez également parler de batch ou de traitement par lot. Dans cette série d’articles, je vais vous montrer combien il est simple de créer un script, de récupérer des arguments pour automatiser des tâches.

Automatiser des tâches c’est vous libérer du temps pour réaliser d’autres tâches plus valorisantes qui nécessitent la réflexion d’un humain.

Le shell n’est pas réellement un langage de programmation en soi (en tout cas pas comme le C ou le Perl). Il s’agit principalement de commandes qui sont appelées les unes à la suite des autres avec quelque structures de contrôles (pour ceux qui ne savent pas ce que ce c’est, je vous invite à lire mon article sur les structures de contrôle) qui permettent de traiter des conditions et des listes de données ou encore de récupérer des valeurs retournées par les commandes sous forme de code retour.

Choisir son terminal

Avant toute chose vous devez (si ce n’est pas déjà fait) utiliser un terminal pour accéder à l’interpréteur de commande. Pour ce faire, soit vous travaillez sur Linux dans quel cas la question ne se pose pas car il y a abondance de choix (xterm, gnome-terminal, konsole, etc…) soit vous êtes sur Windows et si vous n’avez pas d’émulateur de terminal je vous propose de télécharger et d’installer le logiciel libre Putty disponible sur http://www.putty.org/.

Choisir son éditeur de texte

Pour créer un script, vous devez d’abord utiliser un éditeur de texte. Attention! Pas Word ni Libre Office Writer sans quoi les scripts ne fonctionneront pas. Il faut un éditeur de texte pur. En fonction du système sur lequel vous travaillez voici des nom d’éditeurs qui peuvent faire l’affaire:

  • Notepad
  • Notepad++
  • Edit
  • Gedit
  • Kate
  • Vi
  • Vim
  • Emacs
  • nano

Notre premier script

Maintenant que nous avons notre émulateur de terminal et que nous sommes équipés d’un éditeur de texte, nous allons pouvoir commencer le travail. La première ligne à saisir dans un script qui sera exécuté en ligne de commande est le chemin et le nom de l’interpréteur de commande.

Une fois encore, en fonction du système sur lequel vous travaillez, il existe plusieurs interpréteurs qui possèdent chacun une racine commune (le shell ou sh) puis des spécificités. En voici quelques uns

  • bash (bash sera l’interpréteur utilisé)
  • csh
  • dash
  • ksh
  • sh
  • zsh

La première ligne d’un script doit commencer par un dièse # suivi d’un point d’exclamation ! puis l’interpréteur de commande choisi avec le chemin d’accès absolu soit dans notre cas:

#!/bin/bash
 
terminal vim

A partir de maintenant l’interpréteur va tenter d’exécuter toutes les lignes qui vont suivre à l’exception de celles qui débutent par un dièse # qui seront considérées comme des commentaires.

Pour afficher quelque chose (du texte ou une variable) vous devrez utiliser la commande echo. Par exemple pour afficher les arguments du script on va taper les lignes qui suivent:

#!/bin/bash
 
# Je suis un commentaire, donc je ne serai pas interprété
# Les commentaires servent à aider les personnes qui lisent le script
 
# L'argument 0 correspond au nom du script, cet argument s'appelle avec la variable $0
echo "Nom du script: $0"
 
# L'argument 1 correspond au premier argument passé au script, il s'appelle avec la variable $1
echo "Premier argument: $1"
 
# L'argument 2 correspond au premier argument passé au script, il s'appelle avec la variable $2 (etc pour tous les autres arguments)
echo "Second argument: $2"

Une fois que vous avez enregistré votre script, vous devez le rendre exécutable. Il s’agit d’une simple formalité sur UNIX qui indique au système que votre script doit être exécuté lorsqu’il est appelé dans un terminal. Cette action est réalisée avec la commande UNIX chmod.

chmod 755
 

Maintenant que nous avons rendu notre script exécutable, nous allons l’appeler comme suit (nous avons nommé notre script script.sh):

./script.sh arg_1 arg_2
Nom du script:  ./script.sh
Premier argument:  arg_1
Second argument:  arg_2
terminal shell

le ./ avant le nom du script précise que nous appelons ce dernier depuis le dossier dans lequel nous nous trouvons (dossier courant, variable $PWD, commande pwd).

Dans les prochains articles nous irons plus loin dans les mécanismes et fonctionnalités des scripts afin de réaliser des actions précises, de récolter les résultats (codes retour) puis de les traiter de manière conditionnelle.

Paramétrer un routeur sous Linux en ligne de commande

A tout ceux qui m’ont dit que « Linux c’est compliqué », je dédie cet article consacré au routage TCP/IP sur Linux. Dans cet article je démontre comment, en quelques lignes vous pouvez activer le routage sur votre machine Linux ainsi que le le NAT.

Définitions

Routeur : Un routeur peut être un ordinateur ou un système spécialisé et consacré uniquement à cette tâche (routeur Cisco, Box internet etc…). Un routeur doit avoir au minimum 2 interfaces réseau pour pouvoir réaliser du routage. L’action du routeur consiste à diriger les paquets (requêtes) d’un réseau vers un autre lorsque cela est nécessaire.

Lorsqu’un ordinateur souhaite se connecter sur un site web qui se trouve sur internet, le routeur (votre box par exemple) se charge de faire le lien entre votre réseau local et internet.

Voici un petit schéma pour résumer ce que nous venons de voir.

routeurNat

NAT : Network Address Translating, soit traduction d’adresse réseau. Il s’agit d’un service complémentaire aux routeurs (principalement pour ceux faisant le lien entre un réseau local et internet) qui transforme les paquets routés, de manière à remplacer l’adresse IP de l’ordinateur source par celle du routeur. Sur internet, les adresses IP de votre réseau domestique ne sont pas connues. La seule adresse IP connue sur internet est celle de votre routeur (box). Il s’agit de son adresse IP WAN.

Activation du routage

Pour réaliser les opérations ci-dessous il est impératif d’être connecté avec l’utilisateur root (administrateur).

Le routage est une valeur booléenne (0 ou 1, vrai ou faux, oui ou non, marche ou arrêt) qui est définie à 0 par défaut sur les systèmes Linux. Il existe plusieurs moyens de passer cette valeur à 1 et donc d’activer le routage.

1ère méthode, on envoie la valeur 1 directement dans l’entrée concernée du noyau (facile)

echo 1 > /proc/sys/net/ipv4/ip_forward

2ème méthode, on utilise la commande sysctl pour définir cette valeur à 1 dans le noyau.

sysctl -w net.ipv4.ip_forward=1

3ème méthode, on édite le fichier /etc/sysctl.conf en créant la ligne comme ci-dessous. L’avantage de cette méthode c’est qu’elle est définitive. A chaque redémarrage, le routage sera activé.

net.ipv4.ip_forward = 1

Pour que les changements soient pris en compte, il est nécessaire de taper la commande sysctl -p /etc/sysctl.conf après modification du fichier.

Paramétrage du NAT

Comme nous l’avons vu plus haut, le NAT est un service complémentaire au routage indispensable si nous voulons pouvoir faire sortir des paquets sur internet. Sur linux, cette partie est traitée par le pare-feu (Lire l’article consacré aux pare-feu) iptables.

La seule règle à paramétrer est la suivante

iptables -t nat -A POSTROUTING -o ethx -j MASQUERADE

Il sera nécessaire de remplacer ethx par le nom de l’interface réseau par laquelle vos paquets vont partir sur internet.-t nat indique la table du noyau sur laquelle on intervient, ici nat.-A POSTROUTING indique que nous intervenons après le routage des paquets.

Juste avant qu’ils ne soient renvoyé sur l’interface sélectionnée (ethx).-j MASQUERADE précise que nous souhaitons masquer l’origine des paquets. Cela correspond à remplacer l’adresse IP source du paquet par notre propre adresse.

Et voilà, le routeur/NAT est fonctionnel et vous n’avez pas eu besoin de lire une documentation de trois kilomètres pour en arriver là. Pour utiliser votre routeur, il ne vous reste plus qu’à configurer la passerelle par défaut (adresse IP côté réseau local du routeur) sur vos machines pour qu’elles utilisent votre routeur pour accéder à internet.

Qu’est-ce qu’un pare-feu (firewall)?

Un firewall signifie textuellement mur de feu en anglais et c’est très certainement le terme le plus approprié pour définir son action. On ne voit rien à travers un mur de feu. Qui oserait traverser un mur de feu? Voici donc un article consacré aux pare-feu. A quoi servent-ils? Comment fonctionnent-ils? Est-ce que vous en avez besoin?

Quelques définitions

On ne peut commencer cet article sans une petite liste de définitions des termes importants qui seront réutilisés tout au long de cet article.

Il faut voir un ordinateur comme un centre de services. Pour communiquer sur un réseau informatique, il faut être en mesure d’identifier l’ordinateur (centre de services) et chacun des services qu’il propose.Adresse IPNuméro permettant l’identification de votre ordinateur sur un réseau informatique.Dans cet article, nous allons comparer l’adresse IP à un numéro de téléphone. Quand vous avez besoin d’appeler quelqu’un, vous prenez votre téléphone et composez le numéro de votre interlocuteur. L’adresse IP c’est à peu près la même chose.Numéro de portNuméro permettant l’identification du service souhaité.Pour rester dans l’exemple du téléphone, lorsque vous téléphonez à une société, vous devez savoir à quel service vous adresser. Le numéro de port correspondra au service souhaité (comptabilité, RH, atelier, direction etc…)LANLocal Area Network ou réseau local en français.Le réseau local est un réseau informatique à petite échelle. Par exemple chez vous, votre box internet, vos iPhones, iPad ou tablettes, smartphone et ordinateurs divers forment lorsqu’ils sont tous en service et connectés un réseau local. Ils communiquent tous au travers d’un même réseau, le votre qui est généralement géré par votre box. Une société peut avoir un réseau local également.WANWide Area Network ou réseau étendu en français.Un réseau étendu couvre une zone géographique plus grande. Cela peut être un département, une région, un pays ou la planète entière. Internet est un réseau étendu. Certaines sociétés possèdent des réseaux étendu comprenant des réseaux locaux dispersé dans les pays où sont installée les agences.

Par exemple, si vous souhaitez accéder aux pages web (site internet) proposé par l’ordinateur (centre de services) nommé www.andee.fr

Votre ordinateur va d’abord déterminer le numéro (adresse IP) de l’ordinateur (centre de service) www.andee.fr en interrogeant un service d’annuaire (DNS) qui répondra que www.andee.fr est à l’adresse 37.187.7.83.

Après, pour accéder aux pages web, votre ordinateur sait que le service concerné porte le numéro 80. Il interrogera donc le port 80 de la machine portant l’adresse 37.187.7.83 et obtiendra le service demandé si le service est bien actif.

Pour connecter votre réseau local (LAN) à un réseau étendu (WAN) il est nécessaire d’avoir un compte chez un FAI (Orange, Free, Numericable etc…) qui vous fournira un routeur. Le routeur s’occupe de vous identifier auprès du fournisseur d’accès et vous permet d’accéder au réseau WAN (en l’occurrence internet).

Le pare-feu (firewall)

Toujours pour rester dans la simplicité, restons avec notre ordinateur qu’on représente sous la forme d’un centre de services. Je vais tenter de vous résumer ce qu’est un pare-feu et à quoi il sert.

Le pare feu va se placer généralement entre deux réseaux (LAN ou WAN) afin de mettre en place un filtrage ou des redirections. Notre centre de services n’accepte pas au premier venu d’accéder à ses pages web car leur contenu est privé et réservé à l’usage seul de ses employés. Le pare feu est comme un mur de briques, il va cacher le service 80 de la vue des personnes qui arrivent depuis un réseau externe (WAN) et donc bloquer toutes les tentatives de communication avec ce service. Vous avez déjà essayé de parler à un service à travers un mur de briques? Efficacité garantie.

Par contre, l’accès à ce service est possible pour les personnes qui sont autorisées. Le personnel du centre par exemple possède la clé qui permet d’ouvrir la porte et de rentrer dans le centre de service. Ces personnes là auront donc accès au service 80.

Un autre usage du pare feu est de rediriger les requêtes. Par exemple, la personne de l’extérieur souhaite communiquer avec le service des pages web (port 80), le pare feu propose une entrée dédiée à ce service avec un agent d’accueil qui va s’occuper d’acheminer la personne dans un autre bureau qui se chargera de répondre à sa demande. Du point de vue de la personne extérieur, c’est l’entité du centre de service qui lui aura apporté réponse. On parle de redirection, MASQUERADE ou NAT.

Certains pare-feu proposent également de limiter / contrôler le débit. On parle alors de traffic shaping. Notre centre de services gère énormément de choses et ses locaux sont de taille restreinte. Impossible d’autoriser tout le monde à rentrer en même temps dans le bâtiment. La fonction correspondrait à du personnel situé à l’entré du mur et qui fermerai la porte dès que le quota est atteint et la rouvrirait lorsque les premières personnes sortent pour faire place aux suivantes.

Les systèmes d’exploitations modernes (Windows / UNIX Linux) sont normalement équipés d’un pare-feu et ceci même sur les postes utilisateur. Leur paramétrage demandent toutefois des connaissances techniques sans quoi vous pourriez bien bloquer l’accès à un service pourtant utile ou inversement autoriser tout et n’importe quoi et prendre le risque de voir des personnes s’introduire sur votre machine en exploitant des failles de sécurité sur certains services.

Pas de panique en ce qui concerne votre réseau domestique, les box aujourd’hui se comportent en général comme un routeur et empêche les personnes de l’extérieur d’accéder directement à votre réseau local (LAN) sauf demande particulière émanant de vous. Les pare-feu sur les ordinateurs fixes sont donc peu utiles aujourd’hui, ceci est moins vrai avec les ordinateurs portables qui sont susceptibles de se retrouver sur des réseaux publics (gares, aéroports, grandes surfaces). Soyez donc très prudent avec les ouvertures de port et n’activez jamais une DMZ sur une machine à moins d’être bien sûr de ce que vous faîtes.

Je vous ai fait un petit schéma qui, je l’espère vous aidera à mieux comprendre le rôle du pare-feu.

PareFeu

Liens et références

Je vous laisse avec quelques liens pour compléter cet article qui je l’espère vous aura aidé à comprendre ce qu’est un pare-feu et son utilité.

Des bases de données publiques et libres

Vous êtes webmaster ou concepteur d’applications et vous avez besoin d’informations publiques, comme les codes postaux des communes de France ou encore une liste des hotspots wifi d’une ville? Avant de courir acheter ces données sur un site qui vous les vendra sans scrupule, assurez vous que ces données ne soient pas déjà disponibles dans le domaine publique et libre d’accès.

Les données sont classées dans les 9 grandes catégories définies ci-dessous:

  • Agriculture et alimentation
  • Culture
  • Économie et Emploi
  • Éducation et Recherche
  • International et Europe
  • Logement, Développement Durable et Énergie
  • Santé et Social
  • Société
  • Territoires et Transports

Pour chacune de ces catégorie il existe de nombreux fichiers recouvrant des données financières, sociales, géographiques ou technologiques détaillées par région, département ou communes de France. Certaines informations recoupent même des données à l’échelle européenne ou mondiale.

Les formats de données disponibles sont: api, csv, gzip, html, json, ods, odt, pdf, pi, shp, tsv, txt, url, viz, xls, xml, zip

L’intégralité des données est librement disponible à l’adresse suivante: https://www.data.gouv.fr/fr/

Sauvegardez vos données! – 5

Dans ce dernier article consacré aux sauvegardes, nous allons parler d’une solution que certains penserons disparue depuis longtemps. En effet, il n’est pas rare d’apercevoir dans de vieux films américains (Wargames, 2001 l’odyssée de l’espace) des super ordinateurs entourés de lecteurs de bande magnétique. Sachez que même si cette formule a bien évolué depuis cette époque, elle est toujours utilisée actuellement en entreprise où les besoins de sauvegarde et d’externalisation sont importants.

Bande magnétique (LTO)

Nous avons fait le tour de la plupart des solutions utilisables pour des particuliers ou des petites structures. Il reste un média de sauvegarde très utilisé dans les sociétés. Il s’agit des bandes magnétiques aussi appelées cartouches.

Ces dernières permettent de réutiliser un même support plusieurs fois pour des cycles de réécriture. Ce support est utilisé exclusivement en entreprise et va de paire avec un coffre de stockage délocalisé (hors bâtiment) ou d’un contrat de conservation auprès d’un sous-traitant.

Les cartouches sont relativement abordables, cependant, le lecteur est nettement plus cher avec un coût variant de 1200 à plus de 5000 euros selon le modèle et la marque. Ce système permet d’automatiser (batcher) les sauvegarde et de créer un système de rotation (par semaine ou par mois) afin de ne jamais perdre aucune donnée. Cette méthode demande les conseils et la participation d’un professionnel pour sa mise en place. Son exploitation demandera également la participation d’un membre de l’entreprise qui devra être formé ou d’un prestataire externe qui s’occupera de contrôler le bon fonctionnement du système.

Les cartouches peuvent être cryptées pour plus de sécurité depuis la quatrième génération des LTO.

  • Stockage: De 200 Go à 6.25 To
  • Prix: De 20 à 40 euros
  • Coût du Go: (en moyenne) 2.3 à 5 centimes d’euro
  • Durée de vie: Estimé à 30 ans pour un cycle de  20 000 chargements/déchargements

Cet article était le dernier de la série consacré aux sauvegardes. Si l’un d’entre eux vous semble incomplet ou que vous avez des questions, faîtes le moi savoir par mail.

Sauvegardez vos données! – 4

Dans la lignée des articles consacrés aux sauvegardes de données, nous allons parler ici des solutions de sauvegardes en ligne proposées par de grandes sociétés. Ces solutions sont fiables et sérieuses en plus d’être une très bonne solution d’externalisation de vos données. Ainsi en cas de panne ou d’accident sur votre ordinateur, vous avez la garantie que vos données sont en sécurité ailleurs.

Stockage en ligne (CLOUD)

Vous entendez parler du Cloud très régulièrement et vous vous demandez ce que c’est, si ça peut vous servir et comment l’utiliser?

En fait, le cloud c’est tout simple. Il s’agit d’un ensemble plusieurs serveurs (des gros ordinateurs très puissants) qui sont hébergés dans des datacenters (grands entrepôts d’ordinateurs) et qui proposent différents types de services. L’un de ces services concerne le stockage de données (on parle aussi de DATA). Plusieurs grandes sociétés proposent aujourd’hui du stockage de données en ligne et ceci de manière gratuite. En apparence du moins, car quand on parle de gratuité, ce n’est pas complètement vrai. En cas de doute, je vous recommande vivement de lire les petites lignes du contrat (CGU / CGV).

Pour stocker des données sur le Cloud, pas besoin de support particulier, cher ou encombrant. Il vous suffira d’avoir une connexion internet. Et en fonction de la quantité de données que vous aurez à sauvegarder, je vous recommande d’avoir une bonne connexion avec du haut débit.

Avant d’aller plus loin, il est nécessaire de préciser un terme qui sera utilisé plus bas. Synchroniser un dossier correspond à réaliser des actions de téléchargement et d’envoi (download et upload) entre deux machines afin de que le contenu des dossiers distants soient exactement les mêmes. Les fichiers et dossiers contenus possèdent le même contenu et ont été modifiés aux même dates.

Plusieurs sociétés proposent des services de stockage en ligne, je vais vous présenter ici les trois plus connues.

Google (Google Drive)

Google nous propose un espace de stockage en ligne (non payant) de 15 Go d’une excellente qualité. Je m’en sers personnellement tous les jours depuis 2013 et je ne me souviens pas de l’avoir vu tomber en panne une seule fois. Pour l’utiliser, vous devez préalablement vous créer un compte Google (Gmail ou autre). Ensuite, vous pouvez glisser-déposer directement vos fichiers et dossiers dans le drive par l’intermédiaire de votre navigateur favoris (qui doit être un navigateur moderne). Google vous propose également de télécharger un petit logiciel qui vous permettra de synchroniser un dossier de votre ordinateur avec le drive.

Le logiciel de synchronisation de Google s’installe sur les ordinateurs PC et Mac, mais également sur les smartphones Android et Iphones. Vous permettant ainsi de sauvegarder les données de vos ordinateurs, mais également celle de vos téléphones mobiles.

Espace de stockage offert : 15 Go

Espace de stockage max (payant) : 1 To soit 1024 Go pour 9.99$ / mois

Lien vers Google Drive

Microsoft (OneDrive)

Leader mondial des systèmes d’exploitation, Microsoft vous propose d’accéder à un espace de stockage en ligne (non payant) de 15 Go. Reprenant le principe du glisser-déposer au travers de votre navigateur, OneDrive propose également de télécharger un logiciel qui vous permettra de synchroniser les dossiers de votre ordinateur.

A l’instar du logiciel Drive de Google, celui de Microsoft est compatible avec les ordinateurs PC, Mac, mais également les smartphones Android, Iphone et Windows Phone. En prime le logiciel fonctionne sur la console XBox ce qui vous permettra de sauvegarder vos fichiers de jeux (copie d’écrans, sauvegardes ou autres).

Espace de stockage offert : 15 Go

Espace de stockage max (payant) : 1 To soit 1024 Go par utilisateur (jusqu’à 5) avec l’offre Office 365 (Office en ligne) pour 10 € par mois

Lien vers Microsoft OneDrive

DropBox

Certainement l’un des candidats les plus populaires aujourd’hui, DropBox propose un espace de stockage (non payant) en ligne de 2 Go. Idéal pour stocker de petites quantités de données. Le fonctionnement reste le même qu’avec les deux précédent à savoir, une possibilité de glisser-déposer vos dossiers et fichiers via votre navigateur et la possibilité d’installer un logiciel sur votre ordinateur qui se chargera de synchroniser vos données à chaque fois qu’une modification est réalisée.

Le logiciel de DropBox s’installe comme ses concurrents sur les ordinateurs PC et Mac, mais également sur les smartphone Android, Iphone, mais aussi BlackBerry et Windows Phone.

Espace de stockage offert : 2 Go

Espace de stockage max (payant) : 1 To soit 1024 Go pour 9.99€ / mois

Lien vers DropBox

Les trois solution présentées ci-dessus permettent également de partager des fichiers ou dossiers en ligne avec des personnes qui ont (ou pas) un compte en ligne chez le fournisseur du service. Cela peut être utilisé astucieusement pour mettre à disposition des données trop lourdes pour être envoyée par e-mail (comme des photos ou vidéos d’une soirée par exemple).

Sauvegardez vos données! – 3

Dans l’article précédent consacré aux supports de sauvegardes, nous avions parlé des clés USB. Nous parlerons ici des disques dur mécaniques, leur concurrent le plus ancien qui reste encore un très bon choix. Voyons en détails pourquoi ci-dessous…

Disque dur externe

Un peu plus emcombrants que les clés USB, les disques durs externes restent de bons compromis pour les sauvegardes. Surtout si vous avez de grandes quantité de données à sauver.

Bien que moins facile à transporter, ils restent aussi simples à utiliser que les clés USB. Leurs performances et leur durée de vie sont également bien meilleures que celles des clés USB. Ils ont cependant une moins bonne résistance aux chocs. Attention donc à ne pas les faire tomber. (pire encore lorsqu’ils sont en service)

Enfin, le rapport capacité / prix est le plus intéressant. En effet à quantité de stockage égale, un espace de stockage de 1 To coutera en moyenne moins de 100 euros pour un disque dur contre plus de 900 euros pour une clé USB.

Attention! Je parle ici des disques dur mécaniques, les disques dur SSD sont soumis aux même règles que les clés USB car basés sur le même type de composants avec une limite de cycle d’écriture.

Stockage: De 40 Go à 6 To (6144 Gigas octets)
Prix: De 49 à 1200 euros
Coût du Go: (en moyenne) de 6.7 à 23 centimes d’euro
Durée de vie: De 2 ans à plus de 10 ans (dépend de la qualité du produit, mais aussi de son taux d’utilisation)

L’usure est moindre sur un disque qui ne tourne pas. En effet, il ne chauffe pas et n’use pas ses composants. Il est ainsi possible de les utiliser pour du stockage sur du long terme. J’ai personnellement des disques de plus de 12 ans avec des données stockées dessus, mais comme les disques tournent rarement, ils sont encore parfaitement exploitables.

Sauvegardez vos données! – 2

Suite au premier article sur les supports de sauvegardes, voici un nouvel article qui traitera cette fois-ci des clés USB. Bon marché, peu encombrantes et rapides, ces dernières semblent être la réponse à bien des problèmes de stockage. Elles ne sont pourtant pas la réponse à tous les problèmes. Découvrez en détail pourquoi dans cet article.

Clé USB

De nos jours, les clés USB sont très utilisées. Elles sont à la fois, bon marché, faciles à transporter car très petites. De plus, leur capacité pouvant varier de 2 Go à 1 To (1024 Gigas octets) en font un support de choix pour sauvegarder et transporter des quantité importantes de données. D’autre part, une fois connecté à l’ordinateur, il suffit de copier-coller les fichiers que vous souhaitez sauver pour que la copie se fasse. En général cela dure moins de 10 minutes sur une clé performante. Son utilisation est donc très simple et accessible à tous.

Attention toutefois car il y a des limites à cela. Il faut savoir que les clés USB sont des composants électroniques ne pouvant supporter qu’un nombre maximum d’écritures (10 000 à 100 000) qui dépendent du modèle mais aussi de la qualité des composants. Il est impossible d’annoncer avec précision la durée de vie réelle d’une clé USB. Cela peut aller de quelques minutes à plusieurs années. Pour éviter de prendre des risques, il est recommandé de se tenir à l’écart des marques méconnues ou trop bon marché. Les marques que j’ai l’habitude d’utiliser et dont je suis satisfait sont : Kingston, Corsair, SanDisk.

Soyez prudent également avec les ordinateurs sur lesquels vous connectez votre clé USB. Ce dernier peut être infecté par des virus ou autres types de logiciels malveillants qui peuvent nuire au bon fonctionnement de votre ordinateur et conduire à la perte ou la publication de vos données sur internet.

Les clés étant petites et discrètes, elle peuvent être volées assez facilement. Aussi, certains constructeurs de clés vous proposerons un système de cryptage de vos données permettant uniquement à la personne détentrice du mot de passe d’accéder aux données. D’autres clés peuvent également proposer un système d’enregistrement embarqué (tel que dictaphone ou caméra). Enfin pour conclure sur les clés USB, je vous recommande vivement de ne JAMAIS débrancher votre clé USB sans l’avoir préalablement déconnecté dans votre système sans quoi vous pouvez vous exposer à une perte données.

  • Stockage: De 2 Go à 1 To (1 024 Gigas octets)
  • Prix: De 1.50 à 2400 euros
  • Coût du Go: (en moyenne) de 41 à 67 centime d’euros
  • Durée de vie: Variable (dépend de la qualité du matériel et de son utilisation)