Vous êtes sur la page 1sur 14

Faculté des sciences et techniques

Département de maths et informatique


MAI

Projet_unix

Groupe 9 :
Mohamed Elmokhtar salem __C20117
Eboubekrine Mohamed Ali __ C20857
Edah mouhamdi mouhamed Ahid__C18060
Sidi Abdoullah Mohamed Elmokhtar Aleiwa__C14655

ANNÉE UNIVERSITAIRE : 2022 - 2023


Partie 1 : Basic Commands
1)Affichage de la liste des fichiers et/ou répertoires d'un répertoire.
Commande: ls

2)Copie d'un fichier


Commande: cp [source_file] [destination]

3)Copie d'un répertoire.


Commande: cp -R [source_directory] [destination_directory]

4)Déplacement d'un fichier.


Commande: mv [source_file] [destination]

5)Changement du nom d'un fichier.


Commande: mv [old_file_name] [new_file_name]

6)Effacement d'un répertoire.


Commande: rm -r [directory_name]

7)Création d'un répertoire.


Commande: mkdir [directory_name]

8)Création d'un lien.


Commande: ln -s [source_file] [link_file]

9)Affichage progressif du contenu d'un fichier.


Commande: less [file_name]

10)Comparaison de deux fichiers.


Commande: diff [file1] [file2]

11)Recherche d'une chaine de caractères dans un ou plusieurs fichiers.


Commande: grep [search_text] [file_name(s)]

12)Création d'un groupe d'utilisateurs.


Commande: groupadd [group_name]

13)Suppression d'un groupe d'utilisateurs.


Commande: groupdel [group_name]

14)Création d'un utilisateur.


Commande: useradd [user_name]

1
15)Suppression d'un utilisateur.
Commande: userdel [user_name]

16)Changement du mot de passe d'un utilisateur.


Commande: passwd [user_name]

17)Modification des autorisations sur un fichier ou un répertoire.


Commande: chmod [permissions] [file_name/directory_name]

18)Modification du propriétaire d'un fichier ou un répertoire.


Commande: chown [owner_name] [file_name/directory_name]

19)Copie de fichiers ou de répertoires avec préservation des autorisations.


Commande: cp -a [source_file/directory] [destination_directory]

20)Copie de fichiers ou de répertoires avec préservation des propriétaires.


Commande: cp -pR [source_directory] [destination_directory]

21)Montage d'un répertoire réseau.


Commande: mount [network_directory] [local_directory]

22)Création d'une variable d'environnement.


Commande: export [variable_name]=[value]

23)Affichage de la date du système.


Commande: date

24)Afficher la liste des fichiers du répertoire /usr/include dont le nom commence


par a, b ou c
Commande: ls /usr/include/[a-c]*
25)Afficher les 5 premières, puis les 5 dernières lignes du fichier /etc/passwd.
Commande: head -5 /etc/passwd ; tail -5 /etc/passwd

26)Afficher la 7ième ligne de ce fichier (et elle seule), en une seule ligne de
commande.
Commande: sed -n '7p' /path/to/file

27)Affichage de l'état instantané de la liste des processus en cours de


fonctionnement.
Commande: top

28)Terminaison forcée d'un processus.


Commande: `kill -9 [process_id]

2
29)Arrêt du système
Commande: shutdown -h now

30)Affichage de la configuration des interfaces réseau sous TCP/IP présentes


dans la machine

Commande: ifconfig -a

_________________________________

Partie 2 :
Exo1 :

Voici le code pour le script "Processus.txt" qui ajoute la date, l'heure et la liste
des processus en cours d'exécution dans un fichier :

#!/bin/bash

current_date=$(date +"%Y-%m-%d")

current_time=$(date +"%H:%M:%S")

process_list=$(ps aux)

output_file="Processus.txt"

echo "Date: $current_date" >> "$output_file"

echo "Heure: $current_time" >> "$output_file"

echo "Liste des processus en cours d'exécution:" >> "$output_file"

echo "$process_list" >> "$output_file"

Maintenant, passons aux explications pour chaque quetion :

1) Pour planifier l'exécution du script tous les jours à 5 heures du matin, on peut
utiliser la commande crontab -e pour éditer notre fichier de tâches cron et
ajoutons la ligne suivante :

0 5 * * * /chemin/vers/Processus.txt

3
2 ) Pour planifier l'exécution du script chaque Lundi à 7 heures, on peut ajouter
la ligne suivante dans notre fichier de tâches cron (crontab -e) :

0 7 * * 1 /chemin/vers/Processus.txt

3) Pour exécuter le script toutes les 15 minutes, on peut utiliser la notation cron
suivante dans notre fichier de tâches cron (crontab -e) :

*/15 * * * * /chemin/vers/Processus.txt

4) Pour planifier l'exécution du script dans des mois sélectionnés, on peut


utiliser la notation cron suivante dans notre fichier de tâches cron (crontab -e) :

0 0 1 1,5,10 * /chemin/vers/Processus.txt

Exo2 :

Pour accomplir ces tâches, on peut utiliser les commandes suivantes dans un
terminal :

Pour extraire l'archive "Ubuntu-KDE.tar" dans un sous-répertoire nommé


"Ubuntu-KDE" de notre répertoire HOME, utilisons la commande suivante :

tar -xf Ubuntu-KDE.tar -C ~/Ubuntu-KDE

Cette commande extrait le contenu de l'archive "Ubuntu-KDE.tar" dans le


répertoire "~/Ubuntu-KDE".

Pour compresser le répertoire "Fichiers" en une archive au format tar


compressée "Ubuntu-KDE.tar.gz", utilisons la commande suivante :

tar -czf Ubuntu-KDE.tar.gz Fichiers

Cette commande crée une nouvelle archive "Ubuntu-KDE.tar.gz" contenant le


répertoire "Fichiers".

_________________________________

4
Partie 3 : Shell

Exo1:

Voici le script shell "change" qui répond à notre demande :


if [ $# -ne 1 ]; then
echo "Erreur : veuillez fournir un nom de fichier en argument."
exit 1

fi

fichier="$1"

if [ ! -f "$fichier" ]; then

echo "Erreur : le fichier '$fichier' n'existe pas."

exit 1

fi

echo "Avant : $(ls -l "$fichier")"


touch "$fichier"
echo "Après : $(ls -l "$fichier")"

Explications détaillées :

Nous vérifions le nombre de paramètres passés au script en utilisant la


condition [ $# -ne 1 ]. Si le nombre de paramètres est différent de 1, nous
affichons un message d'erreur demandant de fournir un nom de fichier en
argument et nous quittons le script avec le code de sortie 1.

Le nom de fichier passé en argument est récupéré à l'aide de la variable spéciale


"$1".

Nous vérifions si le fichier existe en utilisant la condition [ ! -f "$fichier" ]. Si le


fichier n'existe pas, nous affichons un message d'erreur indiquant que le fichier
n'existe pas et nous quittons le script avec le code de sortie 1.

Avant de modifier la date de dernière modification du fichier, nous affichons la


date de dernière modification actuelle du fichier en utilisant la commande ls -l
"$fichier".
5
Pour modifier la date de dernière modification du fichier, nous utilisons la
commande touch "$fichier". Cette commande met à jour la date de modification
du fichier avec l'heure actuelle.Enfin, nous affichons à nouveau la date de
dernière modification du fichier après la modification en utilisant à nouveau la
commande ls -l "$fichier".

Exo2 :

Voici le script shell qui permet d'ajouter le contenu d'un fichier texte à la fin
d'un autre fichier, de déplacer le fichier dans le répertoire "archive" et d'afficher
le contenu du répertoire "archive" accessible en écriture :

if [ $# -ne 2 ]; then
echo "Erreur : veuillez fournir les noms des deux fichiers en argument."
exit 1
fi
fichier_source="$1"
fichier_destination="$2"
if [ ! -f "$fichier_source" ]; then
echo "Erreur : le fichier source '$fichier_source' n'existe pas."
exit 1
fi

if [ ! -d "archive" ]; then
mkdir archive
echo "Le répertoire 'archive' a été créé."
fi

cat "$fichier_source" >> "$fichier_destination"


echo "Le contenu du fichier '$fichier_source' a été ajouté à la fin du fichier
'$fichier_destination'."
mv "$fichier_source" archive/
6
echo "Le fichier '$fichier_source' a été déplacé dans le répertoire 'archive'.
echo "Contenu du répertoire 'archive' accessible en écriture :"
ls -l archive/

Explications détaillées :

Nous vérifions le nombre de paramètres passés au script en utilisant la


condition [ $# -ne 2 ]. Si le nombre de paramètres est différent de 2, nous
affichons un message d'erreur demandant de fournir les noms des deux fichiers
en argument et nous quittons le script avec le code de sortie 1.

Les noms de fichiers source et destination sont récupérés à l'aide des variables
spéciales "$1" et "$2".

Nous vérifions si le fichier source existe en utilisant la condition [ ! -f


"$fichier_source" ].

Si le fichier source n'existe pas, nous affichons un message d'erreur indiquant


que le fichier source n'existe pas et nous quittons le script avec le code de sortie
1.

Nous vérifions si le répertoire "archive" existe. Si le répertoire n'existe pas, nous


le créons en utilisant la commande mkdir archive.

Le contenu du fichier source est ajouté à la fin du fichier destination en utilisant


la commande cat "$fichier_source" >> "$fichier_destination". La redirection >>
permet d'ajouter le contenu à la fin du fichier de destination sans l'effacer.

Nous affichons un message indiquant que le contenu du fichier source a été


ajouté à la fin du fichier destination.

Le fichier source est déplacé vers le répertoire "archive" en utilisant la


commande mv "$fichier_source" archive/.

Nous affichons un message indiquant que le fichier source a été déplacé dans le
répertoire "archive".

Enfin, nous affichons le contenu du répertoire "archive" accessible en écriture en


utilisant la commande ls -l archive/. Cela affiche les détails des fichiers présents
dans le répertoire "archive", y compris les permissions d'écriture.

7
Exo3:

Voici le script shell qui répond à notre demande :

if [ -d "Exo4" ]; then

echo "Le répertoire 'Exo4' existe déjà."

else
mkdir Exo4
echo "Le répertoire 'Exo4' a été créé."

fi
for i in {1..10}; do
fichier="Exo4/$i"
contenu="$ième ligne"

echo "$contenu" > "$fichier"

echo "Le fichier '$fichier' a été créé."

Done

Explications :

Nous vérifions si le répertoire "Exo4" existe déjà en utilisant la condition [ -d


"Exo4" ]. Si le répertoire existe, nous affichons un message indiquant qu'il existe
déjà. Sinon, nous créons le répertoire avec la commande mkdir Exo4 et affichons
un message indiquant sa création.

Ensuite, nous utilisons une boucle for pour parcourir les nombres de 1 à 10. À
chaque itération, nous créons un fichier dans le répertoire "Exo4" avec le nom
correspondant au numéro actuel.

Pour créer le fichier, nous utilisons la redirection > avec la commande echo pour
écrire une ligne de texte dans le fichier.

8
Le contenu du fichier est défini en utilisant la variable contenu qui est
initialisée à la valeur "$ième ligne", où "$ième" est remplacé par le numéro
actuel de la boucle.

Enfin, nous affichons un message indiquant la création de chaque fichier.

Exo4 :

Voici le script shell qui réalise les opérations décrites :


date=$(date +"%Y%m%d")

repertoire="TP2/$date"

if [ -d "$repertoire" ]; then

echo "Le répertoire '$repertoire' existe déjà."

else

mkdir -p "$repertoire"

echo "Le répertoire '$repertoire' a été créé."

fi

cp Exo4/* "$repertoire"

echo "Les fichiers de 'Exo4' ont été copiés dans le répertoire '$repertoire'."

rm Exo4/*

echo "Les fichiers de 'Exo4' ont été supprimés."

home_directory="$HOME"

if [ -d "$home_directory" ]; then

fichier1="$home_directory/fichier1.txt"

fichier2="$home_directory/fichier2.txt"

9
if [ -e "$fichier1" ]; then

echo "Le fichier '$fichier1' existe déjà."

else

touch "$fichier1"

echo "Le fichier '$fichier1' a été créé."

fi

if [ -e "$fichier2" ]; then

echo "Le fichier '$fichier2' existe déjà."

else

touch "$fichier2"

echo "Le fichier '$fichier2' a été créé."

fi

else

echo "Le répertoire d'accueil '$home_directory' n'existe pas."

fi

Explications :

Nous récupérons la date actuelle au format AAAAMMJJ en utilisant la


commande date +"%Y%m%d".

Nous créons le répertoire "anneemoisjour" sous votre répertoire "TP2". Avant de


créer le répertoire, nous vérifions si le répertoire existe déjà en utilisant la
condition [ -d "$repertoire" ]. Si le répertoire existe, nous affichons un message
indiquant qu'il existe déjà. Sinon, nous créons le répertoire en utilisant la
commande mkdir -p "$repertoire", avec l'option -p pour créer également les
répertoires parents si nécessaire.

10
Nous copions les fichiers du répertoire "Exo4" vers le répertoire créé en utilisant
la commande cp Exo4/* "$repertoire". Tous les fichiers contenus dans "Exo4"
seront copiés dans le répertoire "anneemoisjour".

Nous supprimons les fichiers du répertoire "Exo4" en utilisant la commande rm


Exo4/*. Tous les fichiers contenus dans "Exo4" seront effacés.

Nous vérifions si le répertoire d'accueil (HOME) existe en utilisant la condition [


-d "$home_directory" ]. Si le répertoire d'accueil existe, nous créons deux fichiers
(fichier1.txt et fichier2.txt) sous le répertoire d'accueil (HOME) de la personne
qui a lancé le script.

Nous vérifions si les fichiers existent déjà en utilisant les conditions [ -e


"$fichier1" ] et [ -e "$fichier2" ]. Si les fichiers existent, nous affichons un
message indiquant qu'ils existent déjà. Sinon, nous créons les fichiers en
utilisant la commande touch "$fichier1" et touch "$fichier2".

Enfin, nous affichons les messages correspondants à chaque étape du script pour
informer de la création du répertoire, de la copie des fichiers, de la suppression
des fichiers et de la création des fichiers dans le répertoire d'accueil.

Exo5:
Voici le script shell pour accomplir les deux tâches demandées :

Q1:

ls -l /etc | grep "^-r"

Explication :

Le script utilise la commande ls -l /etc pour lister les fichiers du répertoire /etc
avec leurs détails.

11
Ensuite, la commande grep "^-r" est utilisée pour filtrer uniquement les fichiers
qui ont des permissions de lecture (-r indique que le fichier est lisible).

Le résultat affiche uniquement les fichiers du répertoire /etc accessibles en


lecture.

Q2:

if [ ! -f "chemin/vers/fichier_source" ]; then

echo "Le fichier source n'existe pas."

exit 1

fi

nombre_copies=0

for dossier_utilisateur in /home/*; do

if [ -d "$dossier_utilisateur" ]; the

cp "chemin/vers/fichier_source" "$dossier_utilisateur/"

nombre_copies=$((nombre_copies+1))

fi

done

echo "Le fichier a été copié dans $nombre_copies répertoires d'utilisateurs."

Explication :

Le script vérifie d'abord si le fichier source existe en utilisant la condition [ ! -f


"chemin/vers/fichier_source" ]. Si le fichier source n'existe pas, il affiche un
message d'erreur et quitte le script.

Une variable nombre_copies est initialisée à 0 pour compter le nombre de copies


effectuées.

12
Ensuite, le script boucle sur les répertoires d'accueil des utilisateurs en utilisant
/home/*. Vous pouvez ajuster ce chemin en fonction de la structure du système.

À chaque itération de la boucle, le script vérifie si le chemin est un répertoire en


utilisant [ -d "$dossier_utilisateur" ].

Si c'est le cas, le script copie le fichier source dans le répertoire de l'utilisateur


en utilisant la commande cp "chemin/vers/fichier_source" "$dossier_utilisateur/"
et incrémente nombre_copies.

Après la boucle, le script affiche le nombre de copies effectuées.

13

Vous aimerez peut-être aussi