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