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