b a s h Le livre de Recettes



Documents pareils
Aide-Mémoire unix. 9 février 2009

TP1 - Prise en main de l environnement Unix.

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

C.M. 1 & 2 : Prise en main de Linux

Environnements informatiques

Tutoriel Création d une source Cydia et compilation des packages sous Linux

Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante :

Manuel de System Monitor

Contenu Microsoft Windows 8.1

FORMATION MULTIMÉDIA LVE

Outils pour la pratique

PHP CLÉS EN MAIN. 76 scripts efficaces pour enrichir vos sites web. par William Steinmetz et Brian Ward

Démarrer et quitter... 13

Contenu Windows 8 MODULE 1 AVANT-PROPOS MODULE 2 INTRODUCTION À WINDOWS 8 MODULE 4 APPLICATIONS WINDOWS 8 PARTIE 1 MODULE 3 PARAMÈTRES DE WINDOWS 8

Chapitre 1 Qu est-ce qu une expression régulière?

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

sshgate Patrick Guiran Chef de projet support

Lutter contre les virus et les attaques... 15

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

PRESENTATION RESSOURCES. Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille

Netfilter & Iptables. Théorie Firewall. Autoriser le trafic entrant d'une connexion déjà établie. Permettre le trafic entrant sur un port spécifique

TP 4 de familiarisation avec Unix

COMMUNICATION TECHNIQUE N TCV060 Ed. 01. OmniVista 4760 Nb de pages : 18 Date : URGENTE NON URGENTE TEMPORAIRE DEFINITIVE

Premiers pas en Linux

TP 1 Prise en main de l environnement Unix

Algorithmique et Programmation, IMA

Cours Linux. Cours en ligne Administrateur Systèmes Linux. Académie Libre

Architecture existante (principale)

INTRODUCTION AU CMS MODX

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

Commandes Linux. Gestion des fichiers et des répertoires. Gestion des droits. Gestion des imprimantes. Formation Use-IT

Programmation système I Les entrées/sorties

MAÎTRISE DE L ENVIRONNEMENT WINDOWS VISTA

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Catalogue des formations 2015

Atelier individuel. Linux 101. Frédérick Lefebvre & Maxime Boissonneault frederick.lefebvre@calculquebec.ca U. Laval - Janv. 2014

UltraBackup NetStation 4. Guide de démarrage rapide

Introduction à l informatique en BCPST

Chapitre 1 L interface de Windows 7 9

Projet Administration Réseaux

KIELA CONSULTING. Microsoft Office Open Office Windows - Internet. Formation sur mesure

Année Cours Unix-Shell. par. Karam ALLALI. Ecole Spéciale d Informatique

Sauvegarde sous MAC avec serveur Samba

Maintenance et gestion approfondie des Systèmes d exploitation Master 2 SILI. Année universitaire David Genest

TP 1. Prise en main du langage Python

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

Guide d utilisation et d administration

Tutorial Terminal Server sous

0.1 Mail & News : Thunderbird

Guide de l utilisateur de Cisco Unified Communications Manager Assistant pour Cisco Unified Communications Manager 6.0

PROFIL EXPERIENCE ARCHITECTE LINUX, OPEN SOURCE, COORDINATEUR SÉCURITÉ EMEA

EXCEL TUTORIEL 2012/2013

REPUBLIQUE ISLAMIQUE DE MAURITANIE

Introduction au logiciel de gestion bibliographique Zotero

User Documentation. Documentation utilisateur. version 0.2b

Plan global Outils de développement et compilation. Ce que l on veut éviter. Plan. Git : gestion de code source et versionnement.

Les PowerToys pour Windows XP

Sauvegarde de postes clients avec BackupPC

CONSULTATION SUR PLACE

Guide utilisateur i-milo >> Décisionnel

Groupe Eyrolles, 2005,

Boot Camp Guide d installation et de configuration

Installation d ORACLE 10g sous Debian Etch

Plan du cours. Historique du langage Nouveautés de Java 7

PROJET TOUR EDUCALL USB par CDPRO

Spécialiste Systèmes et Réseaux

Vous venez d acquérir un fichier de données issues de la Base de données SIRENE. Comment utiliser votre fichier?

Introduction au Système d Exploitation Unix/Linux

Introduction aux Systèmes et aux Réseaux, Master 2 CCI

Serveur Linux : FTP. Mise en place d un service FTP sous Linux. Bouron Dimitri 20/04/2014

INSTALLATION NG V2.1 D OCS INVENTORY. Procédure d utilisation. Auteur : GALLEGO Cédric 23/10/2014 N version : v1

Business Intelligence

Aide Webmail. L environnement de RoundCube est très intuitif et fonctionne comme la plupart des logiciels de messagerie traditionnels.

SharePoint 2013 L'environnement de travail collaboratif

Table des matières ENVIRONNEMENT

Groupe Eyrolles, 2006, ISBN : x

Reproductibilité des expériences de l article "Analyse et réduction du chemin critique dans l exécution d une application"

SPIP 1.9. Créer son site avec des outils libres. Michel-Marie Maudet Anne-Laure Quatravaux Dominique Quatravaux. Avec la contribution de Perline

LINUX - ADMINISTRATION PROGRAMME DE FORMATION

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Introduction à MATLAB R

TP n 2 : Installation et administration du serveur ProFTP. Partie 1 : Fonctionnement du protocole FTP (pas plus de 15min)

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Manuel d utilisation de Gestion 6

Logiciel : GLPI Version : SYNCRHONISATION DE GLPI AVEC ACTIVE DIRECTORY. Auteur : Claude SANTERO Config. : Windows 2003.

«Astrophysique et instrumentations associées» Cours UNIX Benoît Semelin

Nokia Internet Modem Guide de l utilisateur

LINUX - Sécurité. Déroulé de l'action. - 3 jours - Contenu de formation

Licence de Biologie, 1ère année. Aide. [Aide 1] Comment utiliser l'explorateur Windows? Comment créer des dossiers?

MISE A JOUR : 04 FEVRIER 2011 PROCÉDURE D INSTALLATION. Cegid Business COMMENT INSTALLER CEGID BUSINESS V9 SOUS WINDOWS XP, VISTA ET 7

THEME PROJET D ELABORATION D UNE BASE DE DONNEES SOUS LE SERVEUR MYSQL

Utiliser un tableau de données

FreeMind. Freeplane XMind. 2 e édition. Bien démarrer avec le Mind Mapping. . Groupe Eyrolles, 2010, ISBN :

L informatique en BCPST

Groupe Eyrolles, 2004 ISBN :

Windows 8 : une petite révolution? 9. Démarrer Windows Accéder au Bureau à la connexion 13. Ouvrir ou activer une nouvelle session 13

Introduction aux Systèmes et aux Réseaux

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Parallels Transporter Lisez-moi

Transcription:

b a s h Le livre de Recettes Solutions et exemples pour s cripteurs Traduction de François Cerbelle et Hervé Soulard D e C a r l A l b i n g, J P V o s s e n & C a m e r o n N e w h a m

bash Le livre de Recettes

De Carl Albing, JP Vossen & Cameron Newham bash Le livre de Recettes Traduction de François Cerbelle et Hervé Soulard Digit Books Éditeur de livres numériques Brest ---- infos@digitbooks.fr http://www.digitbooks.fr

Digit Books, 2009, pour la traduction française Couverture : Yves Buraud Illustration de «Autour de la lune» de Jules Verne (1868-69) de Émile-Antoine Bayard et Alphonse de Neuville. ISBN : 978-2-8150-0009-3 Prix : 36 http://www.digitbooks.fr/catalogue/978-2-8150-0009-3.html O Reilly Media, Inc. 2007 L édition originale de ce livre a été publiée aux États-Unis par O Reilly Media sous le titre bash Cookbook. Les programmes figurant dans ce livre ont pour but d illustrer les sujets traités. Il n est donné aucune garantie quant à leur fonctionnement une fois compilés, assemblés ou interprétés dans le cadre d une utilisation professionnelle ou commerciale. Toute représentation ou reproduction, intégrale ou partielle, faite sans le consentement de l auteur, de ses ayants droit, ou ayants cause, est illicite (loi du 11 mars 1957, alinéa 1er de l article 40). Cette représentation ou reproduction, par quelque procédé que ce soit, constituerait une contrefaçon sanctionnée par les articles 425 et suivants du Code pénal. La loi du 11 mars 1957 autorise uniquement, aux termes des alinéas 2 et 3 de l article 41, les copies ou reproductions strictement réservées à l usage privé du copiste et non destinées à une utilisation collective d une part et, d autre part, les analyses et les courtes citations dans un but d exemple et d illustration.

Table des matières Préface... xv 1. Débuter avec bash... 1 1.1. Comprendre l invite de commandes... 4 1.2. Afficher son emplacement... 5 1.3. Chercher et exécuter des commandes... 6 1.4. Obtenir des informations sur des fichiers... 8 1.5. Afficher tous les fichiers cachés... 10 1.6. Protéger la ligne de commande... 12 1.7. Utiliser ou remplacer des commandes... 14 1.8. Déterminer si le shell est en mode interactif... 15 1.9. Faire de bash le shell par défaut... 16 1.10. Obtenir bash pour Linux... 18 1.11. Obtenir bash pour xbsd... 21 1.12. Obtenir bash pour Mac OS X... 22 1.13. Obtenir bash pour Unix... 23 1.14. Obtenir bash pour Windows... 24 1.15. Obtenir bash sans l installer... 25 1.16. Documentation de bash... 26 2. Sortie standard... 31 2.1. Écrire la sortie sur le terminal ou une fenêtre... 32 2.2. Écrire la sortie en conservant les espaces... 33 2.3. Mettre en forme la sortie... 34 2.4. Écrire la sortie sans le saut de ligne... 35 2.5. Enregistrer la sortie d une commande... 36 2.6. Enregistrer la sortie vers d autres fichiers... 37

vi Table des matières 2.7. Enregistrer la sortie de la commande ls... 38 2.8. Envoyer la sortie et les erreurs vers des fichiers différents... 39 2.9. Envoyer la sortie et les erreurs vers le même fichier... 40 2.10. Ajouter la sortie à un fichier existant... 41 2.11. Utiliser seulement le début ou la fin d un fichier... 42 2.12. Sauter l en-tête d un fichier... 43 2.13. Oublier la sortie... 43 2.14. Enregistrer ou réunir la sortie de plusieurs commandes... 44 2.15. Relier une sortie à une entrée... 46 2.16. Enregistrer une sortie redirigée vers une entrée... 47 2.17. Connecter des programmes en utilisant la sortie comme argument 49 2.18. Placer plusieurs redirections sur la même ligne... 50 2.19. Enregistrer la sortie lorsque la redirection semble inopérante... 51 2.20. Permuter STDERR et STDOUT... 53 2.21. Empêcher l écrasement accidentel des fichiers... 54 2.22. Écraser un fichier à la demande... 56 3. Entrée standard... 59 3.1. Lire les données d entrée depuis un fichier... 59 3.2. Conserver les données avec le script... 60 3.3. Empêcher un comportement étrange dans un here document... 61 3.4. Indenter un here document... 63 3.5. Lire l entrée de l utilisateur... 64 3.6. Attendre une réponse Oui ou Non... 65 3.7. Choisir dans une liste d options... 68 3.8. Demander un mot de passe... 69 4. Exécuter des commandes... 71 4.1. Lancer n importe quel exécutable... 71 4.2. Connaître le résultat de l exécution d une commande... 73 4.3. Exécuter plusieurs commandes à la suite... 75 4.4. Exécuter plusieurs commandes à la fois... 76 4.5. Déterminer le succès d une commande... 77 4.6. Utiliser moins d instructions if... 78 4.7. Lancer de longues tâches sans surveillance... 79 4.8. Afficher des messages en cas d erreur... 80 4.9. Exécuter des commandes placées dans une variable... 81 4.10. Exécuter tous les scripts d un répertoire... 82 5. Variables du shell... 85 5.1. Documenter un script... 87 5.2. Incorporer la documentation dans les scripts... 88 5.3. Améliorer la lisibilité des scripts... 90

Table des matières vii 5.4. Séparer les noms de variables du texte environnant... 92 5.5. Exporter des variables... 92 5.6. Afficher les valeurs de toutes les variables... 94 5.7. Utiliser des paramètres dans un script... 95 5.8. Parcourir les arguments d un script... 96 5.9. Accepter les paramètres contenant des espaces... 97 5.10. Accepter des listes de paramètres contenant des espaces... 99 5.11. Compter les arguments... 101 5.12. Extraire certains arguments... 103 5.13. Obtenir des valeurs par défaut... 104 5.14. Fixer des valeurs par défaut... 105 5.15. Utiliser null comme valeur par défaut valide... 106 5.16. Indiquer une valeur par défaut variable... 107 5.17. Afficher un message d erreur pour les paramètres non définis... 108 5.18. Modifier certaines parties d une chaîne... 109 5.19. Utiliser les tableaux... 111 6. Logique et arithmétique... 113 6.1. Utiliser l arithmétique dans un script... 113 6.2. Conditionner l exécution du code... 116 6.3. Tester les caractéristiques des fichiers... 119 6.4. Tester plusieurs caractéristiques... 122 6.5. Tester les caractéristiques des chaînes... 123 6.6. Tester l égalité... 124 6.7. Tester avec des correspondances de motifs... 126 6.8. Tester avec des expressions régulières... 127 6.9. Modifier le comportement avec des redirections... 130 6.10. Boucler avec while... 131 6.11. Boucler avec read... 133 6.12. Boucler avec un compteur... 135 6.13. Boucler avec des valeurs en virgule flottante... 136 6.14. Réaliser des branchements multiples... 137 6.15. Analyser les arguments de la ligne de commande... 139 6.16. Créer des menus simples... 142 6.17. Modifier l invite des menus simples... 143 6.18. Créer une calculatrice NPI simple... 144 6.19. Créer une calculatrice en ligne de commande... 147 7. Outils shell intermédiaires I... 149 7.1. Rechercher une chaîne dans des fichiers... 150 7.2. Garder uniquement les noms de fichiers... 151 7.3. Obtenir une réponse vrai/faux à partir d une recherche... 152 7.4. Rechercher une chaîne en ignorant la casse... 154

viii Table des matières 7.5. Effectuer une recherche dans un tube... 154 7.6. Réduire les résultats de la recherche... 156 7.7. Utiliser des motifs plus complexes dans la recherche... 157 7.8. Rechercher un numéro de sécu... 158 7.9. Rechercher dans les fichiers compressés... 159 7.10. Garder une partie de la sortie... 160 7.11. Conserver une partie d une ligne de sortie... 161 7.12. Inverser les mots de chaque ligne... 162 7.13. Additionner une liste de nombres... 163 7.14. Compter des chaînes... 164 7.15. Afficher les données sous forme d histogramme... 166 7.16. Afficher un paragraphe de texte après une phrase trouvée... 168 8. Outils shell intermédiaires II... 171 8.1. Trier votre affichage... 171 8.2. Trier les nombres... 172 8.3. Trier des adresses IP... 173 8.4. Couper des parties de la sortie... 176 8.5. Retirer les lignes identiques... 177 8.6. Compresser les fichiers... 178 8.7. Décompresser des fichiers... 180 8.8. Vérifier les répertoires contenus dans une archive tar... 182 8.9. Substituer des caractères... 183 8.10. Changer la casse des caractères... 184 8.11. Convertir les fichiers DOS au format Linux/Unix... 185 8.12. Supprimer les guillemets... 186 8.13. Compter les lignes, les mots ou les caractères dans un fichier... 187 8.14. Reformater des paragraphes... 188 8.15. Aller plus loin avec less... 189 9. Rechercher des fichiers avec find, locate et slocate... 191 9.1. Retrouver tous vos fichiers MP3... 191 9.2. Traiter les noms de fichiers contenant des caractères étranges... 193 9.3. Accélérer le traitement des fichiers trouvés... 194 9.4. Suivre les liens symboliques... 195 9.5. Retrouver des fichiers sans tenir compte de la casse... 195 9.6. Retrouver des fichiers d après une date... 196 9.7. Retrouver des fichiers d après leur type... 197 9.8. Retrouver des fichiers d après leur taille... 198 9.9. Retrouver des fichiers d après leur contenu... 199 9.10. Retrouver rapidement des fichiers ou du contenu... 200 9.11. Retrouver un fichier à partir d une liste d emplacements possibles... 202

Table des matières ix 10. Autres fonctionnalités pour les scripts... 207 10.1. Convertir un script en démon... 207 10.2. Réutiliser du code... 208 10.3. Utiliser des fichiers de configuration dans un script... 210 10.4. Définir des fonctions... 211 10.5. Utiliser des fonctions : paramètres et valeur de retour... 213 10.6. Intercepter les signaux... 215 10.7. Redéfinir des commandes avec des alias... 219 10.8. Passer outre les alias ou les fonctions... 221 11. Dates et heures... 223 11.1. Formater les dates en vue de leur affichage... 224 11.2. Fournir une date par défaut... 225 11.3. Calculer des plages de dates... 227 11.4. Convertir des dates et des heures en secondes depuis l origine... 230 11.5. Convertir des secondes depuis l origine en dates et heures... 231 11.6. Déterminer hier ou demain en Perl... 232 11.7. Calculer avec des dates et des heures... 233 11.8. Gérer les fuseaux horaires, les horaires d été et les années bissextiles... 235 11.9. Utiliser date et cron pour exécuter un script au nème jour... 235 12. Tâches utilisateur sous forme de scripts shell... 239 12.1. Afficher une ligne de tirets... 239 12.2. Présenter des photos dans un album... 241 12.3. Charger votre lecteur MP3... 247 12.4. Graver un CD... 251 12.5. Comparer deux documents... 254 13. Analyses et tâches similaires... 257 13.1. Analyser les arguments d un script... 257 13.2. Afficher ses propres messages d erreur lors de l analyse... 260 13.3. Analyser du contenu HTML... 262 13.4. Placer la sortie dans un tableau... 264 13.5. Analyser la sortie avec une fonction... 265 13.6. Analyser du texte avec read... 266 13.7. Analyser avec read dans un tableau... 267 13.8. Déterminer le bon accord... 268 13.9. Analyser une chaîne caractère par caractère... 269 13.10. Nettoyer une arborescence SVN... 270 13.11. Configurer une base de données MySQL... 271 13.12. Extraire certains champs des données... 273 13.13. Actualiser certains champs dans des fichiers de données... 276

x Table des matières 13.14. Supprimer les espaces... 277 13.15. Compacter les espaces... 281 13.16. Traiter des enregistrements de longueur fixe... 283 13.17. Traiter des fichiers sans sauts de ligne... 285 13.18. Convertir un fichier de données au format CSV... 287 13.19. Analyser un fichier CSV... 288 14. Scripts sécurisés... 291 14.1. Éviter les problèmes de sécurité classiques... 293 14.2. Éviter l usurpation de l interpréteur... 294 14.3. Définir une variable $PATH sûre... 294 14.4. Effacer tous les alias... 296 14.5. Effacer les commandes mémorisées... 297 14.6. Interdire les fichiers core... 298 14.7. Définir une variable $IFS sûre... 298 14.8. Définir un umask sûr... 299 14.9. Trouver les répertoires modifiables mentionnés dans $PATH... 300 14.10. Ajouter le répertoire de travail dans $PATH... 303 14.11. Utiliser des fichiers temporaires sécurisés... 304 14.12. Valider l entrée... 308 14.13. Fixer les autorisations... 310 14.14. Afficher les mots de passe dans la liste des processus... 311 14.15. Écrire des scripts setuid ou setgid... 312 14.16. Restreindre les utilisateurs invités... 314 14.17. Utiliser un environnement chroot... 316 14.18. Exécuter un script sans avoir les privilèges de root... 317 14.19. Utiliser sudo de manière plus sûre... 318 14.20. Utiliser des mots de passe dans un script... 319 14.21. Utiliser SSH sans mot de passe... 321 14.22. Restreindre les commandes SSH... 329 14.23. Déconnecter les sessions inactives... 331 15. Scripts élaborés... 333 15.1. Trouver bash de manière portable... 334 15.2. Définir une variable $PATH de type POSIX... 335 15.3. Développer des scripts shell portables... 337 15.4. Tester des scripts sous VMware... 339 15.5. Écrire des boucles portables... 340 15.6. Écrire une commande echo portable... 342 15.7. Découper l entrée si nécessaire... 345 15.8. Afficher la sortie en hexadécimal... 346 15.9. Utiliser la redirection du réseau de bash... 348 15.10. Déterminer mon adresse... 349

Table des matières xi 15.11. Obtenir l entrée depuis une autre machine... 354 15.12. Rediriger la sortie pour toute la durée d un script... 356 15.13. Contourner les erreurs «liste d arguments trop longue»... 357 15.14. Journaliser vers syslog depuis un script... 359 15.15. Envoyer un message électronique depuis un script... 360 15.16. Automatiser un processus à plusieurs phases... 363 16. Configurer bash... 367 16.1. Options de démarrage de bash... 368 16.2. Personnaliser l invite... 368 16.3. Modifier définitivement $PATH... 376 16.4. Modifier temporairement $PATH... 377 16.5. Définir $CDPATH... 383 16.6. Raccourcir ou modifier des noms de commandes... 385 16.7. Adapter le comportement et l environnement du shell... 386 16.8. Ajuster le comportement de readline en utilisant.inputrc... 387 16.9. Créer son répertoire privé d utilitaires... 389 16.10. Utiliser les invites secondaires : $PS2, $PS3 et $PS4... 390 16.11. Synchroniser l historique du shell entre des sessions... 392 16.12. Fixer les options de l historique du shell... 393 16.13. Concevoir une meilleure commande cd... 396 16.14. Créer un nouveau répertoire et y aller avec une seule commande 398 16.15. Aller au fond des choses... 399 16.16. Étendre bash avec des commandes internes chargeables... 400 16.17. Améliorer la complétion programmable... 406 16.18. Utiliser correctement les fichiers d initialisation... 411 16.19. Créer des fichiers d initialisation autonomes et portables... 414 16.20. Commencer une configuration personnalisée... 416 17. Maintenance et tâches administratives... 429 17.1. Renommer plusieurs fichiers... 429 17.2. Utiliser GNU Texinfo et Info sous Linux... 431 17.3. Dézipper plusieurs archives ZIP... 432 17.4. Restaurer des sessions déconnectées avec screen... 433 17.5. Partager une unique session bash... 435 17.6. Enregistrer une session complète ou un traitement par lots... 437 17.7. Effacer l écran lorsque vous vous déconnectez... 438 17.8. Capturer les méta-informations des fichiers pour une restauration 439 17.9. Indexer de nombreux fichiers... 440 17.10. Utiliser diff et patch... 441 17.11. Compter les différences dans des fichiers... 446 17.12. Effacer ou renommer des fichiers dont le nom comporte des caractères spéciaux... 448

xii Table des matières 17.13. Insérer des en-têtes dans un fichier... 449 17.14. Éditer un fichier sans le déplacer... 452 17.15. Utiliser sudo avec un groupe de commandes... 454 17.16. Trouver les lignes présentes dans un fichier mais pas dans un autre... 456 17.17. Conserver les N objets les plus récents... 460 17.18. Filtrer la sortie de ps sans afficher le processus grep... 463 17.19. Déterminer si un processus s exécute... 464 17.20. Ajouter un préfixe ou un suffixe à l affichage... 465 17.21. Numéroter les lignes... 467 17.22. Écrire des séquences... 469 17.23. Émuler la commande DOS pause... 471 17.24. Formater les nombres... 472 18. Réduire la saisie... 475 18.1. Naviguer rapidement entre des répertoires quelconques... 475 18.2. Répéter la dernière commande... 477 18.3. Exécuter une commande similaire... 478 18.4. Effectuer des substitutions sur plusieurs mots... 479 18.5. Réutiliser des arguments... 480 18.6. Terminer les noms automatiquement... 481 18.7. Assurer la saisie... 482 19. Bourdes du débutant... 485 19.1. Oublier les autorisations d exécution... 485 19.2. Résoudre les erreurs «Aucun fichier ou répertoire de ce type»... 486 19.3. Oublier que le répertoire de travail n est pas dans $PATH... 488 19.4. Nommer un script «test»... 489 19.5. S attendre à pouvoir modifier les variables exportées... 490 19.6. Oublier des guillemets lors des affectations... 491 19.7. Oublier que la correspondance de motifs trie par ordre alphabétique... 493 19.8. Oublier que les tubes créent des sous-shells... 493 19.9. Réinitialiser le terminal... 496 19.10. Supprimer des fichiers avec une variable vide... 497 19.11. Constater un comportement étrange de printf... 497 19.12. Vérifier la syntaxe d un script bash... 499 19.13. Déboguer des scripts... 500 19.14. Éviter les erreurs «commande non trouvée» avec les fonctions... 502 19.15. Confondre caractères génériques du shell et expressions régulières... 503

Table des matières xiii A. Listes de référence... 505 B. Exemples fournis avec bash... 559 C. Analyse de la ligne de commande... 569 D. Gestion de versions... 575 E. Compiler bash... 597 Index... 605

Préface Tout système d exploitation moderne dispose d un interpréteur de commandes (un shell), voire même de plusieurs. Certains shells sont orientés ligne de commande, comme celui étudié dans ce livre, tandis que d autres offrent une interface graphique, comme l Explorateur de Windows ou le Finder du Mac. Certaines personnes utiliseront l interpréteur de commande uniquement pour lancer leur application préférée et n y retourneront qu à la fermeture de leur session. Cependant, les interactions entre l utilisateur et le shell sont généralement plus fréquentes et plus élaborées. Mieux vous connaîtrez votre shell, plus vous serez rapide et efficace. Que vous soyez administrateur système, programmeur ou simple utilisateur, un script shell pourra, dans certaines occasions, vous faire gagner du temps ou faciliter la répétition d une tâche importante. Même la définition d un simple alias, qui modifie ou raccourcit le nom d une commande souvent utilisée, peut avoir un effet substantiel. Nous allons nous intéresser, entre autres, à tous ces aspects. Comme c est le cas avec tout langage de programmation général, il existe plusieurs manières d effectuer une tâche. Parfois, il n existe qu une seule bonne manière, mais, le plus souvent, vous avez le choix entre deux ou trois approches équivalentes. Celle que vous choisissez dépend de votre style personnel, de votre créativité et de votre connaissance des différentes commandes et techniques. Cela s applique aussi bien à nous, en tant qu auteurs, qu à vous, en tant que lecteur. Dans la plupart des exemples, nous proposons une seule méthode et la mettons en œuvre. Parfois, nous optons pour une méthode particulière et expliquons pourquoi nous pensons qu il s agit de la meilleure. Nous présenterons, à l occasion, plusieurs solutions équivalentes afin que vous puissiez choisir celle qui correspond le mieux à vos besoins et à votre environnement. Quelquefois, vous devrez choisir entre un code efficace très astucieux et un code plus lisible. Nous nous tournons toujours vers le code le plus lisible. En effet, l expérience nous a appris que la lisibilité du code astucieux écrit aujourd hui n est plus la même 6 ou 18 mois et 10 projets plus tard. Vous risquez alors de passer beaucoup de temps à vous interroger sur le fonctionnement de votre code. Faites-nous confiance : écrivez du code clair et bien documenté. Vous vous en féliciterez plus tard.

xvi Préface Notre public Ce livre est destiné aux utilisateurs de systèmes Unix ou Linux (et Mac compris), ainsi qu aux administrateurs qui peuvent se trouver chaque jour devant plusieurs systèmes différents. Il vous aidera à créer des scripts qui vous permettront d en faire plus, en moins de temps, plus facilement et de manière plus cohérente que jamais. Les utilisateurs débutants apprécieront les sections qui concernent l automatisation des tâches répétitives, les substitutions simples et la personnalisation de leur environnement afin qu il soit plus agréable et peut-être plus conforme à leurs habitudes. Les utilisateurs expérimentés et les administrateurs trouveront de nouvelles solutions et des approches différentes à des tâches courantes. Les utilisateurs avancés seront intéressés par tout un ensemble de techniques utilisables sur-le-champ, sans devoir se souvenir de tous les détails syntaxiques. Cet ouvrage s adresse particulièrement : aux néophytes d Unix ou de Linux qui ont peu de connaissances du shell, mais qui souhaitent dépasser la seule utilisation de la souris ; aux utilisateurs d Unix ou de Linux expérimentés et aux administrateurs système qui recherchent des réponses rapides à leurs questions concernant l écriture de scripts shell ; aux programmeurs travaillant dans un environnement Unix ou Linux (ou même Windows) qui veulent améliorer leur productivité ; aux administrateurs système qui débutent sous Unix ou Linux ou qui viennent d un environnement Windows et qui doivent se former rapidement ; aux utilisateurs de Windows et les administrateurs système expérimentés qui souhaitent disposer d un environnement puissant pour l exécution de scripts. Ce livre ne s attardera pas longtemps sur les bases de l écriture de scripts shell. Pour cela, consultez Le shell bash de Cameron Newham (Éditions O Reilly) et Introduction aux scripts shell de Nelson H.F. Beebe et Arnold Robbins (Éditions O Reilly). Notre objectif est d apporter des solutions aux problèmes classiques, en insistant sur la pratique et non sur la théorie. Nous espérons que ce livre vous fera gagner du temps lorsque vous rechercherez une solution ou essaierez de vous souvenir d une syntaxe. En réalité, ce sont les raisons de la rédaction de cet ouvrage. Nous voulions un livre qui propose des idées et permette de passer directement aux exemples pratiques opérationnels en cas de besoin. Ainsi, nous n avons pas à mémoriser les différences subtiles entre le shell, Perl, C, etc. Nous supposons que vous avez accès à un système Unix ou Linux (ou bien, reportezvous à la recette 1.15, page 25, ou à la recette 15.4, page 339) et que vous savez comment ouvrir une session, saisir des commandes basiques et utiliser un éditeur de texte. Pour la majorité des exemples, vous n aurez pas besoin des droits du super-utilisateur (root). En revanche, ils seront indispensables pour quelques-uns, notamment ceux qui concernent l installation de bash.

Préface xvii Contenu de ce livre Le sujet de cet ouvrage est bash, le GNU Bourne Again Shell. Il fait partie de la famille des shells Bourne, dont les autres membres sont le shell Bourne originel, sh, le shell Korn, ksh, ainsi que sa version pdksh (Public Domain Korn Shell). Bien qu ils ne soient pas au cœur de ce livre, tout comme dash et zsh, les scripts présentés fonctionneront assez bien avec ces autres interpréteurs de commandes. Vous pouvez lire cet ouvrage du début à la fin ou l ouvrir et sélectionner ce qui retient votre attention. Cela dit, nous espérons surtout que dès que vous aurez une question sur la manière d effectuer une tâche ou besoin d un conseil, vous pourrez trouver facilement la réponse adaptée (ou proche) et économiser du temps et des efforts. La philosophie Unix tend à construire des outils simples qui répondent parfaitement à des problèmes précis, puis à les combiner selon les besoins. L association des outils se fait généralement au travers d un script shell car ces commandes, appelées tubes, peuvent être longues et difficiles à mémoriser ou à saisir. Lorsque ce sera nécessaire, nous emploierons ces outils dans le contexte d un script shell pour réunir les différents éléments qui permettent d atteindre l objectif visé. Ce livre a été écrit avec OpenOffice.org Writer sur la machine Linux ou Windows disponible à un moment donné et en utilisant Subversion (voir l annexe D, Gestion de versions). Grâce au format ODF (Open Document Format), de nombreux aspects de l écriture de ce livre, comme les références croisées et l extraction de code, ont été simplifiés (voir la recette 13.17, page 285). Logiciel GNU bash, ainsi que d autres outils mentionnés dans ce livre, font partie du projet GNU (http://www.gnu.org/). GNU est un acronyme récursif qui signifie en anglais GNU s Not Unix (GNU n est pas Unix). Démarré en 1984, ce projet a pour objectif de développer un système d exploitation de type Unix libre. Sans trop entrer dans les détails, ce que l on nomme couramment Linux est, en réalité, un noyau avec un ensemble minimal de différents logiciels. Les outils GNU se placent autour de ce cœur et bons nombres d autres logiciels peuvent être inclus selon les distributions. Cependant, le noyau Linux lui-même n est pas un logiciel GNU. Le projet GNU défend l idée que Linux devrait en réalité se nommer «GNU/Linux». C est également l avis d autres acteurs et certaines distributions, notamment Debian, emploie cette dénomination. Par conséquent, on peut considérer que l objectif du projet GNU a été atteint, même si le résultat n est pas exclusivement GNU. De nombreux logiciels importants, en particulier bash, sont issus du projet GNU et il existe des versions GNU de pratiquement tous les outils mentionnés dans ce livre. Bien que les outils fournis par ce projet soient plus riches en fonctionnalités et, en général, plus faciles à utiliser, ils sont également parfois légèrement différents. Nous reviendrons sur ce sujet à la recette 15.3, page 337, même si les fournisseurs d Unix commerciaux, entre les années 1980 et 1990, sont largement responsables de ces différences. Tous ces aspects de GNU, Unix et Linux ont déjà été traités en détail (dans des livres aussi épais que celui-ci), mais nous pensons que ces remarques étaient nécessaires. Pour plus d informations sur le sujet, consultez le site http://www.gnu.org.

xviii Préface Note sur les exemples de code Les éléments d exécution d un script shell sont généralement présentés de la manière suivante : $ ls a.out cong.txt def.conf fichier.txt autre.txt zebra.liste $ Le premier caractère est souvent un symbole dollar ($) pour indiquer que la commande a été saisie à l invite du shell bash. (N oubliez pas qu elle peut être différente et que vous pouvez la modifier, comme l explique la recette 16.2, page 368.) L invite est affichée par l interpréteur de commandes. C est à vous de saisir le reste de la ligne. De manière similaire, la dernière ligne de ces exemples est souvent une invite (à nouveau un $) afin de montrer que l exécution de la commande est terminée et que le contrôle est revenu au shell. Le symbole dièse (#) pose plus de problèmes. Dans de nombreux fichiers Unix ou Linux, y compris les scripts du shell bash, ce symbole dénote le début d un commentaire et nos exemples l emploient ainsi. Mais, dans l invite de bash (à la place de $), # signifie que vous avez ouvert une session en tant que root. Puisqu un seul de nos exemples exécute ses commandes en tant que root, vous ne devriez pas être trop perturbé, mais il est important que vous le sachiez. Lorsque la chaîne d invite est absente d un exemple, nous montrons en réalité le contenu d un script shell. Pour quelques exemples longs, nous numérotons les lignes du script, mais ces numéros ne font pas partie du script lui-même. Parfois, nous montrons un exemple sous forme d un journal de session ou d une suite de commandes. Nous pouvons également utiliser la commande cat avec un ou plusieurs fichiers afin de vous révéler le contenu du script et/ou des fichiers de données utilisés dans l exemple ou dans le résultat d une opération. $ cat fichiers_donnees static en-tete ligne1 static en-tete ligne2 1 toto 2 titi 3 tata De nombreux scripts et fonctions plus élaborés sont également disponibles en téléchargement. Pour plus de détails, reportez-vous à la section Votre avis, page xxi. Nous avons décidé d utiliser #!/usr/bin/env bash avec ces exemples car cette déclaration est plus portable que #!/bin/bash, que vous pourrez rencontrer sur Linux ou sur un Mac. Pour plus d informations, consultez la recette 15.1, page 334. Vous pourrez également remarquer la ligne suivante dans certains exemples de code : # bash Le livre de recettes : nom_extrait Cela signifie que le code, en version américaine, est disponible en téléchargement sur le site mis en place par les auteurs pour ce livre (http://www.bashcookbook.com). Sa version francisée se trouve sur le site http://www.oreilly.fr/catalogue/2841774473. Le téléchargement (.tgz ou.zip) est documenté, mais vous trouverez le code dans les fichiers au format./chxx/nom_extrait, où chxx correspond au chapitre et nom_extrait au nom du fichier.