II. Interface Textuelle...
Transcript of II. Interface Textuelle...
O. Dalle Licence InformatiqueSystèmes d’Exploitation 11
Systèmes d’Exploitation : utilisation « avancée »
Plan du CoursPlan du Cours
I.I. Interface Graphique (Xwindows)Interface Graphique (Xwindows)II.II. Interface Textuelle (Interface Textuelle (zshzsh))
1.1. Présentation GénéralePrésentation Générale2.2. Utilisation avancéeUtilisation avancée3.3. Eléments pour l’écriture de scriptsEléments pour l’écriture de scripts
III.III. a a -- Environnement RéseauEnvironnement RéseauIII.III. b b -- Introduction à Windows NTIntroduction à Windows NTIV.IV. Outils de traitement de donnéesOutils de traitement de donnéesV.V. Installation de Installation de LinuxLinux
O. Dalle Licence InformatiqueSystèmes d’Exploitation 22
II. Interface Textuelle (zsh)
1. Présentation Générale1. Présentation Générale
Qu’estQu’est--ce qu’un ILC (ce qu’un ILC (shellshell) ?) ?Algorithme d’un ShellAlgorithme d’un ShellBourne shell Bourne shell et dérivéset dérivésScripts de configurationScripts de configuration
O. Dalle Licence InformatiqueSystèmes d’Exploitation 33
II.1 Présentation Générale
Qu’estQu’est--ce qu’un ILC ?ce qu’un ILC ?
Un programme comme un autreUn programme comme un autreEcrit en CEcrit en CCapable de lire/écrire sur un terminal (ou une Capable de lire/écrire sur un terminal (ou une fenêtre graphique émulant un terminal)fenêtre graphique émulant un terminal)Sait lancer des processusSait lancer des processus•• Exécution de commandes «Exécution de commandes « externesexternes »»
En général le premier processus d’un utilisateurEn général le premier processus d’un utilisateur•• Voir fichier Voir fichier passwdpasswd•• Processus Processus ––zsh zsh lors d’un lors d’un rloginrlogin
Fournit un langage de programmation interprétéFournit un langage de programmation interprété•• Fichiers de commandeFichiers de commande
O. Dalle Licence InformatiqueSystèmes d’Exploitation 44
II.1 Présentation Générale
Algorithme d’un ShellAlgorithme d’un Shell
Init Init :: interprétation des fichiers de configurationinterprétation des fichiers de configurationTANT QUETANT QUE ((entrée != {entrée != {eofeof, exit, , exit, logoutlogout}}))FAIREFAIRE
Saisir commandeSaisir commande ((editionedition «« à la à la emacsemacs », complétion, …) », complétion, …) Analyse lexicale et syntaxiqueAnalyse lexicale et syntaxiqueExpansion des paramètresExpansion des paramètresCASCAS de de $0$0 dansdans
fonction, fonction, cmde cmde interneinterne) : ) : l’exécuterl’exécuterfichier binaire dans PATHfichier binaire dans PATH) :) :
créer créer process process ayant ayant $O$O comme comme progprog..fichier textefichier texte) : ) : lancer l’interpréteurlancer l’interpréteur
(#!…) ou sinon /(#!…) ou sinon /binbin/sh + texte/sh + texteFIN CASFIN CASSI (SI (‘&’ n’est pas en fin de chaîne‘&’ n’est pas en fin de chaîne))ALORSALORS
attendre fin d’exécution du processus lancéattendre fin d’exécution du processus lancéFIN SIFIN SI
FIN TANT QUEFIN TANT QUE
O. Dalle Licence InformatiqueSystèmes d’Exploitation 55
II.1 Présentation Générale
Bourne Bourne Shell et DérivésShell et Dérivés
Bourne Bourne Shell (/Shell (/binbin/sh)/sh)Le plus «Le plus « classiqueclassique »»
Utilisé pour les scripts systèmeUtilisé pour les scripts systèmeKorn Shell (/Korn Shell (/binbin//kshksh))
1ère évolution1ère évolutionnombreuses améliorations, mais encore des défautsnombreuses améliorations, mais encore des défauts
Bourne Again Bourne Again Shell (/Shell (/binbin//bashbash))Le Le shellshell GNU/FSF (GNU/FSF (shell shell «« officiel de officiel de linuxlinux »)»)Récupère nombreuses améliorations d’autres Récupère nombreuses améliorations d’autres shell shell ((kshksh, , tcshtcsh), ),
ajoute ses propres améliorationsajoute ses propres améliorationsZshZsh
Le plus complet (idem Le plus complet (idem bashbash//kshksh, plus améliorations propres), plus améliorations propres)Ambitieux : tout ce dont les utilisateurs pourraient avoir besoAmbitieux : tout ce dont les utilisateurs pourraient avoir besoin doit in doit
être disponible dans être disponible dans zsh zsh ……
O. Dalle Licence InformatiqueSystèmes d’Exploitation 66
II.1 Présentation Générale
Scripts Personnels de ConfigurationScripts Personnels de Configuration
Bourne Bourne ShellShell.profile.profile
kshksh.profile, ..profile, .kshrckshrc
bashbash.profile, ..profile, .bashbash_profile, ._profile, .bashrcbashrc, ., .bashbash__loginlogin
zshzsh..zprofilezprofile, ., .zshrczshrc, ., .zloginzlogin, ., .zlogoutzlogout, ., .zshenvzshenv
O. Dalle Licence InformatiqueSystèmes d’Exploitation 77
II.1 Présentation GénéraleScripts Personnels de ConfigurationScripts Personnels de Configuration
Le cas de ZSHLe cas de ZSH
Les scripts sont recherchés dans $ZDOTDIRLes scripts sont recherchés dans $ZDOTDIR$HOME par défaut (ZDOTDIR non définie)$HOME par défaut (ZDOTDIR non définie)
Plusieurs contextes sont considérésPlusieurs contextes sont considérésshell shell non interactifnon interactif•• ..zhsenvzhsenv
shellshell interactifinteractif•• ..zshenvzshenv, ., .zshrczshrc
shellshell interactif de interactif de login login •• ..zshenvzshenv, ., .zprofilezprofile, ., .zshrczshrc, ., .zloginzlogin•• Lors de la terminaison : .Lors de la terminaison : .zlogoutzlogout
O. Dalle Licence InformatiqueSystèmes d’Exploitation 88
II.1 Présentation GénéraleScripts de Configuration Systèmes Scripts de Configuration Systèmes
de de ZshZshPour chacun des scripts personnels de configuration, il Pour chacun des scripts personnels de configuration, il existe un équivalent système existe un équivalent système
//etcetc//zshenvzshenv, /, /etcetc//zprofilezprofile, /, /etcetc//zshrczshrc, , //etcetc//zloginzlogin
Maintenus par Maintenus par rootrootChacun des scripts de configuration «Chacun des scripts de configuration « systèmesystème » est appelé » est appelé juste avant son équivalent «juste avant son équivalent « utilisateurutilisateur »»
•• la séquence des exécution pour un la séquence des exécution pour un shell shell de de login login est donc la est donc la suivante : /suivante : /etcetc//zshenvzshenv, ., .zshenvzshenv, /, /etcetc//zprofilezprofile, ., .zprofilezprofile, , //etcetc//zshrczshrc, ., .zshrczshrc, /, /etcetc//zloginzlogin, ., .zloginzlogin
•• //etcetc//zlogout zlogout avant .avant .zlogoutzlogout•• Le script /Le script /etcetc//zprofilezprofile est supposé exécuter le script /est supposé exécuter le script /etcetc/profile /profile
commun à tous les «commun à tous les « Bourne Bourne ShellShell »»•• //etcetc/profile peut lui même exécuter d’autres scripts, par /profile peut lui même exécuter d’autres scripts, par
exemple /exemple /etcetc/profile.d/*.sh sous /profile.d/*.sh sous linux linux ……
O. Dalle Licence InformatiqueSystèmes d’Exploitation 99
II.1 Présentation GénéraleScripts Personnels de ConfigurationScripts Personnels de Configuration
de de ZshZsh..zshenvzshenv
Toujours lu => bon endroit pour les variables Toujours lu => bon endroit pour les variables d’environnementd’environnement
..zprofilezprofileLu en premier (Lu en premier (apres zshenvapres zshenv) avec un ) avec un shellshell de de loginlogin : le bon : le bon endroit pour initialiser une sessionendroit pour initialiser une session
..zshrczshrcLu quand le Lu quand le shell shell est interactif => tout ce qui facilite la vie est interactif => tout ce qui facilite la vie de l’utilisateur interactifde l’utilisateur interactif
•• alias (raccourcis), complétion, prompt, …alias (raccourcis), complétion, prompt, …
..zloginzloginLu en dernier, lors du Lu en dernier, lors du login login : le bon endroit pour poser des : le bon endroit pour poser des questions si besoin (questions si besoin (config config DISPLAY, …)DISPLAY, …)
O. Dalle Licence InformatiqueSystèmes d’Exploitation 1010
II. Interface Textuelle (zsh)
2. Utilisation 2. Utilisation interactive interactive avancée de avancée de zshzsh
Mécanismes de Mécanismes de redirectionredirectionMécanismes de substitutionMécanismes de substitution
HistoriqueHistoriqueCommandesCommandesProcessusProcessusFile File globbingglobbing
O. Dalle Licence InformatiqueSystèmes d’Exploitation 1111
II.2 Utilisation interactive de Zsh
Mécanismes de Mécanismes de RedirectionRedirection
Rappel des principes :Rappel des principes :Chaque processus possède 10 descripteurs de Chaque processus possède 10 descripteurs de fichiers, numérotés 0 à 9fichiers, numérotés 0 à 9Chaque descripteur indique un fichier Chaque descripteur indique un fichier 3 descripteurs actifs par défaut :3 descripteurs actifs par défaut :•• 0 désigne l'entrée standard du processus0 désigne l'entrée standard du processus•• 1 désigne la sortie standard1 désigne la sortie standard•• 2 désigne la sortie standard d'erreur2 désigne la sortie standard d'erreur•• Avec un Avec un shell shell interactif, les 3descripteurs par défaut sont interactif, les 3descripteurs par défaut sont
connectés à la (pseudoconnectés à la (pseudo--)console (/)console (/devdev//ttyxxttyxx))
Une Une redirection redirection permet d'établir ou modifier une permet d'établir ou modifier une liaison entre un descripteur et un fichierliaison entre un descripteur et un fichier
O. Dalle Licence InformatiqueSystèmes d’Exploitation 1212
II.2 Utilisation interactive de ZshTypes de Types de Redirection Redirection ::
Redirection Redirection ElémentairesElémentaires
< FIC< FICOuvre le fichier FIC et le place sur Ouvre le fichier FIC et le place sur stdinstdin
<> FIC<> FICOuvre le fichier FIC en lecture/Ouvre le fichier FIC en lecture/ecriture ecriture et le place et le place sur sur stdinstdin
> FIC> FICOuvre le fichier FIC et le connecte à la sortie Ouvre le fichier FIC et le connecte à la sortie standardstandard
>> FIC >> FIC Ouvre le fichier FIC an mode "APPEND" et le Ouvre le fichier FIC an mode "APPEND" et le connecte sur la sortie standardconnecte sur la sortie standard
O. Dalle Licence InformatiqueSystèmes d’Exploitation 1313
II.2 Utilisation interactive de ZshTypes de Types de Redirections Redirections ::
Redirection Redirection ""HereHere Document"Document"
<<MOT, <<<<MOT, <<--MOTMOTLes lignes suivantes sont placées sur l'entrée Les lignes suivantes sont placées sur l'entrée standard jusqu'à l'apparition de MOTstandard jusqu'à l'apparition de MOTSi MOT contient des caractères "protégés" par ', ", Si MOT contient des caractères "protégés" par ', ", ou ou \\, les lignes suivantes (jusqu'à apparition de , les lignes suivantes (jusqu'à apparition de MOT) ne subissent pas de substitutionMOT) ne subissent pas de substitutionforme <<forme <<-- : les tabulations en début de ligne sont : les tabulations en début de ligne sont ignoréesignorées
O. Dalle Licence InformatiqueSystèmes d’Exploitation 1414
II.2 Utilisation interactive de ZshTypes de Types de Redirections Redirections ::
Duplication et Fermeture de DescripteursDuplication et Fermeture de Descripteurs
<&DIGIT<&DIGITL'entrée standard est dupliquée à partir du L'entrée standard est dupliquée à partir du descripteur DIGITdescripteur DIGIT
>&DIGIT>&DIGITLa sortie standard est dupliquée vers le La sortie standard est dupliquée vers le descripteur DIGITdescripteur DIGIT
<&<&--Fermeture de Fermeture de stdinstdin
>&>&--Fermeture de Fermeture de stdoutstdout
O. Dalle Licence InformatiqueSystèmes d’Exploitation 1515
II.2 Utilisation interactive de ZshTypes de Types de Redirections Redirections ::
RedirectionsRedirections "exotiques""exotiques"
CoprocessusCoprocessusUn Un coprocessus coprocessus est un processus "binôme" lancé est un processus "binôme" lancé par le processus courantpar le processus courant>&p, <&p>&p, <&p•• permettent de brancher (les descripteurs de) le permettent de brancher (les descripteurs de) le
processus courant sur le processus courant sur le coprocessuscoprocessus
<<<WORD<<<WORDWORD subit une passe de substitution, puis le WORD subit une passe de substitution, puis le résultat est envoyé sur l'entrée standardrésultat est envoyé sur l'entrée standard
O. Dalle Licence InformatiqueSystèmes d’Exploitation 1616
II.2 Utilisation interactive de Zsh
Opérations sur les DescripteursOpérations sur les Descripteurs
RedirectionRedirection d'autres descripteurs que d'autres descripteurs que stdin stdin et et stdoutstdoutIl suffit de mettre le numéro du descripteur juste avant la Il suffit de mettre le numéro du descripteur juste avant la redirectionredirectionExemple : date >&3 3>totoExemple : date >&3 3>toto
•• la sortie la sortie std std de date est envoyée sur de date est envoyée sur desc num desc num 3, puis 3, puis desc desc num num 3 est redirigé vers fichier toto3 est redirigé vers fichier toto
Associer un fichier à un descripteurAssocier un fichier à un descripteurexec exec DIGIT<FIC, DIGIT<FIC, exec exec DIGIT>FICDIGIT>FICexec exec DIGIT&<DIGIT, DIGIT&<DIGIT, exec exec DIGIT>&DIGIT, …DIGIT>&DIGIT, …
Entrées/Sorties vers ou depuis un descripteurEntrées/Sorties vers ou depuis un descripteurread read [[--u DIGIT] variableu DIGIT] variableechoecho/print [/print [--u DIGIT] u DIGIT] chainechaine
O. Dalle Licence InformatiqueSystèmes d’Exploitation 1717
II.2 Utilisation interactive de Zsh
Exemples de Exemples de RedirectionsRedirections
findfind / 2>&1/ 2>&1Les messages d'erreur sont redirigés vers la sortie standard Les messages d'erreur sont redirigés vers la sortie standard (en plus des messages normaux)(en plus des messages normaux)
execexec 3> toto 3> toto Le descripteur 3 est redirigé en écriture sur le fichier toto :Le descripteur 3 est redirigé en écriture sur le fichier toto :tout ce qui sera écrit sur le tout ce qui sera écrit sur le decripteur decripteur 3 ira dans le fichier 3 ira dans le fichier totototo
lsls ––al >&3al >&3Le résultat de Le résultat de 'ls'ls ––al' est envoyé vers le descripteur 3 al' est envoyé vers le descripteur 3 (fichier toto)(fichier toto)
execexec 3>&3>&--Le descripteur numéro 3 (fichier toto) est ferméLe descripteur numéro 3 (fichier toto) est fermé
O. Dalle Licence InformatiqueSystèmes d’Exploitation 1818
II.2 Utilisation interactive de Zsh
Redirections Redirections MultiplesMultiples
Contrairement aux Contrairement aux pipespipes , les , les redirections redirections peuvent être multiples peuvent être multiples
L'option MULTIOS doit être validéeL'option MULTIOS doit être validée•• commande : commande : setopt multiossetopt multios
La sortie standard peut être redirigée plusieurs La sortie standard peut être redirigée plusieurs foisfois
•• Equivalent à la commande 'tee fic1 fic2 …'Equivalent à la commande 'tee fic1 fic2 …'•• exemple : exemple : lsls ––al > titi > totoal > titi > toto
La sortie standard peut être redirigée plusieurs La sortie standard peut être redirigée plusieurs foisfois
•• Equivalent a la commande Equivalent a la commande 'cat 'cat fic1 fic2 …'fic1 fic2 …'
O. Dalle Licence InformatiqueSystèmes d’Exploitation 1919
II.2 Utilisation interactive de Zsh
Mécanismes de substitution (Expansion)Mécanismes de substitution (Expansion)
Plusieurs types de substitution, réalisées Plusieurs types de substitution, réalisées dans l’ordre suivant :dans l’ordre suivant :1.1. History History expansion (expansion (shell shell interactif)interactif)2.2. Alias expansionAlias expansion3.3. Process Process substitution + substitution + ParameterParameter expansion + expansion +
Command substitution + Command substitution + ArithmeticArithmetic expansion + expansion + BraceBrace expansionexpansion
4.4. Suppression des Suppression des \\, ', et ", ', et "5.5. Filename Filename expansionexpansion6.6. Filename Filename générationgénération
O. Dalle Licence InformatiqueSystèmes d’Exploitation 2020
II.2 Utilisation interactive de ZshMécanisme d'historique Mécanisme d'historique
((HistoryHistory substitution)substitution)
Réutilisation de (parties) de commandes Réutilisation de (parties) de commandes précédentesprécédentes
Sauvegarde des commandes dans l'historique Sauvegarde des commandes dans l'historique (taille = HISTSIZE)(taille = HISTSIZE)
Substitution d'historique : commence par '!'Substitution d'historique : commence par '!'3 catégories3 catégories•• Désignation d'événement (= commande complète)Désignation d'événement (= commande complète)•• Désignation de motsDésignation de mots•• ModificateursModificateurs
Syntaxe générale :Syntaxe générale :!!evtevt::wordword…:…:modmod……
O. Dalle Licence InformatiqueSystèmes d’Exploitation 2121
II.2 Utilisation interactive de ZshMécanisme d'historique :Mécanisme d'historique :
Désignation d'évènementsDésignation d'évènements
!! : commande précédente!! : commande précédente!N : Nième commande depuis le début l'historique!N : Nième commande depuis le début l'historique!!--N : Nième commande en remontant l'historique N : Nième commande en remontant l'historique depuis maintenantdepuis maintenant!STR : la commande la plus récente qui débute par !STR : la commande la plus récente qui débute par STRSTR!?STR[?] : la commande la plus récente qui contient !?STR[?] : la commande la plus récente qui contient STRSTR!{…} : délimite la commande d'historique!{…} : délimite la commande d'historique
O. Dalle Licence InformatiqueSystèmes d’Exploitation 2222
II.2 Utilisation interactive de ZshMécanisme d'Historique:Mécanisme d'Historique:
Désignation de motsDésignation de motsO (zéro) : le premier mot (commande)O (zéro) : le premier mot (commande)N : le Nième motN : le Nième mot^ : le premier argument (idem '1')^ : le premier argument (idem '1')$ : le dernier argument$ : le dernier argument% : le mot qui correspond à la recherche ?% : le mot qui correspond à la recherche ?str str la plus la plus récenterécentexx--y : une suite formée des mots numéros x à y (y : une suite formée des mots numéros x à y (--y y 00--y)y)x* : xx* : x--$$xx-- : idem sauf que le dernier mot est omis: idem sauf que le dernier mot est omis
Pratique pour les commande du typePratique pour les commande du typecp cp sources … destination sources … destination
O. Dalle Licence InformatiqueSystèmes d’Exploitation 2323
II.2 Utilisation interactive de ZshMécanisme d'HistoriqueMécanisme d'Historique
Principaux ModificateursPrincipaux Modificateurs
h : supprime la fin d'un chemin, ne garde que h : supprime la fin d'un chemin, ne garde que le premier élément (le premier élément (headhead))r : supprime suffixe de la forme .r : supprime suffixe de la forme .xxxxxxe : supprime tout sauf le suffixee : supprime tout sauf le suffixet : supprime le début du chemin, ne garde que t : supprime le début du chemin, ne garde que la fin (la fin (tailtail))& : répète la substitution précédente& : répète la substitution précédentel/u : conversion min/MAJl/u : conversion min/MAJs/L/R/ : remplace L par Rs/L/R/ : remplace L par R
O. Dalle Licence InformatiqueSystèmes d’Exploitation 2424
II.2 Utilisation interactive de ZshMécanisme d'Historique : Mécanisme d'Historique :
ExemplesExemples[1] [1] cpcp toto titi tata toto titi tata destdest//[2] !!0[2] !!0-- dest2/dest2/
tous les mots de la dernière commande sauf le dernier tous les mots de la dernière commande sauf le dernier => [2] => [2] cpcp toto titi tata dest2toto titi tata dest2
[3] [3] lsls !!--2:$2:$Le dernier mot de l'avant dernière commandeLe dernier mot de l'avant dernière commande
=> [3] => [3] ls destls dest[4] [4] echoecho "!?"!?cpcp?" > ?" > exmpleexmple..txttxt
La dernière commande qui contient La dernière commande qui contient cpcp=> [4] => [4] echo echo ""cpcp toto titi tata dest2" > exemple.toto titi tata dest2" > exemple.txttxt
[5] [5] mvmv !!$ !!$:r.!!$ !!$:r.foofoole dernier mot de la dernière commande ; le dernier mot de la le dernier mot de la dernière commande ; le dernier mot de la dernière commande dans lequel on a supprimé le .dernière commande dans lequel on a supprimé le .txttxt=> [5] => [5] mv mv exemple.exemple.txt txt exemple.exemple.foofoo
O. Dalle Licence InformatiqueSystèmes d’Exploitation 2525
II.2 Utilisation interactive de ZshMécanisme de Substitution de ProcessusMécanisme de Substitution de Processus
((Process Process substitution)substitution)
3 formes de substitutions3 formes de substitutions<(CMD)<(CMD)>(CMD)>(CMD)=(CMD)=(CMD)
Règles de fonctionnement communes aux 3 formes :Règles de fonctionnement communes aux 3 formes :La commande CMD est exécutée dans un processus séparéLa commande CMD est exécutée dans un processus séparéLe résultat de CMD est placé dans un fichier temporaireLe résultat de CMD est placé dans un fichier temporaireC'est C'est le nom de ce fichier temporairele nom de ce fichier temporaire qui est substitué à qui est substitué à l'une des 3 formes précédentesl'une des 3 formes précédentes
O. Dalle Licence InformatiqueSystèmes d’Exploitation 2626
II.2 Utilisation interactive de ZshMécanisme de Substitution de Processus :Mécanisme de Substitution de Processus :
Différences entre les 3 formesDifférences entre les 3 formes<(CMD) : <(CMD) :
la sortie standard de CMD est branchée sur le fichier temporairela sortie standard de CMD est branchée sur le fichier temporaire(autrement dit, CMD écrit dans le fichier)(autrement dit, CMD écrit dans le fichier)Le fichier temporaire est de type "tube nommé" (Le fichier temporaire est de type "tube nommé" (named named pipe) => pipe) => "non "non seekableseekable""
>(CMD)>(CMD)L'entrée standard de CMD est branchée sur le fichier temp. (CMDL'entrée standard de CMD est branchée sur le fichier temp. (CMD
lit dans le fichier)lit dans le fichier)Tube nommé, donc "non Tube nommé, donc "non seekableseekable""
=(CMD)=(CMD)Comme pour <(CMD) : la sortie standard est branchée sur le fichiComme pour <(CMD) : la sortie standard est branchée sur le fichiererLe fichier temporaire est un "vrai" fichier, donc "Le fichier temporaire est un "vrai" fichier, donc "seekableseekable""Inconvénient :Inconvénient : CMD doit être terminée et sont résultat sauvé en CMD doit être terminée et sont résultat sauvé en entier dans le fichier temporaireentier dans le fichier temporaire
O. Dalle Licence InformatiqueSystèmes d’Exploitation 2727
II.2 Utilisation interactive de ZshMécanisme de Substitution de Processus :Mécanisme de Substitution de Processus :
ExempleExemplepaste paste <(<(cut cut ––f1 FILE1) <(f1 FILE1) <(cut cut ––f3 FILE3) f3 FILE3) > >(PROCESS1) > >(PROCESS2)> >(PROCESS1) > >(PROCESS2)
Résultat : Résultat : Le champ 1 du fichier FILE1 et le champ 3 du fichier FILE3 Le champ 1 du fichier FILE1 et le champ 3 du fichier FILE3 sont extraits avec la commande sont extraits avec la commande cut cut et collés avec la et collés avec la commande commande pastepaste. . Le résultat est envoyé vers les processus PROCESS1 et Le résultat est envoyé vers les processus PROCESS1 et PROCESS3PROCESS3
O. Dalle Licence InformatiqueSystèmes d’Exploitation 2828
II.2 Utilisation interactive de Zsh
Mécanisme de Substitution de CommandeMécanisme de Substitution de Commande
De la forme $(CMD) ou `CMD`De la forme $(CMD) ou `CMD`La forme est substituée par le résultat de CMDLa forme est substituée par le résultat de CMDExemples : Exemples : ••echoecho "Répertoire courant : `"Répertoire courant : `pwdpwd`"`"
••echoecho "Votre groupe d'utilisateur : $(id "Votre groupe d'utilisateur : $(id ––gn gn )")"
Les éventuels sauts de lignes en fin de résultat Les éventuels sauts de lignes en fin de résultat sont éliminéssont éliminésLorsque l'option GLOB_SUBST est positionnée, le Lorsque l'option GLOB_SUBST est positionnée, le résultat subit la substitution "résultat subit la substitution "filename filename génération" génération" ((cf cf plus loin)plus loin)
O. Dalle Licence InformatiqueSystèmes d’Exploitation 2929
II.2 Utilisation interactive de Zsh
Quelques effets du ~ (tilde)Quelques effets du ~ (tilde)
~ seul : équivalent de $HOME~ seul : équivalent de $HOME~+ : équivalent de $PWD~+ : équivalent de $PWD~~-- : répertoire avant le dernier cd: répertoire avant le dernier cd~~login login : désigne le : désigne le homedir homedir de de l'utilisateur l'utilisateur 'login''login'
O. Dalle Licence InformatiqueSystèmes d’Exploitation 3030
II.2 Utilisation interactive de ZshExpansion/Génération de noms de Expansion/Génération de noms de
fichiers (fichiers (globbingglobbing))
Désigner de façon simples les Désigner de façon simples les paramètres des commandes de type paramètres des commandes de type fichierfichier
sans avoir besoin de les désigner tous sans avoir besoin de les désigner tous explicitementexplicitement•• Via des expressions régulière Via des expressions régulière •• Expressions Expressions spécifiquesspécifiques au au globbingglobbing
O. Dalle Licence InformatiqueSystèmes d’Exploitation 3131
II.2 Utilisation interactive de Zsh
Globbing Globbing Elémentaire Elémentaire
option GLOB validéeoption GLOB validéel'expression désigne un nom de fichier entier (du l'expression désigne un nom de fichier entier (du premier au dernier caractère)premier au dernier caractère)métaméta--caratèrescaratères•• * : 0 ou plusieurs caractères quelconques * : 0 ou plusieurs caractères quelconques •• ? : un caractère quelconque? : un caractère quelconque•• [[xyztxyzt] : un ] : un carctère parmis carctère parmis x, y z ou tx, y z ou t•• [^[^xyztxyzt] : tout sauf un caractère ] : tout sauf un caractère parmis parmis x,y,z ou tx,y,z ou t•• <nb1<nb1--nb2> : un nombre compris entre nb1 et nb2nb2> : un nombre compris entre nb1 et nb2•• <<--nb2>, <nb1nb2>, <nb1--> : > : resp resp un nombre < nb2 ou un un nombre < nb2 ou un nb nb > >
nb1nb1•• <> : un nombre quelconque<> : un nombre quelconque•• (exp1|exp2) : exp1 ou exp2(exp1|exp2) : exp1 ou exp2
O. Dalle Licence InformatiqueSystèmes d’Exploitation 3232
II.2 Utilisation interactive de ZshGlobbing Globbing Elémentaire :Elémentaire :
ExemplesExemples
ls ls f* f?of* f?ols ls f[f[aeiouaeiou]o]ols ls (f?o|b?r)(f?o|b?r)ls ls <0<0--9>*9>*ls ls *<*<--5>5>ls ls *<>**<>*
O. Dalle Licence InformatiqueSystèmes d’Exploitation 3333
II.2 Utilisation interactive de Zsh
Globbing Globbing EtenduEtendu
L'option EXTENDED_GLOB doit être validéeL'option EXTENDED_GLOB doit être validéesetopt setopt EXTENDED_GLOBEXTENDED_GLOBDeux nouveaux Deux nouveaux metameta--caractères :caractères :•• ^ : tout sauf ce qui suit^ : tout sauf ce qui suit•• expexp# : 0 ou plusieurs occurrences de # : 0 ou plusieurs occurrences de expexp•• expexp## : 1 ou plusieurs occurrences de ## : 1 ou plusieurs occurrences de expexp
Exemples :Exemples :•• ls ls ^*.c^*.c•• file *.[^(o|out)]file *.[^(o|out)]•• ls ls ((fofo)#* commence par 0 ou plusieurs fois )#* commence par 0 ou plusieurs fois 'fo''fo'•• ls fols fo##* commence par ##* commence par fofo……oooooo•• ls ls (*TP*/)##* : contenu des (sous(*TP*/)##* : contenu des (sous--)sous)sous--répertoires répertoires
contenant 'TP' dans leur nomcontenant 'TP' dans leur nom
O. Dalle Licence InformatiqueSystèmes d’Exploitation 3434
II.2 Utilisation interactive de Zsh
Globbing Globbing des Fichiers Cachésdes Fichiers Cachés
L'option GLOB_DOTS doit être validéeL'option GLOB_DOTS doit être validéeLe Le globbing globbing s'applique alors aussi aux fichiers s'applique alors aussi aux fichiers cachés (commençant par .)cachés (commençant par .)
O. Dalle Licence InformatiqueSystèmes d’Exploitation 3535
II.2 Utilisation interactive de ZshGlobbing Globbing ::
Qualificatifs sur le TypeQualificatifs sur le Type
Une expression en fin de motif recherché Une expression en fin de motif recherché permet de "spécialiser" le permet de "spécialiser" le globbing globbing ::
expexp(exp2)(exp2)qualificatifs de exp2 :qualificatifs de exp2 :•• @ = lien symbolique@ = lien symbolique•• / = répertoire/ = répertoire•• r : lisible ; R : lisible r : lisible ; R : lisible otherother ; A : lisible groupe; A : lisible groupe•• w, W, I : w, W, I : ecriture ecriture pour user, pour user, otherother, groupe, groupe•• x, X, E : exécution pour user, x, X, E : exécution pour user, otherother, groupe, groupe•• u : propriétaire, u[lui] : 'lui' est propriétaire u : propriétaire, u[lui] : 'lui' est propriétaire •• s: s: setuidsetuid, S: , S: setgidsetgid
Combinaisons ET (), OU (,), NON (^) Combinaisons ET (), OU (,), NON (^)
O. Dalle Licence InformatiqueSystèmes d’Exploitation 3636
II.2 Utilisation interactive de ZshGlobbingGlobbing::
Exemple d'Utilisation des QualificatifsExemple d'Utilisation des Qualificatifs
lsls *(@) : lister les liens symboliques seulement*(@) : lister les liens symboliques seulementls ls *[*[aeiouaeiou](x) : lister les fichiers qui se terminent par ](x) : lister les fichiers qui se terminent par une voyelle qui ont la permission d'exécutionune voyelle qui ont la permission d'exécutionls ls *to(/) : lister les répertoires dont le nom se termine *to(/) : lister les répertoires dont le nom se termine par 'to'par 'to'ls ls *(UX^@) : lister les fichiers qui m'appartiennent, *(UX^@) : lister les fichiers qui m'appartiennent, exécutables pour tous, mais qui ne sont pas des liensexécutables pour tous, mais qui ne sont pas des liensls ls *(x,X) : lister les fichiers qui sont exécutables pour *(x,X) : lister les fichiers qui sont exécutables pour moi ou pour les autresmoi ou pour les autres
O. Dalle Licence InformatiqueSystèmes d’Exploitation 3737
II.2 Utilisation interactive de Zsh
Autres mécanismes de Autres mécanismes de Globbing Globbing
** : un chemin quelconque** : un chemin quelconquelsls **/*.c : rechercher et lister tous les **/*.c : rechercher et lister tous les fichiers qui se terminent par .c à partir du fichiers qui se terminent par .c à partir du répertoire courantrépertoire courant
==binbin : nom complet de l'exécutable : nom complet de l'exécutable 'bin''bin'lsls ==emacsemacs//usrusr/local//local/binbin//emacsemacsEquivalent à : Equivalent à : ls ls `̀which emacswhich emacs`̀Desactivé Desactivé par l'option "par l'option "noequalsnoequals""
O. Dalle Licence InformatiqueSystèmes d’Exploitation 3838
II. Interface Textuelle (zsh)
3. Eléments pour l'Ecriture de Scripts3. Eléments pour l'Ecriture de Scripts
Shell = langage de commandesShell = langage de commandesShell Script = programme écrit en langage de Shell Script = programme écrit en langage de commandescommandesRôles du Rôles du shellshell
Combiner/relier des commandes existantes avec Combiner/relier des commandes existantes avec redirectionsredirections, |, ||, && et instructions de contrôle, |, ||, && et instructions de contrôle
•• Permettre la construction de nouvelles commandesPermettre la construction de nouvelles commandes
Regrouper dans des fichiers des suites de Regrouper dans des fichiers des suites de commandescommandes
•• Exécution de tâches répétitivesExécution de tâches répétitives
O. Dalle Licence InformatiqueSystèmes d’Exploitation 3939
II.3 Eléments pour l'Ecriture de Scripts
Variété des InstructionsVariété des Instructions
Le Le shell shell propose toute une "palette" propose toute une "palette" d'instructions pour :d'instructions pour :
Mémoriser (variables, types, arguments)Mémoriser (variables, types, arguments)Compter (expressions arithmétiques et logiques)Compter (expressions arithmétiques et logiques)Tester (test, [[ ]])Tester (test, [[ ]])Bifurquer (if, case, ||, &&)Bifurquer (if, case, ||, &&)Boucler (Boucler (whilewhile, for, select, break, continue), for, select, break, continue)Interagir par E/S (Interagir par E/S (readread, print, <, >), print, <, >)SousSous--programmes : programmes : funtionfuntion, , unfunctionunfunction, return, , return, execexec, source, export, source, export
O. Dalle Licence InformatiqueSystèmes d’Exploitation 4040
II.3 Eléments pour l'Ecriture de Scripts
Variables Variables -- ExpressionsExpressions
Par défaut : variable = chaîne de caractèresPar défaut : variable = chaîne de caractèresInitialement videInitialement vide
Variables entièresVariables entièrestypeset typeset ––i var1 var2 : var1 et var2 de type entieri var1 var2 : var1 et var2 de type entier•• typesettypeset ––i e1 e2i e1 e2•• echo echo $e1 $e2$e1 $e2
=> 0 0=> 0 0
Expressions Expressions aritharith : délimitées par des doubles : délimitées par des doubles parenthesesparentheses
•• ((i1 = $i2 +1)) ((i1 = $i2 +1)) •• i1=$(i1=$(expr expr $i2 + 1) $i2 + 1)
O. Dalle Licence InformatiqueSystèmes d’Exploitation 4141
II.3 Eléments pour l'Ecriture de Scripts
Variables de type TableauVariables de type Tableau
Déclaration implicite lors de Déclaration implicite lors de l'initialisationl'initialisation
tab=(e1 e2)tab=(e1 e2)echoecho $tab[0] => e1$tab[0] => e1echo echo $tab[1] => e1 aussi !$tab[1] => e1 aussi !echo echo $tab[2] => e2$tab[2] => e2echo echo $tab[$tab[--1] => e21] => e2echo echo $#tab => 2 ($#tab => 2 (nb nb éléments)éléments)
O. Dalle Licence InformatiqueSystèmes d’Exploitation 4242
II.3 Eléments pour l'Ecriture de Scripts
Mécanismes de Substitution de VariablesMécanismes de Substitution de Variables
${var:${var:--wordword} : remplacé par le contenu de la variable } : remplacé par le contenu de la variable si elle existe, ou par si elle existe, ou par word word sinonsinon${var:=${var:=wordword} : idem mais variable est affectée avec } : idem mais variable est affectée avec wordword${var#${var#expexp} : retranche à var le plus petite chaîne en } : retranche à var le plus petite chaîne en partant de la gauche correspondant à partant de la gauche correspondant à expexp${var##${var##expexp} : idem mais retranche la plus grande } : idem mais retranche la plus grande chainechaine${var%${var%expexp}, ${var%%}, ${var%%expexp} : idem mais en partant } : idem mais en partant de la droitede la droite
O. Dalle Licence InformatiqueSystèmes d’Exploitation 4343
II.3 Eléments pour l'Ecriture de Scripts
Quelques Instructions de ContrôleQuelques Instructions de Contrôle
Boucler sur chaque ligne d'un fichierBoucler sur chaque ligne d'un fichiercat fich cat fich | ( | ( while read while read ligneligne
do do … … echo echo $ligne$ligne
done done ))
( ( while readwhile read lignelignedo do
… … echoecho $ligne$lignedonedone ) < ) < fichfich
O. Dalle Licence InformatiqueSystèmes d’Exploitation 4444
II.3 Eléments pour l'Ecriture de Scripts
Quelques Instructions de Contrôle Quelques Instructions de Contrôle
Définir une fonctionDéfinir une fonctionbackupbackup() {() {
suffixe=$2suffixe=$2for f in $1.*for f in $1.*dodo
mv mv $f $f.suffixe$f $f.suffixedone done }}
O. Dalle Licence InformatiqueSystèmes d’Exploitation 4545
II.3 Eléments pour l'Ecriture de Scripts
Fonctions en Fonctions en AutoloadAutoload
Au lieu de définir un grand nombre de fonctions dans le .Au lieu de définir un grand nombre de fonctions dans le .zshenvzshenv, , zsh zsh peut les charger en mémoire à la demandepeut les charger en mémoire à la demande
Stocker la définition de la fonction dans un fichier de même noStocker la définition de la fonction dans un fichier de même nommCréer un répertoire pour stocker les fichiers contenant les fonCréer un répertoire pour stocker les fichiers contenant les fonctionsctionsDire au Dire au shell shell ou chercher les fonctionsou chercher les fonctionsDéclarer les noms des fonctions Déclarer les noms des fonctions autoload autoload dans le .dans le .zshenvzshenv
Exemple :Exemple :•• mkdir mkdir $HOME/$HOME/ZshFuncZshFunc•• mv backup mv backup $HOME/$HOME/ZshFuncZshFunc•• chmod chmod a+x a+x ZshFuncZshFunc•• Dans .Dans .zshenv zshenv : :
FPATH=$HOME/FPATH=$HOME/ZshFuncZshFuncautoload backupautoload backup
O. Dalle Licence InformatiqueSystèmes d’Exploitation 4646
II.3 Eléments pour l'Ecriture de Scripts
Exemple de ScriptExemple de Script
Appliquer Appliquer backup backup à une liste de scriptsà une liste de scriptscat toutsauvercat toutsauver#! /#! /usrusr/local//local/binbin//zshzshle_suffixe=$1le_suffixe=$1shiftshifttypeset typeset ––i i nbnb__paramparam=$#=$#[[ $[[ $nbnb__param param ––lt lt 1 ]] && exit1 ]] && exittypeset typeset ––i i=1i i=1while while [[ $i [[ $i ––le $le $nbnb__param param ]]]]dodo
eval backupeval backup '$'{$i} $le_suffixe'$'{$i} $le_suffixei=$i+1i=$i+1
donedone
O. Dalle Licence InformatiqueSystèmes d’Exploitation 4747
II.3 Eléments pour l'Ecriture de ScriptsExemple de Script :Exemple de Script :
DémoDémolslspourtp1.c tetetp1.h tp1.c tp1.outpourtp1.c tetetp1.h tp1.c tp1.out
toutsauver old toutsauver old tp1 tp1 tete tete pourtp1pourtp1
lslspourtp1.c.pourtp1.c.old old tetetp1.h.tetetp1.h.old old tp1.c.tp1.c.old old tp1.out.tp1.out.oldold