diapositives - LaCIM
Transcription
diapositives - LaCIM
Chapitre 12 : Introduction à Bash Alexandre Blondin Massé Département d’informatique Université du Québec à Montréal 29 novembre 2016 Construction et maintenance de logiciels INF3135 A. Blondin Massé (UQAM) 29 novembre 2016 1 / 16 Table des matières 1. Introduction 2. Commandes Unix 3. Opérations de base A. Blondin Massé (UQAM) 29 novembre 2016 2 / 16 Interaction avec un terminal I Bien que l’utilisation d’un terminal semble archaı̈que, elle permet en réalit d’interagir très efficacement avec le système d’exploitation; I En particulier, l’ensemble des commandes utilisées sont essentiellement des fonctions disponibles dans le langage Bash. I Autrement dit, Bash permet de combiner I des programmes (en C, en Python, en Java, etc.); I des commandes Unix (qui sont des programmes disponibles par défaut); I et leur façon d’agir sur le système de fichiers. A. Blondin Massé (UQAM) 29 novembre 2016 3 / 16 Table des matières 1. Introduction 2. Commandes Unix 3. Opérations de base A. Blondin Massé (UQAM) 29 novembre 2016 4 / 16 Commandes agissant sur les fichiers I Résumé (cheatsheet) : https://ubuntudanmark.dk/filer/fwunixref.pdf I Commandes fréquentes : Commande Description ls Liste les fichiers dans un répertoire ls -als Liste plus détaillée cd Change de répertoire mkdir Crée un répertoire rm Supprime un fichier (irréversible) rm -rf Supprime un répertoire (récursivement) cp Copie un fichier cp -r Copie un dossier (récursivement) mv Renomme/déplace un fichier/répertoire A. Blondin Massé (UQAM) 29 novembre 2016 5 / 16 Autres commandes de fichiers Commande find cat less head tail pwd touch Description Trouve toutes les occurrences d’un fichier Affiche le contenu d’un fichier ou concatène plusieurs fichiers Permet de parcourir le contenu d’un fichier Affiche les premières lignes d’un fichier Affiche les dernières lignes d’un fichier Affiche le répertoire courant Crée un fichier vide ou s’il existe, modifie sa date au moment présent I Tous les résultats de ces commandes peuvent être redirigés dans un fichier. Par exemple ls > contenu-repertoire.txt I touch est utile si on veut forcer une recompilation avec un Makefile par exemple. A. Blondin Massé (UQAM) 29 novembre 2016 6 / 16 Informations système Commande top kill chmod which grep date I Description Affiche les processus actifs Tue un processus (fin de tâche) Change les permissions d’un fichier ou un dossier Affiche le chemin d’une application Recherche une expression régulière Affiche l’heure et la date Exemples classiques de changement de permissions : chmod 777 # rwx pour tous chmod 755 # rwx pour user, # rx pour groupe et tous A. Blondin Massé (UQAM) 29 novembre 2016 7 / 16 Commandes réseau Commande ping whois dig wget curl I Description Vérifie si un hôte est disponible Affiche de l’information sur un nom de domaine Affiche l’information DNS d’un nom de domaine Télécharge un fichier Télécharge un fichier Utilisées en combinaison avec d’autres commandes, on peut écrire des scripts simples effectuant des tâches relativement complexes. A. Blondin Massé (UQAM) 29 novembre 2016 8 / 16 Table des matières 1. Introduction 2. Commandes Unix 3. Opérations de base A. Blondin Massé (UQAM) 29 novembre 2016 9 / 16 Deux programmes très simples I Le programme Hello, world! : #!/bin/bash echo Hello, world! I Sauvegarde (pas très utile, on peut faire mieux !) : #!/bin/bash tar -cZf /var/backup.tgz /home/blondin_al I Pour rendre le script exécutable : chmod +x <nom du script> A. Blondin Massé (UQAM) 29 novembre 2016 10 / 16 Redirections I On peut utiliser les redirections : python process.py > output.txt # Traitement + sauvegarde ./tp1 80 > villes-80.txt # Sauvegarde les 80 plus grandes villes ./tp2 2> error.log # Les erreurs sont sauvegardees dans un log I Pour rendre un processus complètement silencieux : python process.py &> /dev/null I Pour sauvegarder ce qui est affiché : make > compilation.log # Rien n’est affiche, tout est redirige make | tee compilation.log # Affiche et redirige le resultat I Le caractère | est utilisé pour créer un tube. A. Blondin Massé (UQAM) 29 novembre 2016 11 / 16 Tubes (pipes) I Un des aspects les plus importants des commandes Unix est qu’elles peuvent être combinées à l’aide de tubes (pipes); I Essentiellement, un tube permet de récupérer la sortie (sur stdout) d’un processus et de la passer en entrée (sur stdin) à un autre processus. I Exemples : # Affiche et redirige le resultat make | tee compilation.log # Affiche les fichiers contenant ’grille’ find . | grep ’grille’ # Fusionne deux fichiers en supprimant les lignes doubles cat fichier1.txt fichier2.txt | sort | uniq > resultat.txt A. Blondin Massé (UQAM) 29 novembre 2016 12 / 16 Environnement I Toutes les variables d’environnement sont disponibles; I Elles peuvent être créées, écrasées, modifiées, etc. echo $PATH # Affiche le contenu de la variable PATH PYTHON_PATH = /opt/local/bin/python # Affectation export PATH="$PATH:/Applications/eclipse" # Eclipse I Toutes les commandes sont également disponibles : I On peut déplacer un fichier avec mv; I On peut supprimer un fichier avec rm (Attention! : irréversible); I On peut cloner plusieurs dépôts Git, etc. A. Blondin Massé (UQAM) 29 novembre 2016 13 / 16 Trois types de guillemets (1/2) I I Lorsqu’on débute sous Bash, une source de confusion est la différence entre les guillemets I simples (’); I doubles ("); I inversés (‘); Les guillemets simples permettent de protéger une chaı̂ne utilisant des caractères spéciaux : FICHIER = ’nom$fichier$avec$dollar$’ BACK = ’meme le caractere \ est preserve’ I Les guillemets doubles protègent certains caractères, mais en interprète aussi. A. Blondin Massé (UQAM) 29 novembre 2016 14 / 16 Trois types de guillemets (2/2) I Les guillemets inversés permettent d’exécuter une commande et de la substituer : # Affecter a OS le systeme d’exploitation actuel OS = ‘uname‘ SRCS = ‘ls *.c‘ OBJS = ‘ls *.o‘ I Il y a une alternative aux guillemets inversés, qui consiste à utiliser $(...) : # Affecter a OS le systeme d’exploitation actuel OS = $(uname) SRCS = $(ls *.c) OBJS = $(ls *.o) A. Blondin Massé (UQAM) 29 novembre 2016 15 / 16 Structures de contrôle #!/bin/bash OS=‘uname‘ if [ "$OS" = "Darwin" ]; then echo "Mac OS" else echo "Linux" fi #!/bin/bash for file in $(ls); do if [ -f "$file" ]; then echo $file est un fichier else echo $file est un répertoire fi done A. Blondin Massé (UQAM) 29 novembre 2016 16 / 16