Par Olivier Hoarau (olivier.hoarau@funix.org) Cours utilisateur UNIX 1/58 http://www.funix.org Table des matires 1Historique du document.....................................................................................................................5 2Prambule et licence...........................................................................................................................5 3Principes de base UNIX.....................................................................................................................5 3.1Les processus ou process............................................................................................................5 3.2Dfinition d'un systme d'exploitation........................................................................................5 3.3Environnement............................................................................................................................6 4Prsentation du systme UNIX...........................................................................................................6 4.1Les utilisateurs UNIX.................................................................................................................6 4.2Les fonctions principales............................................................................................................6 4.2.1Partage des ressources quitables........................................................................................6 4.2.2Interface avec le matriel....................................................................................................7 4.2.3Gestion de la mmoire........................................................................................................7 4.2.4Gestion des fichiers.............................................................................................................7 4.3Structure du systme UNIX........................................................................................................8 4.4Le shell........................................................................................................................................8 5Ouverture et fermeture de session......................................................................................................9 5.1Ouverture de session...................................................................................................................9 5.2Changement de password...........................................................................................................9 5.3Fermeture de session.................................................................................................................10 6Commandes UNIX et redirection.....................................................................................................10 6.1Syntaxe d'une commande..........................................................................................................10 6.2Les entres sorties.....................................................................................................................10 6.3Redirection des entres sorties..................................................................................................11 6.4Redirection des erreurs.............................................................................................................12 6.5Les pipes...................................................................................................................................12 7Le systme de fichiers......................................................................................................................13 7.1Les types de fichier...................................................................................................................13 7.2Atteindre un fichier...................................................................................................................14 7.2.1Nommer un fichier............................................................................................................14 7.2.2Le chemin d'accs.............................................................................................................14 7.2.3Les commandes.................................................................................................................15 7.3Visualiser les fichiers................................................................................................................16 7.4Commandes de gestion des rpertoires.....................................................................................17 7.5Commandes de gestion des fichiers..........................................................................................17 7.6Les liens....................................................................................................................................17 7.7Les inodes.................................................................................................................................18 7.8Les mtacaractres....................................................................................................................18 8Les droits d'accs..............................................................................................................................19 8.1Identification de l'utilisateur.....................................................................................................19 8.2Dfinition des droits d'utilisateur..............................................................................................19 8.2.1Cas d'un fichier classique..................................................................................................19 8.2.2Cas d'un rpertoire............................................................................................................20 8.2.3Cas d'un lien......................................................................................................................20 8.3Commandes associes...............................................................................................................20 Cours utilisateur UNIX 2/58 http://www.funix.org 8.3.1Changer les droits : chmod................................................................................................20 8.3.2Changer les droits par dfaut : umask...............................................................................21 8.3.3Changer le propritaire et le groupe..................................................................................22 9Gestion des processus.......................................................................................................................22 9.1Les caractristiques d'un processus...........................................................................................22 9.2Visualiser les processus............................................................................................................22 9.3Commandes de gestion des processus......................................................................................23 9.3.1Changer la priorit d'un processus....................................................................................23 9.3.2Arrter un processus..........................................................................................................24 9.4Lancer en processus en tche de fond.......................................................................................24 10Les filtres UNIX.............................................................................................................................25 10.1Modifier les donnes d'un fichier............................................................................................25 10.1.1Coupe un fichier en morceau : split................................................................................25 10.1.2Trier des fichiers : sort....................................................................................................25 10.1.3Conversion de chane de caractre :tr.............................................................................26 10.2Edition de fichiers avec critres..............................................................................................27 10.2.1Editer un fichier par la fin : tail.......................................................................................27 10.2.2Editer un fichier par le dbut : head................................................................................27 10.2.3Compter les lignes d'un fichier : wc................................................................................28 10.2.4Edition de champ d'un fichier : cut.................................................................................28 10.2.5Fusion de fichier : paste..................................................................................................29 10.2.6Extraction de lignes communes de deux fichiers : comm...............................................30 10.3Comparaison de fichiers.........................................................................................................30 10.3.1Comparer deux fichiers : cmp.........................................................................................30 10.3.2Edition des diffrences entre deux fichiers : diff............................................................31 11Les commandes grep et find...........................................................................................................31 11.1Les expressions rgulires......................................................................................................31 11.2La commande grep..................................................................................................................32 11.3La commande find..................................................................................................................33 11.3.1Prsentation.....................................................................................................................33 11.3.2Recherche par nom de fichier..........................................................................................33 11.3.3Recherche suivant la date de dernire modification........................................................34 11.3.4Recherche suivant la taille..............................................................................................34 11.3.5Recherche combine.......................................................................................................34 11.3.6Redirection des messages d'erreur..................................................................................34 11.3.7Les commandes en option...............................................................................................35 11.3.8Autres subtilits...............................................................................................................35 12Expressions rgulires et sed..........................................................................................................35 12.1Les expressions rgulires......................................................................................................35 12.1.1Prsentation.....................................................................................................................35 12.1.2Le mtacaractre ............................................................................................................36 12.1.3Les mtacaractres [ ]......................................................................................................36 12.1.4Les mtacaractres ^ et $.................................................................................................36 12.1.5Le mtacaractre *..........................................................................................................37 12.1.6Les mtacaractres \ ( \)..................................................................................................37 12.2La commande sed...................................................................................................................37 Cours utilisateur UNIX 3/58 http://www.funix.org 12.2.1Prsentation.....................................................................................................................37 12.2.2La fonction de substitution s...........................................................................................38 12.2.3La fonction de suppression d...........................................................................................38 12.2.4Les fonctions p, l, et =.....................................................................................................39 12.2.5Les fonctions q, r et w.....................................................................................................39 12.2.6Les fonctions a et i..........................................................................................................39 12.2.7sed et les sous chanes.....................................................................................................40 13La commande awk..........................................................................................................................40 13.1Prsentation.............................................................................................................................40 13.1.1Prsentation et syntaxe....................................................................................................40 13.1.2Enregistrements et champs..............................................................................................41 13.2Critres de slection................................................................................................................42 13.2.1Prsentation.....................................................................................................................42 13.2.2Les expressions rgulires...............................................................................................42 13.2.3Les expressions relationnelles.........................................................................................43 13.2.4Combinaison de critres..................................................................................................43 13.2.5Plage d'enregistrement dlimites par des critres..........................................................43 13.3Les actions..............................................................................................................................43 13.3.1Prsentation.....................................................................................................................43 13.3.2Fonctions prdfinies traitant des numriques................................................................44 13.3.3Fonctions prdfinies traitant de chanes de caractres..................................................44 13.3.4Fonctions dfinies par l'utilisateur..................................................................................45 13.4Les variables et oprations sur les variables...........................................................................45 13.4.1Prsentation.....................................................................................................................45 13.4.2Les variables utilisateur...................................................................................................45 13.4.3Les variables prdfinies (systme)................................................................................46 13.4.4Oprations sur les variables............................................................................................46 13.4.5Les variables de champ...................................................................................................47 13.5Les structures de contrle.......................................................................................................47 13.5.1Prsentation.....................................................................................................................47 13.5.2Les dcisions (if, else).....................................................................................................47 13.5.3Les boucles (while, for, do-while)..................................................................................48 13.5.4Sauts controls (break, continue, next, exit)...................................................................49 13.6Les tableaux............................................................................................................................49 13.6.1Prsentation.....................................................................................................................49 13.6.2Les tableaux unidimensionnels.......................................................................................49 13.6.3Les tableaux associatifs...................................................................................................50 13.6.4Les tableaux multidimensionnels....................................................................................50 14Exercices.........................................................................................................................................50 14.1Critres pour les noms de fichier............................................................................................50 15Les droits d'accs............................................................................................................................51 15.1Grep........................................................................................................................................53 15.2Les filtres................................................................................................................................54 15.3find..........................................................................................................................................55 15.4awk..........................................................................................................................................56 Cours utilisateur UNIX 4/58 http://www.funix.org 1Historique du document 15.04.2004 V1.1 Reprise du document sous OpenOffice 27.12.1999 V1.0 Cration du document 2Prambule et licence Ce document est un essai de vulgarisation d'UNIX. Il est destin ceux qui l'utilisent dj mais aussi aux dbutants qui voudraient en apprendre plus sur ce systme d'exploitation qui est en train de se populariser vitesse grand V avec l'explosion de Linux. La dernire version de ce document est tlchargeable l'URL http://www.funix.org. Ce document peut tre reproduit et distribu librement ds lors qu'il n'est pas modifi et qu'il soit toujours fait mention de son origine et de son auteur, si vous avez l'intention de le modifier ou d'y apporter des rajouts, contactez l'auteur (olivier.hoarau@funix.org) pour en faire profiter tout le monde. Ce document ne peut pas tre utilis dans un but commercial sans le consentement de son auteur. Ce document vous est fourni "dans l'tat" sans aucune garantie de toute sorte, l'auteur ne saurait tre tenu responsable des quelconques misres qui pourraient vous arriver lors des manipulations dcrites dans ce document. 3Principes de base UNIX 3.1Les processus ou process Tout logiciel est la base un programme constitu d'un ensemble de lignes de commandes crites dans un langage particulier appel langage de programmation. C'est uniquement quand on excute le logiciel que le programme va raliser la tche pour laquelle il a t crit, dans ce cas l on dira qu'on a affaire un processus ou process. En d'autres termes le programme est rsolument statique, c'est des lignes de code, alors que le process est dynamique, c'est le programme qui s'excute. Par exemple le logiciel Winword sous Windows est en fait un bte programme crit dans un langage abscons qui a t ensuite compil pour le rendre comprhensible par la machine, ce n'est uniquement que quand vous le lancez, que vous avez alors affaire au process Winword. 3.2Dfinition d'un systme d'exploitation Un systme d'exploitation est un ensemble de programmes charg de faire l'interface entre l'utilisateur et le matriel. C'est dire que quand un utilisateur tape une commande au niveau d'un logiciel (ou application), le logiciel interprte la commande, la transmet au systme d'exploitation qui la transmet au matriel dans un format comprhensible. Un exemple vaut mieux qu'un grand discours, quand vous ouvrez un fichier dans votre traitement de texte favori, vous avez appuy sur l'icne qui va bien, votre traitement de texte interprte l'action Cours utilisateur UNIX 5/58 http://www.funix.org d'ouverture de fichier et transmet l'ordre au systme d'exploitation, ce dernier va alors commander au contrleur du disque dur de chercher les pistes correspondantes sur le disque qui correspondent au fichier en question. Normalement un logiciel ne devrait jamais " discuter " avec le matriel, le systme d'exploitation se place entre les deux pour transmettre et ventuellement rejeter des commandes illicites. 3.3Environnement Un environnement est dit fentr quand il y a possibilit de pouvoir faire apparatre plusieurs fentres, il va de pair avec l'utilisation d'une souris, Windows est par exemple un exemple d'environnement fentr. On parle aussi d'environnement graphique. A l'oppos on trouve aussi des environnements textuels non graphiques, DOS en est un bel exemple. 4Prsentation du systme UNIX 4.1Les utilisateurs UNIX Sur un systme UNIX, on trouve deux types de personnes, celle qui va utiliser le systme dans le but de produire quelque chose, le systme UNIX est pour elle un moyen, un outil. Cette personne est l'utilisateur UNIX, on peut trouver dans cette catgorie, le programmeur, l'utilisateur de base de donnes, etc. La deuxime catgorie de personnes est charg de l'installation, de la configuration et de la bonne marche du systme UNIX, ce sont les administrateurs systmes UNIX. Sur un systme UNIX, les utilisateurs UNIX ont des droits limits, c'est dire que certaines commandes leurs sont interdites et ils n'ont pas accs certaines parties du systme. Les administrateurs systmes ont par contre tous les droits sur le systme. Gnralement sur un systme UNIX, on limite volontairement le nombre d'administrateur (appel ROOT ou super utilisateur). 4.2Les fonctions principales UNIX est un systme d'exploitation dont voici les tches principales : 4.2.1Partage des ressources quitables UNIX veille ce que toutes les ressources de l'ordinateur (imprimante, mmoire, ...) soient partages quitablement entre tous les processus. Cours utilisateur UNIX 6/58 http://www.funix.org Par exemple si vous travaillez sur une appli du genre base de donnes, vous lancez une requte (commande dans le langage base de donnes) coteuse en temps, pour patienter rien ne vous empche de vous lancer un Doom de derrire les fagots. Vous vous retrouvez donc avec deux process lancs en mme temps, c'est le systme d'exploitation qui est charg de faire en sorte que les deux process puissent utiliser les ressources de manire quitable et que le deuxime process lanc n'attende pas la terminaison du premier pour se lancer. Le fait de pouvoir excuter plusieurs process ou tches en mme temps, en parallle, est appel multitches. UNIX est multitches. 4.2.2Interface avec le matriel UNIX par dfinition des systmes d'exploitation fait en sorte qu'aucun process accde directement une ressource matriel (disque dur, lecteur de disquette,...). Pour accder ces ressources on passe par l'intermdiaire de fichiers spciaux, un fichier spcial est vu pour un utilisateur comme un fichier classique, pour crire sur une disquette dans le lecteur de disquette, on n'a qu' crire dans le fichier spcial du lecteur de disquette. De mme pour lire dans un disque dur, on va lire le fichier spcial du disque dur. 4.2.3Gestion de la mmoire Il existe deux types de mmoire, la mmoire volatile et la mmoire statique, quand on teint et rallume l'ordinateur, toutes les donnes prsentes dans la premire ont disparu, et les donnes dans la seconde sont toujours prsentes. Concrtement la mmoire volatile se trouve dans la RAM, la mmoire statique dans le disque dur. Dans le vocabulaire Unix, quand on parle de mmoire on sous entend mmoire volatile ou RAM, c'est la convention qui sera adopte pour la suite du cours. Tout programme qui s'excute, ou process, a besoin de mmoire pour y stocker notamment les donnes qui manipulent. Malheureusement l'ordinateur dispose gnralement d'une quantit de mmoire limite et non extensible. UNIX doit donc faire en sorte que la mmoire soit bien partage entre tous les process, un process ne doit pas s'accaparer toute la mmoire, sans quoi les autres process ne pourraient plus fonctionner. La mmoire est vue comme une ressource matrielle, UNIX doit donc vrifier qu'aucun process accde la mmoire directement ou ne se rserve une zone de la mmoire. 4.2.4Gestion des fichiers UNIX fournit les outils ncessaires pour stocker les donnes et pour pouvoir les rcuprer rapidement et facilement. Il fournit les outils pour pouvoir visualiser l'ensemble des fichiers de manire simple. Ces fichiers se trouvent sur le disque dur, on nomme cela un systme de fichiers ou File System en anglais. UNIX fournit, en outre, un mcanisme de protection des fichiers. Plusieurs utilisateurs peuvent travailler en mme temps sur la mme machine, c'est la notion de multi-utilisateurs. Chaque utilisateur du systme dispose de ses fichiers, UNIX lui donne le moyen de protger ses fichiers, et d'accorder le droit ou non d'autres utilisateurs d'accder ses fichiers. Cours utilisateur UNIX 7/58 http://www.funix.org 4.3Structure du systme UNIX App1ca11ohs ] ----------------------------------------------------------- ] Appes sys1me bhTX ] ----------------------------------------------------------- ] ] ------------------------------ --------------------------- ] Ces11oh de pJocessus ] ] Sys1me de ges11oh de ] ] ] ] 11ch1eJs ] ----------------------------- --------------------------- ] ] ] --------------------------- ] ] dJ1veJ pJ1phJ1que ] ] --------------------------- ] ] ------------------------------------------------------------- ] Coh1Je ma1J1e ] ------------------------------------------------------------ ] ------------------------------ ] ha1J1e ] ------------------------------ Concrtement le systme d'exploitation est lui aussi un ensemble de programme et de sous programmes regroups dans ce qu'on appelle un noyau (kernel en anglais). On a vu auparavant que les process ne pouvaient pas accder directement aux ressources matriels, en fait les process passent par le noyau pour y accder, pour cela ils disposent d'un ensemble de commandes appeles " appels systme " UNIX . Ces appels systmes commandent deux composantes principales du noyau, le gestionnaire de processus et le systme de gestion de fichiers. Le premier a pour rle de faire en sorte que les process s'excutent et accdent la mmoire de manire quitable, on le nomme aussi scheduler. Le deuxime a pour rle la gestion du systme de fichiers, notamment pour ce qui concerne les droits d'accs. Ce sont ces deux derniers composants du noyau qui accdent directement au matriel. 4.4Le shell Pour faire marcher l'ordinateur, l'utilisateur dispose des logiciels ou d'un utilitaire qui lui permet la saisie directe de commandes. On appelle cet utilitaire le shell (coquille en franais). Son rle est d'interprter les commandes de l'utilisateur avant transmission au noyau, c'est pourquoi on parle aussi d'interprteur de commandes. On trouve l'quivalent sous DOS qui peut tre considr comme un shell. Il existe plusieurs types de shell, ils se diffrencient par la syntaxe et la richesse des commandes. Le plus commun est le Bourne-Shell, on trouve aussi le C-Shell qui s'apparente au langage de programmation C, le Korn Shell, le Posix Shell, et sous Linux le bash-shell. Cours utilisateur UNIX 8/58 http://www.funix.org 5Ouverture et fermeture de session 5.1Ouverture de session Avant de tenter une connexion, il faut d'abord vous assurer que vous ayez t dclar sur la machine, c'est dire que vous possdiez un compte utilisateur caractris par un nom ou login et un mot de passe associ. A la mise sous tension, apparaissent l'cran toute une liste de termes plus ou moins barbares, vous pouvez ignorer tout a. Au bout d'un certain temps apparat enfin le message login: avec un curseur qui clignote. Le systme attend que vous rentriez votre login. Rentrez votre login. Puis tapez Enter, apparat alors le message Password, tapez votre mot de passe, vous pouvez vous rendre compte que votre mot de passe n'apparat pas en clair l'cran, il est remplac pour des raisons de scurit vidente par des *. A la mise sous tension, vous pouvez aussi disposer d'une interface graphique de connexion, au lieu d'avoir un simple login: avec le curseur qui clignote, vous avez une fentre ou bannire qui vous invite saisir votre login et votre mot de passe. C'est notamment le cas pour la configuration par dfaut de la Mandrake 6.0, mais aussi pour les versions rcentes de HP-UX et de Solaris. Une fois le login et le mot de passe saisi, deux possiblits peuvent s'offrir vous, vous pouvez retrouver un cran noir, avec tout simplement un caractre du genre $ ou > (appel prompt) suivi du curseur qui clignote apparat. Vous tes dans un shell prt taper des commandes. Par exemple, sous Linux le prompt par dfaut est le suivant: |og1h_ocahos1 og1h]$ Ou alors vous pouvez trouver un environnement fentr avec utilisation de la souris, o il vous sera possible de lancer un shell pour pouvoir taper des commandes UNIX. 5.2Changement de password En vous dclarant sur la machine, on vous a impos un mot de passe, vous pouvez le changer, pour cela vous disposez de la commande passwd. Certains UNIX font en sorte que vous ne puissiez pas saisir un mot de passe simple, il faudra mettre au moins 6 caractres, avec au moins un, voie deux, caractre non alphabtique. Rappelons que quand vous saisissez votre mot de passe, il ne parat pas en clair, aussi par prcaution, le systme vous demande de le saisir deux fois. ATTENTION : Evitez de vous servir du pav numrique, car d'un poste un autre, il peut y avoir des grosses diffrences ce niveau l. Si vous avez oubli votre mot de passe, vous devez vous adresser l'administrateur du systme (root) qui est le seul habilit vous dbloquer. >passwd 0d passwd .****** Se111hg passwoJd 1oJ useJ . o1v1eJ hew passwoJd .****** Cours utilisateur UNIX 9/58 http://www.funix.org Reeh1eJ passwoJd .****** > ATTENTION : Sur certains systmes, on ne doit pas taper passwd mais yppasswd, demandez le votre administrateur. Pour informations, on utilise yppasswd pour les client NIS. 5.3Fermeture de session Quand on a fini d'utiliser le systme, on doit se dconnecter ou fermer la session. Si vous tes dans un environnement non graphique, il vous suffit au prompt de taper logout. Vous vous retrouvez alors avec le prompt de login, un autre utilisateur pourra alors utiliser la machine. Dans un environnement graphique, vous avec une commande Exit, ou Logout, qui a strictement le mme effet. Vous devez veiller vous dconnecter quand vous n'utilisez plus le systme, pour des raisons de scurit, mais aussi tout simplement pour librer le poste de travail. 6Commandes UNIX et redirection 6.1Syntaxe d'une commande La syntaxe standard d'une commande UNIX est la suivante : commahde -op11ohs aJg1 aJg2 aJg3 Les options varient en fonction de la commande, le nombre des arguments qui suivent dpend aussi de la commande, par exemple la commande : soJ1 -J moh-11ch1eJ sort (trier) permet de trier un fichier, l'option r (reverse), permet de trier en sens inverse le fichier. L'argument unique de la commande est le nom du fichier. Avec cp -R moh-JepeJ1o1Je houveau-JepeJ1o1Je La commande cp (copy) copie un rpertoire (option R) vers un autre rpertoire, on a ici deux arguments. On peut coupler deux options : ps -ef, avec cette commande on a l'option e et f (voir plus loin la signification de la commande). A noter que pour introduire une option on met -, ce n'est pas ncessaire pour certaines commandes (tar par exemple). 6.2Les entres sorties Il y a trois sortes d'entres sorties ou flux de donnes : le premier est l'entre standard, c'est dire ce que vous saisissez au clavier, le deuxime est la sortie standard, c'est dire l'cran, plus prcisment Cours utilisateur UNIX 10/58 http://www.funix.org le shell, et le troisime est la sortie standard des messages d'erreurs conscutifs une commande, qui est gnralement l'cran. Chacun de ces flux de donnes est identifi par un numro descripteur, 0 pour l'entre standard, 1 pour la sortie standard et 2 pour la sortie standard des messages d'erreur. 6.3Redirection des entres sorties Quand vous lancez une commande dans un shell, il peut y avoir du texte qui s'affiche suite l'excution de la commande, ce texte par dfaut, s'affiche dans le shell. On dit que le shell (ou terminal) est la sortie standard, c'est l o va s'afficher tous les commentaires d'une commande. Vous pouvez changer ce comportement, en tapant : ma-commahde > moh-11ch1eJ Tous les commentaires, les sorties, de la commande, ne vont pas apparatre au shell mais tre crits dans un fichier. En d'autres termes, la standard standard est redirig vers un fichier. Cela peut tre utile, si vous avez une commande qui gnre normment de commentaire, et que vous voulez les rcuprer, pour les exploiter par la suite, la terminaison de la commande. La redirection > a pour effet de crer le fichier mon-fichier, si ce fichier existait dj, il est tout simplement cras (supprim et recr), ce qui peut tre gnant si vous ne voulez pas perdre ce qu'il contient, vous disposez donc de la redirection >>. En tapant : ma-commahde >> moh-11ch1eJ Le fichier mon-fichier n'est pas cras, mais la sortie standard (les commentaires de la commande) sont ajouts en fin de fichier, la suite du texte qui tait dj dans le fichier. Les redirections marchent dans les deux sens, par exemple en tapant la commande suivante : soJ1 < moh-11ch1eJ Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie), celle-ci va donc trier le contenu du fichier, par dfaut le rsultat sort sur la sortie standard, c'est dire l'cran, plus prcisment sur le shell. Avec : soJ1 < moh-11ch1eJ > 11ch1eJ-1J1e On a vu que sort < mon-fichier avait pour effet de trier le fichier mon-fichier, l'expression >fichier-trie a pour effet d'envoyer le rsultat (le fichier tri) dans un fichier fichier-trie, le rsultat n'apparat plus l'cran, mais est sauvegard dans un fichier. Avec la redirection << la commande va lire les caractres jusqu' la rencontre d'une certaine chane de caractres. Exemple avec la commande cat (catalogue, permet d'diter le contenu d'un fichier). >ca1 << 11h e 1ape du 1ex1e usqu` a cha1he de caJac1Je 11h > En tapant la commande, vous revenez la ligne, mais perdez le prompt, cat va lire (et diter) les caractres que vous saisissez jusqu' qu'il rencontre la chane fin, ce moment l, le prompt apparat nouveau. Si vous voulez crer un fichier avec un peu de texte l'intrieur, vous ferez : Cours utilisateur UNIX 11/58 http://www.funix.org >ca1 << 11h > moh-11ch1eJ e 1ape du 1ex1e qu1 seJa sauvegaJd dahs moh-11ch1eJ, pouJ 1eJm1heJ e 1ex1e 11h > Le texte que vous venez de saisir, se trouve donc dans mon-fichier. Avec la commande : >11ch1eJ-v1de Vous crez un fichier vide fichier-vide. 6.4Redirection des erreurs Par dfaut les messages d'erreur s'affichent l'cran (sortie standard par dfaut), vous pouvez modifier ce comportement. On rappelle que la sortie d'erreur a pour code 2. Vous pouvez sauvegarder dans un fichier vos messages d'erreur, pour analyse ultrieure, en tapant : ca1 moh-11ch1eJ 2>11ch1eJ-eJJeuJ Si on rencontre une erreur pendant l'excutionde la commande d'dition cat de mon-fichier (absence du fichier par exemple), le message d'erreur sera sauvegard dans le fichier fichier-erreur. En tapant : soJ1 moh-11ch1eJ > 11ch1eJ-1J1e Vous redirigez le rsultat de la commande sort mon-fichier vers le fichierfichier-trie, la sortie standard (descripteur 1) n'est donc plus l'cran (plus prcisment le shell ou terminal) mais le fichier fichier-trie. Par dfaut les messages d'erreur s'affichent dans le shell, vous pouvez faire en sorte qu'ils s'affichent dans le fichier fichier-trie, en tapant : soJ1 moh-11ch1eJ > 11ch1eJ-1J1e 2>&1 Avec la syntaxe >& vous indiquez que les messages d'erreurs seront redirigs vers la sortie standard qui est le fichier fichier-trie. 6.5Les pipes Un pipe (en franais tube de communication) permet de rediriger la sortie d'une commande vers une autre. En d'autres termes, pour rediriger les rsultats (la sortie) d'une commande, on a vu qu'on pouvait taper : commahde1 > soJ11e1 On redirige cette sortie vers une autre commande, a devient donc une entre pour cette dernire commande, pour cela vous tapez : commahde2 < soJ11e1 Cours utilisateur UNIX 12/58 http://www.funix.org En fait la syntaxe commande1|commande2 (| tant le symbole de pipe) est totalement quivalente aux deux lignes de commandes prcdentes. Exemple : ls permet la visualisation de fichiers, en tapant ls, on obtient : 11ch1eJ1 11ch1eJ2 1o1o11ch1eJ grep permet la recherche d'une chane de caractre dans une liste donne, en tapant grep toto * (* signifie tous les fichiers, grep recherche la chane de caractre toto dans les noms de tous les fichiers), on obtient : 1o1o11ch1eJ On a le mme rsultat avec le |, en tapant : s ] gJep 1o1o La premire commande aura pour effet de lister le nom des fichiers se trouvant l'endroit o l'on a tap la commande, la sortie standard (le rsultat de la commande) est donc une liste de nom, elle est redirige vers la commande grep, qui va y chercher une chane de caractre contenant toto. Le rsultat est donc aussi: 1o1o11ch1eJ 7Le systme de fichiers 7.1Les types de fichier Il existe trois types de fichier, le fichier qu'on pourrait qualifi de normal, le rpertoire ou catalogue (en anglais directory) et les fichiers spciaux. Un fichier normal contient des donnes, ce fichier peut tre lisible, c'est dire contenir des informations comprhensibles crites en claire, ce fichier peut tre aussi totalement illisible. Concrtement un fichier texte qui comme son nom l'indique contient du texte est lisible, alors qu'un excutable ne l'est pas, si vous cherchez l'diter vous ne verrez rien de comprhensible, dans ce dernier cas, on dit aussi qu'on a affaire un fichier binaire. Un rpertoire peut tre considr comme un classeur, dans lequel on met des fichiers, c'est un lment d'organisation de l'espace du disque dur. Les fichiers ayant les mmes " affinits " peuvent ranger sous un mme rpertoire, de mme on peut trouver des sous rpertoires dans un rpertoire, qui eux mmes contiennent des fichiers et d'autres sous rpertoires. Ce systme hirarchique fait penser un arbre, d'o le terme d'arborescence. Cours utilisateur UNIX 13/58 http://www.funix.org ]--------- 1b ----- X11 ] ] ] ]------- X11R5 ]-------------usJ ] ] ] ] ] ]------------sJc --- samba ] ] ] ]----- Xaw ]-------] /-] ]-------] ] ] ] ] ]----------o1v1eJ----1hux ] ] ] ] ] ]-------1emp ]-------------home ] ] ]----------maJce---- ma1 ] ]------- doc Il existe un " anctre " tous les rpertoires, c'est la racine ou le / (slash) sur le shma. Tout rpertoire, qui n'est pas la racine elle mme, possde un rpertoire qui le contient (appel rpertoire pre) et peut possder des sous-rpertoires (rpertoires fils) et des fichiers . Quand on cre un rpertoire, le systme cre automatiquement deux " fichiers " sous le rpertoire, le premier est un " . ", qui reprsente le rpertoire lui-mme, le deuxime est un " .. " qui reprsente le rpertoire pre. Le troisime type de fichier est le fichier dit spcial, qu'on a abord brivement auparavant, rappelons que l'on doit passer par eux si on veut dialoguer avec un priphrique matriel. 7.2Atteindre un fichier 7.2.1Nommer un fichier Tout fichier, qu'elle que soit son type, doit pouvoir tre identifi, c'est pourquoi on les nomme avec un nom en rapport avec le fichier. Ce nom comporte au maximum 255 caractres, sachant qu'il existe une distinction entre les lettres minuscules et majuscules, et que certains caractres sont interdits, ce sont par exemple le /, les parenthses (), l'espace ou *. 7.2.2Le chemin d'accs Ce fichier est rang dans un rpertoire du systme de fichiers, on doit pouvoir y accder, en suivant un chemin dans l'arborescence. Cours utilisateur UNIX 14/58 http://www.funix.org ]--------- 1b ----- X11 ] ] ] ]------- X11R5 ]-------------usJ ] ] ] ] ] ]------------sJc --- samba ] ] ] ]----- Xaw ]-------] /-] ]-------] ] ] ] ] ]----------o1v1eJ----1hux----h0W-T0ppp ] ] ] ] ] ] ] ] ]-------1emp ]-------------home ] ] ]----------maJce---- ma1 ] ]------- doc Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple), on part de la racine (/), on indique le premier rpertoire travers, puis les autres, en sparant chacun des rpertoires d'un /. Ainsi donc pour notre fichier le chemin d'accs est : /home/o1v1eJ/1hux En indiquant /home/olivier/linux/HOW-TOppp le fichier est parfaitement identifi, en effet on sait o le trouver puisqu'on a son chemin, et le nom du fichier HOW-TOppp. A noter qu'on peut avoir des fichiers portant le mme nom dans le systme de fichiers ds lors qu'ils n'ont pas le mme chemin, et donc qu'ils ne se trouvent pas au mme endroit. On dit que le chemin du fichier est absolu parce qu' la vue de son chemin d'accs, en partant de la racine, on sait exactement o se trouve le fichier. Un chemin est dit relatif, quand il n'est pas ncessaire, d'indiquer le chemin complet, de l'endroit o on se trouve dans l'arborescence il suffit de rajouter le chemin par rapport ce mme endroit. En admettant qu'on se trouve sous /home/olivier, si l'on veut accder notre fichier HOW-TOppp, le chemin relatif au rpertoire courant est ./linux, le point reprsentant le rpertoire courant comme on l'a vu auparavant. Ce qui donne en chemin absolu /home/olivier/linux. 7.2.3Les commandes La commande pour se dplacer dans l'arborescence est cd. Si l'on est au niveau de la racine, pour aller notre rpertoire /home/olivier/linux on doit taper : cd /home/o1v1eJ/1hux Cours utilisateur UNIX 15/58 http://www.funix.org On a tap un chemin absolu, on se trouve maintenant sous /home/olivier/linux, si l'on veut aller sous /home/olivier, on doit taper : cd .. En effet .. reprsente le rpertoire pre, /home/olivier tant le rpertoire pre de /home/oliver/linux, en tapant cette commande, on se retrouve l'endroit dsir. Si vous voulez connatre ou vous vous trouvez, vous disposez de la commande pwd, ainsi si vous tapez pwd juste aprs la squence de commandes prcdentes, vous obtenez : /home/o1v1eJ 7.3Visualiser les fichiers La commande ls permet de visualiser le contenu de rpertoires, vous voyez les noms des fichiers prsents sous le rpertoire. ]--------- 1b ----- X11 ] ] ] ]------- X11R5 ]-------------usJ ] ] ] ] ] ]------------sJc --- samba ] ] ] ]----- Xaw ]-------] /-] ]-------] ] ] ] ] ]----------o1v1eJ----1hux----h0W-T0ppp ] ] ] ]-----Readme ] ] ] ] ] ]-------1emp ]-------------home ] ] ]----------maJce---- ma1 ] ]------- doc Si vous allez sous /home/olivier/linux (commande cd /home/olivier/linux), si vous voulez visualiser les fichiers contenus, vous tapez ls, vous obtenez : h0W-T0ppp Readme La commande ls peut tre utilise avec des options, si prcdemment vous aviez tapez ls -l, vous auriez obtenu: -Jw-Jw-Jw- 1 o1v1eJ useJs 17356 0ec 3 12.11 h0W-T0ppp -Jw-J--J-- 1 o1v1eJ useJs 7432 hov 21 02.21 Readme Cours utilisateur UNIX 16/58 http://www.funix.org La signification des champs est la suivante: -rw-rw-rw- type de fichier et ses caractristiques de protection 1 le nombre de lien olivier le nom du propritaire users le groupe d'utilisateurs auquel appartient le propritaire 17356 la taille du fichier (en octets) Dec 3 le jour de dernire modification 12 :11 l'heure de dernire modification HOW-TOppp le nom du fichier Pour avoir ces informations uniquement d'un fichier, vous taperez : s - hom-du-11ch1eJ A noter que sur beaucoup de systme la commande ll est quivalent ls -l. 7.4Commandes de gestion des rpertoires Pour grer les rpertoires, vous disposez des commandes suivantes : mkdir nom-de-rpertoire Cration d'un rpertoire rmdir nom-de-rpertoire Suppression d'un rpertoire vide mv rpertoire rpertoire-d'accueil dplacement d'un rpertoire mv rpertoire nouveau-nom Changement de nom d'un rpertoire 7.5Commandes de gestion des fichiers Pour grer les fichiers vous disposez des commandes suivantes: touch mon-fichier cration d'un fichier vide, more mon-fichier visualisation d'un fichier page page, rm mon-fichier suppression d'un fichier, mv mon-fichier rpertoire d'accueil dplacement d'un fichier, mv mon-fichier nouveau-nom changement de nom d'un fichier, cp nom-fichier rpertoire-d'accueil/autre-nom copie de fichier, file mon-fichier pour savoir si on a un fichier binaire (excutable) ou un fichier texte. On obtient pour un fichier texte, comme sortie mon-fichier : ascii text. 7.6Les liens Dans l'arborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peu particulire. Cours utilisateur UNIX 17/58 http://www.funix.org JwxJwxJwx 1 Joo1 Joo1 14 Aug 1 01.58 ha1 -> ../../b1h/ma1* Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le rpertoire /bin, en d'autres termes Mail est un lien vers le fichier mail. Un lien est cr pour pouvoir accder au mme fichier diffrents endroits de l'arborescence. Sous Windows on retrouve peu prs l'quivalent avec la notion de raccourci. La commande ln (pour link) sert crer des liens. Par exemple: h -s /home/o1v1eJ/1hux/Jeadme /1mp/1sezmo1 Le fichier source est readme sous /home/olivier/linux, le lien cr est lisezmoi sous /tmp. En faisant un man ln, vous dcouvrirez qu'il existe des liens hards et softs, sans rentrer dans les dtails, je vous conseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards ne permettents pas de visualiser directement le lien (la petite flche -> quand on tape ls -l). 7.7Les inodes Sous un systme UNIX, un fichier quel que soit son type est identifi par un numro appel numro d'inode, qu'on pourrait traduire en franais par "i-noeud". Ainsi derrire la faade du shell, un rpertoire n'est qu'un fichier, identifi aussi par un inode, contenant une liste d'inode reprsentant chacun un fichier. La diffrence entre un lien hard et symbolique se trouve au niveau de l'inode, un lien hard n'a pas d'inode propre, il a l'inode du fichier vers lequel il pointe. Par contre un lien symbolique possde sa propre inode. A noter que vous ne pouvez pas crer de liens hards entre deux partitions de disque diffrente, vous n'avez pas cette contrainte avec les liens symboliques. Pour connatre le numro d'inode d'un fichier, vous pouvez taper: s -1 moh-11ch1eJ 7.8Les mtacaractres Si vous tes la recherche d'un fichier qui commence par la lettre a, en faisant ls, vous voudriez voir que les fichiers commenant par a. De mme si vous voulez appliquer une commande certains fichiers mais pas d'autres. C'est le but des mtacaractres, ils vous permettent de faire une slection de fichiers suivant certains critres. Le mtacaractre le plus frquemment utilis est *, il remplace une chane de longueur non dfinie. Avec le critre *, vous slectionnez tous les fichiers. Par le critre a*, vous slectionnez tous les fichiers commenant par a. s a* Va lister que les fichiers commenant par a. De mme *a opre une slection des noms de fichiers se terminant par a. Le critre *a* va faire une slection sur les noms de fichiers qui ont le caractre a dans leur nom, quelque soit sa place. Le mtacaractre ? remplace un caractre unique. Avec le critre a??, vous slectionnez les fichiers Cours utilisateur UNIX 18/58 http://www.funix.org dont le nom commence par a, mais qui contiennent au total trois caractres, exactement. Les mtacaractres [ ] reprsente une srie de caractres. Le critre [aA]* permet la slection des fichiers dont le nom commence par un a ou A (minuscule ou majuscule). Le critre [a-d]* fait la slection des fichiers dont le nom commence par a jusqu' d. Le critre *[de] fait la slection des fichiers dont le nom se termine par d ou e. Vous voyez donc que les caractres [],* et ? sont des caractres spciaux, qu'on ne peut utiliser comme des simples caractres, parce qu'ils sont interprts par le shell, comme des mtacaractres. Vous pouvez cependant inhiber leur fonctionnement. En tapant : s moh-11ch1eJ? Le shell va interprter le ? comme un mtacaractre et afficher tous les fichiers qui commencent par mon-fichier et qui se termine par un caractre unique quelconque. Si vous ne voulez pas que le ? soit interprt vous devez taper. s moh-11ch1eJ\ ? 8Les droits d'accs 8.1Identification de l'utilisateur On a vu auparavant que pour pouvoir se connecter sur une machine, on doit tre dclar sur la machine. Tout utilisateur appartient un groupe, concrtement dans une universit par exemple vous aurez les professeurs dans le groupe enseignant et les lves dans le groupe lve. Chaque utilisateur est identifi par un numro unique UID (User identification), de mme chaque groupe est identifi par un numro unique GID (Group identification). Vous pouvez voir votre UID et GID en ditant le fichier /etc/passwd, c'est respectivement troisime et quatrime champ, aprs le nom (le login), et le mot de passe crypt. 8.2Dfinition des droits d'utilisateur 8.2.1Cas d'un fichier classique Avec UNIX les fichiers bnficient d'une protection en lecture, criture et excution, c'est dire vous pouvez choisir si vous voulez que vos fichiers soient lisibles et/ou modifiables par d'autres, vous pouvez empcher que d'autres utilisateurs lancent vos excutables. C'est le principe des droits d'accs. Nous avons vu qu'en tapant ls -l le premier champ correspondait au droit d'accs, on avait une sortie de ce type : -JwxJw-J-- 1 o1v1eJ useJs 34568 0ec 3 14 .34 moh-11ch1eJ La signification des lettres rwx et la suivante : Cours utilisateur UNIX 19/58 http://www.funix.org r (read) on peut lire le fichier w (write) on peut modifier le fichier x (excutable) on peut excuter le fichier (c'est donc un excutable) - aucun droit autoris Le champ -rwxrw-r-- regroupe les droits du propritaire du fichier, du groupe auquel appartient le propritaire et les autres utilisateurs. - on a affaire un fichier classique (c'est ni un rpertoire, ni un fichier spcial) rwx droits sur le fichier du propritaire rw- droits sur le fichier du groupe auquel appartient le propritaire (users) r-- droits sur le fichier des autres utilisateurs (ceux n'appartenant au groupe users) Par exemple pour notre fichier le propritaire olivier a des droits en criture, lecture et excution, le groupe a un droit en lecture et criture mais aucun droit en excution, les autres utilisateurs ont uniquement le droit en lecture du fichier. Pour info le 1 aprs les droits signifie que le fichier mon-fichier n'a aucun lien qui pointe vers lui, si on avait eu 2, cela signifiait que quelque part dans l'arborescence, il y a un lien qui pointe vers lui, ce nombre s'incrmentant avec le nombre de lien. 8.2.2Cas d'un rpertoire Pour un rpertoire le x n'est pas un droit en excution, mais un droit d'accs au rpertoire, sans ce droit, on ne peut pas accder au rpertoire et voir ce qu'il y a dedans. En tapant ls -l sur un rpertoire, vous obtenez : dJwxJ-x--- 1 o1v1eJ useJs 13242 0ec 2 13 .14 moh-JpeJ1o1Je d signifie qu'on a affaire un rpertoire, rwx sont les droits du propritaire olivier qui est autoris en lecture, criture et droit d'accs au rpertoirer-x droits du groupe users, autoris en lecture, droit d'accs au rpertoire, pas de droit en criture --- droits des autres utilisateurs, aucun droit dans le cas prsent 8.2.3Cas d'un lien Pour un lien, la signification est similaire celle d'un fichier classique, la diffrence que vous avez un l la place du - en tout dbut de ligne. JwxJwxJwx 1 Joo1 Joo1 14 Aug 1 01.58 ha1 -> ../../b1h/ma1* 8.3Commandes associes 8.3.1Changer les droits : chmod La commande chmod permet de modifier les droits d'accs d'un fichier (ou rpertoire). Pour pouvoir l'utiliser sur un fichier ou un rpertoire, il faut en tre le propritaire. La syntaxe est la suivante : chmod u111sa1euJ opJa11oh dJo11 d`accs u pJopJ11a1Je {useJ) +aou1 d`uh dJo11 J dJo11 eh ec1uJe g gJoupe {gJoup) -suppJess1oh d`uh dJo11 w dJo11 eh cJ11uJe Cours utilisateur UNIX 20/58 http://www.funix.org o es au1Jes {o1heJ) =he J1eh 1a1Je x* * droit en excution pour un fichier, droit d'accs pour un rpertoire. Exemple vous voulez donner un droit en criture pour le groupe du fichier mon-fichier chmod g+w moh-11ch1eJ Pour supprimer le droit d'accs du rpertoire mon-rpertoire aux autres utilisateurs (autres que propritaire et utilisateurs du groupe) chmod o-x moh-JepeJ1o1Je En tapant chmod u+x,g-w moh-11ch1eJ Vous ajoutez le droit en excution pour le propritaire, et enlevez le droit en criture pour le groupe du fichier. Vous avez une autre mthode pour vous servir de la commande chmod. On considre que r=4, w=2 et x=1, si vous avez un fichier avec les droits suivants -rw-rw-rw-, pour les droits utilisateurs vous avez (r=)4+(w=)2=6, de mme pour le groupe et les autres. Donc -rw-rw-rw- est quivalent 666. En suivant la mme rgle rwxrw-r-- est quivalent 754. Pour mettre un fichier avec les droits-r--r--r-- vous pouvez taper : chmod 444 moh-11ch1eJ On appelle ce systme de notation, la notation octale. 8.3.2Changer les droits par dfaut : umask Quand vous crer un fichier, par exemple avec la commande touch, ce fichier par dfaut possde certains droits. Ce sont 666 pour un fichier (-rw-rw-rw-) et 777 pour un rpertoire (-rwxrwxrwx), ce sont les droits maximum. Vous pouvez faire en sorte de changer ces paramtres par dfaut. La commande umask est l pour a. Pour un fichier : Si vous tapez umask 022, vous partez des droits maximum 666 et vous retranchez 022, on obtient donc 644, par dfaut les fichiers auront comme droit 644 (-rw-r-r--). Si vous tapez umask 244, vous partez des droits maximum 666 et vous retranchez 244, on obtient donc 422, par dfaut les fichiers auront comme droit 422 (-rw--w--w-). Pour un rpertoire : Si vous tapez umask 022, vous partez des droits maximum 777 et vous retranchez 022, on obtient donc 755, par dfaut les fichiers auront comme droit 644 (-rwxr-xr-x). Si vous tapez umask 244, vous partez des droits maximum 777 et vous retranchez 244, on obtient donc 533, par dfaut les fichiers auront comme droit 422 (-rwx-wx-wx). Cours utilisateur UNIX 21/58 http://www.funix.org umask n'est utilisatable que si on est propritaire du fichier. 8.3.3Changer le propritaire et le groupe Vous pouvez " donner " un fichier vous appartenant un autre utilisateur, c'est dire qu'il deviendra propritaire du fichier, et que vous n'aurez plus que les droits que le nouveau propritaire voudra bien vous donner sur le fichier. chowh houveau-pJopJ11a1Je hom-11ch1eJ Dans le mme ordre d'ide vous pouvez changer le groupe. chgJp houveau-gJoupe hom-11ch1eJ Ces deux commandes ne sont utilisables que si on est propritaire du fichier. NOTA : Sur certains UNIX suivant leur configuration, on peut interdire l'usage de ces commandes pour des raisons de scurit. 9Gestion des processus 9.1Les caractristiques d'un processus On a vu auparavant, qu'on pouvait un moment donn avoir plusieurs processus en cours, un temps donn. Le systme doit tre capable de les identifier. Pour cela il attribue chacun d'entre eux, un numro appel PID (Process Identification). Un processus peut lui mme crer un autre processus, il devient donc un processus parent ou pre, et le nouveau processus, un processus enfant. Ce dernier est identifi par son PID, et le processus pre par son numro de processus appel PPID (Parent Process Identification). Tous les processus sont ainsi identifis par leur PID, mais aussi par le PPID du processus qui la cr, car tous les processus ont t crs par un autre processus. Oui mais dans tout a, c'est qui a cr le premier processus ? Le seul qui ne suit pas cette rgle est le premier processus lanc sur le systme le processus init qui n'a pas de pre et qui a pour PID 1. 9.2Visualiser les processus On peut visualiser les processus qui tournent sur une machine avec la commande : ps (options), les options les plus intressantes sous HP-UX sont -e (affichage de tous les processus) et -f (affichage dtaille). La commande ps -ef donne un truc du genre : bT0 PT0 PPT0 C STThE TTY TThE C0hhAh0 Joo1 1 0 0 0ec 6 ? 1.02 1h11 ... eah 319 300 0 10.30.30 ? 0.02 /usJ/d1/b1h/d1sess1oh o1v1eJ 321 319 0 10.30.34 11yp1 0.02 csh o1v1eJ 324 321 0 10.32.12 11yp1 0.00 ps -e1 Cours utilisateur UNIX 22/58 http://www.funix.org La s1gh111ca11oh des d111Jeh1es coohhes es1 a su1vah1e. UID nom de l'utilisateur qui a lanc le process PID correspond au numro du process PPID correspond au numro du process parent C au facteur de priorit : plus la valeur est grande, plus le processus est prioritaire STIME correspond l'heure de lancement du processus TTY correspond au nom du terminal TIME correspond la dure de traitement du processus COMMAND correspond au nom du processus. Pour l'exemple donn, partir d'un shell vous avez lanc la commande ps -ef, le premier processus pour PID 321, le deuxime 324. Vous noterez que le PPID du process " ps -ef " est 321 qui correspond au shell, par consquent le shell est le process parent, de la commande qu'on vient de taper. Certains processus sont permanents, c'est dire qu'ils sont lancs au dmarrage du systme et arrts uniquement l'arrt du systme. On appelle ces process des daemons, le terme dmon est une francisation, daemon sont des abrviations. Pour voir les process d'un seul utilisateur, vous pouvez taper : ps -u o1v1eJ D'un UNIX l'autre la sortie peut changer. Sous LINUX par exemple ps -Al permet une sortie assez riche, en faisant un man ps, vous aurez l'ventail de tous les paramtres possibles. 9.3Commandes de gestion des processus 9.3.1Changer la priorit d'un processus Les processus tournent avec un certain degr de priorit, un processus plus prioritaire aura tendance s'accaparer plus souvent les ressources du systme pour arriver le plus vite possible au terme de son excution. C'est le rle du systme d'exploitation de grer ces priorits. Vous disposez de la commande nice pour modifier la priorit d'un processus. La syntaxe est la suivante : h1ce -vaeuJ commahde Plus le nombre est grand, plus la priorit est faible. Par exemple une valeur de 0 donne, la priorit la plus haute 20 donne la priorit la plus faible. La fourchette de valeur dpend de l'UNIX qu'on utilise. Par exemple : h1ce -5 ps -e1 Gnralement on utilise nice sur des commandes qui prennent du temps, sur des commandes courantes l'effet de nice est imperceptible. On l'utilisera par exemple pour compiler un programme. Cours utilisateur UNIX 23/58 http://www.funix.org h1ce -5 cc mohpJogJamme.c 9.3.2Arrter un processus Vous disposez de la commande kill pour arrter un processus, on doit aussi tuer un processus. Si vous voulez arrter un processus, vous devez connatre son PID (commande ps), puis vous tapez : k1 -9 PT0 Un utilisateur ne peut arrter que les processus qui lui appartient (qu'il a lanc). Seul l'administrateur systme a le droit d'arrter un processus ne lui appartenant pas. 9.4Lancer en processus en tche de fond Pour lancer une commande quelconque, vous en saisissez le nom aprs le prompt du shell, tant que la commande n'est pas termine, vous n'avez plus la main au niveau du shell, vous ne disposez plus du prompt. Si la commande prend un certain temps, votre shell ne vous donnera pas la main tant que la commande n'est pas termine, vous tes oblig de lancer un autre shell, pour taper une autre commande. Vous disposez d'une technique simple qui permet de lancer une commande partir d'un shell, et de reprendre aussitt la main. Il vous suffit de rajouter un & la fin de commande. Celle-ci se lancera en " tche de fond ", et vous reviendrez directement au prompt du shell. En tapant une commande en tche de fond, vous aurez l'affichage : > ps e1 & |321] > A la suite de la saisie de la commande suivie d'un &, le shell vous donne immdiatement la main, et affiche le numro du PID du processus lanc. En lanant une commande partir du shell sans le & la fin, et si celle-ci prend du temps vous rendre la main, vous pouvez faire en sorte qu'elle bascule en tche de fond, pour que vous repreniez la main. >he1scape Vous voulez basculer netscape en tche de fond tapez, CTRL+Z, il va afficher 311 s1opped + 311 tant le PID du process netscape. Tapez ensuite bg (pour background), vous voyez s'afficher |311] Ca y est votre processus netscape est en tche de fond et le shell vous rend la main. Cours utilisateur UNIX 24/58 http://www.funix.org 10Les filtres UNIX 10.1Modifier les donnes d'un fichier 10.1.1Coupe un fichier en morceau : split La commande split permet de couper un fichier en morceau (en plusieurs fichiers), en tapant : sp11 -10 moh-11ch1eJ 11ch1eJ Vous allez crer les fichiers fichieraa, fichierab, fichierac, ... qui contiendront tous 10 lignes. Le premier fichieraa contient les 10 premires lignes, ainsi de suite. 10.1.2Trier des fichiers : sort Soit le fichier carnet-adresse suivant : mauJ1ce.29.0298334432.CJozoh maJce.13.0466342233.haJse1e JobeJ1.75.0144234452.PaJ1s yvohhe.92.0133444335.Paa1seau Le premier champ reprsente le nom, le deuxime le dpartement, le troisime le numro de tlphone et le dernier la ville. Attention le premier champ est not 0, le deuxime 1, ainsi de suite. En faisant sort sans argument : soJ1 caJhe1-adJesse Par dfaut il va trier sur le premier caractre et ranger donc dans l'ordre alphabtique : maJce.13.0466342233.haJse1e mauJ1ce.29.0298334432.CJozoh JobeJ1.75.0144234452.PaJ1s yvohhe.92.013344433.Paa1seau Si vous voulez trier sur le deuxime champ (le dpartement), vous devez d'abord indiquer que le : est le caractre qui spare deux champs (par dfaut c'est l'espace), avec l'option -t :. Vous devez ensuite indiquer que vous trier un chiffre avec l'option -n (numrique). Pour indiquer qu'on veut trier le deuxime champ, il faut marquer qu'on veut trier partir du second champ (+1) jusqu'au troisime (-2). Soit le rsultat suivant ; soJ1 -h -1 . +1 -2 caJhe1-adJesse On obtient : maJce.13.0466342233.haJse1e mauJ1ce.29.0298334432.CJozoh JobeJ1.75.0144234452.PaJ1s yvohhe.92.013344433.Paa1seau Cours utilisateur UNIX 25/58 http://www.funix.org Avec la commande : soJ1 -1 . +3 -4 +0 caJhe1-adJesse Vous allez trier suivant le quatrime champ (numro 3), c'est dire la ville (tri par ordre alphabtique sur le premier caractre), en mettant +0, il va effectuer un deuxime tri pour les villes qui commencent par le mme caractre, le deuxime tri porte sur le prnom (le premier caractre). mauJ1ce.29.0298334432.CJozoh maJce.13.0466342233.haJse1e JobeJ1.75.0144234452.PaJ1s yvohhe.92.013344433.Paa1seau Les options de sort sont les suivantes : -b ignore les espaces et les tabulations en dbut de champ -d tri sur les caractres alphanumriques (caractres, chiffres et espace) uniquement -r inverse l'ordre de tri -f pas de diffrence entre minuscule et majuscule -tx Le caractre x est considr comme sparateur de champ -u supprime les lignes doublons -n trie sur des chiffres En tapant la commande suivante : soJ1 -1 . +3.2 +0 caJhe1-adJesse Vous allez effectuer le tri sur le troisime caractre (numro 2, le premier a pour numro 0) du quatrime champ (numro 3). En cas d'galit du premier tri, on fait un dernier tri sur le premier caractre du prnom. Soit le rsultat : yvohhe.92.013344433.Paa1seau mauJ1ce.29.0298334432.CJozoh maJce.13.0466342233.haJse1e JobeJ1.75.0144234452.PaJ1s 10.1.3Conversion de chane de caractre :tr La commande tr permet de convertir une chane de caractre en une autre de taille gale. Les options sont les suivantes : -c Les caractres qui ne sont pas dans la chane d'origine sont convertis selon les caractres de la chane de destination -d destruction des caractres appartenant la chane d'origine -s si la chane de destination contient une suite contigu de caractres identiques, cette suite est rduite un caractre unique La commande tr a besoin qu'on lui redirige en entre un fichier, le rsultat de la conversion s'affichant sur la sortie standard. Soit notre fichier carnet-adresse : mauJ1ce.29.0298334432.CJozoh maJce.13.0466342233.haJse1e Cours utilisateur UNIX 26/58 http://www.funix.org JobeJ1.75.0144234452.PaJ1s yvohhe.92.013344433.Paa1seau Pour remplacer le : par un #, nous taperons : 1J " . " " # " < caJhe1-adJesse Pour faire la mme chose on peut aussi bien diter le fichier avec cat et rediriger par pipe vers tr, en tapant : ca1 caJhe1-adJesse ] 1J " . " " # " On peut utiliser des mtacaractres. En tapant : ca1 caJhe1-adJesse ] 1J " |a-1] " " |A-F] " Vous allez remplacer les caractres de a f de minuscule en majuscule. Soit: mAuJ1CE.29.0298334432.CJozoh mAJCE.13.0466342233.hAJsE1E JobEJ1.75.0144234452.PAJ1s yvohhE.92.013344433.PAA1sEAu 10.2Edition de fichiers avec critres 10.2.1Editer un fichier par la fin : tail Si vous avez un fichier trs long, et que vous voulez visualiser que la fin, vous disposez de la commande tail : La syntaxe est la suivante, si vous tapez : 1a1 +10 moh-11ch1eJ Vous obtenez toutes les lignes du fichier de la 10eme jusqu' la fin. 1a1 -10 moh-11ch1eJ Vous obtenez les 10 dernires lignes partir de la fin. Vous pouvez indiquer si votre unit est la ligne (par dfaut), le bloc ou le caractre avec l'option -t 1a1 -10 -c moh-11ch1eJ Vous obtenez les 10 derniers caractres du fichier. 10.2.2Editer un fichier par le dbut : head Si vous avez un fichier trs long, et que vous voulez visualiser que le dbut, vous disposez de la commande head : La syntaxe est la suivante, si vous tapez : head +10 moh-11ch1eJ Cours utilisateur UNIX 27/58 http://www.funix.org Vous obtenez toutes les lignes du fichier de la 10eme jusqu'au dbut. head -10 moh-11ch1eJ Vous obtenez les 10 premires lignes partir du dbut. Vous pouvez indiquer si votre unit est la ligne (par dfaut), le bloc ou le caractre avec l'option -t head -10 -c moh-11ch1eJ Vous obtenez les 10 premiers caractres du fichier. 10.2.3Compter les lignes d'un fichier : wc La commande wc permet de compter le nombre de ligne d'un fichier, mais aussi le nombre de mot ou de caractres. wc - moh-11ch1eJ Cette commande va donner le nombre de lignes contenues dans le fichier mon-fichier. Pour avoir le nombre de mot l'option est -w, l'option -c compte le nombre de caractres. La commande wc sans option donne la fois le nombre de ligne, le nombre de caractres et le nombre de mots. Si vous voulez connatre le nombre de fichier dans un rpertoire, la commande sera donc : s - ] wc - 10.2.4Edition de champ d'un fichier : cut La commande cut permet d'extraire certains champs d'un fichier. Les options sont les suivantes : -c extrait suivant le nombre de caractres -f extrait suivant le nombre de champs -dx Le caractre x est le sparateur de champ Avec la commande cut, contrairement sort, le premier champ a comme numro 1, le deuxime 2 est ainsi de suite. Nous prendrons toujours notre fichier carnet-adresse : mauJ1ce.29.0298334432.CJozoh maJce.13.0466342233.haJse1e JobeJ1.75.0144234452.PaJ1s yvohhe.92.013344433.Paa1seau La commande : cu1 -c-10 caJhe1 adJesse Va extraire les 10 premiers caractres de chaque ligne, on obtient : mauJ1ce.29 maJce.13. JobeJ1.75. Cours utilisateur UNIX 28/58 http://www.funix.org yvohhe.92. La commande : cu1 -c2-5 caJhe1 adJesse Va extraire les deuxime au cinquime caractre de chaque ligne. auJ1 aJce obeJ vohh La commande : cu1 -c25- Va extraire du 25eme caractre jusqu' la fin de chaque ligne. La commande : cu1 -d. -11,4 caJhe1 adJesse Va extraire le premier et quatrime champ, le : fixant le sparateur de champ. On obtient : mauJ1ce.CJozoh maJce.haJse1e JobeJ1.PaJ1s yvohhe.Paa1seau La commande : cu1 -d . -13- caJhe1 adJesse Va extraire du troisime champ jusqu'au dernier champ, soit : 0298334432.CJozoh 0466342233.haJse1e 0144234452.PaJ1s 0133444335.Paa1seau 10.2.5Fusion de fichier : paste La commande paste permet la fusion de lignes de fichiers. Les options sont les suivantes : -dx Le caractre x dfinit le sparateur de champ -s Les lignes sont remplaces par des colonnes Soit le fichier carnet-adresse : mauJ1ce.29.0298334432.CJozoh maJce.13.0466342233.haJse1e JobeJ1.75.0144234452.PaJ1s yvohhe.92.013344433.Paa1seau Et le fichier travail : 1hgh1euJ Cours utilisateur UNIX 29/58 http://www.funix.org p11ss1eJ 1ac1euJ vehdeuse En tapant la commande : pas1e -d . caJhe1-adJesse 1Java1 Vous obtenez : mauJ1ce.29.0298334432.CJozoh.1hgh1euJ maJce.13.0466342233.haJse1e.p11ss1eJ JobeJ1.75.0144234452.PaJ1s.1ac1euJ yvohhe.92.013344433.Paa1seau.vehdeuse Vous pouvez videmment rediriger le rsultat vers un fichier. 10.2.6Extraction de lignes communes de deux fichiers : comm Cette commande permet d'extraire les lignes communes deux fichiers, soit le fichier carnet- adresse : mauJ1ce.29.0298334432.CJozoh maJce.13.0466342233.haJse1e JobeJ1.75.0144234452.PaJ1s yvohhe.92.013344433.Paa1seau Et carnet-adresse2 o1v1eJ.29.0298333242.BJes1 maJce.13.0466342233.haJse1e myJ1am.30.0434214452.h1mes yvohhe.92.013344433.Paa1seau La commande : comm caJhe1-adJesse caJhe1-adJesse2 Nous donnera : maJce.13.0466342233.haJse1e yvohhe.92.013344433.Paa1seau 10.3Comparaison de fichiers 10.3.1Comparer deux fichiers : cmp La commande cmp indique si deux fichiers sont identiques. En tapant : cmp 11ch1eJ1 11ch1eJ2 Si les deux sont identiques, la commande ne gnre aucune sortie, s'ils sont diffrents la commande indique la position de la premire diffrence (ligne et caractre), avec une sortie du genre : 11ch1eJ1 11ch1eJ2 d111eJ . chaJ 34, 1he 2 Cours utilisateur UNIX 30/58 http://www.funix.org 10.3.2Edition des diffrences entre deux fichiers : diff Cette commande permet de rechercher les diffrences entre deux fichiers. La syntaxe est la suivante diff fichier1 fichier2, diff fait en sorte de vous donner des indications pour que le fichier1 soit identique au fichier2. Soit le fichier carnet-adresse : o1v1eJ.29.0298333242.BJes1 maJce.13.0466342233.haJse1e myJ1am.30.0434214452.h1mes yvohhe.92.013344433.Paa1seau 1o1o.12.0434231122.Rodez et carnet-adresse2 o1v1eJ.29.0298333242.BJes1 maJce.13.0466342233.CaJdaghes myJ1am.30.0434214452.h1mes yvohhe.92.013344433.Paa1seau La commande : d111 caJhe1-adJesse caJhe1-adJesse2 Gnre comme sortie : 2c2 < maJce.13.0466342233 .haJse1e --- <maJce.13.0466342233 .CaJdaghes 5d >1o1o .12 .0434231122 .Rodez Ce qui nous indique que pour carnet-adresse soit identique carnet-adresse2, il faut que la deuxime ligne du premier fichier soit change (c pour change) contre la ligne du second. Il faut aussi supprimer (d pour delete) la cinquime ligne du premier fichier. Dans d'autres exemples, on pourrait avoir aussi une sortie du genre 10,15c 12,17 ce qui signifie que pour que le premier fichier soit identique au second, les lignes 10 15 doivent intgralement changes contre les lignes 12 17 du second fichier. 11Les commandes grep et find 11.1Les expressions rgulires On a vu auparavant ce qu'taient les mtacaractres. Les expressions rgulires sont aussi des suites de caractres permettant de faire des slections. Elles fonctionnent avec certaines commandes comme grep. Les diffrentes expressions rgulires sont : ^ dbut de ligne . un caractre quelconque Cours utilisateur UNIX 31/58 http://www.funix.org $ fin de ligne x* zro ou plus d'occurrences du caractre x x+ une ou plus occurrences du caractre x x? une occurrence unique du caractre x [...] plage de caractres permis [^...] plage de caractres interdits \ {n\} pour dfinir le nombre de rptition n du caractre plac devant Exemple l'expression [a-z][a-z] * cherche les lignes contenant au minimum un caractre en minuscule. [a-z] caractre permis, [a-z]* recherche d'occurrence des lettres permises. L'expression ^[0-9]\ {4\}$ a pour signification, du dbut la fin du fichier $, recherche les nombres [0-9] de 4 chiffres \ {4\}. 11.2La commande grep La commande grep permet de rechercher une chane de caractres dans un fichier. Les options sont les suivantes : -v affiche les lignes ne contenant pas la chane -c compte le nombre de lignes contenant la chane -n chaque ligne contenant la chane est numrote -x ligne correspondant exactement la chane -l affiche le nom des fichiers qui contiennent la chane Exemple avec le fichier carnet-adresse : o1v1eJ.29.0298333242.BJes1 maJce.13.0466342233.CaJdaghes myJ1am.30.0434214452.h1mes yvohhe.92.013344433.Paa1seau On peut utiliser les expressions rgulires avec grep. Si on tape la commande : gJep |a-d] caJhe1-adJesse On va obtenir tous les lignes commenant par les caractres compris entre a et d. Dans notre exemple, on n'en a pas, d'o l'absence de sortie. gJep BJes1 caJhe1-adJesse Permet d'obtenir les lignes contenant la chane de caractre Brest, soit : o1v1eJ.29.0298333242.BJes1 Il existe aussi les commandes fgrep et egrep quivalentes. Cours utilisateur UNIX 32/58 http://www.funix.org 11.3La commande find 11.3.1Prsentation La commande find permet de retrouver des fichiers partir de certains critres. La syntaxe est la suivante : 11hd <JpeJ1o1Je de JecheJche> <cJ11Jes de JecheJche> Les critres de recherche sont les suivants : -name recherche sur le nom du fichier, -perm recherche sur les droits d'accs du fichier, -links recherche sur le nombre de liens du fichier, -user recherche sur le propritaire du fichier, -group recherche sur le groupe auquel appartient le fichier, -type recherche sur le type (d=rpertoire, c=caractre, f=fichier normal), -size recherche sur la taille du fichier en nombre de blocs (1 bloc=512octets), -atime recherche par date de dernier accs en lecture du fichier, -mtime recherche par date de dernire modification du fichier, -ctime recherche par date de cration du fichier. On peut combiner les critres avec des oprateurs logiques : critre1 critre2 ou critre1 -a critre2 correspond au et logique, !critre non logique, \ (critre1 -o critre2\) ou logique, La commande find doit tre utilis avec l'option -print. Sans l'utilisation de cette option, mme en cas de russite dans la recherche, find n'affiche rien la sortie standard (l'cran, plus prcisment le shell). La commande find est rcursive, c'est dire o que vous tapiez, il va aller scruter dans les rpertoires, et les sous rpertoires qu'il contient, et ainsi de suite. 11.3.2Recherche par nom de fichier Pour chercher un fichier dont le nom contient la chane de caractres toto partir du rpertoire /usr, vous devez tapez : 11hd /usJ -hame 1o1o -pJ1h1 En cas de russite, si le(s) fichier(s) existe(nt), vous aurez comme sortie : 1o1o En cas d'chec, vous n'avez rien. Pour rechercher tous les fichiers se terminant par .c dans le rpertoire /usr, vous taperez : 11hd /usJ -hame " *.c " -pJ1h1 Cours utilisateur UNIX 33/58 http://www.funix.org Vous obtenez toute la liste des fichiers se terminant par .c sous les rpertoires contenus dans /usr (et dans /usr lui mme). 11.3.3Recherche suivant la date de dernire modification Pour connatre les derniers fichiers modifis dans les 3 derniers jours dans toute l'arborescence (/), vous devez taper : 11hd / -m11me 3 -pJ1h1 11.3.4Recherche suivant la taille Pour connatre dans toute l'arborescence, les fichiers dont la taille dpasse 1Mo (2000 blocs de 512Ko), vous devez taper : 11hd / -s1ze 2000 -pJ1h1 11.3.5Recherche combine Vous pouvez chercher dans toute l'arborescence, les fichiers ordinaires appartenant olivier, dont la permission est fixe 755, on obtient : 11hd / -1ype 1 -useJ o1v1eJ -peJm 755 -pJ1h1 11.3.6Redirection des messages d'erreur Vous vous rendrez compte assez rapidement qu'en tant que simple utilisateur, vous n'avez pas forcment le droit d'accs un certain nombre de rpertoires, par consquent, la commande find peut gnrer beaucoup de messages d'erreur (du genre permission denied), qui pourraient noyer l'information utile. Pour viter ceci, vous pouvez rediriger les messages d'erreur dans un fichier poubelle (comme /dev/null), les messages d'erreur sont alors perdus (rien ne vous empche de les sauvegarder dans un fichier, mais a n'a aucune utilit avec la commande find). 11hd . -hame bobo -pJ1h1 Recherche en utilisant les oprateurs logiques Si vous voulez connatre les fichiers n'appartenant pas l'utilisateur olivier, vous taperez : 11hd . ! -useJ o1v1eJ -pJ1h1 ! -user olivier, est la ngation de -user olivier, c'est dire c'est tous les utilisateurs sauf olivier. Recherche des fichiers qui ont pour nom a.out et des fichiers se terminant par .c. On tape : 11hd . \ { -hame a.ou1 -o -hame " *.c " \ ) -pJ1h1 On recherche donc les fichiers dont le nom est a.out ou les fichiers se terminant par *.c, une condition ou l'autre. Recherche des fichiers qui obissent la fois la condition a pour nom core et la condition a une taille suprieure 1Mo. Cours utilisateur UNIX 34/58 http://www.funix.org 11hd . \ {-hame coJe -a s1ze +2000 \ ) -pJ1h1 11.3.7Les commandes en option L'option -print est une commande que l'on passe find pour afficher les rsultats la sortie standard. En dehors de print, on dispose de l'option -exec. find coupl avec exec permet d'excuter une commande sur les fichiers trouvs d'aprs les critres de recherche fixs. Cette option attend comme argument une commande, celle ci doit tre suivi de {}\ ;. Exemple recherche des fichiers ayant pour nom core, suivi de l'effacement de ces fichiers. 11hd . -hame coJe -exec Jm {}\ , Tous les fichiers ayant pour nom core seront dtruits, pour avoir une demande de confirmation avant l'excution de rm, vous pouvez taper : 11hd . -hame coJe -ok Jm {}\ , 11.3.8Autres subtilits Une fonction intressante de find est de pouvoir tre utilis avec d'autres commandes UNIX. Par exemple: 11hd . -1ype 1 -pJ1h1 ] xaJgs gJep 1o1o En tapant cette commande vous allez rechercher dans le rpertoire courant tous les fichiers normaux (sans les rpertoires, fichiers spciaux), et rechercher dans ces fichiers tous ceux contenant la chane toto. 12Expressions rgulires et sed 12.1Les expressions rgulires 12.1.1Prsentation Une expression rgulire (en anglais Regular Expression ou RE) sert identifier une chane de caractre rpondant un certain critre (par exemple chane contenant des lettres minuscules uniquement). L'avantage d'une expression rgulire est qu'avec une seule commande on peut raliser un grand nombre de tche qui seraient fastidieuses faire avec des commandes UNIX classiques. Les commandes ed, vi, ex, sed, awk, expr et grep utilisent les expressions rgulires. L'exemple le plus simple d'une expression rgulire est une chane de caractres quelconque toto par exemple. Cette simple expression rgulire va identifier la prochaine ligne du fichier traiter contenant une chane de caractre correspondant l'expression rgulire. Si l'on veut chercher une chane de caractre au sein de laquelle se trouve un caractre spcial (/, *, $, ., [, ], {, }, !, entre autres) (appel aussi mtacaractre), on peut faire en sorte que ce caractre ne Cours utilisateur UNIX 35/58 http://www.funix.org soit pas interprt comme un caractre spcial mais comme un simple caractre. Pour cela vous devez le faire prcder par \ (backslash). Ainsi si votre chane est /dev, pour que le / ne soit pas interprt comme un caractre spcial, vous devez tapez \ /dev pour l'expression rgulire. 12.1.2Le mtacaractre . Le mtacaractre . remplace dans une expression rgulire un caractre unique, l'exception du caractre retour chariot (\ n). Par exemple chaine. va identifier toutes les lignes contenant la chaine chaine suivit d'un caractre quelconque unique. Si vous voulez identifier les lignes contenant la chane .cshrc, l'expression rgulire correspondante est \ .cshrc 12.1.3Les mtacaractres [ ] Les mtacaractres [] permettent de dsigner des caractres compris dans un certain intervalle de valeur une position dtermine d'une chane de caractres. Par exemple [Ff]raise va identifier les chanes Fraise ou fraise, [a-z]toto va identifier une chane de caractre commenant par une lettre minuscule (intervalle de valeur de a z) et suvi de la chane toto (atoto, btoto, ...., ztoto). D'une manire plus gnrale voici comment [] peuvent tre utiliss. [A-D] intervalle de A D (A, B, C, D) par exemple bof[A-D] donne bofA, bofB, bofC, bofD [2-5] intervalle de 2 5 (2, 3, 4, 5) par exemple 12[2-5]2 donne 1222, 1232, 1242, 1252 [2-56] intervalle de 2 5 et 6 (et non pas 56) (2, 3, 4, 5, 6) par exemple 12[2-56]2 donne 1222, 1232, 1242, 1252, 1262 [a-dA-D] intervalle de a d et A D (a, b, c, d, A, B, C, D) par exemple z[a-dA-D]y donne zay, zby, zcy, zdy, zAy, zBy, zCy, zDy [1-3-] intervalle de 1 3 et - (1, 2, 3, -) par exemple [1-3-]3 donne 13, 23, 33, -3 [a-cI-K1-3] intervalle de a c, I K et 1 3 (a, b, c, I, J, K, 1, 2, 3) On peut utiliser [] avec un pour identifier le complment de l'expression rgulire. En franais pour identifier l'oppos de l'expression rgulire. Vous avez toujours pas compris ? Voici un exemple: [^0-9]toto identifie les lignes contenant une chane toto, le caractre juste avant ne doit pas tre un chiffre (exemple atoto, gtoto mais pas 1toto, 5toto). Autre exemple [^a-zA-Z] n'importe quel caractre sauf une lettre minuscule ou majuscule. Attention la place de ^, si vous tapez [1-3^], c'est quivalent aux caractres 1, 2, 3 et ^. 12.1.4Les mtacaractres ^ et $ Le mtacaractre ^ identifie un dbut de ligne. Par exemple l'expression rgulire ^a va identifier les lignes commenant par le caractre a. Le mtacaractre $ identifie une fin de ligne. Par exemple l'expression rgulire a$ va identifier les lignes se terminant par le caractre a. L'expression rgulire ^chaine$ identifie les lignes qui contiennent strictement la chane chaine. Cours utilisateur UNIX 36/58 http://www.funix.org L'expression rgulire ^$ identifie une ligne vide. 12.1.5Le mtacaractre * Le mtacaractre * est le caractre de rptition. L'expression rgulire a* correspond aux lignes comportant 0 ou plusieurs caractre a. Son utilisation est proscrire, car toutes les lignes, mme celles ne contenant pas le caractre a, rpondent aux critres de recherche. x* est une source de problmes, il vaut mieux viter de l'employer. L'expression rgulire aa* correspond aux lignes comportant 1 ou plusieurs caractres a. L'expression rgulire .* correspond n'importe quelle chane de caractres. L'expression rgulire [a-z][a-z]* va chercher les chanes de caractres contenant 1 ou plusieurs lettres minuscules (de a z). L'expression rgulire [^ ][^ ]* est quivalent tout sauf un blanc. 12.1.6Les mtacaractres \ ( \) Pour le traitement complexe de fichier, il est utile parfois d'identifier un certain type de chane pour pouvoir s'en servir dans la suite du traitement comme un sous programme. C'est le principe des sous chanes, pour mmoriser une sous chane, on utilise la syntaxe \ (expression rgulire)\, cette sous chane sera identifi par un chiffre compris par 1 et 9 (suivant l'ordre de dfinition). Par exemple \ ([a-z][a-z]*)\ est une sous chane identifiant les lignes contenant une ou plusieurs lettres minuscules, pour faire appel cette sous chane, on pourra utiliser \ 1. Voir dans le paragraphe sed pour un exemple. 12.2La commande sed 12.2.1Prsentation sed est diteur ligne non interactif, il lit les lignes d'un fichier une une (ou provenant de l'entre standard) leur applique un certain nombre de commandes d'dition et renvoie les lignes rsultantes sur la sortie standard. Il ne modifie pas le fichier trait, il crit tout sur la sortie standard. sed est une volution de l'diteur ed lui mme prcurseur de vi, la syntaxe n'est franchement pas trs conviviale, mais il permet de raliser des commandes complexes sur des gros fichiers. La syntaxe de sed est la suivante: sed -e `pJogJamme sed` 11ch1eJ-a-1Ja11eJ ou sed -1 11ch1eJ-pJogJamme 11ch1eJ-a-1Ja11eJ Vous disposez de l'option -n qui supprime la sortie standard par dfaut, sed va crire uniquement les Cours utilisateur UNIX 37/58 http://www.funix.org lignes concernes par le traitement (sinon il crit tout mme les lignes non traites). L'option -e n'est pas ncessaire quand vous avez une seule fonction d'dition. La commande sed est une commande trs riche, ne vous sont prsentes ici que les fonctions les plus courantes, pour plus de dtails faites un man sed et/ou man ed. 12.2.2La fonction de substitution s La fonction de substitution s permet de changer la premire ou toutes les occurences d'une chane par une autre. La syntaxe est la suivante: sed "s/toto/TOTO/" fichier va changer la premire occurence de la chane toto par TOTO (la premire chane toto rencontre dans le texte uniquement) sed "s/toto/TOTO/3" fichier va changer la troisime occurence de la chane toto par TOTO (la troisime chane toto rencontre dans le texte uniquement) sed "s/toto/TOTO/g" fichier va changer toutes les occurences de la chane toto par TOTO (toutes les chanes toto rencontres sont changes sed "s/toto/TOTO/p" fichier en cas de remplacement la ligne concerne est affiche sur la sortie standard (uniquement en cas de substitution) sed "s/toto/TOTO/w resultat" fichier en cas de substitution la ligne en entre est inscrite dans un fichier rsultat La fonction de substitution peut videmment tre utilise avec une expression rgulire. sed -e "s/[Ff]raise/FRAISE/g" fichier substitue toutes les chanes Fraise ou fraise par FRAISE 12.2.3La fonction de suppression d La fonction de suppression d supprime les lignes comprises dans un intervalle donn. La syntaxe est la suivante: sed "20,30d" 11ch1eJ Cette commande va supprimer les lignes 20 30 du fichier fichier. On peut utiliser les expressions rgulires: sed "/1o1o/d" 11ch1eJ Cette commande supprime les lignes contenant la chane toto. Si au contraire on ne veut pas effacer les lignes contenant la chane toto (toutes les autres sont supprimes), on tapera: sed "/1o1o/!d" 11ch1eJ En fait les lignes du fichier d'entre ne sont pas supprimes, elles le sont au niveau de la sortie standard. Cours utilisateur UNIX 38/58 http://www.funix.org 12.2.4Les fonctions p, l, et = La commande p (print) affiche la ligne slectionne sur la sortie standard. Elle invalide l'option -n. La commande l (list) affiche la ligne slectionne sur la sortie standard avec en plus les caractres de contrles en clair avec leur code ASCII (deux chiffres en octal). La commande = donne le numro de la ligne slectionne sur la sortie standard. Ces trois commandes sont utiles pour le dbogage, quand vous mettez au point vos programmes sed. sed "/1o1o/=" 11ch1eJ Cette commande va afficher le numro de la ligne contenant la chane toto. 12.2.5Les fonctions q, r et w La fonction q (quit) va interrompre l'excution de sed, la ligne en cours de traitement est affiche sur la sortie standard (uniquement si -n n'a pas t utilise). La fonction r (read) lit le contenu d'un fichier et crit le contenu sur la sortie standard. La fonction w (write) crit la ligne slectionne dans un fichier. sed "/1o1o/w Jesu1a1" 11ch1eJ Cette commande va crire dans le fichier resultat toutes les lignes du fichier fichier commenant par la chane toto. 12.2.6Les fonctions a et i La fonction a (append) va placer un texte aprs la ligne slectionne. La syntaxe est la suivante: a\ e 1ex1e La fonction i (insert) va placer un texte avant la ligne slectionne. La syntaxe est la suivante: 1\ e 1ex1e Si votre texte tient sur plusieurs lignes la syntaxe pour le texte est la suivante: 1ghe 1 du 1ex1e\ 1ghe 2 du 1ex1e \ 1ghe h du 1ex1e \ deJh1Je 1ghe Concrtement vous pouvez appeler la fonction i ou a dans un fichier de commande de sed. Par exemple, soit votre fichier prog.sed suivant: 11\ dbu1 du 1Ja11emeh1 Cours utilisateur UNIX 39/58 http://www.funix.org s/|1T]o1o/T0T0/g $a \ 11h du 1Ja11emeh1\ de ho1Je 11ch1eJ On excute la commande en tapant: sed -1 pJog.sed 11ch1eJ-a-1Ja11eJ prog.sed a pour effet d'inscrire avant la premire ligne (1i) le texte "dbut de traitement", et aprs la dernire ligne ($a) le texte "fin du traitement (retour la ligne) de notre fichier". 12.2.7sed et les sous chanes La commande: sed -e "s/\ {|0-9]|0-9]*\ )/aa\ 1aa/" 11ch1eJ La sous expression (sous chane) \ ([0-9][0-9]*\) dsigne un ou plusieurs chiffres, chacun sera entour des caractres aa. La chane to2to deviendra toaa2aato. 13La commande awk 13.1Prsentation 13.1.1Prsentation et syntaxe awk est une commande trs puissante, c'est un langage de programmation a elle tout seule qui permet une recherche de chanes et l'excution d'actions sur les lignes slectionnes. Elle est utile pour rcuperer de l'information, gnrer des rapports, transformer des donnes entre autres. Une grande partie de la syntaxe a t emprunte au langage c, d'ailleurs awk sont les abrviations de ces 3 crateurs dont k pour Kernighan, un des inventeurs du c. La syntaxe de awk est la suivante: awk |-F] |-v vaJ=vaeuJ] `pJogJamme` 11ch1eJ ou awk |-F] |-v vaJ=vaeuJ] -1 11ch1eJ-coh11g 11ch1eJ L'argument -F doit tre suivi du sparateur de champ (-F: pour un ":" comme sparateur de champ). L'argument -f suivi du nom du fichier de configuration de awk. L'argument -v dfinit une variable (var dans l'exemple) qui sera utilise par la suite dans le programme. Un programme awk possde la structure suivante: critre de slection d'une chane {action}, quand il n'y a pas de critre c'est que l'action s'applique toutes les lignes du fichier. Cours utilisateur UNIX 40/58 http://www.funix.org Exemple: awk -F"." `{pJ1h1 $hF}` /e1c/passwd Il n'y a pas de critres, donc l'action s'applique toutes les lignes du fichier /etc/passwd. L'action consiste afficher le nombre de champ du fichier. NF est une variable prdfinie d'awk, elle est gale au nombre de champs dans une ligne. Gnralement on utilisera awk en utilisant un script. #!/b1h/sh awk |-F] |-v vaJ=vaeuJ] `pJogJamme` $1 Vous appelerez votre script mon-script.awk, lui donnerez des droits en excution (755 par exemple), et l'appelerez ainsi: moh-scJ1p1.awk 11ch1eJ-a-1Ja11eJ Dans la suite du cours, on utilisera awk en sous entendant que celui-ci est insrer dans un script. Le quote ' se trouve sur un clavier azerty standard avec le 4 et ventuellement l'accolade gauche. ATTENTION: ils existent plusieurs "varits" de awk, il se pourrait que certaines fonctions ou variables systmes qui vous sont prsentes dans ce cours n'existent pas sur votre UNIX. Faites en sorte si vos scripts awk doivent fonctionner sur des plates-formes diffrentes d'utiliser gawk sous licence GNU qui est totalement POSIX. J'ai constat des grosses diffrences de comportement entre le awk natif qu'on soit sous HP-UX, Solaris et sous LINUX, de mme quand on insre la commande dans un script, on fait appel un shell, suivant son type (bash shell, csh, ksh, ...), vous pouvez avoir quelques surprises. 13.1.2Enregistrements et champs awk scinde les donnes d'entre en enregistrements et les enregistrements en champ. Un enregistrement est une chane d'entre dlimite par un retour chariot, un champ est une chane dlimite par un espace dans un enregistrement. Par exemple si le fichier traiter est /etc/passwd, le caractre de sparation tant ":", un enregistrement est une ligne du fichier, et un champ correspond au chane de caractre spar par un ":" (login:mot de passe crypt:UID:GID:commentaires:home directory:shell). Dans un enregistrement les champs sont rfrencs par $1, $2, ..., $NF (dernier champ). Par exemple pour /etc/passwd $1 correspond au login, $2 au mot de passe crypt, $3 l'UID, et $NF (ou $7) au shell. L'enregistrement complet (une ligne d'un fichier) est rfrenc par $0. Par exemple, si l'on veut voir les champs login et home directory de /etc/passwd, on tapera: awk -F"." `{pJ1h1 $1,$6}` /e1c/passwd Cours utilisateur UNIX 41/58 http://www.funix.org 13.2Critres de slection 13.2.1Prsentation Un critre peut tre une expression rgulire, une expression ayant une valeur chane de caractres, une expression arithmtique, une combinaison des expressions prcdentes. Le critre est insr entre les chanes BEGIN et END, avec la syntaxe suivante: awk -F"." `BECTh{1hs1Juc11ohs} cJ11Jes Eh0{1hs1Juc11ohs}` 11ch1eJ BEGIN peut tre suivi d'instruction comme une ligne de commentaire ou pour dfinir le sparateur. Exemple BEGIN { print"Vrification d'un fichier"; FS=":"}. Le texte afficher peut tre un rsum de l'action de awk. De mme pour END on peut avoir END{print "travail termin"} qui indiquera que la commande a achev son travail. Le END n'est pas obligatoire, de mme que le BEGIN. 13.2.2Les expressions rgulires La syntaxe est la suivante: /expJess1oh Jgu1Je/ {1hs1Juc11ohs} $0 /expJess1oh Jgu1Je/ {1hs1Juc11ohs} les instructions sont excutes pour chaque ligne contenant une chane satisfaisant l'expression rgulire. expJess1oh /expJess1oh Jgu1Je/{1hs1Juc11ohs} les instructions sont excutes pour chaque ligne o la valeur chane de l'expression contient une chane satisfaisant l'expression rgulire. expJess1oh !/expJess1oh Jgu1Je/ {1hs1Juc11ohs} les instructions sont excutes pour chaque ligne o la valeur chane de l'expression ne contient pas une chane satisfaisant l'expression rgulire. Soit le fichier adresse suivant (nom, numro de tlphone domicile, numro de portable, numro quelconque): gwehae ] 0298452223 ] 0638431234 ] 50 maJce ] 0466442312 ] 0638453211 ] 31 ud11h ] 0154674487 ] 0645227937 ] 23 L'exemple suivant vrifie que dans le fichier le numro de tlphone domicile (champ 2) et le numro de portable (champ 3) sont bien des nombres. awk `BECTh { pJ1h1 "0h vJ111e es humJos de 1phohe, FS="]"} $2 ! /|0-9]|0-9]*$/ { pJ1h1 "EJJeuJ suJ e humJo de 1phohe dom1c1e, 1ghe h"hR". \ h"$0} $3 ! /|0-9]|0-9]*$/ { pJ1h1 "EJJeuJ suJ e humJo de 1phohe du poJ1abe, 1ghe h"hR". \ h"$0} Eh0 { pJ1h1 "vJ111ca11oh 1eJm1h"} ` adJesse Cours utilisateur UNIX 42/58 http://www.funix.org BEGIN est suivi d'une instruction d'affichage qui rsume la fonction de la commande, et de la dfinition du sparateur de champ. L'expression $2 se rfre au deuxime champ d'une ligne (enregistrement) de adresse soit le numro de tlphone domicile, on recherche ceux qui ne contiennent pas de chiffre (ngation de contient des chiffres), en cas de succs on affichera un message d'erreur, le numro de ligne courante, un retour la ligne, puis le contenu entier de la ligne. L'expression $3 se rfre au troisime champ d'une ligne (enregistrement) de adresse soit le numro du portable, on recherche ceux qui ne contiennent pas de chiffre (ngation de contient des chiffres), en cas de succs on affichera un message d'erreur, le numro de ligne courante, un retour la ligne, puis le contenu entier de la ligne. END est suivi d'une instruction d'affichage indiquant la fin du travail. 13.2.3Les expressions relationnelles Un critre peut contenir des oprateurs de comparaison (- <, <=,==,!=,>=,>). Exemple avec le fichier adresse suivant: awk `BECTh { pJ1h1 "0h cheJche 1ghes doh1 e humJo {champ 4) es1 supJ1euJ 30", FS="]"} $4 > 30 { pJ1h1 "humJo supJ1euJ 30 a 1ghe h"hR". \ h"$0} Eh0 { pJ1h1 "vJ111ca11oh 1eJm1h"} ` adJesse 13.2.4Combinaison de critres Un critre peut tre constitu par une combinaison boolenne avec les oprateurs ou (||), et (&&) et non (!). Exemple: awk `BECTh { pJ1h1 "0h cheJche a 1ghe avec ud11h ou avec uh humJo 1h1J1euJ 30", FS="]"} $1 = = "ud11h" ]] $4 < 30 { pJ1h1 "PeJsohhe "$1" humJo "$4" 1ghe h"hR". \ h"$0} Eh0 { pJ1h1 "vJ111ca11oh 1eJm1h"} ` adJesse 13.2.5Plage d'enregistrement dlimites par des critres La syntaxe est la suivante critre1,critre2 {instructions}. Les instructions sont excutes pour toute les lignes entre la ligne rpondant au critre1 et celle au critre2. L'action est excute pour les lignes comprises entre la ligne 2 et 6. awk `BECTh hR==2,hR==6 { pJ1h1 "1ghe h"hR".\ h"$0} Eh0 ` adJesse 13.3Les actions 13.3.1Prsentation Les actions permettent de transformer ou de manipuler les donnes, elles contiennent une ou plusieurs instructions. Les actions peuvent tre de diffrents types: fonctions prdfinies, fonctions de contrle, fonctions d'affectation, fonctions d'affichage. Cours utilisateur UNIX 43/58 http://www.funix.org 13.3.2Fonctions prdfinies traitant des numriques atan2(y,x) arctangente de x/y en radian (entre -pi et pi) cos(x) cosinus (radian) exp(x) exponentielle la puissance x int(x) partie entire log(x) logarithme naturel rand(x) nombre alatoire (entre 0 et 1) sin(x) sinus (radian) sqr(t) racine carre srand(x) dfinition d'une valeur de dpart pour gnrer un nombre alatoire 13.3.3Fonctions prdfinies traitant de chanes de caractres Pour avoir la liste des fonctions prdfinies sur votre plate-forme vous devez faire un man awk, voici la liste des fonctions les plus courantes sur un systme UNIX. gsub(expression-rgulire,nouvelle-chaine,chaine-de-caractres) dans chaine-de-caractres tous les caractres dcrits par l'expression rgulire sont remplacs par nouvelle-chaine. gsub et quivalent gensub. gsub(/a/,"ai",oi") Remplace la chaine oi par ai index(chaine-de-caractres,caractre--rechercher) donne la premire occurence du caractre-- rechercher dans la chaine chaine-de-caractres n=index("patate","ta") n=3 length(chaine-de-caractres) renvoie la longueur de la chaine-de- caractres n=length("patate") n=6 match(chaine-de-caractres,expression-rgulire) renvoie l'indice de la position de la chane chaine-de-caractres, repositionne RSTART et RLENGTH n=match("PO1235D",/[0-9][0-9]/) n=3, RSTART=3 et RLENGTH=4 printf(format,valeur) permet d'envoyer des affichages (sorties) formates, la syntaxe est identique de la mme fonction en C printf("La variable i est gale %7,2f",i) sortie du chiffre i avec 7 caractres (ventuellement caractres vides devant) et 2 chiffres aprs la virgule. printf("La ligne est %s",$0) > "fichier.int" Redirection de la sortie vers un fichier avec >, on peut utiliser aussi la redirection >>. Veillez ne pas oublier les "" autour du nom du fichier. split(chaine-de-caractres,tableau,sparateur) scinde la chane chaine-de-caractres dans un tableau, le sparateur de champ est le troisime argument Cours utilisateur UNIX 44/58 http://www.funix.org n=split("zorro est arriv",tab," ") tab[1]="zorro", tab[2]="est", tab[3]="arriv", n=3 correspond au nombre d'lments dans le tableau sprintf(format,valeur) printf permet d'afficher l'cran alors que sprintf renvoie la sortie vers une chane de caractres. machaine=sprintf("J'ai %d patates",i) machaine="J'ai 3 patates" (si i=3) substr(chaine-de-caractres,pos,long) Extrait une chaine de longueur long dans la chane chaine- de-caractres partir de la position pos et l'affecte une chane. machaine=substr("Zorro est arriv",5,3) machaine="o e" sub(expression-rgulire,nouvelle-chaine,chaine-de-caractres) idem que gsub sauf que seul la premire occurence est remplace (gsub=globale sub) system(chaine-de-caractres) permet de lancer des commandes d'autres programmes commande=sprintf("ls | grep toto") Excution de la commande UNIX "ls |grep toto" system(commande) tolower(chaine-de-caracteres) retourne la chane de caractres convertie en minuscule toupper(chaine-de-caracteres) retourne la chane de caractres convetie en majuscule 13.3.4Fonctions dfinies par l'utilisateur Vous pouvez dfinir une fonction utilisateur de telle sorte qu'elle puisse tre considre comme une fonction prdfinie. La syntaxe est la suivant: 1ohc11oh ma1ohc11oh{1s1e des paJam1Jes) { 1hs1Juc11ohs Je1uJh vaeuJ } 13.4Les variables et oprations sur les variables 13.4.1Prsentation On trouve les variables systme et les variables utilisateurs. Les variables systmes non modifiables donnent des informations sur le droulement du programme. Les variables utilisateurs sont dfinies par l'utilisateur. 13.4.2Les variables utilisateur Le nom des variables est form de lettres, de chiffres (sauf le premier caractre de la variable), d'underscore. Ce n'est pas ncessaire d'initialiser une variable, par dfaut, si c'est un numrique, elle est gale 0, si c'est une chane, elle est gale une chane vide. Une variable peut contenir du texte, puis un chiffre, en fonction de son utilisation awk va dterminer son type (numrique ou chane). Cours utilisateur UNIX 45/58 http://www.funix.org 13.4.3Les variables prdfinies (systme) Les variables prdfinies sont les suivantes (en italique les valeurs par dfaut): ARGC nombre d'arguments de la ligne de commande nant ARGIND index du tableau ARGV du fichier courant ARGV tableau des arguments de la ligne de commande nant CONVFMT format de conversion pour les nombres "%.6g" ENVIRON tableau contenant les valeurs de l'environnement courant ERRNO contient une chane dcrivant une erreur "" FIELIWIDTHS variable exprimentale ne pas utiliser FILENAME nom du fichier d'entre nant FNR numro d'enregistrement dans le fichier courant nant FS contrle le sparateur des champs d'entre " " IGNORECASE contrle les expressions rgulires et les oprations sur les chanes de caractres 0 NF nombre de champs dans l'enregistrement courant nant NR nombre d'enregistrements lus jusqu'alors nant OFMT format de sortie des nombres (nombre aprs la virgule) "%.6g" OFS sparateur des champs de sortie " " ORS sparateur des enregistrements de sortie RLENGTH nant longueur de la chane slectionne par le critre "\ n" RS contrle le sparateur des enregistrements d'entre "\ n" RSTART dbut de la chane slectionne par le critre nant SUBSEP sparateur d'indiage "\ 034" 13.4.4Oprations sur les variables On peut manipuler les variables et leur faire subir certaines oprations. On trouve diffrents types d'oprateurs, les oprateurs arithmtiques classiques (+, -, *, /, %(modulo, reste de la division), (puissance)), les oprateurs d'affectation (=, +=, -=, *=, /=, %=, =). Exemples: var=30 affectation du chiffre 30 var var="toto" affectation de la chane toto var var="toto " "est grand" concatnation des chanes "toto " et "est grand", rsultat dans var var=var-valeur var-=valeur expressions quivalentes Cours utilisateur UNIX 46/58 http://www.funix.org var=var+valeur var+=valeur expressions quivalentes var=var*valeur var*=valeur expressions quivalentes var=var/valeur var/=valeur expressions quivalentes var=var%valeur var%=valeur expressions quivalentes var=var+1 var++ expressions quivalentes var=var-1 var-- expressions quivalentes 13.4.5Les variables de champ Comme on l'a dj vu auparavant les champs d'un enregistrement (ligne) sont dsigns par $1, $2,...$NF(dernier champ d'une ligne). L'enregistrement complet (ou ligne) est dsign par $0. Une variable champ est a les mmes proprits que les autres variables. Le signe $ peut tre suivi par une variable, exemple: 1=3 pJ1h1 ${1+1) Provoque l'affichage du champ 4 Lorsque $0 est modifi, automatiquement les variables de champs $1,..$NF sont redfinies. Quand l'une des variables de champ est modife, $0 est modifi. ATTENTION le sparateur ne sera pas celui dfinit par FS mais celui dfinit par OFS (output field separator). Exemple: awk `BECTh{pJ1h1" # Tous es u111sa1euJs du gJoupe useJs{CT0 22)bascueJoh1 dahs e gJoupe bouo1{CT0 24) ",FS=".",0FS="."} $4 != 22 {pJ1h1 $0} # S1 e gJoupe h`es1 pas useJs oh 1a11 J1eh $4 ==22 {$4=24,pJ1h1 $0} # S1 e gJoupe es1 22, oh u1 Ja11ec1e 24 Eh0 {pJ1h1"C`es1 11h1"}` /e1c/passwd > passwd.essa1 13.5Les structures de contrle 13.5.1Prsentation Parmi les structures de contrle, on distingue les dcisions (if, else), les boucles (while, for, do- while, loop) et les sauts (next, exit, continue, break). 13.5.2Les dcisions (if, else) La syntaxe est la suivante: 11 {cohd111oh) s1 a cohd111oh es1 sa11s1a11e {vJa1e) 1hs1Juc11oh1 oh excu1e `1hs1Juc11oh ese s1hoh 1hs1Juc11oh2 oh excu1e `1hs1Juc11oh 2 Cours utilisateur UNIX 47/58 http://www.funix.org Si vous avez une suite d'instructions excuter, vous devez les regrouper entre deux accolades. Exemple: awk ` BECTh{pJ1h1"1es1 de `absehce de mo1 de passe",FS="."} hF==7 { #pouJ 1ou1es es 1ghes coh1ehah1 7 champss 11 {$2=="") # s1 e deux1me champ es1 v1de {coJJespohd au mo1 de passe cJyp1)) { pJ1h1 $1 " h`a pas de mo1 de passe"} # oh a111che e hom de `u111sa1euJ {$1=og1h) qu1 h`a pas de mo1 de passe ese s1hoh { pJ1h1 $1 " a uh mo1 de passe"} # oh a111che e hom de `u111sa1euJ possdah1 uh mo1 de passe } Eh0{pJ1h1"C`es1 11h1") ` /e1c/passwd 13.5.3Les boucles (while, for, do-while) while, for et do-while sont issus du langage de programmation C. La syntaxe de while est la suivante: wh1e {cohd111oh) 1ah1 que a cohd111oh es1 sa11s1a11e {vJa1e) 1hs1Juc11oh oh excu1e `1hs1Juc11oh Exemple: awk ` BECTh{pJ1h1"a111chage de 1ous es champs de passwd",FS="."} { 1=11 # 1h111a1sa11oh du comp1euJ 1 {oh commehce paJ e champ 1) wh1e{1=<hF) # 1ah1 qu`oh h`es1 pas eh 11h de 1ghe { pJ1h1 $11 # oh a111che e champ 1+++ # 1hcJmeh1a11oh du comp1euJ pouJ passeJ d`uh champ au su1vah1 } } Eh0{pJ1h1"C`es1 11h1") ` /e1c/passwd La syntaxe de for est la suivante: for (instruction de dpart; condition; instruction d'incrmentation) On part d'une instruction de dpart, on incrmente instruction on excute l'instruction jusqu' que la condition soit satisfaite Exemple: awk ` BECTh{pJ1h1" a111chage de 1ous es champs de passwd",FS="."} { 1oJ {1=1,1=><hF,1++) # 1h111a1sa11oh du comp1euJ 1, oh 1hcJmeh1e e comp1euJ usqu` ce qu`oh a11e1ghe hF {11h de a 1ghe) { pJ1h1 $1 } # oh a111che e champ 1ah1 que a cohd111oh h`es1 pas sa11s1a11e } Eh0{pJ1h1"C`es1 11h1") ` /e1c/passwd Avec for on peut travailler avec des tableaux. Soit le tableau suivant: tab[1]="patate", tab[2] ="courgette",tab[3]="poivron". Pour afficher le contenu de chacun des lments du tableau on crira: 1oJ {1hdex 1h 1ab) { pJ1h1 "egume ." 1ab|1hdex] Cours utilisateur UNIX 48/58 http://www.funix.org } La syntaxe de do-while est la suivante: do {1hs1Juc11ohs}} oh excu1e es 1hs1Juc11ohs wh1e {cohd111oh) usqu` que a cohd111oh so11 sa11s1a11e La diffrence avec while, est qu'on est sr que l'instruction est excute au moins une fois. 13.5.4Sauts controls (break, continue, next, exit) break permet de sortir d'une boucle, la syntaxe est la suivante: 1oJ {,,,) bouce 1h11h1e {1hs1Juc11ohs oh excu1e es 1hs1Juc11ohss 11 {cohd111oh) bJeak s1 a cohd111oh es1 sa11s1a11e oh soJ1 de a bouce 1hs1Juc11ohs} Alors que break permet de sortir d'une boucle, continue force un nouveau passage dans une boucle. next permet d'interrompre le traitrement sur la ligne courante et de passer la ligne suivante (enregistrement suivant). exit permet d'abandonner la commande awk, les instructions suivant END sont excutes (s'il y en a). 13.6Les tableaux 13.6.1Prsentation Un tableau est une variable se composant d'un certains nombres d'autres variables (chanes de caractres, numriques,...), ranges en mmoire les unes la suite des autres. Le tableau est dit unidimensionnelle quand la variable lment de tableau n'est pas elle mme un tableau. Dans le cas de tableaux imbriqus on parle de tableau unidimensionnels. Les termes matrice, vecteur ou table sont quivalents tableau. 13.6.2Les tableaux unidimensionnels Vous pouvez dfinir un tableau unidimensionnel avec la syntaxe suivante:tab[index]=variable, l'index est un numrique (mais pas obligatoirement, voir les tableaux associatifs), la variable peut tre soit un numrique, soit une chane de caractre. Il n'est pas ncessaire de dclarer un tableau, la valeur initiale des lments est une chane vide ou zro. Exemple de dfinition d'un tableau avec une boucle for. vaJ=1 1oJ {1=1,1<=hF,1++) { moh-1ab|1]=vaJ++} Cours utilisateur UNIX 49/58 http://www.funix.org On dispose de la fonction delete pour supprimer un tableau (delete tab). Pour supprimer un lment de tableau on tapera delete tab[index]. 13.6.3Les tableaux associatifs Un tableau associatif est un tableau unidimensionnel, ceci prs que les index sont des chanes de caractres. Exemple: age|"o1v1eJ"]=27 age|"veJoh1que"]=25 age|"beham1h"]=5 age|"veJoh1que"]=3 1oJ {hom 1h age) { pJ1h1 hom " a " age|hom] "ahs" } On a un tableau age avec une chane de caractres prnom comme index, on lui affecte comme lments de tableau un numrique (age de la personne mentionne dans le prnom). Dans la boucle for la variable nom est remplie successivement des chanes de caractres de l'index (olivier, veronique, ...). Les valeurs de l'index ne sont pas toujours tries. 13.6.4Les tableaux multidimensionnels awk n'est pas prvu pour grer les tableaux multidimensionnels (tableaux imbriqus, ou plusieurs index), nanmoins on peut simuler un tableau deux dimensions de la manire suivante. On utilise pour cela la variable prdfinie SUBSEP qui, rappelons le, contient le sparateur d'indiage. Le principe repose sur la cration de deux indices (i, j) qu'on va concatner avec SUBSEP (i:j). SbBSEP="." 1="A",="B" 1ab|1,]="Coucou" L'lment de tableau "Coucou" est donc index par la chane "A:B". 14Exercices 14.1Critres pour les noms de fichier Exercice 1: Dans votre rpertoire courant, crez en une commande les fichiers suivants: annee1 Annee2 annee4 annee45 annee41 annee510 annee_saucisse banane Solution: touch annee1 Annee2 annee4 annee45 annee41 annee415 annee_saucisse annee_banane Exercice 2: Cours utilisateur UNIX 50/58 http://www.funix.org Crer le rpertoire Year dans votre rpertoire courant, en une commande dplacez les fichiers prcdemment crs dans le rpertoire Year. Solution: mv [aA]nnee* ./Year Exercice 3: Lister tous les fichiers se terminant par 5 commenant par annee4 commenant par annee4 et de 7 lettres maximum
commenant par annee avec aucun chiffre numrique contenant la chane ana commenant par a ou A Solution: ls *5 ls annee4* ls annee4? ls annee[!0-9]* ls *ana* ls [aA]* Exercice 4: Copier les fichiers dont l'avant dernier caractre est un 4 ou 1 dans le rpertoire /tmp en une seule commande. Solution: cp *[41]? /tmp 15Les droits d'accs Exercice 1: Dans votre rpertoire courant, crez un rpertoire courant essai_droit, par dfaut ce rpertoire est 755 (rwxr-xr-x), quelles sont les commandes (en notation symbolique et en base 8) pour lui donner les droits suivant (on suppose qu'aprs chaque commande on remet le rpertoire 755:
propritaire groupe les autres droit en lecture droit en criture droit d'accs droit en lecture droit en criture droit d'accs droit en lecture droit en criture droit d'accs commande 1 oui oui oui oui non oui non non oui commande 2 oui non oui non oui non non non oui Cours utilisateur UNIX 51/58 http://www.funix.org commande 3 non oui non non non oui oui non non commande 4 non non oui oui non oui non non non Solution: commande 1 chmod 751 essai_droit chmod o-rw essai_droit commande 2 chmod 521 essai_droit chmod u-w,g-rx,g+w,o-r essai_droit commande 3 chmod 214 essai_droit chmod u-rx,g-r,o-x essai_droit commande 4 chmod 150 essai_droit chmod u-rw,o-rx essai_droit Exercice 2: Crez un fichier droit dans le rpertoire essai_droit, par dfaut ce fichier est 644 (rw-r--r--).En partant du rpertoire courant, pour chaque commande de l'exercice prcdent, essayez d'accder au rpertoire essai_droit (commande cd), de faire un ls dans essai_droit et de modifier le fichier avec un diteur quelconque (vi par exemple). Solution: commande 1
on peut accder au rpertoire (droit d'accs x) on peut faire ls (droit en lecture sur le rpertoire r), et modifier le fichier (droit en criture sur le rpertoire w et le fichier w) commande 2
on peut accder au rpertoire (droit d'accs x), on peut faire ls (droit en lecture sur le rpertoire r), et modifier le fichier (le droit en criture sur le rpertoire n'est pas pris en compte ds lors que vous avez le droit en criture sur le fichier) commande 3 on ne peut pas accder au rpertoire (pas de droit d'accs x) commande 4
on peut accder au rpertoire (droit d'accs x), on ne peut pas faire ls (pas de droit de lecture), on peut diter et modifier le fichier (droit en criture sur le rpertoire et sur le fichier). Exercice 3: Tapez la commande umask, de manire ce que les fichiers lors de leur cration aient par dfaut les droits 640 (rw-r-----), et les rpertoires 750 (rwxr-x---). Solution: Pour un fichier masque maximum pour un fichier 666 rw-rw-rw- retirer 026 ----w-rw- droit par dfaut 640 rw-r----- Pour un rpertoire Cours utilisateur UNIX 52/58 http://www.funix.org masque maximum pour un rpertoire 777 rwxrwxrwx retirer 027 ----w-rwx droit par dfaut 640 rwxr-x--- Soit la commande: umask 027 (Pour un fichier retirer 026 ou 027 est quivalent) 15.1Grep Exercice 1 Crer un rpertoire essai-grep dans votre home directory. Dans ce rpertoire crer les fichiers suivants: tomate poire pomme cerise Fraise fraise courgette POMME3 afraise Editez les fichiers (sortie de la commande ls redirige vers grep) avec les critres sur leur nom suivant: Critre 1 Le nom doit tre Fraise ou fraise Critre 2 se est en fin de nom Critre 3 ai est prsent dans le nom Critre 4 Nom contenant un chiffre numrique Critre 5 Nom contenant la chane mm ou MM Solution: mkdir ~/essai-grep cd ~/essai-grep touch tomate poire pomme cerise Fraise fraise courgette POMME3 afraise
Critre 1 ls | grep "^[fF]raise$" Critre 2 ls | grep "se$" Critre 3 ls | grep "ai" Critre 4 ls | grep "[0-9]" Critre 5 ls | grep "[mM]\{2\}" Nota: Pour rediriger le rsultat vers un fichier, vous pouvez faire, par exemple pour le critre 1: grep "^[fF]raise$" mon-fichier Exercice 2 Copiez le fichier /etc/passwd dans votre home directory. Editez la ligne commenant par votre nom de login. Cours utilisateur UNIX 53/58 http://www.funix.org Solution: cd cp /etc/passwd ~ cat passwd | grep "^monnom" avec login le nom de votre login ( 8 lettres) Exercice 3 Dans le fichier passwd qui est dans votre home directory, ditez les lignes commenant par des noms de login ne contenant pas de chiffre. Soluce: cat passwd | grep "^[^0-9][^0-9]*:" ou cat passwd | grep "^[a-z][a-z]*:" Exercice 4 Editez les lignes du fichier passwd commenant par des noms de login de 3 ou 4 caractres. Solution: cat passwd | grep "^.\{3,4\}:" 15.2Les filtres Exercice 1 Copiez le fichier /etc/passwd dans votre home directory. Editez uniquement les champs contenant le login et la home directory. Solution: cd cp /etc/passwd ~ cut -d: -f1,6 passwd Exercice 2 Triez passwd sur le nom Solution: sort -t: +0 -1 passwd Exercice 3 Extraire les nom de login et UID puis triez suivant les UID, le tout en une seule commande, vous redirigerez le tout vers un fichier Solution: cut -d: -f1,3 passwd | sort -t: -n +1 -2 > lefichier Exercice 4 Cours utilisateur UNIX 54/58 http://www.funix.org Dans le fichier de rsultat prcdent remplacer les ":" par des " " (espace). Solution: cat lefichier | tr ":" " " > lefichier Nota: On aurait pu avoir le mme rsultat en une seule commande: cut -d: -f1,3 | sort -t: -n +1 -2 | tr ":" " " > lefichier Exercice 5 Editez les cinq dernires lignes du fichier. Solution: tail -5 lefichier Exercice 6 Editez les cinq premiers caractres du fichier. Solution: head -5c lefichier 15.3find Exercice 1 Cherchez dans toute l'arborescence les fichiers dont le nom se termine par .c, redirigez les erreurs vers le fichier poubelle /dev/null Commenant par X ou x. Dont les noms ne contiennent pas de chiffre. Solution: find / -name "*.c" -print 2>/dev/null find / -name "[Xx]*" -print 2>/dev/null
find / -name "[!0-9]" -print 2>/dev/null Exercice 2 Chercher dans /usr les fichiers dont la taille dpasse 1Mo (2000 blocs de 500Ko) et dont les droits sont fixs 755 (-rwxr-xr-x). Solution: find /usr (-size +2000 -a -perm 755) -print 2>/dev/null Exercice 3 Combien il y a de fichiers dans toute l'arborescence vous appartenant et ayant les droits fixs 666 (-rw-rw-rw-). Cours utilisateur UNIX 55/58 http://www.funix.org Solution: find / (-user olivier -a -perm 666 -print) | wc -l Exercice 4 Trouver tous les fichiers core dans l'arborescence et supprimez les aprs confirmation. Solution: find / -name "core" -print -ok rm {}\; 15.4awk Les exercices portent sur le fichier mesure suivant: nom de la mesure | lieu de la mesure | date de la mesure | valeur brute | correction 1 | correction 2 | correction 3 | valeur corrige | marcel | brest | 18/12/19 98 | 12.5 | 1.34 | 1.23 | -1.5 | 13.47 | polo | loctudy | 21/05/19 97 | 11.5 | 1.24 | 1.12 | -1.2 | 12.66 | otto | camaret | 04/09/19 95 | 9.3 | 0.98 | 1.17 | -1.12 | 10.33 | Le champ valeur corrige est la somme algbrique de la valeur brute et des 3 corrections. Exercice 1 Vous vous tes bourrs sur le signe de la correction 1, de mme dans la correction 2, vous avez dcouvert que vous avez commis une petite erreur et qu'il fallait lui ajouter 0.1. Modifier le fichier en prenant en compte ces corrections, faites en sorte que la valeur corrige soit modifie en consquence. Dans le mme exercice vous afficherez la somme totale des valeurs corriges et la valeur corrige moyenne. Ces valeurs doivent tre sauvegardes dans un fichier rsultat. Solution: #!/bin/bash awk ' BEGIN { FS="|";OFS="|" } NR = =1 { printf("%s\n",$0)} NR>1 { $5*=-1 $6+=0.1 $8=$4+$5+$6+$7 somme+=$8 printf("%s\n",$0)}
END { printf("somme totale des valeurs corriges %f \n",somme) > "resultat"; printf("valeur corrige moyenne %f \n" (somme/(NR-1)) >> "resultat"} ' $1 Cours utilisateur UNIX 56/58 http://www.funix.org Appelez votre script exo1.awk, donnez lui les droits 755, et appelez le ainsi: exo1.awk mesure > mesure.corrigee Aprs excution, vrifiez l'existence et le contenu du fichier resultat. Exercice 2 Afficher les mesures ayant une anne paire. Redirigez le rsultat de la recherche vers un fichier paire. Solution: #!/bin/bash awk ' BEGIN { printf("Mesures ayant une anne paire \n") > "paire";FS="|"} NR>1 { annee=substr($3,7,4) if (annee%2= =0)
{ printf("mesure %s ",$1); printf(" anne %s paire\n ",annee) >> "paire"} ' $1 Appelez votre script exo2.awk, donnez lui les droits 755, et appelez le ainsi: exo2.awk mesure Aprs excution, vrifiez l'existence et le contenu du fichier paire. Exercice 3 Vrifiez que le format de la date jj/mm/aaaa est correcte ainsi que le format du lieu (form que de lettres de l'alphabet en minuscules ou majuscules). Solution: #!/bin/bash awk ' BEGIN { printf("Vrification du format \n";FS="|" }
NR>1 && $2 !~ /^[0-3][0-9]\/[01][0-9]/\[0-9][0-9][0-9][0-9] $/ { printf(" Mauvais format de date pour mesure %s \n", $1 } NR>1 && $2 !~ /^[a-zA-Z][a-zA-Z]*$/ { printf(" Mauvais format du lieu pour mesure %s \n",$1 } ' $1 Appelez votre script exo3.awk, donnez lui les droits 755, et appelez le ainsi: exo3.awk mesure Le fonctionnement du script sous LINUX est un peu foireux, a marche bien par contre sur d'autres environnements (HP-UX ou Solaris), va savoir pour quoi... On pourrait amliorer encore plus la vrification en vrifiant bien que la date va de 1 31 et le mois de 1 12, avec un script du style: #!/bin/csh awk ' BEGIN { printf("Vrification du mois et du jour\n");FS="|") Cours utilisateur UNIX 57/58 http://www.funix.org NR>1 && $3 !~ /^[0-3][0-9]\/[01][0-9]/\[0-9][0-9][0-9][0-9]$/ { jour=substr($3,1,2) mois=substr($3,3,2)
if (jour > 31 || mois >12) { printf("mauvais format pour mesure % s\n",$1)} } ' $1 C'est un peu lourd comme script, vous de trouver plus simple. Toujours un fonctionnement capricieux sous LINUX. Exercice 4 Afficher les noms de mesure et leur valeur corrige associe en vous servant d'un tableau associatif. Solution: #!/bin/bash awk ' BEGIN { printf("Affichage des mesures et de leur valeur corrige \n");FS="|"} NR>1 { mesure-corrigee[$1]=$8 END { for (mesure in mesure-corrigee)
{printf("mesure %s ",mesure); printf(" gale %s \n",mesure-corrigee [mesure]) }} ' $1 Appelez votre script exo4.awk, donnez lui les droits 755, et appelez le ainsi: exo4.awk mesure Cours utilisateur UNIX 58/58 http://www.funix.org