Académique Documents
Professionnel Documents
Culture Documents
12 Décembre 2022
Petit résumé
des épisodes
précédents
Administration Shell
Le Shell
Les shell(s)
Shell : Interface d’administration et de programmation des
systèmes Linux
Chaque ligne correspond à une ligne qui aurait pu être saisie par un
utilisateur dans un terminal.
Construction d’un script bash
Un fichier script doit commencer par un « Sheebang ». Il permet
d’appeler le programme qui interprètera le script.
Exemple : !#/bin/bash
Pour pouvoir exécuter un script, il faut lui ajouter les droits d’exécution.
Pour cela, il suffit d’un commande « chmod +x mon_script »
Appel d’un script bash
Appel interne:
• « source my_script.sh » exécute dans le shell actuel
• « . my_script.sh » est un alias de source
Structure:
If my_command; then
`Commandes si my_command est un succès
If, elif, else elif my_other_command; then
`Commandes si my_other_command est un
succès
else
`Commandes si my_command et
my_other_command echouent
fi
Exemple d’application
#!/bin/bash
if [ -d $1 ]
# Si le dossier existe
then
#Execute
else
#Message d'erreur
fi
Calculs
Le shell permet d'effectuer des calculs mathématiques mais
uniquement sur des entiers. Il y a deux syntaxes possibles :
• let $[ expression mathématique ]
• let $(( expression mathématique ))
Tous les opérateurs du langage C sont autorisés (+, -, *, /, >=, =, +=, ++,
==, !=, etc...).
Exemple
$ nbr1=5
$ let $[nbr1=nbr1*3]
$ echo $nbr1
15
$ let $[nbr1=nbr1*3]
$ echo $nbr1
45
Structures conditionnelles
Administration shell
La condition d'exécution devant être une
commande, les tests s'effectuent par
l'intermédiaire de la commande "test
Tests expression" qui peut être abrégée par la
formule "[expression ]".
expression
Exemple: if [ -e my_file ] vérifiera que le fichier
existe.
• -e fichier Vrai si le fichier/répertoire existe.
• -s fichier Vrai si le fichier à une taille
supérieure à 0.
• -r fichier Vrai si le fichier/répertoire est lisible.
fichiers et • -L nom
• -p nom
Vrai si nom représente un lien symbolique.
Vrai si nom représente un tube nommé.
répertoires • fichier1 -nt fichier2 Vrai si les deux fichiers existent et si fichier1 est
plus récent que fichier2.
• fichier1 -ot fichier2 Vrai si les deux fichiers existent et si fichier1 est
plus ancien que fichier2.
• fichier1 -ef fichier2 Vrai si les deux fichiers représentent un seul et
même fichier.
• entier1 -eq entier2 vrai si entier1 est égal à
entier2
• entier1 -ge entier2 vrai si entier1 est
supérieur ou égal à entier2
• entier1 -gt entier2 vrai si entier1 est
strictement supérieur à entier2.
Tests sur les • entier1 -le entier2 vrai si entier1 est
inférieur ou égal à entier2.
entiers • entier1 -lt entier2 vrai si entier1 est
strictement inférieur à entier2.
• entier1 -ne entier2 vrai si entier1 est différent de
entier2.
• -n "chaîne" vrai si la chaîne n'est pas
vide.
Test sur les • -z "chaîne" vrai si la chaîne est vide.
• "chaine1" = "chaine2"vrai si les deux chaînes
chaines de sont identiques.
caractères • "chaine1" != "chaine2" vrai si les deux
chaînes sont différentes.
Les boucles
Administration shell
La boucle While (Tant que) est possible en
shell.
Syntaxe:
n=1
Tant que while [ $n -lt 10 ]; do
echo $n
let $[ n++ ]
done
La boucle Until (Jusqu’à) est possible en shell.
Syntaxe:
n=1
Jusqu’à until [ $n -gt 10 ]; do
echo $n
let $[ n++ ]
done
La boucle For (pour) est possible en shell.
Syntaxe:
for param in "$@"; do
Boucle pour if [ -f "$param" ]; then
echo "$param est un fichier.”
fi
done
Exercice de synthèse
#!/bin/bash
# Ce script doit compter le nombre de fichier dans un dossier passé en paramètre (si il existe)
if [ -d $1 ]
# Si le dossier existe
then
#Execute
COMPTEUR=`ls $1 | grep $2 | wc -l` Faire un script qui prend des noms de
echo "il y a $COMPTEUR fichiers contenant $2 dans $1 »
else dossiers en paramètres et qui va compter le
#Message d'erreur
echo "Le dossier n'existe pas » nombre de fichiers dans tous
fi
ces dossiers (faire la somme)
#!/bin/bash
# Ce script doit compter le nombre de fichier dans un dossier
# passé en parametre (si il existe) A la fin il affiche
for param in "$@"; do
if [ -d "$param" ]; then
« Ces dossiers contiennent X fichiers et Y dossiers»
echo "$param est un dossier »
fi
done
mavariable=10
let $[mavariable=mavariable+1]
echo $mavariable
11
Correction
#!/bin/bash --> Le Sheebang
compteurfichier=0 --> Une variable pour compter les fichiers que je mets à 0
compteurerreur=0 --> Une variable pour compter les dossiers en erreur que je mets à 0
for parametre in "$@" --> Pour chaque paramètre
do
if [ -d $parametre ] Si le parametre est un dossier
then
echo "$parametre existe »
let $[compteurfichier = compteurfichier + `ls $parametre | wc -l` ] Je mets dans la variable le nombre
de fichiers
else
echo "$parametre existe pas"
let $[ compteurerreur++ ] J’incrémente le nombre de dossiers en erreur
fi
done
echo "Il y a $compteurfichier fichiers dans les dossiers et $compteurerreur dossiers en erreur"
SSH
Administration Shell
Connexion simple (1/2)
Pour se connecter à une machine distante, il faut utiliser la commande:
$ ssh ip|nom_machine
Par exemple:
$ ssh serveur_hetic
2 modes
d’authentificatio
n
Par clés publiques
Nouveau serveur
• Adresse du serveur : 185.189.158.141
• Login : Prenom.NOM
• Déployer votre clé publique pour arriver à vous y connecter sans mot
de passe
Mise en place d’une authentification par
clé publique
• Est-ce que j’ai déjà une clé ? 185.189.159.1
• ~/.ssh/id_rsa (clé privé)
• ~/.ssh/id_rsa.pub (clé publique)
• Si je ne l’ai pas, alors ssh-keygen pour la créer
Par exemple:
$ ssh toto@hetic_serveur ‘ls -l /home/toto’
Secure copy (1/2)
La commande scp permet une copie sécurisée entre deux machines, en
utilisant un tunnel ssh.
La syntaxe de la commande est la suivante:
$ scp (options) user@host:/original/file user@host:/copied/file
Par exemple:
$ scp toto@estiam_serveur:/home/toto/test ~/test
Secure copy (2/2)
scp permet de copier du host au remote, du remote au host et d’un remote à un
autre.