Ligne de commande Linux avancée et scriptage bash (Linux 201)



Documents pareils
Environnements informatiques

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

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

Introduction aux Systèmes et aux Réseaux

Direction des Systèmes d'information

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

Guide d'installation de la base de données ORACLE 10g ( ) pour linux FEDORA CORE 4.

Pharmed. gestion de pharmacie hospitalière. Installation / déploiement

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


STAGE IREM 0- Premiers pas en Python

Introduction à MATLAB R

VXPERT SYSTEMES. CITRIX NETSCALER 10.1 et SMS PASSCODE 6.2. Guide d installation et de configuration pour Xenapp 6.5 avec SMS PASSCODE 6.

sshgate Patrick Guiran Chef de projet support

Initiation à la programmation en Python

Corrigé des TD 1 à 5

1. Structure d'un programme FORTRAN 95

Sauvegarde sous MAC avec serveur Samba

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Algorithmique et Programmation, IMA

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

Vue d ensemble de Windows PowerShell

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

TP1 - Prise en main de l environnement Unix.

Outils pour la pratique

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server

TP 4 de familiarisation avec Unix

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

Année Universitaire ième année IMAC Mardi 6 janvier Cloud computing Travaux Pratiques

Programmation C. Apprendre à développer des programmes simples dans le langage C

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

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

TP 1. Prise en main du langage Python

Shell Bash Niveau débutant

Première partie. Qu est-ce qu un script?

ECOLE POLYTECHNIQUE DSI. Utilisation des serveurs mandataires («proxy») avec les protocoles d usage courant

D r o i t s D r o i t s Q u i z z : i n t e r n e t t e x t e

Python Les fondamentaux du langage

Licence Sciences et Technologies Examen janvier 2010

L informatique en BCPST

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Atelier Le gestionnaire de fichier

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

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

Projet Administration Réseaux


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

Recherche dans un tableau

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Programmation système I Les entrées/sorties

Installation de Zabbix

Bon ben voilà c est fait!

La photo numérique et les logiciels libres. Asie Photos

Installation d ORACLE 10g sous Debian Etch

Exercice sur les Dockers

SSH, le shell sécurisé

Solution du challenge SSTIC Emilien Girault ANSSI/COSSI/DTO/BAI 06/06/13

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

Cours d algorithmique pour la classe de 2nde

Contrôle de la DreamBox à travers un canal SSH

Serveurs de noms Protocoles HTTP et FTP

I. Linux/Unix/UnixLike

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Table des matières Hakim Benameurlaine 1

INFO-F-404 : Techniques avancées de systèmes d exploitation

Les différentes méthodes pour se connecter

Client windows Nagios Event Log

EPREUVE PRATIQUE DES TECHNIQUES INFORMATIQUES ACTIVITE N 1. Thème de l activité : Configuration d un firewall

Le prototype de la fonction main()

Introduction au Système d Exploitation Unix/Linux

Polycopié Cours Système d Exploitation I. Programme : Filière SMI S3

Open Source Job Scheduler. Installation(s)

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Guide de démarrage du canal de transfert FTP

Particularité supplémentaire à ajouter avec Internet Explorer

Premiers pas. Shell? Les processus vu comme des filtres. commandes

Programmation système en C/C++

Premiers pas en Linux

VoD ( Video on Demand ) avec VLC

Installation et utilisation du client FirstClass 11

TP Sur SSH. I. Introduction à SSH. I.1. Putty

Atelier Migration. Mohamadi ZONGO Formateur assistant Kassim ASSIROU Atelier Migration.

Perl Orienté Objet BioPerl There is more than one way to do it

La Comptabilité UNIX System V Acctcom

Découverte de Python

Travaux Pratiques sur GRID 5000

Linux et le Shell. Francois BAYART. Atelier du samedi 20 Novembre

Thierry Déléris. BMC Mainview Data Server Synthèse & Mise en œuvre

PROXY SQUID-SQARD. procédure

Java Licence Professionnelle CISII,

SERVEUR DE SAUVEGARDE POUR BCDI3. par. G.Haberer, A.Peuch, P.Saadé

Hadoop, Spark & Big Data 2.0. Exploiter une grappe de calcul pour des problème des données massives

Sauvegardes par Internet avec Rsync

Enseignement secondaire technique

OCL - Object Constraint Language

Transcription:

Ligne de commande Linux avancée et scriptage bash (Linux 201) laurent.duchesne@calculquebec.ca maxime.boissonneault@calculquebec.ca Université Laval - Septembre 2014 1

2 Se connecter à Colosse ssh colosse.calculquebec.ca SSH est un protocole pour ouvrir un terminal sécurisé sur un système distant Sur Linux et Mac OS Intégré au système sous la forme de la commande ssh dans le terminal: $ ssh userxx@colosse.calculquebec.ca Sur Windows Télécharger Putty: http://goo.gl/f1wuee Connexion au poste : Nom d usager : formation Mot de passe : Calculquebec!

Hôte : colosse.calculquebec.ca Nom d usager : userxx Préparation des exercices : $ prepare_formation linux $ cd ~/linux201 laurent.duchesne@calculquebec.ca maxime.boissonneault@calculquebec.ca Université Laval - Septembre 2014 3

4 Prérequis 1. Ligne de commande de base Opération sur les fichiers Navigation dans le système de fichiers Exécution de commandes Variables d environnement 2. Principes de programmation Variables Boucles Structures conditionnelles

5 Plan de la présentation 1. Ligne de commande avancée «Flux» Redirections Outils Linux 2. Language bash Variables Boucles Structures conditionnelles Arithmétique Potluck

Introduction à Linux V1.0 Ligne de commande avancée 6

7 «Flux» 1. stdin Entrée standard 2. stdout Sortie standard 3. stderr Note L utilisation de ces «canaux» de communication est une convention généralement respectée, mais pas obligatoire. Sortie d erreur

8 «Pipes» et redirection 1. cmd1 cmd2 Prend la sortie standard de «cmd1» et l envoie à l entrée de «cmd2» 2. cmd > out.txt Prend la sortie standard de «cmd» et l écrit dans le fichier «out.txt» 3. cmd 2> err.txt Redirige la sortie d erreur de «cmd» et l écrit dans le fichier err.txt

9 «Pipes» et redirection 1. cmd 2>&1 > outerr.txt Redirige la sortie d erreur de «cmd» dans la sortie standard, puis envoie cette dernière dans le fichier «outerr.txt» 2. cmd >> out.txt Redirige la sortie standard de «cmd» et l ajoute à la fin du fichier «out.txt» 3. cmd < in.txt Prend le contenu du fichier «in.txt» et l envoie à «cmd»

10 Outils Linux grep : Filtrer un contenu awk : Opérer sur un contenu tr : Remplacer des caractères sort : Trier un contenu sed : Rechercher et remplacer sur des contenus paste, diff, head, tail, seq, etc.

11 grep [-Bx] [-Ax][-v] "expression" Sert à filtre un contenu Exemples : cat fichier.txt grep 10 cat fichier.txt grep "Resultat" cat fichier.txt grep -A1 "Resultat" cat fichier.txt grep -A1 "Resultat" grep -v "Resultat"

12 awk Fait des opérations sur un contenu Exemples : cat fichier.txt awk '{print $1}' cat fichier.txt awk '{print $1*3,$4}' cat fichier.txt awk '{a+=$1} END {print a}'

13 tr Remplacer des caractères Exemples : cat fichier.txt tr '.' ',' cat fichier.txt tr ' ' '\t' cat fichier.txt tr '\n' ' '

14 sort Trier un contenu Exemples : cat fichier.txt sort > fichier_tri.txt cat fichier.txt sort -k4 > fichier_tri4.txt cat fichier.txt sort -k4 -n > fichier_tri4.txt

15 sed Exemples : sed -i -e "s/10/12/g" fichier.txt cat fichier.txt sed -n "2p" cat fichier.txt sed -n "n;p"

Introduction à Linux V1.0 Language bash 16

Introduction à Linux V1.0 Variables 17

18 Anatomie d un script bash #!/bin/bash #commentaire Chemin d accès vers l interpréteur... commande 1 commande 2... Code de retour du script exit 0 chmod +x monscript.sh

19 Manuellement Exécution d un script bash $ bash monscript.sh Comme un exécutable «binaire» $ chmod +x monscript.sh $./monscript.sh C est ici que la ligne suivante est utile : #!/bin/bash

20 Variables MAVAR=3 Note : pas d espace après ou avant le «=» Exporter dans l environnement export MAVAR=3 Accéder à la valeur : ${MAVAR} Tableaux : MONTABLEAU[1]=32 Accès via : ${MONTABLEAU[1]}

21 Variables spéciales «$?» : Code de sortie de la dernière commande «$1, $2, $3,... ${10}, ${11}» : Paramètres du script ou de la fonction «$#» : Nombre d arguments du script «$$» : Numéro de processus (process ID) du script «$RANDOM»: Retourne un nombre aléatoire

22 Résultat d une commande Utiliser $(commande). Par exemple HOST=$(hostname) JOBS=$(cat jobs grep Running awk '{print $1} ) Syntaxe alternative : HOST=`hostname`

Introduction à Linux V1.0 Boucles 23

24 Boucle «for» (répertoire boucle_for) Boucle avec syntaxe C (c_style.sh) for (( i=1; i<=10; i++)); do echo $i done Boucle avec seq (seq.sh) for i in $(seq 1 10); do echo $i done Boucle avec accolades (curly.sh) for i in {1..10}; do echo $i done Boucle sur les fichiers (file.sh) for file in *.sh; do echo $file done

25 Exemples concrets À partir du résultat d une commande (parcourir_liste.sh) for jobid in $(cat jobs grep Idle awk '{print $1}'); do echo $jobid done

26 Exemples concrets Afficher le contenu de tous les fichiers *.sh (cat_sh.sh) for file in *.sh; do echo File $file echo ========================== cat $file echo ========================== done

27 Exercice #1 Dans exercice1/, écrire un script bash qui, à l aide de boucles : affiche les 2 premières lignes de tous les fichiers du répertoire «files» puis, affiche les chiffres de 1 à 10

28 Exercice #1 - Solution Écrire un script bash qui, à l aide de boucles : affiche les 2 premières lignes de tous les fichiers du répertoire «files» puis, affiche les chiffres de 1 à 10 for file in files/*; do head -n2 ${file} done for i in $(seq 1 10); do echo ${i} done

29 Boucle «while» (boucle_while/) while [[ condition ]]; do quelquechose done

30 Exemples Obtenir un nombre random supérieur à 15000 i=$random while [[ $i -lt 15000 ]]; do echo $i est inférieur à 15000. i=$random done echo $i est supérieur à 15000. (random.sh)

31 Exercice #2 Dans exercice2/, écrire un script qui : exécute «random_exitcode.sh» en boucle tant que le code de retour ($?) est 1 et qui affiche «Program failed.» à chaque fois. Indice La condition pour vérifier le code de retour est la suivante : $? == 1

32 Exercice #2 - Solution Dans exercice2/, écrire un script qui : exécute «random_exitcode.sh» en boucle tant que le code de retour ($?) est 1 et qui affiche «Program failed.» à chaque fois../random_exitcode.sh while [[ $? == 1 ]]; do echo Program failed../random_exitcode.sh done

Introduction à Linux V1.0 Structures conditionnelles 33

34 if/else (répertoire if/) if [[ condition ]]; then... elif [[ condition ]]; then... else fi...

35 Conditions arithmétiques entières -eq est égal à if [[ $a -eq $b ]] -ne n est pas égal à if [[ $a -ne $b ]] -gt est plus grand que if [[ $a -gt $b ]] -ge est plus grand ou égal à if [[ $a -ge $b ]] -lt est plus petit que if [[ $a -lt $b ]] -le est plus petit ou égal à if [[ $a -le $b ]]

Calcul Québec - Université Conditions Laval sur des chaînes de caractères 36 == est égal à if [[ "$a" == "$b" ]] == (pattern) if [[ $a == z* ]]!= n est pas égal à if [[ "$a"!= "$b" ]] < est plus petit que (ordre if [[ "$a" < "z" ]] alphabétique) -z est nulle if [[ -z "$a" ]] -n n est pas nulle/vide if [[ -n "$a" ]]

37 Conditions sur des fichiers -e le fichier existe if [[ -e $file ]] -f le fichier est un fichier (pas un répertoire) if [[ -f $file ]] -s le fichier n est pas vide if [[ -s $file ]] -d le «fichier» est un répertoire if [[ -d $file ]]

38 Autres conditions $ man bash [ ] Cherchez «CONDITIONAL EXPRESSIONS»

39 Combiner des conditions Et : if [[ condition1 && condition2 ]]; then...; fi Ou : if [[ condition1 condition2 ]]; then...; fi Les conditions en bash sont court-circuitées (seule la première condition est exécutée si elle est suffisante pour déterminer le résultat).

40 Exemples (tmpdir.sh) Choisir un répertoire de fichier temporaires if [[ -n $RAMDISK && -d $RAMDISK ]]; then TMPDIR=$RAMDISK elif [[ -d /tmp ]]; then TMPDIR=/tmp else TMPDIR=$(pwd) fi echo $TMPDIR

41 Exercice #3 Dans exercice3/, écrire un script qui : vérifie si le fichier «output.txt» existe si oui : le déplace vers output.txt.bak.yyyymmddhhmmss si non : le crée en y ajoutant la date Indice 1 La commande pour obtenir ou afficher la date est «date» Indice 2 La commande pour obtenir une date dans un format spécifique est : «date +FORMAT»

42 Exercice #3 - Solution Dans exercice3/, écrire un script qui : vérifie si le fichier «output.txt» existe si oui : le déplace vers output.txt.bak.yyyymmdd.hhmmss si non : le crée en y ajoutant la date D=$(date +%Y%m%d.%H%M%S) if [[ -f output.txt ]]; then mv output.txt output.txt.bak.${d} else date > output.txt fi

Introduction à Linux V1.0 Arithmétique 43

44 Opérations de base Limités aux opérations sur des entiers : echo $((3+4)) y=4 let y++ let y*=3 Pour nombres réels, voir «bc» ou «dc». Toute variable non-initialisée vaut 0.

45 Exercice #4 Dans exercice4/, écrire un script qui calcule le carré des nombres pairs entre 1 et 20, et le cube des nombres impaires. Indice Pour vérifier si un nombre est pair : if [[ $((i % 2)) == 0 ]]

46 Exercice #4 Dans exercice4/, écrire un script qui calcule le carré des nombres pairs entre 1 et 20, et le cube des nombres impaires. for i in {1..20}; do if [[ $((i % 2)) == 0 ]]; then echo "$i*$i = " $((i*i)) else echo "$i*$i*$i = " $((i*i*i)) fi done

Introduction à Linux V1.0 En vrac 47

48 wait et «&» «&» exécute une commande en arrière plan. «wait» attend que toutes les commandes en arrière plan précédentes soient terminées Exemple :./mon_programme 1 &./mon_programme 2 & wait

49 Briser ou coller des lignes Briser une ligne en deux : cat fichier.txt grep ^a cut -d':' -f2- awk '{print $1}' xargs ls -1 fgrep 01 xargs file cat fichier.txt grep ^a cut -d':' -f2- \ awk '{print $1}' xargs ls -1 \ fgrep 01 xargs file Mettre des instructions sur une seule ligne for file in *.txt; do cat ${file}; done

50 function mafonction() { echo $1 return $2 }... mafonction par1 par2 Fonctions

Introduction à Linux V1.0 Pour quoi ne pas faire de bash 51

Introduction à Linux V1.0 Pour la performance 52

53 Exemple réel file=$1 count=0 while read line; do n=$((count%4)) if [ "$n" -eq "0" ]; then echo -e ">"$line fi if [ "$n" -eq "1" ]; then echo -e $line fi (( count++ )) done < "$file"

54 Version «one-liner» awk 'NR%4!= 0' "$file" \ awk 'NR%3!=0' \ awk 'NR%2 == 1 { print ">"$0}; NR%2 == 0 { print $0 }'

Comparaison de performance 55 (exemples/perf/) «time» permet de calculer le temps d exécution $ time./bash_version.sh data.txt > data_out_bash.txt real 0m17.603s user 0m14.244s sys 0m3.168s $ time./awk_version.sh data.txt > data_out_awk.txt real 0m0.197s user 0m0.264s sys 0m0.067s

56 Ressources du CLUMEQ Site web Documentation Portail utilisateur Support http://www.calculquebec.ca https://wiki.calculquebec.ca/ https://portail.calculquebec.ca support@calculquebec.ca colosse@calculquebec.ca

57 Liens utiles Ligne de commande avancée : https://en.wikipedia.org/wiki/gnu_core_utilities https://en.wikipedia.org/wiki/list_of_unix_programs Scripts bash avancé http://www.tldp.org/ldp/abs/html/ http://wiki.bash-hackers.org/ http://mywiki.wooledge.org/bashguide Manuel de référence de bash http://www.gnu.org/software/bash/manual/bashref.html

58 Questions?