Le système Unix - Université Grenoble Alpes

Transcription

Le système Unix - Université Grenoble Alpes
Le système Unix
Université Pierre Mendès France
Introduction (1)
Un peu d'histoire
Conçu pour des mini-ordinateurs au début des années 70 chez
Bell
Conçu par des informaticiens, pour des informaticiens
Conçu pour être évolutif et ouvert
Grande diffusion : moyens et gros systèmes mais aussi petits
systèmes (PC : Linux, SCO, …)
Le système Unix
Aspects utilisateur
Les différentes versions
Versions constructeurs (IBM-AIX, HPUX, Ultrix, …)
BSD et dérivées (SunOS 4.1,…)/Système VR4
Norme POSIX pour l'interface de programmation
1
2
Aspects utilisateur
Le système Unix
Le système Unix
Introduction (2)
Architecture générale d'Unix
Objectif du cours
Interpréteur
Maîtrise d'Unix du point de vue utilisateur
Maîtrise de l'utilisation et de la programmation du langage de
commande (shell)
Bibliographie
Pélissier (C.), Unix : utilisation, administration système et
réseau, Hermès, 1995
Rifflet (J.M.), La programmation sous Unix, EdiScience, 4ème
édition 1998
Rifflet (J.M.), La communication sous Unix : applications
réparties, EdiScience, 2ème édition 1995
S
H
E
L
L
Système
de gestion
de fichiers
(SGF)
Communications
3
l
a
n
g
a
g
e
Noyau
(kernel)
Outils de
développement
Gestion du
système :
resources,
utilisateurs
de
commandes
Aspects utilisateur
Multi-tâches (multiprocessus) et multiutilisateurs
du
Aspects utilisateur
Très grande facilité
d'intégration en
réseau
Interface texte ou
graphique
4
1
Le système Unix
Le système Unix
Plan du cours
SGF : Structure arborescente unique
Le SGF : système de gestion de fichiers
/
Structure arborescente
Utilisateur et protections
Commandes de base
bin
ls
cp
rm
Les processus
etc
passwd
groups
lib
libc.a
libm.a
usr
include
users
stdio.h
stdlib.h
lib man X11
bin
local
gtr
isi
casir
mail
find
Principe, intialisation du système
man1
Le langage de commande
Généralités
Environnement et variables
Composition des commandes
Écriture de scripts : paramètres, structures de contrôle
Fonctions et procédures
1a
2a
strings.3
fopen.3
public
lucien
Fichiers (files)
Dossiers ou répertoires
(directory)
5
Aspects utilisateur
man3
ls.1
cp.1
TP-C
.profile
InfoIndus
Tp1.c
Makefile
Float.s
Float.x
6
Aspects utilisateur
Le système Unix
SGF : Structure unique
Le système Unix
Nom = chemin d'accès (PATH)
Vue logique indépendante de la réalité physique
/
/
bin
ls
cp
rm
usr
bin lib
bin
man
etc
lib include
lib
libc.a
libm.a
users
stdio.h
stdlib.h
1a
2a
profs
users
1a
2a
lucien
/bin/ls
/users/1a
profs
/users/2a/public/entete
lucien
public
/users/2a/lucien/.profile
local
Aspects utilisateur
include
7
Aspects utilisateur
.profile
TP-C
tp1.c
a.out
tp2.c
tp3.c
public
Info-Indus
entete
coureurs.dat
float.s
float.x
float.l
8
2
Le système Unix
L'utilisateur dans l'arborescence
Le système Unix
Noms relatifs
Noms relatifs : ne commencent pas par /
Connexion
Relatifs au répertoire courant (répertoire de travail)
Nom d'utilisateur (identifiant ou login) + mot de passe
Bases de données des utilisateurs : /etc/passwd et /etc/groups
/users/isi/2a
. .
mdupont:x:1001:22:Marie Dupont Miass3:/users/miass3/mdupont:/bin/ksh
pdurand:x:2010:21:Pierre Durand:/users/staff/pdurand:/bin/ksh
Répertoire courant
. .
HOME SWEET HOME
.profile
Répertoire de travail (working directory)
Répertoire de travail par défaut (home directory)
Noms absolus
/bin/ls
/users/isi/2a/lucien/.profile
.
..
tp1.c
a.out
.
..
float.s
float.s
<=>
../TP-C/tp1.c
<=>
../../public/entete <=>
9
Aspects utilisateur
.
..
entete
coureurs.dat
Répertoire père
./float.s
/users/isi/2a/lucien/TP-C/tp1.c
/users/isi/2a/public/entete
10
Aspects utilisateur
Le système Unix
Le système Unix
SGF : caractères spéciaux
SGF : commandes usuelles (1)
Commencent par un point
Aide en ligne
Répertoire courant ( . ), répertoire père ( .. )
Fichiers de paramètres ou de configuration (répertoires)
.profile
.netscape
man <commande>
Ex :
.bashrc
.kde
man ls
man man
Ne sont pas affichés par défaut
Fichiers
Utiliser ls -a
Jokers (wildcard characters)
*
?
Remplace n'importe quelle suite de caractères
Remplace exactement 1 caractère
[c1...cn]
[!c1...cn]
Remplace exactement 1 des caractères c1...cn
Remplace exactement 1 caractère sauf c1...cn
Aspects utilisateur
Démo
affiche le manuel de ls.
affiche le manuel de la commande man.
11
more <fic> ...
RC
affiche la ligne suivante,
SPACE
affiche la page suivante,
b
affiche la page précédente,
/<chaîne>
recherche de <chaîne>
h
permet d'obtenir de l'aide,
q ou Ctrl-C permet d'abandonner l'affichage.
Aspects utilisateur
Démo
12
3
Le système Unix
Le système Unix
SGF : commandes usuelles (2)
SGF : commandes usuelles (3)
Fichiers (suite)
Répertoires (suite)
lp <fic> ...
(line printer)
pwd
(print working directory)
cp <fic1> <fic2>
(copy)
cd <rép>
(change directory)
mkdir <rép> ...
(make directory)
rmdir <rép> ...
(remove directory)
cp <fic> ... <rép>
(move)
mv <fic1> <fic2>
mv <fic> ... <rép>
rm -r <rép> ...
(remove)
rm <fic> ...
aATTENTION, destruction récursive.
aATTENTION, pas de récupération possible.
Divers
Répertoires
clear, who, date, passwd (ou yppasswd)
(list)
ls [ options ] <rép> ...
mail -s <sujet du message> [email protected]
<Texte du message (éventuellement sur plusieurs lignes)
.
(seul sur la ligne, ou Ctrl-D)
Options intéressantes :
-l
-a
-R
format long
tous les fichiers, y compris les cachés (all)
liste récursivement les sous-répertoires.
Démo
Aspects utilisateur
13
Aspects utilisateur
Démo
14
Le système Unix
Le système Unix
SGF : droits d'accès (1)
SGF : droits d'accès (2)
Trois niveaux de protection : UGO
Trois modes d'accès : RWX
ls -l
R : lecture (read), voir le contenu
W : écrire (write), modifier le contenu
X : exécuter (pour un fichier) ou traverser (pour un répertoire)
=>
-rw-r--r-- 1 lucien isi 2566 oct 13 16:52 tp1.c
-rw-r--r-- 1 lucien isi 223 oct 13 16:52 tp1.o
-rwxr-xr-x 1 lucien isi 130 oct 13 16:49 tp1
Type du fichier :
normal
l
lien
d
répertoire
c
pilote car
b
pilote bloc
p
tube nommé
Aspects utilisateur
Modification des droits
-rwxr-xr-x
chown <propriétaire> <fic> ...
(change owner)
chgrp <groupe> <fic> …
(change group)
chmod <mode> <fic> ...
(change mode)
<mode> = 3 chiffres octaux (changement absolu)
chmod 755 monRep
Droits du reste du monde (others)
Droits du groupe (group)
<mode> = [ugo][+-][rwx] (changement relatif)
chmod go-w monRep
Droits de l'utilisateur (user)
15
Aspects utilisateur
Démo
16
4
Le système Unix
Le système Unix
Plan du cours
Processus : principe
Le SGF : système de gestion de fichiers
Unix est multitâches et multi-utilisateurs
Structure arborescente
Utilisateur et protections
Commandes de base
Tâche Unix = processus
Processus = programme en cours d'exécution
Les processus
Aspects dynamiques : évolution temporelle, état
Plusieurs processus peuvent exécuter le même programme
(typiquement un éditeur de textes)
Une application peut être composée de plusieurs processus
Principe, intialisation du système
Le langage de commande
Généralités
Environnement et variables
Composition des commandes
Écriture de scripts : paramètres, structures de contrôle
Fonctions et procédures
Exécution simultanée de plusieurs processus
Pb : avec un seul processeur ?
Utilisation du temps partagé
17
Aspects utilisateur
18
Aspects utilisateur
Le système Unix
Le système Unix
Processus : temps partagé
Processeur. 1
Machine
multiprocesseurs
Processus : cas d'Unix
Tout processus est créé par
un autre processus
Démarrage (bootstrap)
A
B
Processeur. 2
C
Processeur. 3
Création des processus de base
t
Monoprocesseur,
monotâche
A
B
swap
init
PID 0
PID 1
C
xdm
/etc/rc
Processeur
t
/etc/inittab
init
getty
/etc/passwd
sh
Xlogin
Monoprocesseur,
multitâches
Aspects utilisateur
A
B
C
q
q
q
Démons système
Processeur
t
19
Aspects utilisateur
login
.profile
.xinitrc
sh
bash
Processus utilisateurs
Processus utilisateurs
20
5
Le système Unix
Le système Unix
Processus : création
Processus : manipulation
Shell : père des processus utilisateur
Environnement d'exécution
Création : toute commande
Liste des processus en cours
env
stdin
ps
ps -U <utilisateur>
stdout
sh
Autres options : voir manuel
stderr
Lancement en arrière-plan
Commande = processus fils du shell
env
stdin
nedit tp1.c &
Arrêt d'un processus
stdout
(process status)
Placé derrière une
commande, le caractère &
indique au shell de lancer le
processus mais de ne pas
attendre la fin => le shell
rend la main immédiatement
à l'utilisateur.
kill -KILL <N1> <N2> …
sh
Plus généralement, kill permet d'envoyer un signal à un
processus
stderr
kill -SIG <N1> <N2> …
kill -INT 3425
env
ls
Aspects utilisateur
21
Aspects utilisateur
(équivalent de Ctrl-C)
Démo
Le système Unix
22
Le système Unix
Plan du cours
Le shell bash (Bourne again shell)
Le SGF : système de gestion de fichiers
Compatible avec le standard sh
Structure arborescente
Utilisateur et protections
Commandes de base
Peut exécuter des scripts sh, mais l'inverse n'est
pas vrai
C'est le shell de la Free Software Foundation, utilisé
sur Linux
Les processus
Principe, intialisation du système
Extensions utiles
Le langage de commande
Généralités
Environnement et variables
Composition des commandes
Écriture de scripts : paramètres, structures de contrôle
Fonctions et procédures
Aspects utilisateur
Édition des commandes précédentes
Définition de synonymes (alias)
Syntaxe commode pour désigner le répertoire de
travail par défaut (~ et ~utilisateur)
23
Aspects utilisateur
24
6
Le système Unix
Bash : environnement
Bash : variables (1)
Utilisation
Environnement : ensemble de variables
$ env ↵
$nom
Variables publiques
_=/usr/bin/env
PATH=/usr/bin:/usr/local/bin:/users/profs/pdupont/bin:.
EDITOR=/bin/vi
LOGNAME=pdupont
MAIL=/var/mail/pdupont
SHELL=/bin/bash
HOME=/users/profs/pdupont
TERM=vt100
PWD=/users/profs/pdupont
$ set ↵
Le système Unix
Variables publiques et privées
ou
${nom}
Utilisations conditionnelles
${nom:-valeur}
${nom:+valeur}
nom?nom:valeur
nom?valeur:""
Définition
NOM=valeur
Exemple
PS1="Ok."
EDITOR=/bin/emacs
Effacement (rarement utilisé)
unset nom
25
Aspects utilisateur
Aspects utilisateur
Démo
Le système Unix
Le système Unix
Bash : variables (2)
Bash : fonctionnement
Environnement initial
Forme générale d'une commande
Valeurs liées à l'utilisateur : HOME, MAIL, SHELL, …
Valeurs par défaut : PS1, …
Valeurs définies pour tous les utilisateurs : /etc/profile
Valeurs définies par l'utilisateur : $HOME/.profile
26
nom [options]
paramètres ...
La plupart des commandes acceptent une liste non limitée de
paramètres
Le shell lance des sous-processus
Environnements public et privé
Transmission de l'environnement public
Affectation à l'identique des flots d'E/S
Privé par défaut
Environnement public transmis aux sous-processus (fils)
Publication grâce à export
Rôle du PATH
/bin:/usr/bin:/usr/local/bin
MANPATH=/usr/man:/usr/local/man
export MANPATH
Modification du PATH (dans $HOME/.profile)
PATH=$HOME/bin:$PATH
export MANPATH=/usr/man:/usr/local/man
Aspects utilisateur
27
Aspects utilisateur
28
7
Le système Unix
Le système Unix
Bash : composition des commandes
Bash : redirection des E/S
Toute commande Unix retourne une valeur :
Sorties (>, 2>, >>, 2>>)
0
≠ 0
Flots stdout (descripteur 1) et stderr (descripteur 2)
si tout s'est déroulé normalement
en cas d'erreur
Une commande peut être vue comme un prédicat : VRAI (0) si tout
c'est bien passé et FAUX (≠ 0) en cas d'erreur
Composition séquentielle simple ( ; )
$ ls *.c > liste ↵
$ cat *.c > tous_les_programmes ↵
$ cc -o tp tp.c 2> erreurs ↵
Entrées (<, <<)
$ cp f1 f2 ; mv f2 toto ↵
Flot stdin, descripteur de fichier n° 0
Composition conditionnelle EtAlors ( && )
$ sort < atrier ↵
$ mail -s "Sujet du message" durand < message ↵
$ cc -o prog prog.c && prog ↵
Redirection jusqu'à une certaine chaîne
Composition conditionnelle OuSinon ( || )
$ cc -o prog prog.c || echo "Erreurs !"
Lancement en arrière plan (background) ( & )
Pb : les sorties des processus d'arrière-plan apparaissent sur l'écran
29
Aspects utilisateur
$ mail -s Sujet martin << --FIN-- ↵
Bonjour, ↵
Ceci est le corps du message, il se ↵
termine avec la ligne suivante : ↵
--FIN-- ↵
Démo
Aspects utilisateur
30
Le système Unix
Le système Unix
Bash : tubes
Bash : caractères spéciaux, substitution
Tubes ( | )
Noms de fichiers (jokers : *, ?, …)
C'est le shell qui génère les listes de fichier, les commandes ne
voient pas les caractères jokers
Essayer ls '*.c'
Redirection de la sortie d'une commande sur l'entrée d'une
autre
$ ls -C | more ↵
Variables ($nom)
echo $PATH
ou
echo $HOME
Résultat d'une commande (`` ou $())
Le résultat de la commande remplace la commande sur la ligne
Très utile avec des commandes comme find
rm `find . -name '*.o' -print`
Masquage des caractères spéciaux ('', "", \)
\c
"<chaîne>"
'<chaîne>'
more
Aspects utilisateur
Démo
31
Aspects utilisateur
masque un caractère
masque les caractères *,? mais pas $ ni ``
masque tout
Démo
32
8
Le système Unix
Le système Unix
Bash : écriture d'un script
Bash : entrées et sorties
Script = programme shell = fichier texte
Sorties : echo
Création avec votre éditeur de texte favori (nedit, grasp, emacs, vi)
echo : utilise les séquences d'échappement (avec l'option -e)
Commentaires (# … ↵)
echo
echo
echo
echo
echo
#Ceci est un commentaire
Exécution : lancement d'un shell
$ bash qui ↵
$ bash < qui ↵
ou
Donner au fichier le droit d'exécution, ensuite on peut le lancer
Entrées : read
$ chmod +x qui ↵
$ qui ↵
Le mot Unix : toute chaîne ne contenant ni blanc, ni tabulation, ni saut
de ligne (retour chariot).
Lancement d'un sous-shell pour exécuter les commandes de qui.
read var1 var2 ... varN
Première ligne : choix du programme d'interprétation
lit les N prochains mots et les affecte aux variables var1, var2, ...
Si le paramètre effectif est absent, la variable contient la chaîne vide
("")
S'il y a plus de paramètres effectifs que de variables, c'est la dernière
(varN) qui contient les N+x derniers mots
#!/bin/csh
Fin de l'exécution
Fin du fichier ou commande exit
exit N
#N : code de retour, 0 ok, ≠0 erreur
Démo
Aspects utilisateur
Bonjour
-e "\nSur 3 lignes\n"
-e "Sur une seule\c"
"ligne"
-e "\aErreur\a"
33
34
Aspects utilisateur
Le système Unix
Bash : paramètres
Le système Unix
Bash : variables spéciales
Paramètres ($1, $2, ..., $9)
Démo
Mots Unix donnés sur la ligne de commande (chaînes de caractères)
Accessibles par leur position grâce aux variables spéciales $1 à $9
Accès à plus de 9 paramètres
Utilisation de la forme spéciale de l'instruction for
Utilisation de la commande shift
N
ZZ
N-1
ZY
$ prog AA AB AC AD … ZY ZZ
Quelques variables spéciales
$#
$$
$!
$*
$@
nombre de paramètres effectifs
n° du processus shell en cours
n° du dernier processus lancé en arrière-plan
équivalent à "$1 $2 ... $N" (1 mot)
équivalent à "$1" "$2" ... "$N" (N mots)
$9
$9
shift
Aspects utilisateur
4
AD
3
AC
$3
$2
2
AB
$2
$1
1
AA
$1
$3
35
Aspects utilisateur
36
9
Le système Unix
Le système Unix
Bash : expressions conditionnelles
Bash : expressions conditionnelles
Toute commande Unix (0 = VRAI, ≠ 0 = FAUX)
Commande test (extrait)
Commande test (extrait)
Fichiers : FAUX si <fichier> n'existe pas
test
test
test
test
test
test
-r
-w
-x
-f
-d
-s
<fichier>
<fichier>
<fichier>
<fichier>
<fichier>
<fichier>
VRAI si <fichier> est lisible
VRAI si <fichier> peut être écrit
VRAI si <fichier> est exécutable
VRAI si <fichier> est normal
VRAI si <fichier> est un répertoire
VRAI si <fichier> a une taille > 0
Chaînes
test
test
test
test
<ch1> = <ch2>
<ch1> != <ch2>
-z <ch>
VRAI si <ch>
-n <ch>
VRAI si <ch>
Nombres (qui sont des chaînes !)
test <n1> -eq <n2> VRAI si <n1> = <n2>
(on a aussi -ne, -gt, -ge, -lt, -le)
Exemple
test "01" = "1"
==>
FAUX
test "01" -eq "1"
==>
VRAI
Composition d'expressions
-a (et)
-o (ou)
! (négation)
( <expr> )
Facilité syntaxique
test <expresssion>
test -r tp1.c
= ""
!= ""
37
Aspects utilisateur
<==>
<==>
[ <expression> ]
[ -r tp1.c ]
38
Aspects utilisateur
Le système Unix
Bash : conditionnelle
if <commande>
then
<instruction>
fi
if <commande>
then
<inst1>
else
<inst2>
fi
if test $# -eq 0
then
echo Pas de paramètres
fi
Aspects utilisateur
Le système Unix
Bash : itérations
if <com1>
then
<inst1>
elif <com2>
<inst2>
...
else
<instN>
fi
while <commande>
do
<instructions>
done
while [ -r "$1" ]
do
cat $1 >> liste
shift
done
for <var> [ in <liste> ]
do
<instructions>
done
if cc -o tp tp.c
then
tp
else
echo Erreurs...
fi
until <commande>
do
<instructions>
done
39
Aspects utilisateur
until [ ! -r "$1" ]
do
cat $1 >> liste
shift
done
for f in tp1.c tp2.c
do
cc -c $f 2> trace
done
for f in *.c
do
cc -c $f 2> trace
done
echo "Paramètres :"
for f
do
echo $f
done
40
10
Le système Unix
Le système Unix
Bash : branchement sélectif
Bash : fonctions et procédures (1)
Syntaxe
Regroupement de commandes
case $<nom>
<sch11> [
<sch21> [
...
<schM1> [
esac
in
| <sch12>... | <sch1K> ] ) <inst1> ;;
| <sch22>... | <sch2L> ] ) <inst2> ;;
...
| <schM2>... | <schMN> ] ) <instM> ;;
Les schémas sont des chaînes de caractères pouvant contenir
les caractères spéciaux du shell (expressions régulières).
case $f in
*.c | *.cpp )
compile -c $f ;;
[Mn]*.h ) mv $f ../include ;;
* )
echo "Je ne sais pas quoi faire avec $f";;
esac
41
Aspects utilisateur
Dans un sous-shell : ()
(cd /users/2a ; ls -l)
Dans le même shell : {}
On peut aussi rediriger toutes les sorties
{ date ; ls ; who } > toto
Définition d'une fonction = bloc nommé
nom ()
{
instructions ...
return valeur
}
function nom ()
{
instructions ...
return valeur
}
Utilisation d'une fonction
nom param1 param2 ... paramN
Paramètres : comme les paramètres du shell, donc ceux du shell
englobant ne sont plus accessibles
42
Aspects utilisateur
Le système Unix
Bash : fonctions et procédures (2)
Bash : divers (1)
Sortie brutale : exit
stat()
{
if [-d "$1" ]
then
echo "$1 est un répertoire"
return 0
else
echo "$1 n'est pas un répertoire"
return 1
fi
}
stat /tmp
stat $dir
stat $1
Aspects utilisateur
Le système Unix
if [ $# -ne 2 ] ; then
echo Usage : prog fichier ; exit 1 ; fi
Historique et édition des commandes précédentes
Navigation dans les commandes :
ou Ctrl-P (previous)
ou Ctrl-N (next)
commande précédente
commande suivante
Édition d'une commande :
ou Ctrl-B
ou Ctrl-F
⌫ ou Ctrl-H
Suppr ou Ctrl-D
Ctrl-A
Ctrl-E
!<chaîne>
retourne 0
dépend de la valeur de $dir
$1 ici : celui du shell principal
43
Aspects utilisateur
(backward)
(forward)
(delete backward)
(delete forward)
début de ligne
fin de ligne
relance la dernière commande
commençant par <chaîne>
44
11
Le système Unix
Bash : divers (2)
Quelques commandes très utiles en
programmation
Utilisateurs : passwd, who, w, mailx ou mail, write
Recherche de fichiers ayant certaines propriétés : find
Recherche de chaînes dans des fichiers : fgrep, grep, egrep
Processus : ps, kill
Information sur les comptes utilisateurs : finger
Manipulations de textes : cut, wc, more, sort, uniq, ...
Information sur le type des fichiers : file
Outils plus complets : sed, awk, perl
Aspects utilisateur
45
12