Updated Modifié

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

  1. Quel est votre shell ? (echo $SHELL) + Pourquoi ? Quels sont les autres choix ?
  2. 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 . avec PATH="$PATH:./" ?
    • quelles sont vos commandes fréquentes ? Comment leur donner un nom court avec la commande alias ?

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 .

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 avec chmod

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).

  1. 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.
  2. Un programme qui prend comme paramètre un entier n, puis affiche le nom de l’exécutable associé au processus de pid n.
  3. Un programme qui affiche tous les processus et l’exécutable associé
  4. 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.