Académique Documents
Professionnel Documents
Culture Documents
Thierry Hamon
Bureau H202
Institut Galilée - Université Paris 13
&
LISN - Université Paris-Saclay
hamon@limsi.fr
https://perso.limsi.fr/hamon/Teaching/P13/ProgShell-2021-2022/
1/133
Plan
1 Présentation d’UNIX
2 Utilisation d’UNIX
3 Commandes Unix
4 Jobs UNIX
5 Interpréteurs de commande
6 Shells
7 Structures de contrôle
8 Tableaux
9 Conclusion
2/133
Présentation d’UNIX
UNIX :
Standard pour les systèmes d’exploitation
Disponibilité de nombreux utilitaires de manipulation de
données textuelles
Facilité de communication de données entre différents
programmes
3/133
Présentation d’UNIX
4/133
Présentation d’UNIX - Fichiers
Système de fichiers :
Structure logique permettant la gestion de l’espace disque
Chaque disque logique (partition) possède un système de
fichiers
/usr
/ /home
5/133
Présentation d’UNIX - Fichiers
6/133
Présentation d’UNIX - Fichiers
7/133
Présentation d’UNIX - Fichiers
8/133
Présentation d’UNIX - Fichiers
9/133
Présentation d’UNIX - Fichiers
10/133
Présentation d’UNIX - Fichiers
Chaque fichier :
appartient à un utilisateur (user) et un groupe (group)
possède des droits décrivant leurs modes d’utilisation et
d’accès :
lisible
modifiable
exécutable (pouvant être ouvert, dans le cas d’un répertoire)
11/133
Présentation d’UNIX - Fichiers
12/133
Présentation d’UNIX - Fichiers
13/133
Présentation d’UNIX - Fichiers
Utilisateur Groupe
Type de Droit du
fichier groupe
Droits de Droit des
l’utilisateur autres
14/133
Présentation d’UNIX - Processus
Les processus
15/133
Présentation d’UNIX - Processus
16/133
Présentation d’UNIX - Processus
Organisation
2 types de processus :
processus système : Processus lié au fonctionnement du
système (init, udevd, rpcbind, etc.)
processus utilisateur : exécution d’une commande, d’un
programme ou d’une application (apache, ls, ...)
Organisation des processus selon un arbre hiérachique
La racine : processus init (PID = 1)
Chaque nœud : un processus
Un processus créé est lié à son père (PPID) tant que celui-ci
existe, sinon il est lié au processus de PID 1
17/133
Présentation d’UNIX - Processus
18/133
Présentation d’UNIX - Processus
19/133
Présentation d’UNIX - Signaux
Signaux
20/133
Présentation d’UNIX - Signaux
Signaux
Comportement :
actions prédéfinies (par défaut)
actions redéfinies par le développeur
actions ignorées
Envoi de signaux à partir du terminal : CTRL-C, CTRL-Z, ...
(voir le résultat de la commande stty -a)
21/133
Utilisation d’UNIX
Utilisation d’UNIX
22/133
Utilisation d’UNIX
Connexion et déconnexion
Généralités
23/133
Utilisation d’UNIX
Connexion
Par exemple :
login: hamon <Enter>
Password: ******** <Enter>
24/133
Utilisation d’UNIX
Déconnexion
En mode graphique :
(Variation d’un gestionnaire de fenêtres à un autre)
Dans les menus, demander la déconnexion, et confirmer la
demande
25/133
Utilisation d’UNIX
Multiboot :
Chaque PC possède deux systèmes d’exploitation (sauf les
salles F206 et F207)
Possibilité du choix du système au démarrage
Arrêt : Après s’être déconnecté, dans un menu, cliquez sur
shutdown ou Éteindre
N.B. : Ne jamais arrêter brutalement la machine (sauf en cas
d’extrême nécessité)
Redémarrage (Reboot), 2 possibilités :
Dans un menu, cliquez sur reboot ou Redémarrer
Tapez la séquence de touche : CRTL-ALT-SUPPR
26/133
Utilisation d’UNIX
Editeurs de texte
27/133
Utilisation d’UNIX
28/133
Commandes Unix
29/133
Commandes Unix
commande [argument(s)]
En général :
Lecture des données sur l’entrée standard (par défaut, le clavier)
Écriture des données en sortie sur la sortie standard (par défaut
l’écran)
Écriture des erreurs sur la sortie en erreur standard (par défaut,
l’écran)
30/133
Commandes Unix
ls options répertoires
Options (les plus courantes) :
-a : Affichage des fichiers cachés ou non
-l : Affichage de toutes les informations sur les fichiers (droits
d’accès, propriétaire, taille, dernière date de mise à jour)
Exemple :
ls -l
Affichage à l’écran du contenu du répertoire courant avec les
informations sur les fichiers :
-rw-r--r-- 1 hamon users 902 Nov 25 13:33 exo1.c
drwxrwx--- 2 hamon users 512 Dec 30 10:43 Repertoire1
31/133
Commandes Unix
cd répertoire
Exemple :
cd /home/air/hamon/Repertoire1
Déplacement dans le répertoire /home/air/hamon/Repertoire1
Utilisation particulière :
cd : Retour au répertoire de connexion
cd .. : Retour au répertoire père
cd - : Retour au répertoire précédent
32/133
Commandes Unix
pwd
Exemple :
cd /users/users/hamon/Repertoire1
pwd
Affichage à l’écran :
/users/users/hamon/Repertoire1
33/133
Commandes Unix
34/133
Commandes Unix
35/133
Commandes Unix
Exemples :
cp /etc/fstab .
cp -r rep1 rep2
36/133
Commandes Unix
Déplacement de fichiers
37/133
Commandes Unix
Destruction de fichiers
38/133
Commandes Unix
cat fichier
Affichage du(des) fichier(s) donnés en argument à l’écran (la
sortie standard)
Utiliser pour ajouter plusieurs fichiers les uns à la suite des
autres (concaténation)
Par défaut, la lecture s’effectue sur l’entrée standard et
l’affichage sur la sortie standard
Exemple :
cat /etc/fstab
Affichage à l’écran du contenu du fichier /etc/fstab
39/133
Commandes Unix
40/133
Commandes Unix
Exemples :
head -5 /etc/passwd
Affichage de cinq premières lignes du fichier /etc/passwd
tail -5 /etc/passwd
Affichage de cinq dernières lignes du fichier /etc/passwd
more /etc/passwd
Affichage du fichier /etc/passwd page par page
41/133
Commandes Unix
42/133
Commandes Unix
wc -lwc fichier...
Options :
-l : Affiche que le nombre de lignes
-w : Affiche que le nombre de mots
-c : Affiche que le nombre de caractères
Si aucune option n’est spécifiée, la commande affiche le
nombre de lignes, de mots et de caractères
Exemple :
wc -l /etc/passwd
Affichage du nombre de lignes du fichier /etc/passwd
43/133
Commandes Unix
Substitution de caractères
44/133
Commandes Unix
45/133
Commandes Unix
46/133
Commandes Unix
nature de la modification :
+ ajout du droit
− retrait du droit
= affectation du droit
droit :
r droit en lecture
w droit en écriture
x droit en exécution
47/133
Commandes Unix
Exemples :
chmod g-rw fichier1
chmod -x fichier2
48/133
Commandes Unix
49/133
Commandes Unix
50/133
Commandes Unix
Caractères spéciaux
car signification
. n’importe quel caractère
$ fin de ligne
^ début de ligne
\ caractère de despécialisation
[] groupement exclusif
[^] négation dans les groupements
(|) disjonction sur plusieurs caractères
? 0 ou 1
+ 1 à n
* 0 à n
{n} nombre précis d’occurrences
51/133
Commandes Unix
Grep
Exemples :
grep tcp /etc/service
Sélection des lignes du fichier /etc/services contenant la chaı̂ne
de caractères tcp
grep -c tcp /etc/service
Nombre de lignes du fichier /etc/services contenant la chaı̂ne de
caractères tcp
grep ’[A-Z]’ /etc/passwd
Sélection des lignes du fichier /etc/services contenant un
caractère majuscule
egrep ’(tcp|udp)’ /etc/services
Sélection des lignes du fichier /etc/services contenant les
chaı̂nes de caractères tcp ou udp
52/133
Commandes Unix
sed s/motif/remplacement :
motif : expression régulière (voir grep)
Définition de sous-bloc à l’aide de \( et \) (des sous-blocs
peuvent être imbriqués)
remplacement : chaine remplaçant le motif correspondant
Utilisation des sous-blocs à l’aide de référence \1, \2, ... (dans
l’ordre d’apparition des sous-blocs)
Lecture des données sur l’entrée standard ou d’un fichier
donné en argument
Ecriture sur la sortie standard
NB : perl ou awk peuvent être préférés
53/133
Commandes Unix
54/133
Commandes Unix
55/133
Commandes Unix
Les jobs
Gestion interactive des processus lancés dans un terminal (travaux
ou jobs)
Remarques :
Lors de l’exécution d’une commande ou d’un programme dans
un terminal, le processus associé est en avant plan
Tant que le processus n’est pas terminé, il n’est pas possible
d’accèder à l’interpréteur de commande et de lancer l’excution
d’une nouvelle commande
Le caractère & à la fin de la ligne de commande permet lancer
la commande en arrière plan
Le processus reste associé au terminal (donc les sorties
standards restent l’écran/le terminal)
Basculement en arrière plan pendant l’exécution :
CTRL-Z puis bg
56/133
Jobs UNIX
Les jobs
57/133
Jobs UNIX
Autre commande
58/133
Interpréteurs de commande - Généralités
59/133
Interpréteurs de commande - Généralités
60/133
Interpréteurs de commande - Généralités
Redirection sortante
61/133
Interpréteurs de commande - Généralités
Redirection entrante
Pour que les commandes lisent les données dans un fichier, on peut
utiliser le symbole de redirection entrante <
62/133
Interpréteurs de commande - Généralités
Redirection entrante
Exemples :
tr ’\011’ ’\@’ < fichier.txt
tail < fichier.txt
63/133
Interpréteurs de commande - Généralités
64/133
Interpréteurs de commande - Généralités
Exemples :
ps aux | more
Affichage des résultats de la commande page par page
head fichier1.txt | tail -2
Affichage de la neuvième et de la dixième ligne du fichier
fichier1.txt
65/133
Interpréteurs de commande - Scripts shell
sort $1 | tail
$1 est une variable correspondant au premier argument
66/133
Interpréteurs de commande - Scripts shell
67/133
Shells
68/133
Shells
69/133
Shells - Notions communes
70/133
Shells - Notions communes
71/133
Shells - Commandes
Commandes internes
72/133
Shells - Commandes
Commandes externes
Indépendantes du shell
Identiques quel que soit le shell utilisé
Accès grâce à la variable d’environnement PATH (énumération
d’une liste de répertoires contenant les commandes)
Création d’un nouveau processus à chaque exécution
73/133
Shells - Commandes
74/133
Shells - Initialisation
75/133
Shells - Initialisation
76/133
Shells - Initialisation
Commentaires :
en général, on modifie le fichier $HOME/.bashrc et on peut se
limiter à recharger ce fichier
l’initialisation consiste à positionner des variables
d’environnement, créer des alias ou des fonctions
le rechargement d’un fichier .bashrc ne réinitialise pas
l’environnement mais le fait évoluer
Pour le réinitialiser , il faut ouvrir une nouvelle session ou
un nouveau shell
77/133
Shells - Variables d’environnement
Variables d’environnement
Utilisation par certaines commandes
Exportées vers tous les fils du shell
Initialisation automatique et la valeur ne doit pas être
modifiée : HOME, LOGNAME, USER
Initialisation automatique et la valeur peut être modifiée :
SHELL, PATH, TERM
Initialisation par l’utilisateur dans son fichier .profile ou en
mode interactif : PRINTER, LPDEST
Initialisation :
VARIABLE=valeur
export VARIABLE
export définit la portée de la variable et indique qu’il s’agit
d’une variable d’environnement
78/133
Shells - Variables d’environnement
79/133
Shells - Variables d’environnement
80/133
Shells - Variables d’environnement
81/133
Shells - Variables d’environnement
export JAVA_HOME=/usr/java/jdk-11.0.1
82/133
Shells - Alias
Alias
Objectifs : remplacer une commande par une autre ou
modifier son comportement, abréger une igne de commande
principalement utile dans une session interactive (à éviter dans
un script
Création : alias nom=valeur
Utilisation : nom de l’alias
Suppression : unalias nom
Liste des alias : alias (sans argument)
Exemples :
alias rm=’rm -i’
alias ls=’ls -F’
ls /
83/133
Shells - Caractères spéciaux
Caractères spéciaux
84/133
Shells - Caractères spéciaux
85/133
Shells - Caractères spéciaux
Exemples :
$ echo .b*
.backups .bash_history .bash_logout .bash_profile
.bashrc
$ echo .[bc]*
.backups .bash_history .bash_logout .bash_profile
.bashrc .cshrc .cshrc.home
86/133
Shells - Caractères spéciaux
87/133
Shells - Caractères spéciaux
$ echo ’$HOME’
$HOME
88/133
Shells - Caractères spéciaux
89/133
Shells - Caractères spéciaux
90/133
Shells - Chaı̂nes de caractères
Chaı̂nes de caractères
Shell :
essentiellement, manipulation de chaı̂nes de caractères
or, certains caractères sont utilisés de manière particulière par
le shell (voir précédemment)
nécessité de la mise en place de protection des caractères et
des chaı̂nes de caractères
Nombreuses opérations de manipulation de chaı̂nes de
caractères
91/133
Shells - Chaı̂nes de caractères
92/133
Shells - Chaı̂nes de caractères
Nombreuses opérations :
Longueur d’une chaı̂ne : ${#chaine}
echo ${#HOME}
Extraction d’une sous-chaine :
à partir d’un indice i : ${chaine:i}
ch="12a13b14a15" ; echo ${ch:3}
de taille nà partir d’un indice i : ${chaine:i:n}
ch="12a13b14a15" ; echo ${ch:3:6}
93/133
Shells - Chaı̂nes de caractères
94/133
Shells - Chaı̂nes de caractères
95/133
Shells - Exécution d’un script
Deux manières :
sh fichierscript arg1 arg2
Utilisée lors de la mise au point, avec l’option -x (affichage
des commandes et des arguments)
fichierscript arg1 arg2
Utilisée après mise au point
Positionnement des droits d’exécution
Script placé dans un répertoire défini dans la variable PATH
96/133
Shells - Exécution d’un script
97/133
Shells - Exécution d’un script
98/133
Shells - Exécution d’un script
99/133
Shells - Exécution d’un script
Type d’exécution
100/133
Shells - Exécution d’un script
101/133
Shells - Exécution d’un script
102/133
Shells - Exécution d’un script
Abandon du shell
Réception du signal HANGHUP par la commande en exécution
asynchrone
Masquage possible du signal (et TERM) avec la commande
nohup
Exemple :
$ nohup gcc essai.c -o essai > essai.out 2>&1 &
Terminaux virtuels
Utilisation de la commande screen
103/133
Structures de contrôle
Structures de contrôle
104/133
Structures de contrôle
test (1)
105/133
Structures de contrôle
test (2)
Forme de l’expression :
-f name : vrai si name est
un fichier régulier (sous System V) ;
un fichier au sens large (fichier régulier, fichier spécial bloc ou
caractère, tube nommé) et n’est pas un répertoire
-d name : vraie si name est un répertoire
-c name : vraie si name est un fichier spécial caractère
(System V)
-b name : vraie si name est un fichier spécial bloc (System V)
-g name : vraie si name existe avec le bit sgid positionné
(System V)
106/133
Structures de contrôle
test (3)
107/133
Structures de contrôle
test (4)
108/133
Structures de contrôle
test (5)
Exemple :
if [ -f $1 -o -d $1 ]
then
echo "Le fichier $1 est un fichier regulier
ou un repertoire"
else
echo "Le fichier $1 n’est ni un fichier
regulier ni un repertoire"
fi
109/133
Structures de contrôle
if (1)
Syntaxe :
if condition1
then
if condition
liste des commandes
then
elif condition2
liste des commandes
then
else
liste des commandes
liste des commandes
else
fi
liste des commandes
fi
110/133
Structures de contrôle
if (Exemple)
if test $# != 1
then
echo "Zero ou plusieurs arguments"
else
echo "Un argument : $1"
fi
111/133
Structures de contrôle
112/133
Structures de contrôle
113/133
Structures de contrôle
114/133
Structures de contrôle
case $1 in
Sun) echo "Dimanche";;
Mon) echo "Lundi";;
Tue) echo "Mardi";;
Wed) echo "Mercredi";;
Thu) echo "Jeudi";;
Fri) echo "Vendredi";;
Sat) echo "Samedi";;
*) echo "Jour inconnu";;
esac
115/133
Structures de contrôle
for
Syntaxe :
for identificateur in liste_de_valeurs
do
liste de commandes
done
116/133
Structures de contrôle
for
Exemple :
for i in 1 2 3 4 5
do
echo $i
done
for i in ‘seq 1 5‘
do
echo $i
done
La commande seq permet la génération d’une suite d’entiers
117/133
Structures de contrôle
boucle while
Syntaxe :
while condition
do
liste de commandes
done
Exemple :
i=1
fin=10
while [ $i -le $fin ]
do
echo $i
i=‘expr $i + 1‘
done
118/133
Structures de contrôle
boucle until
Syntaxe :
until condition
do
liste de commandes
done
Exemple :
i=1
until [ $i -gt 10 ]
do
echo $i
i=‘expr $i + 1‘
done
119/133
Structures de contrôle - Fonctions
120/133
Structures de contrôle - Fonctions
Exemples :
function helloworld {
helloworld () {
echo "Hello World"
echo "Hello world $1"
return 0 ;
return 1;
}
}
helloworld titi
helloworld
echo $?
echo $?
121/133
Tableaux
Tableaux : introduction
122/133
Tableaux
Tableaux classiques
Tableau dont les éléments sont indexés par une valeur numérique
Déclaration et initialisation : declare -a nom_tab ou
declare -a nom_tab=(valeur1 valeur2 ...)
Premier indice : 0
declare -a tab1
declare -a tab1=(ener info instru macs tele)
Affichage de la liste des tableaux : declare -a
$ declare -a
declare -a BASH_ARGC=()
declare -a BASH_ARGV=()
...
declare -a tab1=([0]="ener" [1]="info" [2]="instru" [3]="macs" [4]=
123/133
Tableaux
Tableaux classiques
Accès à un élément :
Lecture : ${nom_tab[indice]}
echo "${tab1[0]}"
a=1 ; echo "${tab1[a]}"
Écriture : nom_tab[indice]
tab1[5]=infoa
124/133
Tableaux
Tableaux classiques
125/133
Tableaux
Tableaux classiques
Opérations sur un tableau
Liste des valeurs : ${nom_tab[@]}
NB : éviter ${nom_tab[*]} car une seule chaı̂ne de caractères
for e in "${tab1[@]}" ; do
echo $e
done
Taille : ${#nom_tab[@]}
echo ${#tab1[@]}
Liste des indices : ${!nom_tab[@]}
echo ${!tab1[@]}
126/133
Tableaux
Tableaux classiques
127/133
Tableaux
Tableaux associatifs
Tableau dont les éléments sont indexés par une chaı̂ne de
caractères (clé)
Déclaration et initialisation : declare -A nom_tabA ou
declare -a nom_tabA=([cle1]=valeur1 [cle2]=valeur2 ...)
declare -A tabA1
declare -A tabA1=([France]=33 ["Etats Unis"]=1 [Ukraine]=380)
128/133
Tableaux
Tableaux associatifs
Accès à un élément :
Lecture : ${nom_tabA[cle]}
echo "${tabA1[France]}"
a=France ; echo "${tabA1[$a]}"
Écriture : nom_tabA[cle]
tabA1[Allemagne]=49
129/133
Tableaux
Tableaux associatifs
130/133
Tableaux
Tableaux associatifs
131/133
Tableaux
Tableaux associatifs
Ajout d’éléments :
nom_tabA+=( [cle1]=valeur1 [cle2]=valeur2 ... )
tabA1+=( [Espagne]=34 [Portugal]=351 )
Copie de tableaux :
declare -A nouv_tab puis copie itérative
declare -A tabA2
for c in "${!tabA1[@]}" ; do
tabA2+=( [$c]="${tabA1[$c]}")
done
Suppression de tableaux : unset nom_tabA
unset tabA1
132/133
Conclusion
Conclusion
133/133