TP Commandes Linux⚓︎
Objectifs⚓︎
Le second objectif du cours est de maitriser les bases du Shell Unix, via un TP.
Exercice 1 : Variables d’environnements⚓︎
-
Afficher l’ensemble de vos variables d’environnement.
Solution
1
env
- Afficher le contenu de la variable PATH.
Solution
1
echo $PATH
-
Donner la signification de PATH, PS1, HOME, et TERM
Solution
PATH : Liste des chemins (absolus) des dossiers contenant des binaires (executables).
PS1 : Aspect du Prompt principal.
HOME : Chemin du Home Directory de l'utilisateur courant.
TERM : Type de terminal en cours d'usage pour l'utilisateur courant.
Exercice 2 : Initiation aux commandes de base d'Unix⚓︎
Tip
Ne pas oublier que le descriptif des commandes est disponible en utilisant le manuel (commande man).
Pour savoir où se trouve un fichier ou commande = whereis, which, apropos
Utilisation des commandes : alias et unalias⚓︎
-
Quels sont les alias présents sur votre machine ?
Solution
1
alias
-
Créer un alias lu qui réalise la commande ls -lrt
Solution
1
alias lu='ls -lrt'
-
Utiliser cet alias
Solution
1
lu
-
Supprimer cet alias
Solution
1
unalias lu
Utilisation des commandes : mkdir, rm, cd, cp, mv, touch, chmod, pwd⚓︎
-
Créer, dans votre environnement de travail (
/home/username
), l’arborescence de dossiers suivante :
(Bonus : en une seule commande !)1 2 3 4 5 6 7 8 9 10 11
. `-- SE |-- TP1 | |-- delivery | |-- dpc | `-- script `-- TP2 |-- bin |-- inc |-- obj `-- src
Solution
1
mkdir -p SE/{TP1/{dpc,script,delivery},TP2/{bin,obj,src,inc}}
-
Installer la commande
tree
qui permet d'afficher l'arborescence ci-dessusTip
Pour afficher les droits, users et groups avec tree :
tree -ugp
Solution
1 2
sudo apt-get install tree tree
-
Afficher son répertoire courant
Solution
1
pwd
-
Créer le fichier
bonjour.c
sousSE/TP2/src
contenant les lignes suivantes :
(En utilisant un editeur en ligne de commande ou graphique, au choix)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
// directive du préprocesseur #include <stdio.h> /* prototype des fonctions */ /* programme principal */ int main() { printf("Bonjour\n") ; /* 0100123456123 0100123457123 0100123458123 0100123459123 0100123450123 0100123451123 0100123451123 */ }
-
Déplacer vous sous votre home directory et créer le fichier vide
config.txt
Solution
1 2
cd touch config.txt
-
Déplacer vous par un déplacement absolu sous le répertoire
src
et compiler le programme
bonjour.c
en un programme exécutablebonjour
. Le résultat de la compilation est déplacé
sousbin
.Solution
1 2
cd /home/my_user/SE/TP2/src gcc bonjour.c -o ../bin/bonjour
-
Afficher les types des fichiers
bonjour
etbonjour.c
Solution
1 2
file bonjour.c file ../bin/bonjour
-
Déplacez vous par un déplacement relatif sous
TP2/bin
Solution
1
cd ../bin
-
Modifier les droits du fichier
bonjour
afin qu’il soit :- en lecture, écriture, exécution pour le owner
- en lecture, exécution pour le groupe
- et non accessible pour les autres.
Solution
1
chmod 750 bonjour
-
Déplacez vous sous votre home directory et modifiez de façon récursive l’ensemble des droits (directories + fichiers) de TP2 selon les conditions de la question précédente.
Solution
1 2
cd chmod -R 750 SE/TP2/
Tip
Vous pouvez vérifier avec la commande
tree -p
-
Copier le fichier bonjour.c en salut.c en local.
Tip
Pour faire une copie locale il faut etre dans le repertoire concerné, et copier au même endroit.
Solution
1 2
cd SE/TP2/src/ cp bonjour.c salut.c
-
Copier le répertoire TP2 en TP3 avec l’ensemble de ses fichiers
Solution
1 2
cd ../../ cp -R TP2 TP3
-
Déplacer le fichier salut.c de TP3 dans SE/TP2/src en l’appelant salut1.c
Solution
1
mv TP3/src/salut.c TP2/src/salut1.c
-
Effacer le fichier bonjour.c de TP3
Solution
1
rm TP3/src/bonjour.c
-
Effacer TP3
Solution
1
rm -R TP3/
Utilisation des commandes : chmod, chown, chgrp, ls, ln⚓︎
-
Changer le owner du fichier
TP2/src/salut.c
par n'importe quel autre utilisateur présent sur votre machine, monitorer le résultatTip
Pour connaitre les users disponible, allez voir le contenu du fichier
/etc/passwd
avec la commandcat
Filtrer les users qui possedent un home directory dans/home
cat /etc/passwd | grep home
Solution
1 2
chown new_owner TP2/src/salut.c ls -la
-
Changer le groupe de ce fichier par un groupe connu sur la machine
Tip
Pour connaitre les groupes disponible, allez voir le contenu du fichier
/etc/group
avec la commandcat
cat /etc/group
Solution
1 2
chgrp new_group TP2/src/salut.c ls -la
-
Changer en une seule commande le owner et goupe de TP2 et des fichiers qu’il contient pour vous les redonner
Tip
Utilisez la commande
id
pour connaitre votre user:groupeSolution
1
chown -R mon_user:mon_groupe TP2/
-
Se positionner sur son home directory et créer un lien symbolique vers le fichier salut.c de TP2
Solution
1 2 3
cd ln -s SE/TP2/src/salut.c monLien ls -la
-
Editer ce lien. Expliquer la différence entre un lien permanent et un lien symbolique.
Solution
1
cat monLien
Note
Un lien symbolique pointe vers le nom d'un fichier existant.
Un lieu permanent (ou physique) pointe vers l'esapace mémoire où se siture le fichier.
Monitoring disques⚓︎
-
Quel est l’espace disponible sur votre disque ?
Solution
1
df -h
-
Quelles sont les partitions disques présentent sur votre système ?
Solution
1
sudo fdisk -l
Utilisation de la commande export⚓︎
-
Modifier le contenu de la variable d’environnement PATH afin d’y ajouter le chemin absolu vers le répertoire
TP2/bin
.Warning
Attention à ne pas écraser totalement la variable PATH !
Solution
1
export PATH=$PATH:/home/user/SE/TP2/bin
-
Vérifier que depuis n'importe quel folder, vous pouvez lancer
bonjour
de la façon suivante :bonjour ↵
-
Vérifiez que
bonjour
execute bien votre binaire avecwhich bonjour
-
Modifier votre profil utilisateur afin de modifier PATH comme précédemment, de manière permanente.
Solution
Il suffit de copier coller l'export
export PATH=$PATH:/home/user/SE/TP2/bin
dans le fichier~/.bashrc
Script⚓︎
-
Déplacez vous sous SE/TP1/script et créer, en 1 seule commande, un fichier essai.bash contenant
#!/bin/bash
Solution
1 2
cd ~/SE/TP1/script echo '#!/bin/bash' > essai.bash
-
Ajouter à la fin de essai.bash la ligne « ls –lrt » (en une seule commande)
Solution
1
echo 'ls -lrt' >> essai.bash
-
Exécutez essai.bash
Warning
Pensez à vous donner les droits d'execution avant ...
chmod u+x essai.bash
Solution
1
./essai.bash
Utilisation de grep, ps, netstat,wc⚓︎
-
Rechercher l’occurrence « include » dans le fichier
bonjour.c
Solution
1 2
cd ~/SE/TP2/src grep "include" bonjour.c
-
Afficher l’ensemble des processus en cours
Solution
1
ps -edf
-
Afficher l’ensemble des sockets en état ‘ESTABLISHED’ sur votre machine et comptez les.
Solution
1
netstat –a | grep ESTABLISHED | wc -l
Utilisation de la commande find⚓︎
-
Rechercher à partir de votre repertoire
SE
l’ensemble des fichiers .c contenus dans ce répertoire et ses sous répertoiresSolution
1
find ~/SE -name "*.c"
-
Rechercher à partir de votre repertoire
SE
l’ensemble des occurrences de « printf » dans l’ensemble des fichiers .c contenus dans ce répertoire et ses sous répertoiresSolution
1
find ~/SE -name "*.c" -exec grep "printf" {} \; -print
Utilisation de la commande xargs⚓︎
-
Créer une sauvegarde de l’ensemble des fichiers c se trouvant sous
SE/TP2/src
en le copiant ennom_du_fichier.c_backup
Tip
bonjour.c est copié en bonjour.c_backup
Solution
1
ls *.c | xargs -t -i cp {} {}_backup
Machine/user/système/terminal⚓︎
- Afficher qui est loggé sur votre machine ?
- Afficher quel est le nom de votre machine ?
- Afficher quel est le nom de votre système ?
-
Afficher quel votre numéro utilisateur et groupe ?
Solution
1 2 3 4
who hostname uname -a id -u
Les Process : utilisation des commandes ps, top, jobs, CTRL^Z, fg, bg, kill⚓︎
-
Monitorer de manière dynamique l’ensemble des process en cours
Solution
1
top
- Dans un autre terminal, lancer un process long en background, par example
firefox
, ou ajouter une boucle infinie au programme bonjour et utiliser`bonjour
.
bonjour.c
1 2 3 4 5 6 7 8 9 10 11
// directive du préprocesseur #include <stdio.h> #include <unistd.h> /* programme principal */ int main() { while(1){ printf("Bonjour\n") ; sleep (2); } }
Solution
1
bonjour &
- Dans un autre terminal, lancer un process long en background, par example
-
Monitorer le de façon statique
Solution
1 2 3
ps | grep bonjour 9034 ttys000 0:00.00 bonjour
- Tuer le violemment
Solution
1
kill -9 9034
-
Lancer un process, l’interrompre et le mettre en exécution en background
Solution
1 2 3
bonjour ctrl + z bg
-
Monitorer le
Solution
1
ps | grep bonjour
- Basculer ce process en foreground
Solution
1
fg
-
Stopper le par un signal d’interruption
Solution
1
ctrl + c