Le but de cette séance est de continuer les rappels système en abordant les sujets shell avancé, ressources et programmation système.
Il est recommandé de prendre des notes, celle-ci pourront être envoyées à votre chargé de TP (prenom.nom@univ-amu.fr) à la fin de la journée pour avoir un retour.
Préliminaires
Il est recommandé de créer une nouvelle VM pour ce TP :
$ quota -s $ mkdir soutienSR/TP2 $ cd soutienSR/TP2 $ vagrant up $ quota -s
Shell Avancé : Boîte à outils
Le but de cette section est d’approfondir votre connaissance du shell afin d’en faire une boîte à outils efficace. Faire les manipulations dans la VM d’abord.
Votre Shell
- Quel est votre shell ? (
echo $SHELL
) + Pourquoi ? Quels sont les autres choix ? - Reprendre le début de cette page,
avant les énoncés de TP. Quelles sont les personnalisations utiles que vous pourriez faire dans
.bash_profile
et.bashrc
- quelles différences entre
.bash_profile
et.bashrc
? - quel est votre PATH ? À quoi cela sert-il de le personnaliser ? Quel est l’intérêt ou le risque d’ajouter
.
avecPATH="$PATH:./"
? - quelles sont vos commandes fréquentes ? Comment leur donner un nom court avec la commande
alias
?
- quelles différences entre
Votre “Invite”
En bash, la variable décrivant votre invite (votre prompt en franglais) principal est PS1
$ echo $PS1
Vous trouverez des propositions ici,
une documentation complète en anglais. Nous vous
invitons à prendre le temps d’en configurer certains à votre goût, en
particulier pour tout ce qui concerne git
comme par exemple
celui-ci ou
là.
Pour aller plus loin: il existe des environnements de prompt complets comme Liquidprompt
…
Proposition: PS1=\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00;32m\]$(git branch 2>/dev/null | grep -e '\* ' | sed 's/^..\(.*\)/{\1}/')\[\033[01;34m\] $\[\033[00m\]
Ressources
Statistiques du Système
Vous pouvez lancer le “Moniteur du système” sur votre machine hôte. Quelle est la RAM allouée à votre système ?
Explorer l’outil.
En ligne de commande
Les principales ressources sont le temps calcul et la mémoire (RAM) (nous verrons la bande passante réseaux ultérieurement). Vous pouvez accéder à ces éléments pour l’ensemble des processus avec
$ top
Cela est également accessible dans une partie particulière de l’arborescence /proc
$ ps # notez le numéro de processus xxxx du shell $ ls /proc/xxxx $ cat /proc/xxxx/environ $ ls -l /proc/cwd $ cat /proc/xxxx/exe $ ...
Combien y a-t-il de processus actuellement sur votre système ?
Faire
$ ls -l /proc/xxxx/fd
$ cat /proc/xxxx/fdinfo/0
Expliquer les résultats (revoir éventuellement ce qu’est un //file descriptor).
Accès de l’administrateur
Faire
$ cat /proc/xxxx/stack
L’administrateur peut-il fermer (“effacer”) des descripteurs de fichiers dans fd
.
Programmation Système
La programmation système est le fait d’écrire des programmes ou des scripts pour interagir avec le système. Cela peut se faire en bash, en C, en python, etc …
Il est bien sûr recommandé d’adopter les bonnes pratiques de programmation (IDE adapté, gestion de versions avec git, au moins quelques tests fonctionnels, …).
Cette partie est à faire sur l’hôte.
Rappels Compilation/Execution
En python
python est un langage interprété, il n’y a donc pas d’étape de compilation à proprement parler. Pour lancer un script script.py
faire
- soit
$ python programme.py
- soit ajouter
#!/usr/bin/env python
au début du script, et le rendre exécutable avecchmod
En C
Utiliser votre IDE préféré, ou bien, en ligne de commande, faire
$ gcc -c -Wall -Wextra -Werror *.c $ gcc -o programme *.o
Ces commandes précédentes peuvent être utilement rassemblées dans un Makefile
, voir des
rappels sur SO.
En Java
En ligne de commande, on peut faire
$ javac *.java $ java programme
ou bien sûr dans votre IDE et/ou un moteur de build comme gradle
.
Entrées-Sorties
Compiler et exécuter l’exemple suivant d’entrée/sortie
Ecrire la version java.
Exercices
Réaliser les questions suivantes en bash, python, C et Java (dans l’ordre que vous choisirez).
- Un programme qui prend comme paramètre un entier n, puis lit n chaînes de caractères au clavier, puis les affiche dans l’ordre inverse d’entrée.
- Un programme qui prend comme paramètre un entier n, puis affiche le nom de l’exécutable associé au processus de pid n.
- Un programme qui affiche tous les processus et l’exécutable associé
- Un programme qui stocke dans le fichier
oom.txt
tous les processus de score OOM maximum (voir avec/proc/*/oom_score
).
Synthèse
En conservant des fichiers séparés, rassembler les exercices précédents dans un seul programme (par langage !). Ce programme présentera tous les exercices dans un menu.