Vous êtes sur la page 1sur 41

Administration Shell

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

Linux : Système d’exploitation représentant plus de 80% des


systèmes présents dans le cloud

Présent aujourd’hui également sous Windows.


Pourquoi utiliser le shell
pour un développeur ?
- Maitriser l’environnement ou son code va être utilisé

- Pouvoir déployer son code sur un serveur

- Gagner du temps au quotidien


Les grands principes
• Jeu de commandes simples, chacune avec une fonction bien précises

• Chainées avec | ou des chevrons (< > >>)

• Création de scripts pour automatiser des tâches

• Les commandes peuvent être exécutées sur des serveurs à distance


au travers de SSH
L’invite de commande
hetic@bunsenlabs:~$ 
• hetic: Le nom de l’utilisateur en cours
• Bunsenlabs: Le nom de la machine
• ~: L’emplacement actuel sur le FHS (~ représente le /home de
l’utilisateur connecté)
• $: Le rôle de l’utilisateur ($: Classique, #: root)
Les commandes de base
Administration shell
La manipulation de
fichiers
• cd Pour se déplacer vers un autre répertoire
• ls Pour lister le contenu d’un répertoire
• cp Pour copier un fichier/répertoire
• mv Pour déplacer un fichier
• mkdir Pour créer un répertoire
• rm Pour supprimer un fichier/répertoire
• ln Pour créer un lien
• touch Pour créer un fichier, ou mettre à jour sa
date de modification
• cat Affiche le contenu du fichier sur la
sortie standard
• more Lit le contenu d’un fichier page par
page. (Il doit lire l’intégralité du fichier
avant de l’afficher)
• less Equivalent à more sauf qu’il n’est pas
Affichage du obligé de lire l’intégralité du fichier
avant affichage et permet de remonter
contenu dans l'affichage
• tail N’affiche que les dernières lignes d’un
d’un fichier fichier (tail -n fichier : permet de spécifier le
nombre n de lignes à afficher)
• head Comme tail, mais affiche les n premières
lignes d’un fichier (n=10 par défaut, head –n
fichier pour préciser le nombre de lignes)
• grep Recherche l’occurrence de la chaîne de
caractères "mot" dans un ou plusieurs fichiers
Le scripting
Administration shell
Un script bash
Ensemble de commandes placées dans un fichier texte.

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

Appel dans un autre shell:


• « bash myscript » appel directement l’interpréteur
• « ./myscript » exécute le script dans un nouveau shell
Dans un script bash
• On retrouve tous les éléments d’un langage de programmation
basique
• Variables
• Boucles
• Structures conditionnelles
• Calculs mathématiques
• Etc..
Lors de l’appel de votre script, il est possible de
lui passer des arguments, par exemple
« my_script 23 ».

Paramètres Ils sont accessible grâce à $:

du script • $x Donne le x-ième argument d’appel


• $# Donne le nombre d’arguments
• $* Donne la liste des arguments
• $@ Donne un array contenant tous les
arguments
Il existe des paramètres apposés au script. Ils
permettent notamment de retrouver le nom
du script, ou son ProcessID.

Paramètres Ils sont également accessible grâce à $:


globaux du • $0 Donne le nom du script
script • $$ Donne le PID (Process ID) du script
• $! Donne le PID de la dernière commande
lancée en tache de fond &
• $ Donne la liste des options du shell
Il est possible de faire du conditionnel dans un
script shell. On utilise alors le ‘if’.

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

# 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`

echo "il y a $COMPTEUR fichiers contenant $2 dans $1"

else

#Message d'erreur

echo "Le dossier n'existe pas"

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.

Tests sur les • -w fichier Vrai si le fichier/répertoire est


modifiable
fichiers et • -x fichier Vrai si le fichier est exécutable ou si
le répertoire est accessible.
répertoires • -O fichier Vrai si le fichier/répertoire appartient
à l'utilisateur.
• -G fichier Vrai si le fichier/répertoire appartient
au groupe de l'utilisateur
• -b nom Vrai si nom représente un périphérique (pseudo-
fichier) de type bloc (disques et partitions de disques
généralement).
• -c nom Vrai si nom représente un périphérique (pseudo-
fichier) de type caractère (terminaux, modems et port
parallèles par exemple).

Tests sur les • -d nom


• -f nom
Vrai si nom représente un répertoire.
Vrai si nom représente un fichier.

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

Si l’utilisateur ‘toto’ tape la commande `ssh serveur_hetic`, alors serveur_hetic


tentera de le connecter avec le compte ‘toto’.
$ ssh utilisateur@machine
Par mots de passe

2 modes
d’authentificatio
n
Par clés publiques
Nouveau serveur
• Adresse du serveur : 185.189.158.141

• Login : Prenom.NOM

• Mot de passe par défaut : 123456

• 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

• Une fois que j’ai ma clé, sur le serveur DISTANT :


• Dans le fichier ~/.ssh/authorized_keys je vais copier le contenu de ma clé publique

ssh login@server (ssh -i nom_de_la_clé login@server si différent de id_rsa)

Pour tester : mettre en place l’authentification par clé avec le serveur


Commandes par ssh
SSH permet d’envoyer une commande unique via ssh. Cela signifie que
ssh va se connecter à la machine distante, exécuter la commande puis
se déconnecter.

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.

• Copier du remote au host:


$ scp toto@hetic_serveur:/path/to/file /where/to/save
• Copier du host au remote:
$ scp /path/to/file toto@hetic_serveur:/where/to/save
• Copier d’un remote à un autre remote:
$ scp toto@hetic_serveur:/path/to/file toto@bkp_serveur:/where/to/save

Vous aimerez peut-être aussi