L'objectif de ce TP (en autoformation) est que vous assimiliez les bases de l'environnement Unix/Linux ainsi que de la programmation système au sein d'un terminal.
Pour ce faire, cette page liste des commandes et des notions qu'il est bon, pour ne pas dire, indispensable, de connaître si vous voulez survivre dans tout environnement Unix.
Il vous est demandé de comprendre et tester l'utilisation de chaque commande que vous ne connaitriez pas encore. En cas de difficultés, vous pouvez dans l'ordre :
- Obtenir de l'aide en interrogeant la commande depuis un terminal:
<nom de la commande> -h
ou parfois (cela dépend de la commande)
<nom de la commande> --help - Consulter depuis un terminal la documentation Unix appelée aussi "man pages" à l'aide de la commande :
man <nom de la commande> - Interroger le Web (Wikipedia, tutoriels Linux, etc)
- En dernier recours, interroger le méchant professeur, mais vous prennez un risque...
Préambule : démarrage d'une session graphique et d'un terminal
- Démarrez une session graphique (ou session "X") sous l'environnement Gnome Shell (et non Unity)
- En appuyant sur la "Super Key" (pour ne pas dire la touche Windows ☠), découvrez la liste des bureaux virtuels (colonne de droite), la liste des applications courantes (colonne de gauche), le moteur de recherche de logiciels (boite de dialogue en haut).
- Naviguez d'un bureau virtuel à un autre à l'aide des combinaisons de touches CTRL + ALT + UP ou CTRL + ALT + DOWN. Ouvrez un navigateur de fichier (à partir de la liste des applications courantes) dans chaque bureau virtuel. Déplacez une fenêtre d'un bureau à un autre en pressant la "Super Key" et observez la création/destruction dynamique de bureaux virtuels.
- Ouvrez un terminal (de type bash par défaut) soit à l'aide du moteur de recherche (en tapant terminal dans la boite de dialogue), soit à partir du menu contextuel (clic du bouton gauche de la souris) d'un navigateur de fichiers.
- Commencez par faire ce mini tutoriel sur le terminal qui présente les commandes les plus importantes.
Système de fichiers Unix
Etudiez et testez ensuite les commandes suivantes :
- Commandes de base : ls, cd, pwd, cp, mv, rm, mkdir
- Quelques arguments de commande standards : -h, -R, -f, -v ou équivalent. Exemples ls -R, cp -R -v, rm -vf, etc
- Propriétés d'un fichier : ls -l, stat
- Chemins d'accès (symboles spéciaux *, ., .., ~), fichiers et répertoires cachés : ls -a
- Structure du système de fichiers Unix : répertoires /, /bin, /lib, /etc, /usr, /home, /tmp, etc
- Notions d'utilisateur et de groupes d'utilisateurs : id, groups, who, su
- Gestion des permissions : chmod, chown, chgrp
- Superutilisateur et gestion des packages : sudo, apt
- Recherche de fichiers : which, find (dir) -name (file)
- Compression et archivage : tar cvfz, tar tvf, tar xvf
Entrées/sorties d'un processus
- Opérateurs de redirection : <, >, >>, 2>, tee, fichier /dev/null
- Opérateur de pipelining : |
Substitution de commandes
Les commandes produisent une sortie sur le flux de sortie. La substitution permet d'utiliser la sortie d'une commande comme le texte d'une autre commande (le texte, pas le flux d'entrée). Voyons un exemple. Tapez pour voir
man lsb_release lsb_release -a lsb_release -a 2> /dev/null lsb_release -rsMaintenant que vous savez ce que fait cette commande, essayez
echo lsb_release -rs echo $(lsb_release -rs)La substitution est l'expression $(...), qui se note aussi `...` mais cette dernière notation est désuète. Pour créer un fichier xxx.txt où xxx est le numero de votre distribution, dans lequel se trouve seulement les lignes de la description de votre distribution qui contiennent le caractère '.', il suffit d'écrire
lsb_release -a 2> /dev/null | grep -F '.' > $(lsb_release -rs).txtEditez le fichier texte généré.
Traitement des fichiers texte et scripts
- Edition de fichiers texte : gedit, nano
- Concaténation, affichage : cat, echo
- Visualisation : less, tail -f
- Recherche d'information et expression régulière : grep
Exemples d'expressions régulières :- file /bin/* | grep shell
- ls -lR / | grep -P "^.{9}x\s+\w+\s+root"
- ifconfig | grep -P "(\d{1,3}\.){3}\d{1,3}"
- Ecriture de scripts : exemple du bashrc (less ~/.bashrc)
Gestion des threads et processus
- Notion de pid et supervision des processus :
- Processus console : ps
- Tous les processus : ps -e
- Avec les propriétés et arguments : ps -elf
- Avec les threads : ps -eLf
- Arborescence des processus : ps -eH
- Superviseur en mode console : htop
- Communication par signaux. Suspension (SIGHALT) et destruction de processus (SIGKILL) : kill, kill -9, CTRL-C, CTRL-Z
- Notion d'état (R,S,W,Z) du processus et de processus parent (ppid). Signal SIGCHLD et problème des processus zombis
- Communication par variables d'environnement : echo, set, get, export
- Gestion des tâches du terminal : parallélisme et séquençage : ;, &, fg, bg, jobs, disown
Réseau
- Services réseau : netstat -pl
- Secure Shell : ssh, ssh -Y, scp
- Test et configuration réseau : hostname, ping, ifconfig, nslookup
Exercices
Plutôt faciles
- Afficher le nombre de fichiers du répertoire courant. Indice: utiliser la commande wc.
- Afficher le nombre de fichiers d'un certain type (ex: tous les fichiers de suffixe ".pdf") contenus dans l'arborescence du répertoire courant.
- Sauvegarder dans un fichier texte tous les noms de fichiers dont le chemin d'accès contient un mot clé (ex: html).
Difficiles (pour les plus motivés)
- Afficher les noms de fichier et de propriétaire de tous les fichiers logs (i.e. ayant le suffixe .log) du système dont la taille dépasse 100Ko. Indice: combiner find -exec, stat et awk.
- Sauvegarder dans un fichier archive compressé l'ensemble des fichiers source d'un projet (fichiers .cpp, .hpp, .cc, .h, etc) et uniquement ceux-ci. Indice: combiner find, tar et les "back quotes" `...`.