03/09/07l3/unix1 pratique dunix introduction aux systèmes dexploitation de type unix licence l3...
TRANSCRIPT
03/09/07 L3/unix 1
Pratique d’Unix introduction aux systèmes d’exploitation de type Unix
Licence L3 (S5)
Benjamin Quétier
½ ATER, Université Paris-Sud XI
03/09/07 L3/unix 2
Organisation du module• Objectif :
– Cours (3*1h45): • Comprendre le fonctionnement d’un OS• Apprendre les commandes et outils utiles• Savoir se débrouiller (i.e. expliquer un problème, chercher la solution)
– TP (5*4h):• Pratique du système• Langage Shell• Langage Python• Outils pour la programmation
• Evaluation: – Un partiel sur feuille au TP3– Dernier TP : moitié TP, moitié examen sur machine (2h)
• Matériel : Linux/PC (licence) ; Solaris/SUN (miage)
03/09/07 L3/unix 3
Plan du cours
1. Rappel d’architecture
2. Système d’exploitation: introduction
3. Présentation des systèmes Unix et affiliés
4. Premier contact
5. Système de fichiers
6. Processus
7. Notion de réseau
8. Programmation sous Unix
9. Outils pour la programmation
03/09/07 L3/unix 4
1. Architecture (rappel)
03/09/07 L3/unix 5
Architecture d’un ordinateur (1)
Mémoire
Stockage
Périphériques E/S
Bus
CPU
03/09/07 L3/unix 6
Architecture d’un ordinateur (2)
• micro-processeur (CPU): unité de contrôle– Registres, Unité arithmétique et logique (ALU), caches, ...– Architecture multi-threading, multi-core, multi-processeurs, ...
• Mémoire principale – Mémoire « vive », RAM
• Mémoire cache• Mémoire « secondaire »
– Souvent, disques durs. Généralement, d’accès séquentiel.
• Contrôleur de périphériques– Permet d’accéder aux périphériques de manière transparente
• Bus de communication– Bus de données– Bus d’adresse– Bus de commande
03/09/07 L3/unix 7
Architecture d’un ordinateur (3)
• Interruptions– Matérielle : périphériques vers processeur
– Logicielle : processeur vers processeur
• Modes noyau et utilisateur– Permet de restreindre les possibilités d’action
– Mode noyau : aucun contrôle
– Mode utilisateur : possibilité réduite
=> Comment utiliser un ordinateur?
03/09/07 L3/unix 8
2. Système d’exploitation
03/09/07 L3/unix 9
Rôle de l’OS
matériel
noyauapplications
Shell/Interfaces
03/09/07 L3/unix 10
Définitions
• Système d’exploitation ou OS (Operating System) • Ensemble de programmes et de librairies• Deux fonctions:
– Interface standard entre l’utilisateur et la machine
– Gestion des ressources• Gestion mémoire vive
• Accès aux périphériques
• Gestion espace disque
• Gestion des programmes et processus
• Gestion des droits d’accès
03/09/07 L3/unix 11
Classification• Par session :
– système conversationnels (Unix, Windows, MacOSX, etc)
– système transactionnels (billet avion)
• Par requête :– machine temps réel, garantie de services.
• Par travaux (batch) : – traitement par lots (machines de calcul; mise a jour BD).
• Mono-tâche / multi-tâches• Mono-utilisateur / Multi-utilisateurs• Mono-processeurs / Multi-processeurs• Manipulation des données / développement des programmes.• Qualité d’un OS :
– Fiabilité, Efficacité, Facilité d’emploi, Adaptabilité, Mesurabilité (historique/monitoring).
03/09/07 L3/unix 12
Quelques OS• Microsoft Windows XP et Windows NT
– Interface graphique, logithèque très complète, facile d’utilisation.
– Payant, propriétaire, très gourmand en mémoire.
• Unix– Très stable, multi-utilisateurs par essence
– Lourd, parfois payant.
• Linux– Interface graphique, communauté très active, très bons outils de
développement, gratuit et ouvert, logithèque en perpétuelle augmentation.
– Derniers matériels pas toujours supportés, manque quelques logiciels.
• MacOS X (Apple, basé sur BSD)– Interface graphique, très facile d’utilisation, très fiable, basé sur UNIX
– Payant, propriétaire.
03/09/07 L3/unix 13
3. Unix et Linux
03/09/07 L3/unix 14
Unix : caractéristiques
• Ecrit à 98% en langage C, portable.• Origine dans années 1970 par AT&T et Berkeley• Norme POSIX de certification des systèmes UNIX• Enormément de versions
– LINUX, HP/UX, AIX, SOLARIS, IRIX, MAC OS X, …
• Caractéristiques:– Multi-tâches
– Multi-utilisateurs
– Sécurité (fonction et appartenance des fichiers et répertoires)
– Indépendance des périphériques (notion de device)
03/09/07 L3/unix 15
03/09/07 L3/unix 16
Historique• 1965: Multics (MIT, Bell Labs, General Electrics)• 1978: ATT commercialise Unix Système 7• 1979: L’université de Berkeley distribue gratuitement
BSD (Berkeley Software Distribution)• 1983: ATT System V vs. BSD 4.2• 1984: GNU (Richard Stallman, MIT)• 1987: X-Windows (MIT) - première GUI• 1991: naissance de LINUX (Linus Torvald)• 2001: Mac OS X (basé sur BSD)• Aujourd’hui :
– Linux (soutenu par IBM, Sun, HP, Novell, etc.), nombreuses distributions (mandriva, ubuntu, debian, etc.)
– Autres Unix gratuit, voire open-source: OpenBSD, …– Autres Unix propriétaires: Mac OS X, Solaris/Sun, HP/UX, AIX/IBM, …
03/09/07 L3/unix 17
Unix : avantages & inconvénients
• Avantages– Très fiable
– Multi-plateformes
– Gestion de tous les services (mail, Web, FTP, compilateurs, administration, etc.)
– Logithèque très vaste et comprenant de nbx free/sharewares
– Plusieurs interfaces graphiques et shells disponibles.
• Inconvénients– Trop de standard (=> portage difficile)
– Administration lourde et complexe
– Le shell fait peur
03/09/07 L3/unix 18
GNU/Linux• Pour l’utilisateur:
– Gratuit et ouvert, disponible en ligne
– Facile à installer, convivial, complet dès l’installation
– Réactivité de la communauté (pilotes matériel)
– Multiples interfaces graphiques utilisateur
– Logithèque très complète (et souvent gratuite)• Ex.: OpenOffice (equiv. Word/Excel), Gimp (equiv. Photoshop), Oracle
(payant, par contre - des alternatives gratuites existent en standard), etc.
• Pour les entreprises– Distribués aussi par des grandes entreprises : IBM, SGI, ...
– Spécialisable : clusters, serveurs web, serveurs base de données, ...
– Très stable
=> Linux est une véritable alternative aux OS commerciaux
03/09/07 L3/unix 19
4. Premier contact avec Unix
03/09/07 L3/unix 20
Accéder à la machine
[Rappel] Unix est un OS multi-utilisateurs. I.e. plusieurs utilisateurs peuvent utiliser le même ordinateur (directement ou via des connexions distantes), parfois en même temps.
• Cela implique– D’identifier l'utilisateur et lui donner accès a un espace privé;
• Notion de comptes utilisateurs
– De garantir la sécurité des données et du système.• Notion de droits d’accès
03/09/07 L3/unix 21
1ère étape : connexion• Le premier écran que l’on voit sous Unix permet de se connecter
(« log in »). Son rôle : identifier l’utilisateur et ouvrir sa session.
• Une authentification = couple (login/password)
Exemple de login:login: quetier
Password: ********
Généralement votre nom
Un mot de passe COMPLIQUÉ!
03/09/07 L3/unix 22
authentification (login/password) (1/3)
• Préalable obligatoire: avoir un compte
• Par défaut, il existe toujours un compte spécial: root – root = super-utilisateur
– C’est l’administrateur du système, il a tous les droits, il peut effectuer toutes les opérations de maintenance, mises à jour, et installations de produits...
– Généralement, vous ne connaissez pas son mot de passe (sauf s’il s’agit de votre ordinateur installé par vos soin)
=> Il faut généralement aller voir l’administrateur système pour obtenir un compte utilisateur.
03/09/07 L3/unix 23
authentification (login/password) (2/3)
Connexion en 6 étapes:
1 Demande du login: login: quetier
2 Demande du mot de passe:
Password: -m0nm0d3Pa#,
3 Cryptage du mot de passe (algorithme MD5 ou autre) : -m0nm0d3Pa#, -> NWI0nnniSjo59
03/09/07 L3/unix 24
4 Comparaison de la chaîne cryptée avec le mot de passe crypté mémorisé quelque part sur le disque lors de l'ouverture du compte par root ou du dernier changement de mot de passe fait par l’utilisateur.
exemple de compte (ligne du fichier /etc/shadow) : quetier:$1$b5O1vEF9$azeqEEncTwTjBywt/N6BN/:13626:0:99999:7:::
5 Comparaison des deux chaînes de caractères, et si elles sont identiques, c’est bon ; sinon re-demande de login.
6 Un environnement graphique est lancé (KDE, Gnome, etc.)
authentification (login/password) (3/3)
03/09/07 L3/unix 25
2ème étape: accès aux ressources• Via l’interface graphique
– De nombreux outils d’administration existent– Plus facile mais moins proche de la machine
• Via un terminal– Un terminal donne accès à un shell ;– Le shell est un interpréteur de commandes qui passe
son temps à attendre qu'on lui donne quelque chose à faire (via le clavier);
– Le shell permet d'accéder directement ou indirectement aux ressources de la machine (disque, périphériques) via des commandes;
– Intérêt: plus puissant / modulaire / rapide / universel
=> Au cours de ce module, on présentera les principes et les commandes
03/09/07 L3/unix 26
Shell– Pendant qu'il attend, le shell affiche un prompt pour montrer
qu'il est prêt a recevoir une commande;
– Il existe plusieurs shells, parmi les plus connus: sh, csh, ksh, tcsh, bash... Chacun avec leurs points forts et leurs points faibles.
login@nomordi:chemin$
03/09/07 L3/unix 27
Syntaxe d’une commande
• La syntaxe générale d'une commande est de la forme: commande [option(s)] [argument(s)]
• Une commande permet d’agir sur le système, au sens large – ex : administration, lancement de programme, ...
• Une commande peut (ou non) avoir des options et/ou arguments.exemples: quetier@laptiptop ~ % logout
… <clos la session du terminal> quetier@laptiptop ~ % ls -la
… <liste le contenu du répertoire courant avec détails et fichiers cachés>
03/09/07 L3/unix 28
Exemple 1 : uname• uname permet d’afficher des informations sur la machine• L’option « -a » permet de demander un affichage détaillé
Exemples:
quetier@laptiptop:~$ uname -aLinux laptiptop 2.6.20-16-generic #2 SMP Thu Jun 7 20:19:32 UTC 2007 i686 GNU/Linux
acces*/users/archi/quetier >uname -aLinux acces 2.4.28 #3 SMP Mon May 9 16:09:55 CEST 2005 i686 GNU/Linux
lri7-236:thomasherault 09:07$ uname -aDarwin lri7-236.lri.fr 8.10.1 Darwin Kernel Version 8.10.1: Wed May 23 16:33:00 PDT 2007; root:xnu-792.22.5~1/RELEASE_I386 i386 i386
03/09/07 L3/unix 29
Exemple 2 : man
prague ~ % man unameReformatting page. Wait... Done
User Commandsuname(1)
NAMEuname - print name of current system
SYNOPSISuname [ -aimnprsvX ]
DESCRIPTIONThe uname utility prints information about the current system on the standard output. When options are…
OPTIONSThe following options are supported:
-a Print basic information currently available from the system(…)
• man (=manual) permet d’afficher l’aide sur une commandeExemple:
La commande
ultime
03/09/07 L3/unix 30
5. Système de fichiers
03/09/07 L3/unix 31
Stockage des fichiers
• Périphériques de stockage– disques durs, cd-roms, dvd, bandes, ...
– Permettent de stocker (principalement) des fichiers
• Disques durs, qu’est ce que c’est?– Un ensemble de blocs de même taille (p.ex. 512 octets) chacun
référencé par un numéro
– Les disques durs ne connaissent pas la notion de fichiers
• Un fichier, qu’est ce que c’est?– Suite d’octets représentant des données (programme, texte,
musique, etc.)
03/09/07 L3/unix 32
Le système de fichiers (1)• Rôle principal :
– Stocke et organise les fichiers sur les périphériques de stockage – Du point de vue de l’utilisateur: organise les fichiers dans des répertoires
• Métaphore : – organiser des « feuilles » dans des « classeurs »– Un classeur peut contenir une ou plusieurs feuilles ou classeurs
Repertoire1
Repertoire2
Repertoire3
fichier2
Repertoire4
fichier1
fichier3
/
03/09/07 L3/unix 33
Le système de fichiers (2)• Le système réserve une place pour
– Les méta-données : • Caractéristiques du système de fichier
• Caractéristiques de chaque fichier (localisation, type, droits, …)
• État des blocs (libre ou alloué)
• Nombre de fichiers
– Les données : fichiers et répertoires effectivement stockés• Reparties en clusters sur le disque (un cluster regroupe plusieurs blocs)
• Le système de fichier offre– Des services de base
• Ouverture, création, écriture, lecture, déplacement, fermeture, suppression, modification des fichiers et répertoires;
– Des services supplémentaires • Changements des droits, verrouillage, quota, liens, etc.
=> En pratique, plusieurs systèmes de fichiers sont disponibles (Ext3, FAT32, HFS, etc.)
03/09/07 L3/unix 34
Référencement dans l’arborescence• chemin absolu:
– Commence par un « / »– chemin donné à partir de la racine– exemple: /Repertoire1/
• répertoire courant: – « . » : endroit ou l'on se trouve
• répertoire père du répertoire courant: – « .. » : répertoire contenant le répertoire courant– Repertoire1 est le père de Repertoire2
• chemin relatif– Toujours p/r au répertoire courant. – Exemple: Depuis Repertoire4, ../../Repertoire2
donne le chemin relatif de Repertoire2– Note: en absolu, cela correspond à
/Repertoire1/Repertoire2
• Répertoire « home » – « ~ »– c'est l'endroit ou ou le shell est lancé lorsque la phase
d'authentification est terminée.
Repertoire1
Repertoire2
Repertoire3
fichier2
Repertoire4
fichier1
fichier3
/
03/09/07 L3/unix 35
Commandes : arborescence• Changement de répertoire?
– Commande cd– exemples:
cd ~cd /Repertoire1/Repertoire2cd ../../
• Ou suis-je ?– Commande pwd– exemple:
cartan ~ %pwd/users/sys/gemmerle
• Qu’y a t'il ici ou la? – Commande ls– exemple:
lsls -lals /Repertoire1
Repertoire1
Repertoire2
Repertoire3
fichier2
Repertoire4
fichier1
fichier3
/
03/09/07 L3/unix 36
Commandes sur répertoires
• Manipulation de répertoire– cd : se déplace vers un répertoire cible (change dir.)
– pwd : donne l’emplacement courant
– ls : donne le contenu du répertoire• « ls -a » => affiche aussi les fichiers cachés
– mkdir : crée un répertoire (make dir.)
– rmdir : efface un répertoire vide (remove dir.)
03/09/07 L3/unix 37
Commandes sur fichiers
• Manipulation de fichiers– cat : liste le contenu d’un fichier
– rm : efface un fichier (remove)
– cp : copie un fichier d’un emplacement à un autre (copy)
– mv : deplace un fichier d’un emplacement à un autre (move)
– ln : crée un lien vers un fichier• « ln -s repertoireAlier nomdulien »
03/09/07 L3/unix 38
Commandes sur disques• df : donne taux d’occupation d’un disque
prague ~ % df -k Filesystem kbytes used avail capacity Mounted on/dev/dsk/c0t3d0s0 192807 29877 143650 18% //dev/dsk/c0t3d0s1 962582 601649 303179 67% /usr/dev/dsk/c0t3d0s3 96031 48279 38149 56% /var/dev/dsk/c0t3d0s5 192807 411 173116 1% /tmp/dev/dsk/c0t4d0s3 4124422 3636899 446279 90% /global/new-binantares2:/global/solaris 6278120 5575282 640057 90% /local/biniecn
• du : place occupée (ATTENTION à l’unité) prague /usr % du -k bin include kernel lib
26527 bin 6120 include 1770 kernel 90326 lib
Ou encore, option « -h » : « human readable»
03/09/07 L3/unix 39
Arborescence typique sous Unix
bin lib etc tmp usr dev varhome lost+found
bin lib man include spool adm log
mail printer
Comment garantir l’intégrité de tout ça…? => les droits
03/09/07 L3/unix 40
Droits d'accès (1)• Constat
– Chaque utilisateur à un répertoire personnel– Le disque contient aussi des données système Comment assurer la protection des données?
• Notions de droits d’accès– Trois niveaux : propriétaire (User) ; groupe (Group) ; autre (Other)– Trois options : lecture (Read), ecriture (Write), exécution (eXecute)– Options spéciales : setUID, setGID, sticky– La commande « ls -l » permet de voir les droits
prague ~ % ls -la /etc/passwd-rwxr-xr-- root other 311 Aug 10 2006 /etc/passwd
=> « Le fichier passwd dans le répertoire /etc peut être lu/modifié/exécuter par le super-utilisateur, lu et exécuté par les membres du groupe other et juste lu par tous les autres utilisateurs. »
03/09/07 L3/unix 41
Droits d'accès (2)- Exemples :
- « -rwxrwxrwx »- « drwx______ »- « -rwxr_xr_x »- « -rw_r__r__ »
- Interprétation :- type du nœud [1 caractère]
- « - » : fichier, « d » : répertoire, « l » : lien
- droits du propriétaire / « user » [3 caractères] - read/write/execute
- droits du groupe / « group » [3 caractères] - read/write/execute
- droits des autres / « other » [3 caractères] - read/write/execute
03/09/07 L3/unix 42
Commandes : Modification des droits (1/2)
• La commande: chmod (change mode)
• Première méthode: numérique– on considère « rwx » comme un nombre binaire
• exemples: – rwx => 7
– r-x => 5
– rw- => 6
– --x => 1
• Exemple: – pour mettre les droits rwxr_xr__ sur /etc/passwd :
• « chmod 754 /etc/passwd »
03/09/07 L3/unix 43
Commandes : Modification des droits (2/2)
• Deuxième méthode: u: représente le propriétaire (user) g: représente le group o: représente les autres a: représente tout le monde: (u,g et o) +: représente la permission -: représente l'interdiction r: read permission w: write permission x: execute permission
pour l'exemple précédent: chmod a+r,u+w,u+x,g-w,g+x,o-w,o-x /etc/passwd
• Règle générale: – La première méthode pour fixer des droits initiaux, la deuxième pour
modifier.
03/09/07 L3/unix 44
Commandes sur les droits d’un nœud
• Chown– changer le propriétaire d'un fichier
• Chgrp– changer le groupe d'un fichier
• Newgrp (pas très utile)– passer d'un groupe à un autre lorsque un utilisateur
appartient à plusieurs groupes (attention différences entre SYSV et BSD).
03/09/07 L3/unix 45
6. Les Processus
03/09/07 L3/unix 46
Processus (1)
• Un Unix est une machine généralement pseudo multi-taches - Chaque tache est appelée processus - le processeur s'occupe tour a tour d'exécuter une partie d’un processus, durant un temps donné (quantum).
• Au démarrage de la machine, un processus père de tout le monde est lance: init (numéro 1).
• A partir des informations contenues sur le disque de boot le processus init lance d'autres processus pour mettre en route les services disponibles sur la machine.
Lexique : CPU (Central Processing Unit)
03/09/07 L3/unix 47
Processus• « Processus » :
– Unix est un système multi-tâche préemptif– Un processus est une abstraction d’un programme en cours
d’exécution• Lié à la notion de temps partagé :
– Ordonnancement / scheduler ; politique d’ordonnancement Par tourniquet / priorité / durée variable (quantum diff. selon processus)
– Context switching entre processus (sur interruption)
– Un processus c’est: programme + espace mémoire ( + d'autres ressoussorces)
– Un processus à plusieurs états possibles
nouveau en exécution
prêt
stoppé
En attente (suspendu)terminé
03/09/07 L3/unix 48
Processus (2) : caractéristiques• Un processus est identifié par un numéro unique:
– « PID » : Processus IDentifier • Il est attribué au lancement du processus• Il est unique pour la session• Il peut être différent d’une session à l’autre• Exemple : 4134, 14, etc.
• Arborescence de processus– Notion de filiation entre processus
– Le processus « init » est le seul sans père– Un shell est un processus, dont le père est la session– Tous programmes lancés depuis un shell à (par défaut) celui-ci pour père
• Priorité des processus– La priorité d’un processus varie entre -19 (prioritaire) et +20 (non prioritaire)– Cela détermine le temps processeur alloué à chaque processus
03/09/07 L3/unix 49
Processus: lancement• <commande>
– on récupère la main une fois que c'est fini
• <commande_1> ; <commande_2>; ... ; <commande_i>– les commandes sont exécutées séquentiellement
• (<commande>)– la commande est exécutée par un sous-processus– exemple:
cd /etc/src (cd /var/yp ; make) pwd -> /etc/src
• commande & – commande mise en tache de fond (i.e. détachée du terminal qui la lance)– exemple: « emacs & » – On peut faire la même chose avec :
• « emacs » => ctrl+Z => bg
03/09/07 L3/unix 50
Interface d’un processus
• Tout programme Unix, dès son lancement, possède 3 fichiers ouverts :– L’entrée standard (stdin ou fichier &0)
– La sortie standard (stdout ou fichier &1)
– La sortie erreur (stderr ou fichier &2)
processusstdin
stdout
stderr
03/09/07 L3/unix 51
Processus: redirections et comm. (1/2)
• Il est possible de rediriger les E/S depuis/vers des fichiers…– Opérateurs de redirection : <, >, >>, 2>
– Exemple : « ls -l > contenudufichier.txt »
• Opérateurs de redirections :– commande > <fichier>
• la sortie standard est redirigée dans <fichier> (créé ou écrasé)
• Exemple: « ls -R / > resultat.txt »
– commande >> <fichier>• la sortie standard est redirigée et concaténée à <fichier>
– commande < <fichier>• l'entrée standard est <fichier>• Exemple : deux manières de faire la même chose
$ rm -i montexte.txt rm: remove montexte.txt (yes/no)? Y
$ echo y > pipo $ rm -i montexte.txt < pipo
03/09/07 L3/unix 52
Processus: redirections et comm. (2/2)
• … ou depuis/vers d’autres programmes– Notion de « pipes » : |– Commande_1 | commande_2 | …... | commande_i
• la sortie de la commande_1 est l'entrée de la commande_2… etc.• exemple:
« ls -R / | more »« ls -l | grep monfichier.txt »
03/09/07 L3/unix 53
Commandes de consultation des processus (1)
• Commande « uptime »– Statistiques générales sur le fonctionnement du système– Exemple
prague ~ % uptime 10:58am up 82 day(s), 1:02, 0 users, load average: 0.02, 0.01, 0.02
03/09/07 L3/unix 54
Commandes de consultation des processus (2)
• Commande « ps »– Donne les processus qui sont actuellement lancés
– Exemple d’options:• ps -aux (SunOS 4, Linux)
• ps -edalf (Solaris, SGI, Linux)
– Exemple:Prague ~ %ps -aux
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
8 S root 1 0 0 41 20 f5985848 177 f5985a70 Sep 14 ? 0:11 /etc/init -
8 S root 207 1 0 41 20 f6060150 533 f5d0577a Sep 14 ? 0:00 sendmail
8 O root 24848 2441 1 61 20 f60c5538 222 10:46:12 pts/0 0:00 ps -edalf
8 S bredeche 24840 1 1 41 20 f72d4880 995 f6a9ab82 10:46:01 ? 0:00 xterm
8 S bredeche 24841 2440 1 51 20 f6f18740 576 f6f18968 10:46:03 pts/0 0:00 sh
8 S gemmerle 24841 2440 1 51 20 f6f18740 576 f6f18968 10:46:03 pts/0 0:00 xterm
03/09/07 L3/unix 55
Commandes de consultation des processus (3)
• Commande « top »– Permet de connaître en temps réel les processus lancés et la charge de la
machine
– Exemple:top - 16:43:32 up 4:00, 5 users, load average: 0.10, 0.21, 0.21
Tasks: 131 total, 2 running, 129 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.2%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.2%hi, 0.3%si, 0.0%st
Mem: 2074688k total, 1172368k used, 902320k free, 116912k buffers
Swap: 2345448k total, 0k used, 2345448k free, 738136k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5363 root 15 0 78900 51m 12m S 1 2.6 1:09.59 Xorg
6078 quetier 16 0 35956 11m 8928 S 0 0.6 0:29.76 sensors-applet
11793 quetier 15 0 2320 1176 880 R 0 0.1 0:00.28 top
1 root 15 0 2908 1848 524 S 0 0.1 0:02.30 init
2 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/0
3 root 34 19 0 0 0 S 0 0.0 0:00.12 ksoftirqd/0
4 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/0
03/09/07 L3/unix 56
Commandes d’action sur les processus (1)
• Commande « kill »– envoi un signal a un processus, ce signal peut être:
• d'arrêt, de reprise, d'autodestruction, de destruction, de mise à jour (si cela a été prévu dans la programmation du processus).
– Exemples: • kill -s STOP pid
• kill -s CONT pid
• kill -s KILL pid …OU… kill -9 pid
– Liste des signaux possibles: « kill –l » (lettre l en minuscule)
03/09/07 L3/unix 57
Commandes d’action sur les processus (2)
• Commandes « nice » (et « renice ») – Gestion de la priorité d'un processus
– Valeur:• Par défaut, 0
• Comprise entre -20 et 19
• Plus la valeur est petite, plus le processus est prioritaire
• Seul le super-utilisateur peut mettre des valeurs négatives
– Exemple• nice -n +5 <commande>
• renice -n +5 <noPID>
03/09/07 L3/unix 58
Quelques processus sous Linux
init-+-atalkd |-automount |-crond |-inetd |-rpc.statd |-sendmail |-syslogd |-xdm-+-[xdm---Xsession---.xsession---xterm---. xsession-+-twm | | |-xclock] | | |-xmultibiff] | | `-xterm] | `-xdm---Xsession---.xsession-+-kbgndwm | |-kfm | |-kpanel | |-krootwm | `-kwm |-xfs `-ypbind---ypbind
03/09/07 L3/unix 59
7. Notions de réseaux
03/09/07 L3/unix 60
Adresses IP et InternetDe la même manière qu'une adresse postale comporte un pays
(par défaut le pays ou la lettre a été postée), une ville, une rue, un numéro.
Pour repérer un machine sur internet, il faut un nom de machine et un nom de domaine.
Exemples:
acces.lri.fr -> domaine=lri.fr
ftp.inria.fr -> domaine=inria.fr
www.pagesjaunes.fr -> domaine=pagesjaunes.fr
03/09/07 L3/unix 61
Numéros IP (Internet Protocol)Une adresse IPv4 est de la forme:
XXX.YYY.ZZZ.TTToù ??? est un nb entre 0 et 255.
exemples:
acces.lri.fr -> 129.175.15.6
ftp.inria.fr -> 192.93.2.6
www.google.fr -> 216.239.59.104 ou 216.239.59.147 ou ...
Remarques: * une adresse => plusieurs machines
* Un domaine => plages d'adresses éventuellement non contiguës
03/09/07 L3/unix 62
Nslookup: exemples
quetier@laptiptop:~$ nslookup www.google.frServer: 129.175.3.2Address: 129.175.3.2#53
Non-authoritative answer:www.google.fr canonical name = www.google.com.www.google.com canonical name = www.l.google.com.Name: www.l.google.comAddress: 216.239.59.147Name: www.l.google.comAddress: 216.239.59.99Name: www.l.google.comAddress: 216.239.59.103Name: www.l.google.comAddress: 216.239.59.104
03/09/07 L3/unix 63
Notion de ports et de démons
On peut voir les ports comme des oreilles
20 ftp
22 ssh
23 telnet
25 smtp
...
Démon ftp
Démon ssh
Demon telnet
Démon mail
03/09/07 L3/unix 64
Démon (daemon)
Fonctionnement client-serveur: - un serveur qui attend des requêtes d ’éventuels clients - un client qui émet des requêtes vers un serveur
- Un démon est un programme qui tourne en fond de tache(background) qui attend des requêtes.
- Un démon est un serveur dans un modèle client-serveur.- On communique avec un démon via le(s) numéro(s) de port(s) qu'il
'écoute'.
exemple: httpd qui est de démon serveur de pages WWW 'écoute' le port 80 et répond
aux requêtes http qui lui sont soumises (s'il a le droit :)
03/09/07 L3/unix 65
inetd
Un démon c'est bien mais ça utilise de la mémoire et du CPU.
=> inetd
c'est un démon dont le rôle est d'activer le service correspondant a un requête donnée.
exemple:
Sur une machine de faible puissance, il est possible de 'déclencher' l'activation de httpd seulement lorsque qu'une requête WWW est soumise a la machine.
03/09/07 L3/unix 66
/etc/inetd.conf# Configuration file for inetd(1M). See inetd.conf(4).# Ftp and telnet are standard Internet services.ftp stream tcp nowait root /usr/sbin/tcpd in.ftpdtelnet stream tcp nowait root /usr/sbin/tcpd in.telnetd# Shell, login, exec, comsat and talk are BSD protocols.shell stream tcp nowait root /usr/sbin/tcpd in.rshdlogin stream tcp nowait root /usr/sbin/tcpd in.rlogindexec stream tcp nowait root /usr/sbin/tcpd in.rexecd# Tftp service is provided primarily for booting. Most sites run thistftp dgram udp wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot# The rusers service gives out user information. Sites concerned# with security may choose to disable it.rusersd/2-3 tli rpc/datagram_v,circuit_v wait root \ /usr/lib/netsvc/rusers/rpc.rusersd rpc.rusersd
03/09/07 L3/unix 67
Le fichier: /etc/services
#ident "@(#)services 1.20 98/07/08 SMI" /* SVr4.0 1.8 */# Network services, Internet styleftp-data 20/tcpftp 21/tcpssh 22/tcp # SSH Remote Login Protocolssh 22/udp # SSH Remote Login Protocoltelnet 23/tcpsmtp 25/tcp mailtftp 69/udpwww 80/tcp http # WorldWideWeb HTTPpop3 110/tcp pop-3 # POP version 3pop3 110/udp pop-3ntp 123/udp # Network Time Protocolimap2 143/tcp imap # Interim Mail Access Proto v2imap2 143/udp imapsnmp 161/udp # Simple Net Mgmt Protoz3950 210/tcp wais # NISO Z39.50 databasez3950 210/udp waisimap3 220/tcp # Interactive Mail Accessimap3 220/udp # Protocol v3...
03/09/07 L3/unix 68
netstat -a
quetier@laptiptop:~$ netstat -aConnexions Internet actives (serveurs et établies)Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp 0 0 localhost:2208 *:* LISTEN tcp 0 0 localhost:ipp *:* LISTEN tcp 0 0 localhost:2207 *:* LISTEN tcp6 0 0 *:ssh *:* LISTEN udp 0 0 *:32768 *:* udp 0 0 *:bootpc *:* udp 0 0 *:mdns *:*
03/09/07 L3/unix 69
telnet
TELNET est un protocole de communication possible entre deux machines. telnet est une application qui permet de se connecter sur une autre machine.
exemple: loria ~ %telnet cartan.iecn.u-nancy.fr Trying 193.50.42.9... Connected to cartan.iecn.u-nancy.fr. Escape character is '^]'. SunOS 5.7 login: gemmerle Password: ********** Last login: Mon Nov 20 10:54:48 from craffe.loria.fr Sun Microsystems Inc. SunOS 5.7 Generic October 1998 cartan ~ %
03/09/07 L3/unix 70
rlogin
rlogin est une application qui permet de se connecter sur une autre machine.
Elle offre en plus la possibilité de ne pas répéter la procédure d'identification.
Mécanismes pour éviter la procédure d'identification:
- Au niveau de l'utilisateur: $HOME/.rhosts
liste privée d ’item de la forme: nom de machine/nom de login
exemple:
cartan ~ %more .rhosts
loria.loria.fr
- Au niveau de la machine: /etc/hosts.equiv
03/09/07 L3/unix 71
ssh
ssh - secure shell client (remote login program)
L'idée:
- chaque machine a une bi-clés (Clé publique/Clé privée)
- échange a l'aide des bi-clés d'une clef de session
- codage de la session a l'aide de la clef négociée
03/09/07 L3/unix 72
ftp/sftp (file transfer program)
Exemple: loria ~ %ftp cartan.iecn.u-nancy.fr Connected to cartan.iecn.u-nancy.fr. 220 cartan.iecn.u-nancy.fr FTP server (SunOS 5.7) ready. Name (cartan.iecn.u-nancy.fr:gemmerle): gemmerle 331 Password required for gemmerle. Password: 230 User gemmerle logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> ? Commands may be abbreviated. Commands are: mget put mkdir pwd exit get mput bye help cd user lcd open ls ftp> get .cshrc local: .cshrc remote: .cshrc 200 PORT command successful. 150 Binary data connection for .cshrc (152.81.144.12,1403) (2 bytes). 226 Binary Transfer complete. 2 bytes received in 0.0204 secs (0.096 Kbytes/sec)
Version sécurisée : SFTP
Note: commande ‘bi’ pour un transfert
binaire si vous êtes sous windows.
03/09/07 L3/unix 73
scp : copie sécurisée
quetier@laptiptop:~$ scp [email protected]:/etc/passwd /tmpThe authenticity of host 'vs23.lri.fr (129.175.7.55)' can't be established.RSA key fingerprint is bc:ff:c0:36:de:0d:65:c7:3f:c1:5e:0e:d0:3b:b1:23.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added 'vs23.lri.fr,129.175.7.55' (RSA) to the list of known hosts.Password: passwd 100% 1758 1.7KB/s 00:00
quetier@laptiptop:~$ scp /tmp/passwd root@vs23:/tmp/sauv_passwdWarning: Permanently added 'vs23' (RSA) to the list of known hosts.Password: passwd 100% 1758 1.7KB/s 00:00
03/09/07 L3/unix 74
8. Programmation sous Unix
03/09/07 L3/unix 75
Programmation sous Unix
• Langages interprétés– Langage de Shell : sh, tcsh, ksh, zsh, bash
– Langage de Script : perl, python, …
• Langages compilés– C / C++
– Java (machine virtuelle)
– Etc.
03/09/07 L3/unix 76
sh
!# /bin/shTOTO='bonjour je suis sh'echo $TOTO
03/09/07 L3/unix 77
python
• http://fr.wikipedia.org/wiki/Python_(langage)– Python est un langage de programmation interprété, multi-
paradigme. Il autorise la programmation impérative structurée, orientée objet, et fonctionnelle. Il est doté d'un typage dynamique fort, d'une gestion automatique de la mémoire par ramasse-miettes et d'un système de gestion d'exceptions.
03/09/07 L3/unix 78
9. Outils pour la programmation
03/09/07 L3/unix 79
Quelques outils
• Editeurs de texte : vi, emacs, jedit, nedit, kate, eclipse, …
• Make
• Gestionnaires de versions : svn, subversion
• Compilateurs : gcc, javac, ocamlc
03/09/07 L3/unix 80
Make : construire un exécutable
• Make permet de reconstruire automatiquement vos programmes dés que le code source a été modifié.
• Make est organisé sous forme de règles de la forme :TARGET: DEPEND1 DEPEND2 ...<tab> COMMAND1<tab> COMMAND2
• Cet règle permet de construite TARGET (i.e. La cible) en fonction des fichiers dont celle-ci dépend (cf. DEPEND).
• Si vous tapez make dans un repertoire contenant un fichier Makefile, alors la première cible définie dans le Makefile sera construite. Vous pouvez choisir la cible à construire en tapant make X (avec X, le nom de votre cible).
03/09/07 L3/unix 81
Make : un exemple simplefichier Makefile
all : montexte.ps montexte.html
montexte.html : montexte.tex latex2html montexte.texmontexte.dvi : montexte.tex latex $<montexte.ps : montexte.dvi dvips -o $@ $<clean : rm -f montexte.ps montexte.dvi montexte.html
$@ : la cible --- $< : la (première) source --- $^ : toutes les sources
03/09/07 L3/unix 82
Make : un exemple
# This is an example Makefile.
JC = javacJE = javaJAVAFLAGS = -server
EXEC = monprogramme.class
monprogramme.class: monprogramme.java $(JC) monprogramme.java
%.class: %.java $(JC) $(JAVAFLAGS) $<
run: monprogramme.class java monprogramme
hello: echo 'hello!'
all: monprog hello
clean: rm -f $(EXEC)
cleanall: rm -f *.class
make monprogramme.classmake monprog.classmake allmake cleanmake cleanallmake hello
• Gère les dépendances (i.e. n’exécute une nouvelle entrée que si nécessaire)
• Ne pas oublier les tabulations!
03/09/07 L3/unix 83
CVS - système de contrôle de version
CVS est un système de gestion des sources permettant à un groupe gens de travailler ensemble sur le même code (de programme).
• Idée de base : un dépôt centralisé (REPOSITORY) qui contient toutes les informations sur les différentes modifications effectuées par les différentes personnes intervenant sur le projet. Ces « traces » sont stockées de manière efficace de manière à ne pas prendre trop de place (on a un log des modifications, pas des images!)
• Chacun peut éditer ses copies locales des fichiers partagés; une fois l’édition terminée, on peut sauver ceux-ci pour qu’ils soient enregistré au niveau de la copie centrale.
• Quelques commandes utiles:– setenv CVSROOT XXX, où XXX est un répertoire accessible en ecriture qui va servir à héberger les informations de votre groupe. Tous les membres du groupe doivent référencer CVSROOT sur le même repertoire!
03/09/07 L3/unix 84
CVS : quelques commandescvs init
Initialise votre repertoire local pour recevoir les fichiers du repository.
cvs checkout XXX Récupère la dernière copie de XXX (‘.’ pour tous les fichiers) en local.
cvs add XXXAjoute un fichier ou répertoire XXX à l’ensemble des fichiers/répertoires (le “repository”) que vous partagez avec le groupe.
cvs commit XXXSauvegarde vos changements dans le repository. Si qqun à entre temps déja enregistré (= commit) une version, vous devez d’abord exécuter cvs update.
cvs update XXXmet à jour votre copie locale du fichier ou du répertoire XXX (en fonction du dernier commit en date). Cette commande permet de savoir si vos propres changements rentrent en conflits avec ceux commités entre temps par un tiers.
03/09/07 L3/unix 85
Successeur de CVS : Subversion
• Commande « svn »
• Toutes les options récentes de CVS
• Commande de renommage de fichiers/répertoires
• Moteur de gestion de versions plus fiable
03/09/07 L3/unix 86
En cas de problème :
N’oubliez pas la commande « man »
N'oubliez pas non plus google
fin du cours L3-Unix (5h)
“man unix”
03/09/07 L3/unix 87
ANNEXES
03/09/07 L3/unix 88
Caractères spéciaux
• * remplace une chaîne de caractères quelconques
• ? remplace un caractère quelconque
• [av] remplace a ou v
• [a-v] remplace les lettres comprises entre a et v
• $var variable shell de nom var
03/09/07 L3/unix 89
Montage disque à distance (NFS)
Exemple:
loria
/tmp/toto
share -o rw=cartan /tmp/toto
cartan
mount loria:/tmp/toto /tmp/toto
mount: loria:/tmp/toto: Permission denied
share -o rw=cartan /tmp/toto
mount loria:/tmp/toto /tmp/toto loria:/tmp/toto et cartan:/tmp/toto représentent le même endroit disque
Pour annuler la manip: umount /tmp/totounshare /tmp/toto
03/09/07 L3/unix 90
Partage disque
automount install automatic mount points
Pour cela automount a besoin de 'maps‘. La map par défaut est: /etc/auto_master ou /etc/auto.master
exemple: cartan ~ %more /etc/auto_master # # Map montage # /local local_map /users users_map
=> existence des fichiers: /etc/local_map /etc/users_map
03/09/07 L3/unix 91
Les pipes
• Un pipe est un fichier temporaire, nommé ou non, utilisé par 2 groupe de programmes en même temps : les producteur et les consommateurs.Habituellement, il n’y a qu’un producteur et un consommateur.
• Le pipe le plus commun d’Unix est symbolisé par « | ». Dans tout shell, ce symbole utilise la syntaxe suivante :commande1 | commande2La sortie standard de la commande1 est écrite dans un pipe sans nom; l’entrée standard de la commande2 lit dans ce même pipe.
03/09/07 L3/unix 92
Les pipes : c’est quoi ?
• C’est un fichier FIFO d’une longueur maximale variable (de 512 à 16K), avec 2 descripteurs:* Un pour l’écriture, garantie atomique; non bloquante tant que la taille maximale n’est pas atteinte,* Un pour la lecture, garantie atomique, bloquante si le fichier est vide.
• En fait, c’est bien plus complexe; plusieurs implantations existent…
03/09/07 L3/unix 93
Redirection des E/S (sh)
• Com X> fichier : * X = 1 ou absent : la sortie standard est écrite dans file;
* X = 2 : id avec la sortie erreur.• Com X>> fichier : écrit à la fin de fichier.• Com <> fichier : les E/S se font dans fichier.• Com < fichier : l’entrée standard est lue dans fichier.• Com << MOT : toutes les lignes suivantes du shell
jusqu’à MOT constitueront un buffer qui peut être lu par com.
03/09/07 L3/unix 94
Mixage des sorties
• 2>&1 : redirige la sortie erreur sur la sortie standard. L’évaluation est de gauche à droite; pour mettre toutes les sorties d’un programme dans le même fichier :com1 >file 2>&1 et non com1 2>&1 >file
• La commande nohup rend une commande insensible aux signaux de fin du terminal, et détourne ses E/S (utile en tâche de fond). Elle peut être émulée parcom1 >&- <&- 2>&1Cela ferme les 3 E/S de la commande.N’étant plus relié au shell, elle ne meurt pas quand le shell est arreté.
03/09/07 L3/unix 95
Suspension d'exécution d'une tache• commande &
commande mise en tache de fond (background) exemple: emacs &
• commande Ctrl Z: la tache est suspendue• bg pour la mettre en fond de tache• jobs pour connaitre la liste des taches de fond et leur numéro• %com la tache dont le nom de commande commence par com
est réactivée• %numéro pour la reprendre la tache {numéro}• %+ pour la reprendre la tache marquée + (courante)• %- pour la reprendre la tache marque - (précédent la courante)
03/09/07 L3/unix 96
vi (éditeur standard unix)
• Disponible sur tous les Unix• Deux modes:
- mode commande - mode insertion
• Pour entrer en mode insertion: i ou a• Pour sortir du mode insertion: Esc• En mode commande, h (<), l(>), j(V), k(^), • eff. le caract.. sous le curseur, d efface la ligne, • :wq! pour sauver et sortir.
un peu barbare…
03/09/07 L3/unix 97
Éditeur: emacs - xemacs (1/3)
;; This buffer is for notes you don't want to save, and for Lisp evaluation.
;; If you want to create a file, first visit that file with C-x C-f,
;; then enter the text in that file's own buffer.
--**-XEmacs: *scratch* (Lisp Interaction)----All---------------
03/09/07 L3/unix 98
Éditeur: emacs - xemacs (2/3)
• A sa naissance, uniquement en mode texte maintenant, il existe
en mode graphique
• On a toujours la possibilité: [x]emacs -nw
• Cohabitation des modes commande et insertion grâce aux
touches Ctrl et Esc
• Séparation en deux de l'écran:
+ une grande fenêtre d'édition
+ une ligne de commande
• On effectue généralement une commande avec des séquences de
touches commençant par Esc ou Ctrl
03/09/07 L3/unix 99
Éditeur: emacs - xemacs (3/3)• Pour se déplacer: Ctrl + p pour monter le curseur d'une ligne (previous)
Ctrl + n pour descendre le curseur d'une ligne (next) Ctrl + f pour avancer le curseur d'une case (forward) Ctrl + b pour reculer le curseur d'une case (backward) Ctrl + e pour aller a la fin de la ligne Ctrl + a pour aller au début de la ligne
• Utiles:Ctrl + x Ctrl + s: pour sauver le bufferCtrl + x Ctrl + c: pour sortir d'emacs
• Ca peut aiderCtrl + g quand on est plantéCtrl + l pour centrer sur la ligne en cours.
03/09/07 L3/unix 100
Autres éditeurs
• Il existe beaucoup d’autres éditeurs, installés ou installables sur les machines Unix. En particulier, des éditeurs proches de l’érgonomie d’éditeur windows.Par exemple : Nedit, Kedit, jed, …
03/09/07 L3/unix 101
Plusieurs shells : SH, TCSH, KSH, BASH
Dans ce qui suit: on utilisera sh, parce que:
• on le trouve partout;
• Bash (qui est très utilisé) est compatible
• avec les scripts SH
03/09/07 L3/unix 102
Variables d'environnement prédéfinies
• HOME chemin d'accès au répertoire initial de l'utilisateur
• PATH suite de chemins d'accès aux répertoires des exécutables
• PS1 invite principale du shell en mode interpréteur
• PS2 invite secondaire du shell en mode programmation
• IFS séparateurs de champ des arguments
• MAIL chemin d'accès à la boite aux lettres utilisateur
• MAILCHECK intervalle en sec au bout duquel le mail est contrôlé
• TERM nom du type de terminal
03/09/07 L3/unix 103
Variables utilisateur
• Déclaration variable=valeur
• Utilisation variable2=$variable
03/09/07 L3/unix 104
Exportation d'une variable
• Le problème sur un exemple:
echo $TOTO TOTO='bonjour je suis sh' echo $TOTO bonjour je suis sh sh echo $TOTO (TOTO n'a pas été exporte)
[Ctrl+D] export TOTO sh echo $TOTO (TOTO a été exporté) bonjour je suis sh
03/09/07 L3/unix 105
Variables de substitution prédéfinies
Exemple: toto.sh
#! /bin/sh
echo "$0 -> nom du script (pathname) "
echo "$1,$2,$3,$4 -> arguments (du 1er au n-ieme) "
echo "$# -> nombre d'arguments "
echo "$* -> liste de tous les arguments "
echo "$? -> code retourne par la derniere commande "
echo "$$ -> numero de processus de ce shell "
**************************************************
./toto.sh a ab abc abcd
./toto.sh -> nom du script (pathname)
a,ab,abc,abcd -> arguments (du 1er au n-ieme)
4 -> nombre d'arguments
a ab abc abcd -> liste de tous les arguments
0 -> code retourne par la derniere commande
4217 -> numero de processus de ce shell
03/09/07 L3/unix 106
Quotage
• Rôle : le quotage est utilisé pour supprimer les fonctionnalités de certains caractères spéciaux du shell, dont les métacaractères.
• Méta-caractères: \ $ * ` " '
• Caractère d ’échappement: \ le caractère \ préserve la valeur littérale du caractère qui le suit
• Simples quotes '...' les caractères inclus entre 2 simples quotes ne sont pas évalués
• Doubles quotes "..."
les caractères inclus entre 2 doubles quotes conservent leur valeur à l'exception de $ ` et \.
• Exemple TOTO='bonjour ’ echo '$TOTO et ' "$TOTO" $TOTO et bonjour
03/09/07 L3/unix 107
Commandes de test (1/5 )
test sur les fichiers: test -f fichier (existence de fichier) test -d répertoire (existence de répertoire) test -s fichier (existence du fichier et taille > 0) test -r fichier (existence du fichier et accessible lecture) test -w fichier (existence du fichier et accessible écriture) test -x fichier (existence du fichier et exécutable)
exemples: test -f /etc/passwd [ -f /etc/passwd ] [ ! -f /etc/passwd ]
03/09/07 L3/unix 108
Commandes de test (2/5 )
test alphanumérique test "$str1" = "chaine1" test "$str1" != "chaine1 "
exemples:
toto='acd ’ test "acd" = "$toto" -> vrai [ "acd" = "$toto" ] -> vrai
03/09/07 L3/unix 109
Commandes de test (3/5 )
test numérique n1 -eq n2 (égaux) n1 -ne n2 (non égaux) n1 -gt n2 (plus grand que) n1 -lt n2 (plus petit que) n1 -ge n2 (plus grand ou égal que) n1 -le n2 (plus petit ou égal que)
exemples: toto=3 [ 5 = "$toto" ] -> faux test 3 = "$toto" -> vrai [ 5 -gt "$toto" ] -> vrai [ 5 -lt "$toto" ] -> faux
03/09/07 L3/unix 110
Commandes de test (4/5 )
Comparaisons booléennes
-z chaîne (vrai si la longueur de la chaîne est nulle)
-n chaîne (vrai si la longueur de la chaîne est non nulle)
Exemples:
toto='acd'
[ -z $toto ] -> faux
[ -n $toto ] -> vrai
03/09/07 L3/unix 111
Commandes de test (5/5 )
Autres opérateurs ! (négation) -a (et) -o (ou)
Exemples: toto=3 [ ! 5 -lt "$toto" ] -> vrai [ \( 2 -lt "$toto" \) -a "$toto" -lt 5 ] -> vrai
03/09/07 L3/unix 112
Instructions conditionnelles (1/2)
Condition simple: if then ... fi
exemple 1: toto.sh
#! /bin/sh
if test "$1" = "a" ; then
echo 'je suis dans le cas 1'
fi
***************
toto.sh a -> je suis dans le cas 1
toto.sh b c -> rien
exemple 2:
if [ ! -d Tmp ]; then mkdir Tmp ; fi
03/09/07 L3/unix 113
Instructions conditionnelles (2/2) Exemple un peu plus compliqué
cat toto.sh
#! /bin/sh
if test "$1" = "a" ; then
echo 'je suis dans le cas: a ?'
elif test "$1" = "b" ; then
echo 'je suis dans le cas: b ?'
else if test "$2" = "a" ; then
echo 'je suis dans le cas: ? a'
fi
fi
toto.sh a
je suis dans le cas: a ?
toto.sh a b
je suis dans le cas: a ?
toto.sh b a
je suis dans le cas: b ?
toto.sh d a
je suis dans le cas: ? a
toto.sh d b
<- rien
03/09/07 L3/unix 114
Arithmétique
Commande: expr
expr val1 opér val2
opér: +, -, *, /, %
Exemples:
compteur=`expr $compteur + 1`
compteur=`expr $compteur \* 2`
Peu performant : nécessite un sous-processus
03/09/07 L3/unix 115
Instructions de boucle (1/3)
for variable [ in liste d'arguments ] do liste de commandes done
while commande do liste de commandes done
03/09/07 L3/unix 116
Instructions de boucle (2/3) exemple boucle 1
#! /bin/sh
for i in a b c
do
echo $i
done
./toto.sh
a
b
c
03/09/07 L3/unix 117
Instructions de boucle (3/3) exemple boucle 2
i=0
while test $i -le 5
do
i=`expr $i +1`
echo $i
done
./toto.sh
1
2
3
4
5
03/09/07 L3/unix 118
Instructions d'aiguillage: case in ... esac
#! /bin/sh
case $1 in
'a') echo "je suis dans le cas: a" ;;
'b') echo "je suis dans le cas: b" ;;
'c') echo "je suis dans le cas: c" ;;
*) echo "je suis dans le cas: autres" ;;
esac
toto.sh a
je suis dans le cas: a
toto.sh b
je suis dans le cas: b
toto.sh c
je suis dans le cas: c
toto.sh d
je suis dans le cas: autres
toto.sh e
je suis dans le cas: autres
03/09/07 L3/unix 119
cd . ; echo $?0*************************mkdir /pouet ; echo $?mkdir: Failed to make directory
"/pouet"; Permission denied2*************************cat toto.sh#! /bin/sh
case $1 in 'a') exit 1 ;; 'b') exit 2 ;; *) exit 3 ;;esac
***************************toto.sh a ; echo $?1toto.sh b ; echo $?2toto.sh c ; echo $?3
Code retourné par la dernière commande
03/09/07 L3/unix 120
Expansion de commande
variable=`commande`
exemple:
MAINTENANT=`date`
echo $MAINTENANT
Thu Dec 14 17:01:52 MET 2000
03/09/07 L3/unix 121
Expansion de paramètre (1/2)
variable=${var:-val} si var est définie ou non nulle alors $var
sinon val
exemple:
TEXTE='abc'
echo ${HOME:-TEXTE}
/home/nicolas
echo ${TEXTE2:-TEXTE}
TEXTE
echo $TEXTE2
il n’affiche rien
03/09/07 L3/unix 122
Expansion de paramètre (2/2)
variable=${var:=val} si var est définie ou non nulle alors $var
sinon affecte val à var et affiche val.
exemple:
TEXTE='abc'
echo ${HOME:=TEXTE}
/home/nicolas
echo ${TEXTE2:=TEXTE}
TEXTE
echo $TEXTE2
TEXTE
03/09/07 L3/unix 123
Entrer une chaîne: read REPONSE
cat toto.sh
#! /bin/sh
echo "Donner un nb d'annee "
read REPONSE
NBMOIS=`expr $REPONSE \* 12`
echo "Ca fait $NBMOIS mois"
toto.sh
Donner un nb d'annee
5
Ca fait 60 mois
03/09/07 L3/unix 124
Fonctions
#!/bin/sh
usage()
{
echo "usage: $1 $2"
}
main()
{
if [ $# = 0 ]; then
usage `basename $0` "fichier";
exit 1
fi
ls -lsa $1
}
main $*
$ toto.sh
usage: toto.sh fichier
$ toto.sh /etc/passwd2 -rw-r--r-- 1 root other 311 Nov 29 1999 /etc/passwd