Shell sous Unix/Linux
Apprenez à écrire des scripts pour administrer votre système
Édition ENI
Avant-propos
Chapitre 1
Introduction
1. Architecture d'un système UNIX11
2. Le principe KISS12
3. Mise en oeuvre de ces apprentissages13
Chapitre 2
Concepts de base
1. Définition du shell15
1.1 Fonction du shell16
1.2 Plusieurs shells17
1.3 Choix du shell18
1.4 À l'écran : le prompt19
1.5 Variables d'environnement20
1.6 Complétion automatique22
1.7 Rappel des précédentes commandes22
2. Chaînes et flux23
2.1 Fichiers et pseudo-fichiers23
2.2 Entrées et sorties standard24
3. Shell, shell script et langage24
4. Chemins et caractères spéciaux26
4.1 Répertoire courant, chemin relatif ou absolu26
4.2 Métacaractères28
5. Expressions rationnelles29
5.1 Opérateurs30
5.2 Groupes32
5.3 Exemples32
5.4 Versions33
6. Utilisateurs et droits34
6.1 Identifiants34
6.2 Droits35
6.3 Ajout de droits avec sudo38
Chapitre 3
Éditeurs de texte
1. Pourquoi parler d'éditeurs de texte ?41
2. Console ou interface graphique43
3. Quels éditeurs ?44
3.1 Les ancêtres44
3.2 Les légers et rapides45
3.3 Les modernes46
3.4 Les poids lourds46
4. Vim : performant, léger et universel47
4.1 Un peu d'histoire48
4.2 Les modes49
4.3 Les commandes50
4.3.1 Insertion de texte51
4.3.2 Déplacement52
4.3.3 Couper, copier et coller53
4.3.4 Sélection visuelle54
4.3.5 Recherche et remplacement55
4.3.6 Indentations57
4.3.7 Annulation57
4.3.8 Répétition58
4.3.9 Sortie, enregistrement, ouverture58
4.3.10 Récapitulatif60
4.4 Aides et extensions63
4.5 Configuration63
4.6 GVim, avec interface graphique65
4.7 Windows, OS X et autres systèmes67
5. Nano : léger et simple68
5.1 Origine et histoire68
5.2 Fonctionnement69
6. Accès distant71
Chapitre 4
Les bases de l'écriture d'un script
1. Forme générale d'un script73
1.1 Nommage de fichier73
1.2 Mise en forme74
1.3 Commentaires75
1.4 Le shebang75
2. Variables et assignation77
2.1 Assignation d'une valeur78
2.2 Type de données78
2.3 Lecture d'une valeur au clavier79
2.4 Contenu d'une variable80
2.5 Substitutions80
2.6 Variable spécifique à une commande81
2.7 Protection des contenus82
2.8 Stocker des listes84
2.9 Opérations arithmétiques86
3. Environnement et communication88
3.1 Entrée et sorties88
3.2 Arguments89
3.2.1 Argument simple89
3.2.2 Deux variables pour tous les arguments90
3.2.3 Lecture séquentielle des arguments91
3.2.4 Argument non-option avec un tiret91
3.3 Signaux92
3.4 Variables d'environnement93
4. Enchaînements et redirections95
4.1 Redirections des entrées/sorties95
4.1.1 Redirection de la sortie standard95
4.1.2 Redirection de la sortie d'erreur96
4.1.3 Redirection de l'entrée97
4.1.4 Redirections et pseudo-fichiers97
4.1.5 Here-document98
4.1.6 Chaînage des commandes99
4.1.7 Groupage des commandes100
4.1.8 Dupliquer la sortie100
4.1.9 Redirection de sortie avec sudo100
4.2 Enchaînement de commandes101
4.3 Exécution en arrière-plan102
4.4 Traitement du code de retour103
4.4.1 Variable du code d'erreur103
4.4.2 Enchaînement conditionnel104
4.4.3 Codes de retour d'un script104
4.5 Appels imbriqués105
4.5.1 Assignation à variable ou en argument105
4.5.2 Evaluation de contenus de chaînes106
5. Fonctions106
5.1 Déclaration et appel107
5.2 Arguments107
5.3 Flux de données108
5.4 Code de retour108
6. Inclusion d'un autre fichier109
Chapitre 5
Structures conditionnelles et boucles
1. Structures conditionnelles111
1.1 Commande test111
1.2 Structure conditionnelle avec if115
1.3 Structure conditionnelle avec case117
2. Boucles119
2.1 Boucle for120
2.2 Boucle sur une série de nombres122
2.3 Boucle while124
2.4 Lecture d'un fichier ligne par ligne125
2.5 Interruption forcée127
Chapitre 6
Traitement des flux et des chaînes
1. De la chaîne au flux131
1.1 Utilisation d'une variable dans un flux131
1.2 Limite des arguments132
1.3 Fichier temporaire133
1.4 Flux au lieu des arguments135
2. Découpage137
2.1 Couper les lignes : cut137
2.2 Ignorer les espaces multiples : echo139
2.3 Découper les fichiers : split141
3. Filtrage143
3.1 Conserver les premières lignes : head143
3.2 Conserver les dernières lignes : tail144
3.3 Extraire un ensemble de lignes147
3.4 Inverser les données : tac et rev147
3.5 Filtrer selon le contenu : grep148
4. Modification151
4.1 Modifier des caractères : tr151
4.2 Convertir les tabulations : expand et unexpand152
4.3 Raccourcir les lignes : fold153
4.4 Trier les lignes : sort153
4.5 Mélanger les lignes : shuf154
4.6 Supprimer les doublons : uniq155
4.7 Numéroter et compter : nl et wc156
5. Outils évolués159
5.1 sed, l'éditeur de flux159
5.1.1 Adresses160
5.1.2 Commandes162
5.1.3 Options utiles163
5.1.4 Exemple165
5.2 AWK, langage de traitement de texte166
5.2.1 Motifs168
5.2.2 Traitement des champs170
5.2.3 Variables172
5.2.4 Structures conditionnelles172
5.2.5 Boucles173
5.2.6 Fonctions intégrées174
5.2.7 Commandes et fichiers175
5.2.8 Fonctions utilisateur175
5.2.9 Exécution directe176
5.2.10 Exemple176
5.3 Ed : éditeur non visuel179
5.3.1 Adressage179
5.3.2 Commandes180
5.3.3 Exemple183
Chapitre 7
Recueil de commandes
1. Documentation/aide185
1.1 Pages de manuel185
1.2 Commandes GNU plus en détail187
1.3 Identification des commandes188
2. Gestion de fichiers188
2.1 Création189
2.2 Suppression191
2.3 Copie, déplacement et renommage192
2.4 Liste et recherche193
2.5 Consultation200
2.6 Droits et appartenance202
2.7 Archives et compression204
2.8 Détection des types de fichiers207
3. Gestion des utilisateurs et groupes208
3.1 Créer un utilisateur209
3.2 Supprimer un utilisateur211
3.3 Modifier un utilisateur212
3.4 Créer un groupe214
3.5 Supprimer un groupe215
3.6 Modifier un groupe215
3.7 Lister les utilisateurs et les groupes216
4. Processus216
4.1 Lister les processus217
4.2 Gérer les processus224
5. Disques et mémoire227
5.1 Consulter les espaces disques227
5.2 Consulter la mémoire vive231
5.3 Manipuler les partitions231
5.4 Monter et démonter235
5.5 LVM239
6. Système239
6.1 Informations et manipulations basiques239
6.2 Paquets logiciels242
7. Divers243
7.1 Vrai et faux, oui et non243
7.2 Attente243
7.3 Codage et hachage244
Chapitre 8
Automatisation
1. Sortie du terminal247
1.1 Détacher définitivement : nohup247
1.2 Détacher et revenir : screen248
1.3 Envoyer un courrier électronique : mail248
2. Planification régulière249
2.1 Format des tâches250
2.2 Tâches utilisateurs252
2.3 Tâche système253
2.4 Entrées et sorties254
3. Exécution ponctuelle255
3.1 Programmer une tâche255
3.2 Lister des tâches257
3.3 Supprimer une tâche258
Chapitre 9
Pour aller plus loin...
1. Exploitation avancée des arguments259
1.1 Arguments fournis à getopts260
1.2 Appel de getopts260
2. Formatage des sorties261
2.1 Couleurs261
2.2 Formatage du texte264
2.3 Affichage graphique265
3. Droits avancés avec les ACL POSIX266
4. Réseau269
4.1 Bas niveau, configuration, diagnostic269
4.2 Web et téléchargements275
4.3 Transfert de fichiers278
5. Impression et numérisation282
5.1 Impression282
5.2 Numérisation283
6. Médias284
6.1 Images284
6.2 Fichiers PDF286
6.3 Fichiers audio287
7. Environnements de bureau288
8. Autres langages290
Chapitre 10
Exemples concrets
1. Gestion des utilisateurs293
2. Supervision basique298
3. Nettoyage de systèmes de fichiers302
Index311