Objectifs : Paysage GNU/Linux, Savoir utiliser la documentation
man, communiquer avec les utilisateurs en tant qu’admin
man date)./etc/motd avec
vi qui affiche un message en début de connexion.
Tester le résultat en vous reconnectant.Pour la suite des exercices, installer une machine
virtuelle (vm server) sous Debian (sans
interface graphique) avec Oracle VirtualBox. Réaliser les
exercices sur cette machine virtuelle pour ne pas toucher à votre
système.
Notions abordées : commandes shell de base, système de fichiers UNIX
Quel est le rôle du shell ?
Quelles informations sont contenues dans l’invite de commandes
neo@Debian:~/Documents$?
Comment créer un repertoire en ligne de commandes sous Linux ?
Parmi ces chemins, lequel est absolu :
./users/local/sbinDocuments/perso/usr/local/sbinPourquoi ne faut il pas executer la commande
rm -rf / ?
Comment efface-t-on la ligne sur laquelle on se trouve dans
vi ou vim ?
vi est il installé par défaut sur tout système UNIX ?
A quoi sert le pipe | ?
Quels seront les résultats des commandes
ls | grep -v documents et
ls | grep -iv documents dans le repertoire contenant :
Bureau
Documents
Images
MusiqueQuelle doit être la première ligne d’un script shell ?
Manipulation et recherche de fichiers
/usr/bin commençant
par un “c” et sauvegarder le résultat dans le fichier
c.liste. Quel est le chemin absolu du fichier
c.liste ?c.liste contenant
"char" dans leur nom. Comment peut-on obtenir ce résultat
sans créer le fichier c.liste ?/usr/bin/crontab ?documents/perso/temp./usr/bin commençant
par un “c” dans le répertoire documents/perso/temp. Combien
le répertoire documents/perso/temp contient-il de fichiers
?documents/perso/temp/crontab dans
le répertoire personnel de l’utilisateur en le renommant
moncrontab. Combien le répertoire
documents/perso/temp contient il de fichiers maintenant
?moncrontab et le répertoire
documents/perso.passwd
?boot.log
?Commandes utiles :
file,wc
Dans votre répertoire d’accueil, créer l’arborescence suivante, en n’utilisant que des chemins relatifs :
rep1
|---fich11
|---fich12
|---rep2
|---fich21
|---fich22
|---rep3
|---fich31
|---fich32 Comment déplacer toute l’arborescence rep3 sous le
repertoire rep2 ? Supprimer tout sauf
rep1, fich11 et fich12.
Gestion des droits
En utilisant les commandes mkdir, echo
et cat, créez dans un nouveau répertoire
le fichier bienvenue contenant la ligne de commande
echo Bienvenue dans le monde Unix.
Exécutez ce fichier.
En utilisant les commandes
mkdir, echo, cp, chmod, cat, créer un
fichier que vous pouvez lire et supprimer mais que vous ne pouvez pas
modifier.
En utilisant les commandes
mkdir, echo, cp, chmod, cat, créer un
fichier que vous pouvez lire mais que vous ne pouvez ni modifier, ni
supprimer.
Vous travaillez avec un collègue appartenant au même groupe que
vous sur la machine (serveur). Modifiez les permissions
du fichier crée à la question 1 (fichier bienvenue) de
telle façon que votre collègue puisse le lire et l’exécuter,
mais ne puisse pas le modifier ni le supprimer.
Pouvez-vous modifier les permissions de ce fichier de telle sorte que
votre collègue puisse le lire, le modifier et l’executer alors que
vous-même ne pouvez pas le modifier ?
Comment est attribuée la permission d’effacer un fichier ?
Programmation shell
Écrire un script shell qui écrit sur sa sortie standard les messages suivants :
mon nom est xxxx
je suis appelé avec yyy arguments
qui sont : 111 222 333 444où xxx sera remplacé par le nom sous lequel ce shell
script a été invoqué, yyy par le nombre d’arguments et
111, 222, etc. par les arguments en question.
Bienvenue dans le monde Unix"Bienvenue dans le monde Unix".Programmation shell
En utilisant exclusivement les commandes cd et
echo, écrire le script shell
recurls réalisant la même fonction que la commande
ls -R. C’est à dire que la commande
recurls rep1 devra lister les noms de tous les fichiers et
repertoires situés sous le répertoire rep1, y compris les
sous-repertoires et les fichiers qu’ils contiennent. Une solution très
simple consiste à rendre le script recurls récursif (le
script s’invoque lui même).
Programmation shell
Écrivez le script rename permettant de
renommer un ensemble de fichiers. Par exemple
rename '.c' '.bak' aura pour effet de renommer tous les
fichiers d’extension .c en .bak. Les fichiers
f1.c et f2.c deviennent f1.bak et
f2.bak
Utiliser la commande
basename.
Programmation shell
Créer un script qui vous propose le menu suivant :
1 - Vérifier l'existence d'un utilisateur
2 - Connaître l'UID d'un utilisateur
q - Quitter
Le script doit réaliser l’action demandée par l’utilisateur·ice.
Programmation shell, gzip
L’espace disque sur les serveurs est précieux. Une idée pour
économiser : écrire un script qui recherche dans toute
mon arborescence tous les fichiers qui n’ont pas été accédés depuis un
temps T et dont la taille est supérieure à
MIN, et les compresser avec le programme gzip.
T et MIN sont des constantes définies au début
du script avec des valeurs judicieusement choisies.
Un tel script pourrait être lancé une fois par semaine (par ex. via le démon
cron, voir exercice 13).
Tableaux, fonctions
red, yellow, green, black, white.for pour parcourir
ce tableau et afficher chaque couleur.while pour
parcourir ce tableau et afficher chaque couleur avec son indice.Les solutions se trouvent toutes dans les pages de
mandes commandes en question. On suppose donc connues les commandes deless, qui servent à se déplacer dans les pages deman… et la commande servant à chercher un mot. Testez les commandes sur des fichiers et répertoires d’essai pour vous faire la main et comprendre ce qui se passe.
Pour chaque question, proposer une commande à
appliquer au fichier sonnets.txt (contant les sonnets de
Shakespeare) ou aux fichiers contenus dans le dossier
sonnets (1 sonnet par fichier) fourni avec l’exercice.
grep qui permettent
d’obtenir des lignes de contexte (qui précèdent et/ou suivent la ligne
où figure le mot) ?grep ignore la casse des
caractères (différence entre majuscules et minuscules) dans sa recherche
?grep ne recherche que les lignes
où figure le mot tel quel, et non pas ses variantes ?systemd #Se familiariser avec
systemd, savoir créer, inspecter et utiliser un service
L’objectif est de créer un script shell basique qui sera
exécuté comme un service par systemd. Ce service va
simplement écrire un message dans un fichier de log à chaque
fois qu’il est démarré.
foo.sh et le
placer dans l’endroit approprié sur le système de fichiers UNIX.
Justifier ce choix. Le script contient une instruction
qui écrit
"Le service foo a démarré à cette date : dd/mm/YYYY HH:mm:ss"
dans un fichier de log situé également dans l’endroit approprié sur le
système de fichiers UNIX. Pour éditer le fichier de script, utiliser
l’éditeur vi nano ou emacs;/etc/systemd/system/foo.service. Voici le template
d’un fichier unit de systemd :[Unit]
Description=?
After=network.target
[Service]
ExecStart=?
Type=?
[Install]
WantedBy=multi-user.targetEn vous aidant de la documentation officielle
(man systemd.ini) ou de cet
article publié par RedHat, remplacer les valeurs
? par les valeurs appropriées.
systemd
avec la commande systemctl daemon-reload pour prendre en
compte le nouveau service défini par le fichier
foo.service.bar qui
contient une instruction qui écrit
"Le service bar a démarré à cette date : dd/mm/YYYY HH:mm:ss"
dans un fichier de log situé également dans l’endroit approprié sur le
système de fichiers UNIX. Ce service doit toujours s’exécuter
avant le service foo.foo.
Afficher-les ensuite au format JSON. Pour cela, trouver
une option de journalctl qui pourrait vous être utile
(man journalctl)crontab, anacron
crond est-il lancé au démarrage ? actif
?cron et
anacron ?root fait enregistrer de 9h à 17h, les jours ouvrables
:
/var/log/processus.txt, tous
les processus qui tournent sur la machine;/var/log/qui.txt, tous les
utilisateurs connectés.john ajoute toutes les 5 minutes un
message "Bonjour" suivi de la date, dans le fichier
/tmp/bonjour.txt/home dans un répertoire
var/save/ à créer :
/home/* dans un fichier home.tgz à placer dans
/var/save;date, écrire un script permettent
l’archivage du 12 nov dans un fichier nommé
home.12nov.tgz;cron, à 1h du matin.Pour se confirmer au RGPD, une société souhaite mettre en place une solution automatisée qui anonymise et archive les données sensibles présentes dans leur base relationnelle en production. La société veut générer des rapports sur leur activité commerciale tous les ans (le 22 décembre à 4h du matin).
La base de données MySQL contient, entre autres, des informations sur les clients (nom, prénom, email, adresse, mot de passe) et leurs factures (montant total, date).
D’après votre travail de veille, identifier les données personnelles ainsi que la ou les durées de conservation adéquates. Identifier un processus adéquat pour conformer le système au RGPD.
Mettre en place la solution à l’aide de tâches cron et de scripts shell. Pour cela, produire une base de données minimale avec un jeu de données de test (avec MySQL par exemple).
Mettre en place la génération automatique de rapports (CA TTC total par an et par mois, CA TTC moyen annuel et mensuel) couvrant à la fois les données actives (en production) et les données archivées (base intermédiaire). Les rapports peuvent concerner n’importe quelle période passée.