Portail informatique Année 2018 – 2019

CSC 3102 – Introduction aux systèmes d’exploitation

Annexe shell

Commandes utiles utilisées dans le cours

cat fich Affiche le contenu du fichier fich sur la sortie standard.
echo args Affiche les arguments args sur la sortie standard.
expr expression Calcule le résultat de l’expression arithmétique indiquée en argument et affiche le résultat sur la sortie standard. Attention, ne travaille qu’en arithmétique entière. Typiquement, vous pouvez incrémenter un compteur i avec l'expression suivante i=$(expr $i + 1).
grep [opt] motif fich Affiche sur la sortie standard les lignes de fich correspondant au motif bash motif. Si l'option –v est précisée, les lignes ne correspondant pas au motif motif sont affichées. Si aucun nom de fichier n'est donné, fait la recherche à partir de l'entrée standard. Les motifs utilisés par grep sont différents de ceux utilisés par bash et nous invitons les étudiants à consulter la page de man. Pour grep, le caractère ^ indique le début de ligne et le caractère $ indique la fin de ligne.
du [opt] fich Affiche la taille du fichier fich en nombre de blocs suivi du nom du fichier (un bloc correspond à 512 octets). L'option -h permet d'afficher la taille en utilisant des unités de mesure plus usitées par les humains.
read var Copie la ligne de caractères lue sur l'entrée standard dans la variable var. Typiquement, pour lire une ligne d'un fichier, on utilise read var < fichier. Pour lire un fichier ligne à ligne, on utilise while read var; do echo $var; done < fichier.
touch fich Crée le fichier fich si il n'existait pas.
which cmd Indique le chemin absolue de la commande cmd après avoir recherché cmd dans le PATH.
alias cmd='...' cmd devient un alias pour la commande .... alias sans autres options donnent la liste des alias utilisés par bash.
unalias cmd Supprime l'alias associé à cmd.
source script.sh ou . script.sh Exécute les instructions de script.sh dans le processus courant.

Motifs bash

* N'importe quelle séquence de caractères.
? N'importe quel caractère
[wtz] Le caractère w ou le caractère t ou le caractère z.
[d-r] Tous les caractères compris entre d et r.
[[:lower:]]/[[:upper:]] Alphabet (caractères accentués compris) minuscule/majuscule.
[[:digit:]] Chiffres décimaux.
[[:alpha:]] Tous les caractères alphnumérique, c'est-à-dire toutes les lettres de l'alphabet (caractères accentués compris) et tous les chiffres décimaux.

Système de fichiers

cd [chemin] Positionne le répertoire courant à “chemin” ou au répertoire d'accueil (HomeDirectory) si aucun paramètre n'est donné.
cp f1 f2 Copie le fichier f1 dans le fichier f2. Si f2 existait déjà, son ancien contenu est perdu.
ls [opt] [liste] Pour chaque élément e de liste, affiche le contenu du répertoire e si c'est un répertoire ou le nom du fichier e si c'est un fichier. Un certain nombre d’options peuvent être indiquées (opt). En voici quelques unes :
  • -l: affiche un certain nombre d’informations relatives aux éléments (type, taille, date...).
  • -a: visualise tous les éléments, y compris les fichiers et répertoires cachés (sous Unix, les éléments cachés commencent par le caractère “.”).
  • -d: affiche le nom du répertoire et non son contenu.
tree [chem] Affiche l'arborescence des fichiers accessibles à partir de chem. Si chem n'est pas spécifié, utilise le répertoire courant.
mkdir [opt] rep Crée le répertoire rep dans le répertoire courant. Si l'option -p est passée en argument, les répertoires intermédiaires sont aussi créés.
mv f1 f2 Déplace le fichier f1 dans le fichier f2. Cette commande peut aussi s'appliquer à des répertoires. Si f2 existait déjà, son ancien contenu est perdu. Après l’opération, f1 n’existe plus.
pwd Permet de connaître le chemin absolu du répertoire courant (celui dans lequel on se trouve).
rm f1 Détruit le fichier f1.
rmdir rep Détruit le répertoire rep, à condition que celui-ci soit vide.

Variables notables

HOME Chemin vers le répertoire de connextion.
PS1 Prompt utilisé par bash. Par exemple PS1="\w$ " permet d'avoir un prompt qui indique le répertoire courant.
PS2 Prompt en cas de commandes sur plusieurs lignes.
PATH Liste de chemins séparés par des « : » dans lesquels bash recherche les commandes.

Redirection des entrées-sorties

exec n<> fichier Ouvre le flux de numéro n en écriture à partir de fichier (en écrasant son contenu).
Par exemple : exec 3<>mon-tube.pipe. Dans la suite du script, on peut alors exécuter echo coucou >&3 pour lire une donnée ou read x <&3 pour écrire une donnée.
exec n> fichier Ouvre le flux de numéro n en écriture à partir de fichier (en écrasant son contenu).
exec n>> fichier Ouvre le flux de numéro n en écriture à partir de fichier (en ajout).
exec n< fichier Ouvre le flux de numéro n en lecture à partir de fichier.
cmd >&n Redirige la sortie standard de la commande cmd dans le flux numéro n.
cmd <&n Redirige l'entrée standard de la commande cmd à partir du flux numéro n.
cmd > fichier Ouvre un flux en écriture à partir de fichier (en écrasant son contenu), avant de rediriger la sortie de cmd dans le flux.
cmd >> fichier Ouvre un flux en écriture à partir de fichier (en ajout à la fin), avant de rediriger la sortie de cmd dans le flux.
cmd < fichier Ouvre un flux en lecture à partir de fichier, avant de rediriger l'entrée de cmd à partir du flux.

Processus

; Permet de séparer deux commandes exécutées en séquentiel.
& Exécute la commande à gauche en arrière plan.
$$ Identifiant (PID) du processus en cours d’exécution.
$PPID Identifiant (PID) du processus père du processus en cours d’exécution.
$! Identifiant (PID) du dernier processus lancé en arrière plan.
$? Valeur de retour de la dernière commande exécutée en premier plan.
exit [n] Interrompre l’exécution d’un script avec la valeur de retour n. Par convention, une commande renvoie une valeur différente de 0 en cas d'erreur et 0 sinon.
export var Crée une copie de la variable var lorsque le processus engendre des enfants. La variable sera aussi exportée par les enfants.
wait [n1 n2 ...] Bloque le processus courant tant que les fils dont les identifiants sont passés en paramètre ne sont pas terminés. Si aucun paramètre n’est donné, le processus attend la fin de tous ses fils.
$(xyz) Le shell substitue à $(xyz) le texte produit sur la sortie standard par l’exécution de la commande xyz.
ps [opt] Affiche la liste des processus en cours d'exécution. Un certain nombre d’options peuvent être indiquées (opt). En voici quelques unes :
  • l: affiche un certain nombre d’informations relatives aux éléments (PPID, état, priorité...).
  • e: affiche la liste de tous les processus (pas seulement ceux attachés au terminal courant).
  • u: affiche le nom de l'utilisateur qui a lancé chaque processus.
pstree Affiche l'arborescence des processus.
top Fournie une vue dynamique temps réel des processus en cours d'exécution.

Arguments

$# Nombre de paramètres de la ligne de commande.
$n avec n ∈ [0,9] Valeur du ne paramètre. $0 correspond au nom de la commande invoquée. $n correspond à la chaîne vide s’il y a moins de n paramètres.
"$@" Donne l'ensemble des paramètres à partir de $1 en préservant les espaces à l'intérieur de chaque paramètre. Équivalent à écrire "$1" "$2" ....
shift [n] Décale d’un cran les paramètres du script (pas de valeur n) ou bien de “n crans” (si n est précisé). Par exemple, dans le cas où n n'est pas spécifié, $2 devient $1, $3 devient $2 etc... Le comportement n'est pas spécifié si le nombre de paramètres n'est pas suffisant.

Chaînes et protections de caractères

\x Un \ protège n’importe quel caractère ayant normalement un sens particulier pour le shell. Par exemple, \* est interprété comme le caractère * et non comme le motif *. \\ correspond au caractère \.
"xyz" Protège la chaîne xyz du découpage sur les espaces lors de la séparation des arguments. Empêche l’interprétation des méta-caractères du langage, sauf $, ` et \. En particulier, les variables ($mavar) et les substitutions de commandes ($(xyz)) sont interprétées.
'xyz' Protège la chaîne xyz du découpage, comme les guillemets, mais n’effectue aucune substitution. Aucun caractère autre que ' n’a de sens particulier dans une chaîne entre apostrophes, pas même \.

Tests

[ -z ch1 ] Renvoie vrai si la chaîne de caractères ch1 est vide.
[ -n ch1 ] Renvoie vrai si la chaîne de caractères ch1 est non vide.
[ ch1 = ch2 ] Renvoie vrai si les chaînes de caractères ch1 et ch2 sont égales.
[ ch1 != ch2 ] Renvoie vrai si les chaînes de caractères ch1 et ch2 sont différentes.
[ n1 -eq n2 ] Renvoie vrai si les nombres n1 et n2 sont égaux. Par exemple, [ "01" -eq "1" ] renvoie vrai puisque les nombres sont égaux, alors que [ "01" = "1" ] renvoie faux puisque les chaînes de caractères sont différentes.
[ n1 -ne n2 ] Renvoie vrai si les nombres n1 et n2 sont différents.
[ n1 -lt n2 ] Renvoie vrai si le nombre n1 est strictement inférieur au nombre n2.
[ n1 -le n2 ] Renvoie vrai si le nombre n1 est inférieur ou égal au nombre n2.
[ n1 -gt n2 ] Renvoie vrai si le nombre n1 est strictement supérieur au nombre n2.
[ n1 -ge n2 ] Renvoie vrai si le nombre n1 est supérieur ou égal au nombre n2.
[ -e chemin ] Renvoie vrai si le chemin chemin existe dans le système de fichier (fichier, répertoire, lien symbolique...).
[ -f chemin ] Renvoie vrai si chemin correspond à un fichier.
[ -d chemin ] Renvoie vrai si chemin correspond à un répertoire.
[ -L chemin ] Renvoie vrai si chemin correspond à un lien symbolique.
! test Renvoie vrai si test renvoie faux. Par exemple ! [ 42 -eq 67 ] renvoie vrai.
test1 && test2 Renvoie vrai si test1 et test2 renvoie vrai.
test1 || test2 Renvoie vrai si test1 ou test2 renvoie vrai.

Structures de contrôle

if test1; then corps1 elif test2; then corps2 else corps3 fi Execute corps1 si le test test1 renvoie vrai. Dans le cas où test1 renvoie faux, exécute corps2 si test2 renvoie vrai et corps3 sinon. Les parties elif et else sont optionnelles.
while test; do corps done Execute corps tant que le test test renvoie vrai.
for var in liste; do corps done Pour var prenant successivement les différentes valeurs de la liste (une liste est une suite de mots séparés par des espaces), exécute corps.
case $var in motif1) corps1;; motif2) corps2;; ... motifn) bodyn;; esac Trouve le premier motif correspondant à $var et exécute le corps associé.
( expression ) Permet de regrouper des commandes. Utile pour donner des priorités aux opérateurs !, || et && dans les tests. Par exemple [ 42 -eq 65 ] || ( [ 65 -eq 65 ] && [ 63 -eq 63 ] ) renvoie vrai. Peut aussi être utilisé pour rediriger les entrées/sorties de plusieurs commandes simultanément. Par exemple ( ls; cat /etc/passwd ) > fic

Communication

| Tube de communication anonyme entre deux processus : connecte la sortie standard de la commande de gauche à l’entrée standard de la commande de droite.
kill -sig pid Envoie le signal sig (sig est un numéro ou un nom de signal, avec ou sans le SIG de début de chaîne) au processus d’identifiant pid.
kill –l Donne la liste des signaux (nom et valeur numérique).
mkfifo chemin Crée le tube nommé de nom chemin.
trap [arg] sig Exécute arg lors du traitement du signal sig (sig est un numéro ou un nom de signal, avec ou sans le SIG de début de chaîne). Si arg est une chaîne vide, le signal est ignoré. Si arg est absent, le traitement par défaut du signal est rétabli.