You are on page 1of 24

Université Abdelmalek Essaadi

Ecole Nationale des Sciences Appliquées Al-Hoceima

Rapport de Projets
Première Année Ingénierie des données

Automatiser la création du fichier


Contrôle de la taille d’un fichier

Réalisé par :
- Oussama EL ALAOUI EL ISMAILI
- AMINE EL-MOUSSAOUI

Encadré par : Pr. Mohamed CHERRADI

Année Universitaire : 2023/2024


Table des matiè res
I- Automatiser la création d’un fichier :
1. L’idée de l’encadrant …………………………………………………………………………. 3
2. Les outils utilisés :
2.1 Vim …………………………………………………………………………………. 4
2.2 Cron ………………………………………………………………………………… 4
2.3 Script Shell ………………………………………………………………………. 5
3. La démarche du projet :
3.1 La création du script Shell ………………………………………………… 5
3.2 La configuration du Cron …………………………………………………… 11
4. Tester le projet :
II- Contrôle de la taille d’un fichier :
1. L’idée de l’encadrant …………………………………………………………………………… 16
2. Les outils utilisé …………………………………………………………………………………… 17
3. La démarche du projet …………………………………………………………………………. 18
4. Tester le projet ……………………………………………………………………………………. 21

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

2
I- Automatiser la création d’un fichier

1. L’idée de l’encadrant :

Le projet est basé sur une génération automatique des fichiers texte dont le nom est sous la
forme : ‘’la date et l’heure de sauvegarde’’.txt, ce fichier est contenu dans un répertoire sous la
forme ‘’la date de création’’. Chaque fichier contient deux éléments essentiels sont :

 Le nom de l’utilisateur (user Name).


 Le nom du domaine (host Name).

Le projet est une simulation très basique de la sauvegarde automatique des bases de données ce
projet est en cours d’amélioration le long du semestre.

Figure 1 : Projet final

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

3
2. Les outils utilisés :

2-1 Vim :
Vim est un éditeur de texte modal gratuit et open-source. Il est disponible
pour de nombreux systèmes d'exploitation différents et peut être utilisé pour éditer
tous types de fichiers texte. Vim est connu pour ses fonctionnalités d'édition
puissantes et sa personnalisation approfondie, ce qui en fait un choix populaire
pour les développeurs, les administrateurs système et les utilisateurs avancés.

2-2 Cron :
Cron est un programme qui permet d'automatiser des tâches sur les
systèmes d'exploitation Unix, Linux et MacOs. Il permet d'exécuter des scripts,
des commandes ou des logiciels à une date et une heure spécifiée à l'avance,
ou selon un cycle défini à l'avance.

Pour créer une tâche cron, il faut éditer le fichier crontab de l'utilisateur ou
du groupe concerné. Ce fichier est un simple fichier texte qui contient une liste
de tâches, chacune décrite par une ligne.

Chaque ligne de crontab est composée de 5 champs séparés par des


espaces :

1. Minute : La minute de la journée (0 à 59)


2. Heure : l'heure de la journée (0 à 23)
3. Jour du mois : le jour du mois (1 à 31)
4. Mois : le mois de l'année (1 à 12)
5. Jour de la semaine : le jour de la semaine (0 à 6, 0
correspondant au dimanche)

Par exemple :

1. * * * * : indique que cette tâche va s’exécuter chaque minute.


2. 10 * * * : indique que cette tâche va s’exécuter toujours à 10:00.

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

4
Figure 2 : le fichier Crontab

2-2 Script Shell :


script Shell est un fichier texte contenant des commandes Shell. Il est
exécuté par un interpréteur de commandes Shell, tel que Bash ou Zsh. Les scripts
Shell sont utilisés pour automatiser des tâches sur les systèmes Unix, Linux et
MacOs.

Les scripts Shell peuvent être utilisés pour automatiser une grande
variété de tâches. Par exemple, vous pouvez utiliser des scripts Shell pour :

1. Exécuter des scripts de sauvegarde


2. Envoi de courriels ou de notifications
3. Mise à jour de logiciels
4. Surveillance du système
5. Création et gestion de comptes utilisateurs
6. Déploiement de logiciels et de configurations
7. Automatisation de tests

Les scripts Shell sont un outil très puissant qui peut vous aider à gagner
du temps et à automatiser vos tâches quotidiennes.

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

5
Figure 2 : Script Shell

3. La démarche du projet :

3-1 la création du script Shell :


Les commandes utilisées dans le script :

 date : pour accéder à la date et l’heure.


 hostname : pour accéder au nom de l’host.
 whoami : pour accéder au nom de l’utilisateur.
 mkdir : pour créer le répertoire par le nom du jour.
 echo : pour écrire dans le fichier.
 chmod : pour modifier les permissions d’accès d’un fichier.

On commence par ouvrir l’éditeur de texte Vim pour éditer un fichier


avec l’extension .sh, on le nomme script_1.sh en utilisant la commande :

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

6
Oussama@ubunto:~/script$ vim script_1.sh

Cette commande ouvrira l’éditeur de texte Vim pour éditer le fichier


script_1.sh même s’il n’existait pas.
Pour écrire dans ce fichier il suffit de taper sur A sur le clavier pour
activer le mode insertion.

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

7
On commence par définir par quel interpréteur de commande ce script
doit être exécuter. On veut l’exécuter en utilisant Bash (Born Again
Shell) il se fait par écrire # ! suivi par le chemin de Bash # !/bin/bash

L’idée du projet c’est de créer un répertoire dont le nom est la date de


création où il y a un fichier dont le nom est l’heure de création. On peut
accéder à la date en utilisant la commande date et le stocker dans une
variable current_date=$(date)

On peut spécifier la forme de la date par exemple pour le répertoire on


veut la date current_date=$(date ’’+%Y-%m-%d’’) pour le fichier on veut
l’heure current_time=$(date ’’+%H:%M:%S’’)

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

8
Pour le contenu du ficher on veut écrire le nom de l’utilisateur et le nom
de l’host on peut les stocker dans deux variables username=$(whoami)
hostname=$(hostname)

Maintenant on doit créer le répertoire en utilisant la commande mkdir et


le variable qu’nous avons créé current_date je vais le créer dans le
répertoire personnel dans un répertoire nommé sauvegarde
(~/sauvegarde/) en utilisant la commande suivante :
mkdir -p /home/oussama/sauvegarde/$current_date

Nous avons utilisé mkdir -p au lieu de mkdir car même si le répertoire


sauvegarde n’existait pas car mkdir -p force la création du répertoire.

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

9
Enfin il faut remplir le fichier par le nom de l’utilisateur et le nom de
l’host en utilise la commande echo sous la forme même si le fichier
n’existait pas la commande echo va le créer :

echo ’’username=$username’’ >> ~/sauvegarde/$current_date/$current_time.txt

echo ’’hostname =$hostname’’ >> ~/sauvegarde/$current_date/$current_time.txt

Pour enregistrer le script dans Vim nous avons appuyé sur Echap sur le
clavier pour quitter le mode d’insertion et puis nous avons tapé :wq pour
enregistrer et quitter et finalement appuyer sur entrer.

Maintenant nous devons changer les accès du fichier pour qu’il peut
être exécuter. Ce changement est fait par la commande chmod :
Oussama@ubunto:~/script$ chmod u+x script.sh

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

10
3-2 La configuration du Cron :
Comme déjà dit la configuration de Cron se fait par éditer le fichier
Crontab. Pour éditer le fichier Crontab par Vim nous avez utilisé la
commande suivante :
Oussama@ubunto:~/script$ crontab -e

Nous éditons le fichier premièrement nous ajoutons le champ quand la


commande va s’exécuter pour faire un test nous allons configurer le
Ecole Nationale des Sciences Appliquées d’Al-Hoceima

11
fichier crontab pour exécuter la commande chaque minute cela par
ajouter le champs * * * * *. Puis nous avons ajouté la commande pour
exécuter le fichier script que nous avons déjà créer, pour l’exécuter il
suffit d’écrire son chemin dans notre cas c’est :
/home/oussama/script/script_1.sh

Nous avons enregistré le fichier et quitter Vim dans la même méthode


faite pour le script Shell en appuyant sur Echap et puis Taper :wq.

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

12
4. Tester le projet :
Premièrement nous avons accédé au répertoire où nous avons
enregistré les répertoires avec les noms des dates dans ce cas c’est
~/sauvegarde et on affiche son contenu par la commande ls

On trouve plusieurs fichiers des jours de 25-10 jusqu’à 28-10 nous avons
accédé à un de ces fichiers par exemple 2023-10-26 et nous avons afficher son
contenu

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

13
Nous avons remarqué que plusieurs fichiers sont créé entre 00:25 et 01:00
chaque minutes nous avons accédé à plusieurs fichiers parmi de ces fichiers et
on affiche son contenu par la commande cat.

Nous avons remarqué que les fichiers sont créé comme il faut maintenant nous
avons changé le fichier Crontab pour exécuter le script chaque jour à 00:00.

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

14
II- Automatiser la création d’un fichier

1. L’idée de l’encadrant :

Objectif du projet :
Permettre à l'utilisateur d'écrire dans un fichier texte.
Contrôler le nombre de caractères, de lignes et de mots du fichier.
Limiter le nombre de caractères, de lignes et de mots du fichier à 300, 150 et 10,
respectivement.

Explication :
Le projet consiste à créer un script qui permet à l'utilisateur d'écrire dans
un fichier texte. L'outil doit également contrôler le nombre de caractères, de lignes
et de mots du fichier. Le nombre de caractères, de lignes et de mots du fichier doit
être limité à 300, 150 et 10, respectivement.

Exemple :
Si l'utilisateur écrit 500 caractères dans le fichier, l'outil doit tronquer le
fichier à 300 caractères. Si l'utilisateur écrit 200 lignes dans le fichier, l'outil doit
supprimer les 100 dernières lignes. Si l'utilisateur écrit 250 mots dans le fichier,
l'outil doit conserver les 150 premiers mots.

#!/bin/bash
answer="yes"
while [ $answer = "yes" ]; do
var=1
max=150
max_words=150
max_char=300
max_lines=10
vim file.txt
if [ $(wc -c < file.txt) -gt $max_char ]; then
truncate -s $max_char file.txt
fi
if [ $(wc -l < file.txt) -gt $max_lines ]; then
sed -i "$(($max_lines+1)),$ d" file.txt
else
Ecole Nationale des Sciences Appliquées d’Al-Hoceima

15
max_lines=$(wc -l < file.txt)
fi
if [ $(wc -w < file.txt) -gt $max_words ]; then
touch new_file.txt
truncate -s 0 new_file.txt
while [ $var -lt $(($max_lines + 1)) ]; do
cat file.txt | sed -n "$var p" | cut -d " " -f 1-$max_words >>
new_file.txt
if [ $(wc -w < new_file.txt) -lt $max ]; then
max_words=$(($max - $(wc -w < new_file.txt)))
fi
if [ $(wc -w < new_file.txt) -eq $max ]; then
break
fi
((var++))
done
rm file.txt
mv new_file.txt file.txt
fi
echo "The file has been edited to the following specifications(300
char/150 words/10 lines):"
echo "_________________________________"
cat file.txt
echo "---------------------------------"
echo "Do you want to edit the file more? (yes/no)"
read answer
done

2. Les outils utilisés :


2.1 Stream editor -sed- :
Sed, également connu sous le nom Stream editor est une
puissante commande sous Linux qui vous permet d’effectuer des
transformations de texte de base sur un flux d’entrée (soit un fichier, soit une
entrée à partir d’un Pipe). Sed est particulièrement utile pour apporter des
modifications en bloc à un grand nombre de fichiers ou pour modifier des
fichiers difficiles à ouvrir avec un éditeur de texte.
Parmi les outils qui peut être faite par sed il y a le remplacement d’en
mot par un autre mot ou bien la suppression des lignes ou bien la sélection
d’une ligne spécifique.
2.2 Cut :
Cut est une puissante commande qui vous permet d’extraire des
sections spécifiques d’un texte d’un fichier ou bien d’une entrée ou à
partir d’un Pipe par exemple vous pouvez extraire les mots d’un texte.
2.3 Truncate :
Ecole Nationale des Sciences Appliquées d’Al-Hoceima

16
Truncate est une commande qui limite le nombre d’octets d’un
fichier dans le cas d’un fichier qui est constitué des charactères et
chaque charactère est représenté dans un octet alors il va limiter le
nombre charactères dans un fichier.
2.4 Script Shell : (déjà définie)
2.5 Vim editor : (déjà définie)

3. La démarche du projet :

En général le script demande à l’utilisateur d’éditer un fichier


dans l’éditeur de texte Vim. Après avoir quitté Vim le script limite le
fichier texte en 300 caractères, 10 lignes et 150 mots et affiche le
fichier qui respecte les critères déjà dit et demande à l’utilisateur
est ce qu’il veut modifier le fichier ou non s’il dit oui l’éditeur de
texte ouvre une autre fois et le programme se refais une autre fois.

Voilà la démarche du script

Cette ligne est le Shebang il montre qu’il s’agit d’une bash script

Cette deuxième ligne initialise la variable answer à la valeur "yes". Cette


variable sera utilisée pour contrôler la boucle while qui permet à l'utilisateur de
modifier le fichier plusieurs fois.

La troisième ligne démarre une boucle while qui continuera à s'exécuter tant
que la variable answer est égale à "yes".

Ici en initialise la variable var à la valeur 1. Cette variable sera utilisée pour
parcourir les lignes du fichier dans la boucle while ci-dessous.

max=150
max_words=150
max_char=300
max_lines=10
Ecole Nationale des Sciences Appliquées d’Al-Hoceima

17
Ces lignes initialisent les variables max, max_words, max_char et max_lines
aux valeurs souhaitées :

max c’est le nombre maximal des mots qu’on veut extraire de tous le fichier
max_words c’est le nombre maximal des mots qu’on veut extraire d’une ligne
max_char c’est le nombre maximal des caractères qu’on veut conserver
max_lines c’est le nombre maximal de lignes qu’on veut conserver

Ces lignes ouvrent le fichier file.txt dans l'éditeur Vim.

if [ $(wc -c < file.txt) -gt $max_char ]; then


truncate -s $max_char file.txt
fi
Ici on vérifie le nombre de charactères dans un fichier s’il dépasse 300
charactères on édite le fichier en laissant seulement 300 caractères en utilisant
la commande truncate.

if [ $(wc -l < file.txt) -gt $max_lines ]; then


sed -i "$(($max_lines+1)),$ d" file.txt
else
max_lines=$(wc -l < file.txt)
fi

Ici on vérifie le nombre de lignes dans ce fichier s’il dépasse 10 lignes on édite
le fichier en laissant seulement les 10 premiers lignes en utilisant la commande
sed. La commande sed ici supprime toutes les lignes entre la 11 ème ligne et la
dernière ligne ($ représente la dernière ligne dans la syntaxe de sed)
S’il ne dépasse pas le nombre de lignes on affecte le nombre de lignes de
fichier file.txt au variables max_lines cela va être utilisé pour basculer toutes
les lignes pour limiter le nombre de lignes.

if [ $(wc -w < file.txt) -gt $max_words ]; then


touch new_file.txt
truncate -s 0 new_file.txt

Passant maintenant à limiter le nombre de mots ici on vérifie si le nombre des


mots dépasse 150 mots si ça le cas on commence par créer un fichier
temporaire nommé new_file.txt pour stocker les mots de fichiers file.txt on a
utiliser la commande truncate -s 0 new_file.txt pour vider le fichier s’il existait
déjà.

while [ $var -lt $(($max_lines + 1)) ]; do


cat file.txt | sed -n "$var p" | cut -d " " -f 1-$max_words >>
new_file.txt
if [ $(wc -w < new_file.txt) -lt $max ]; then
Ecole Nationale des Sciences Appliquées d’Al-Hoceima

18
max_words=$(($max - $(wc -w < new_file.txt)))
fi
if [ $(wc -w < new_file.txt) -eq $max ]; then
break
fi
((var++))
done

Ici on a une boucle while qui va aller de 1 jusqu’au nombre de lignes du fichier
c’est pour cela on a modifié la variable max_lines.
cat file.txt | sed -n “$var p” | cut -d “ “ -f 1-$max_words >> new_file.txt
cat file.txt passe le contenu du texte à la commande sed, le rôle de cette
dernière est de sélectionner la ligne correspond à la variable var par exemple
si var=1 (La première valeur de var dans la boucle while) ici la commande
sed va sélectionner la première ligne et la passer à la commande cut.
Passant à la commande cut, comme déjà dit la commande cut permet
d’extraire des sections spécifiques ça c’est à l’aide de l’option -d qui permet
de déterminer le délimiteur entre les sections que je veux extraire dans ce cas
je veux extraire les mots et pour cela j’ai déterminé le délimiteur autant
qu’espace ’’ ’’. L’option -f c’est lui qui permet d’extraire les sections et prends
comme arguments le nombre de sections à extraire dans ce cas 1-
$max_words enfin on affecte les mots extraits dans le fichier temporaire
new_file.txt.

Le problème qui se pose c’est que le nombre de sections extraits de chaque


ligne doit être modifier après chaque itérations par exemple on veut seulement
150 mots et de la première lignes on a extrait par exemple 10 mots alors de la
deuxième lignes on doit seulement extraire au maximum 140 mots alors le
nombre de mots qu’on doit extraire de la lignes égale à le nombre maximal
qu’on veut extraire moins le nombre de mots déjà extrait et ça c’est
exactement que j’avait fait max_words=$(($max -$(wc -w < new_file.txt))) et si
le nombre de mots égale à le nombre maximal qu’on veut on sort de la boucle
en utilisant break

if [ $(wc -w < new_file.txt) -lt $max ]; then


max_words=$(($max - $(wc -w < new_file.txt)))
fi
if [ $(wc -w < new_file.txt) -eq $max ]; then
break
fi

((var++))

Done

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

19
((var++)) incrémente la variable var pour passer à la ligne suivante.

rm file.txt
mv new_file.txt file.txt

Après on a passé seulement le nombre de mots qu’on veut on efface le fichier


file.txt et on renomme le fichier new_file.txt à file.txt

echo "The file has been edited to the following specifications(300 char/150
words/10 lines):"
echo "_________________________________"
cat file.txt
echo "---------------------------------"
echo "Do you want to edit the file more? (yes/no)"
read answer
done

Après avoir limiter le fichier et seulement laisser 300 charactères, 10 lignes et


150 mots on affiche un message à l’utilisateur comme quoi le fichier était
modifier pour respecter les critères déjà cité et aussi affiche le contenu
enregistrer dans le fichier et puis on demande à l’utilisateur est ce qu’il veut
éditer plus le fichier et il veut conserver le fichier comme il est après avoir être
limité si il tape ‘’no’’ le programme va terminer si il tape yes le programme va
travailler une autre fois jusqu’à l’utilisateur est satisfait par le contenu du
fichier.

4. Tester le projet :
Pour tester le projet je vais modifier les critères, on va tester
le script pout limiter le fichier dans 30 caractères, 10 mots et
10 lignes.

J’ai déjà modifié les accès du script maintenant je vais


l’exécuter.

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

20
On commence par tester le nombre des caractères on tape
plusieurs ‘’1’’

On remarque qu’il y a beaucoup des uns qui sont supprimé.

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

21
On entre ‘’yes’’ pour éditer le fichier plus
Pour tester les mots on écrit des nombres successifs
dans plusieurs lignes.

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

22
On remarque que les nombres de 11 jusqu’à 14 sont supprimé
il a conservé seulement 10 mots.

Pour tester les lignes on écrit des nombres successifs chaque


nombre dans une lignes.

On remarque que les nombres de 11 jusqu’à 14.


Ecole Nationale des Sciences Appliquées d’Al-Hoceima

23
On tape ‘’no’’ on remarque que le programme est terminé.

On utilise la commande cat pour afficher le contenu


enregistrer dans le fichier

On retourne les valeurs à les valeurs demandés dans le projet

Ecole Nationale des Sciences Appliquées d’Al-Hoceima

24

You might also like