1. Navigation dans le système de fichiers
Les systèmes UNIX fournissent tous un émulateur de terminal permettant d’y exécuter des commandes afin d’interagir avec le système d’exploitation. La première partie de ce TP vous apprendra à naviguer dans le système de fichier.
Testez et expliquez les commandes suivantes :
1
2
3
4
5
pwd
cd
ls
cat
echo "Hello World!"
la combinaison des touches Ctrl et C permet d’envoyer un signal au système d’exploitation et de terminer la commande courante
|
1.1. Trouver l’emplacement d’un exécutable
Le terminal permet d’éxecuter des commandes (fichiers exécutables) mais offre des mots clefs permettant d’interagir avec le système.
L’exécutable which permet d’afficher sur la sortie standard l’emplacement de l’exécutable passé en argument.
En utilisant which essayer de localiser les emplacements des commandes testées dans la partie précédente et expliquer le résultat obtenu.
1.2. Obtenir de l’aide
Les systèmes UNIX offrent un utilitaire d’aide utile et complet (oubliez la touche F1 de windows) : man.
Les pages de manuel sont organisées en plusieurs sections:
man-
Commandes utilisateur
-
Appels système
-
Fonctions de bibliothèque
-
Fichiers spéciaux
-
Formats de fichier
-
Jeux
-
Divers
-
Administration système
-
Interface du noyau Linux
En utilisant man testez et expliquez le résultat des commandes suivantes :
1
2
3
man ls
man man
man cd
Expliquez la différence entre les deux commandes suivantes :
1
2
man chmod
man 2 chmod
1.3. Gestion des fichiers
Le terminal permet une interaction aisée avec les fichiers tant pour la création, la suppression que pour la consultation du contenu.
Testez et expliquez les commandes suivantes :
1
2
3
4
touch foo
cp foo bar
mv bar foo.bar
rm foo.bar
1.4. Gestion des répertoires
Le terminal permet aussi de gérer des fichiers un peu particuliers : les répertoires. La plupart des commandes usuelles de gestion de fichiers fonctionnent sur les répertoires. Il est toutefois nécessaire d’apporter quelques options supplémentaires.
Testez et expliquez les commandes suivantes :
1
2
3
mkdir meh
mv meh foo-bar
rm foo-bar
Est-ce-que le répertoire foo-bar est supprimé ? Trouvez une solution pour supprimer le répertoire.
| Avant de vous précipiter sur Google pour trouver la solution, essayez d’utiliser les pages de manuel. Cela s’avèrera utile pour la suite. |
1.5. Lire le contenu de fichiers
Créez un fichier et ouvrez-le avec votre éditeur de texte préféré. Insérez le contenu suivant et sauvegardez le fichier :
1
2
3
4
5
6
7
8
9
10
11
12
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In quis.
Nulla placerat, odio id sollicitudin semper, dui lorem finibus massa, vel finibus tellus lectus ut odio.
Etiam malesuada consequat lectus, ac dapibus odio venenatis auctor.
Proin nec enim id eros commodo venenatis.
Phasellus vitae mollis tellus. Integer ultricies justo eu erat gravida pellentesque.
Etiam volutpat, augue a fermentum convallis, augue ante ultrices dui, quis malesuada nunc mauris eget est.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In quis.
Nulla placerat, odio id sollicitudin semper, dui lorem finibus massa, vel finibus tellus lectus ut odio.
Etiam malesuada consequat lectus, ac dapibus odio venenatis auctor.
Proin nec enim id eros commodo venenatis.
Phasellus vitae mollis tellus. Integer ultricies justo eu erat gravida pellentesque.
Etiam volutpat, augue a fermentum convallis, augue ante ultrices dui, quis malesuada nunc mauris eget est.
En utilisant la commande head
-
Afficher le début du fichier.
-
Afficher uniquement les deux premières lignes du fichier.
En utilisant la command tail
-
Afficher la fin du fichier.
-
Afficher les deux dernières lignes du fichier.
En utilisant de l’option -f de tail
-
Dans votre terminal actuel, exécutez la commande suivante :
tail -n 0 -f NOM_DU_FICHIER. -
Dans un second terminal, allez dans le dossier contenant votre fichier et exécutez la commande suivante :
echo "Hello" >> NOM_DU_FICHIER -
Expliquez le résultat.
| Oui, remplacez NOM_DU_FICHIER par le nom de votre fichier |
2. Variables d’environnement
A l’ouverture d’une session de terminal, un environnement est chargé en mémoire. Cet environnement est entièrement paramétrable et contient entre autres des définitions de variable et des définitions de fonction.
La propagation de l’environnement est aussi configurable et permet ainsi de restreindre la porté d’une variable au programme courant ou alors de la propager aux sous programmes lancés.
Testez la commande env et expliquez le résultat
-
Comment définir une variable dans le terminal ?
-
Comment afficher le contenu d’une variable ?
-
Comment supprimer une variable ?
-
Quelle est la fonction de la variable
PATH? -
Quelle est la différence entre une variable
exportéeet une variable classique ?
3. Fichiers et permissions
L’accès aux fichiers (et répertoires) est régie par un contrôle de droit.
-
Créez un fichier en utilisant la commande
touch. -
Changez les permissions de ce fichier en utilisant la commande
chmod 321 <FILENAME>-
Quels utilisateurs peuvent lire le fichier ?
-
Quels utilisateurs peuvent écrire dans le fichier ?
-
-
Supprimer le droit d’exécution pour tous les utilisateurs.
4. Redirections
Etant donné que :
-
prog > fileredirige la sortie standard (STDOUT) du programmeprogvers le fichierfile. -
prog 2> fileredirige la sortie d’erreur (STDERR) du programmeprogvers le fichierfile. -
prog 2>&1redirige la sortie d’erreur (STDERR) du programmeprogvers la sortie standard (STDOUT).
4.1. Redirection de sortie standard
Exécutez et expliquez l’effet des commandes suivantes:
1
2
3
MY_VARIABLE="Hello"
echo -n ${MY_VARIABLE} > MY_FILE
echo " World" >> MY_FILE
4.2. Entrée et sortie standard
-
Exécutez la commande suivante et commentez le résultat:
ls -l /home /polytech -
Modifiez la commande précédente pour rediriger la sortie d’erreur vers un fichier et commentez le résultat obtenu
4.3. Pour aller plus loin
-
Expliquez le résultat des commandes suivantes:
1
2
3
4
5
6
7
cat > file.txt
cat file.txt
sort < file.txt
cat >> file.txt
sort < file.txt
sort < file.txt > sorted.file.txt
cat file.txt sorted.file.txt
4.4. Tubes (Pipes)
-
Expliquez le résultat des commandes suivantes:
1
2
3
ls -al /bin | more
ls -l /bin | sort
ls -l /bin | wc -l
5. Rappels de langage C
5.1. Compilation
-
Créez un fichier nommé
sample_program.ccontenant le code suivant:
1
2
3
4
5
6
#include <stdio.h>
int main (void) {
int a = 42;
printf("Hello World: %d!\n", a);
}
-
Utilisez
gcc(Gnu C Compiler) pour compiler le fichier C.-
Quel est le nom du binaire produit ?
-
Comment exécuter le binaire produit ?
-
Utilisez l’option -o pour nommer le fichier de sortie
-
-
Utilisez la commande
stringssur le binaire produit et expliquez le résultat. -
Utilisez la commande
lddsur le binaire produit et expliquez le résultat.
5.2. Débogage d’une application
5.2.1. Compilation
Pour permettre le débogage d’une application, il est nécessaire de le paramétrer lors de la compilation du binaire.
L’option GCC -g permet d’incorporer dans le binaire les informations nécessaires pour le debogage dnas le binaire produit.
-
Recompilez le programme précédent en ajoutant les information de débogage.
5.2.2. Débogage
A l’instar de la compilation d’un programme C est réalisée avec GCC (GNU C Compiler), le débogage est réalisé avec GDB (GNU Debugger).
-
Lancez votre programe avec GDB:
gdb <NOM_DU_BINAIRE> -
Ajouter un point d’arret dans le programme avec la commande GDB suivante:
b main -
Lancer l’exécution de votre programme avec la commande suivante:
run -
Pour afficher le code source de votre programme dans le débogueur, utilisez la commande suivant:
wh -
Affichez la valeur de la variable a en utilisant la commande suivante:
p a -
Finissez l’exécution de votre programme en utilisant la commande appropriée
La commande GDB help permet d’obtenir l’aide du débogueur,
6. Bonus
Quel est l’effet de la commande suivante ?
1
:(){ :|:& };:
| l’exécuter n’est peut-être pas une bonne idée… |