26
Shell Linux sans les coquilles Débutant → intermédiaire Édouard Lopez CC BY-NC-SA

Shell sans les coquilles

Embed Size (px)

DESCRIPTION

Introduction au shell (Bash) sous linux [débutants→intermédiaires]. L'objectif est de démystifier le shell, fournir une quelques commandes utiles, et présenter des fonctionnalités et des structures plus avancées (expansion des paramètres, tests, boucles, sous-commandes, etc.) Présentation réaliser lors de l'install party Giroll.

Citation preview

Page 1: Shell sans les coquilles

Shell Linuxsans les coquilles

Débutant → intermédiaire

Édouard Lopez CC BY-NC-SA

Page 2: Shell sans les coquilles

C'est quoi ?

● Une interface pourrie qui pète les yeux ?○ Faux○ configurez là!

● Un truc de barbu ?○ Faux○ Nolwenn (♀), addictif

● Un outil puissant et flexible ?○ Oui,○ On va voir ça

Page 3: Shell sans les coquilles

Outils de base

● le terminal○ gnome-terminal, ○ konsole, ○ et d'autres

● un éditeur de texte ○ graphique:

■ gedit, ■ kate

○ ligne de commande:■ vim■ nano

Page 4: Shell sans les coquilles

● Sous linux vous avez le choix de votre shell :○ POSIX○ Shell○ Bash (aujourd'hui)○ Zsh

● Les fonctions de base sont similaires

● Attention à la portabilité !

● Connaître mon shell ?echo $SHELL

Variations et diversité

Page 5: Shell sans les coquilles

Obtenir de l'aide

● RTFM

● Beaucoup de ressources en anglais○ wikibooks○ BashFAQ

● Soyez social !○ Twitter○ IRC: #bash, #zsh

Page 6: Shell sans les coquilles

RTFM

● Pour les barbus :○ Depuis la ligne de commande

■ man <commande>man echo

■ <commande> --helpecho --help

● Pour les gens normaux :○ man sur le web○ Google est ton ami

Page 7: Shell sans les coquilles

Chemin Unix

● Chemin relatif○ courant : ./○ Parent : ../

● Chemin Absolue○ / : racine du système○ /chemin/vers/dossier/

Page 8: Shell sans les coquilles

Concepts basiques

● Sensible à la casse : a ≠ A

● « Sans maîtrise, la puissance n'est rien » Pirelli○ la force du shell c'est la flexibilité des commandes

● Options étendues :○ ls -l -a -h

● Options condensées :○ ls -lah

Page 9: Shell sans les coquilles

Commandes de base 1/2

● echo : affiche du texte ou une variable○ echo $SHELL

● pwd : emplacement (print working dir)

● cd : changer de répertoire (change dir)○ cd ~ # renvoi dans le $HOME○ cd /tmp/○ cd # renvoi dans le $HOME

● ls : lister les fichiers et répertoires (list)○ ls -lah # fichiers cachés et taille en Ko/Mo

Page 10: Shell sans les coquilles

Commandes de base 2/2

● mv : déplacer ou renommer (move)● touch : modifier la date ou le créer● mkdir : créer un répertoire (make dir)● rm : supprimer un fichier (remove)

● cat : ○ concatène des fichiers○ envoi vers la sortie standard

● head : imprime le début d'un fichier● tail : imprime la fin d'un fichier● grep : trouve une expression dans un fichier

○ grep 'expression' ./fichier

Page 11: Shell sans les coquilles

Chercher des fichiers : globs 1/2

● Caractères○ * : tous les caractères, sans limite de longueur

■ ls ./*.csv○ foo* : commence par foo○ *foo* : contient la chaine foo○ *.tar.gz : se termine par .tar.gz○ foo? : caractère optionnel (foot, foob, et autres)

● Intervalle○ [abc] : cherche parmi a, b ou c○ [a-z] : cherche dans l'intervalle a à z

Page 12: Shell sans les coquilles

● Insensible à la casse○ find ./ -iname "toto"

● Uniquement des dossiers○ find ./ -type d -name "toto"

● Uniquement des fichiers○ find ./ -type f -name "toto"

Chercher des fichiers : find 1/3

Page 13: Shell sans les coquilles

Chercher des fichiers : find 2/3

● Par date○ -mtime : modification (fichier éditer)○ -atime : accès (fichier lu)○ -ctime : change (modification des droits du fichier)

● Fichiers agés de plus de 30 jours○ find ./ -mtime +30

● Par taille : fichier de plus de 1Ko○ find ./ -size +1024c # c = caractères/octets

Page 14: Shell sans les coquilles

Chercher des fichiers : find 3/3

● Exécuter un action○ find ./ -iname "toto" -exec echo {} \;

● Attention à ce que vous faites !○ find ./ -name "toto" -exec rn {} \;

● Aller plus loin :○ http://mywiki.wooledge.org/UsingFind

Page 15: Shell sans les coquilles

Séquence de commandes

● Séquence de commandes indépendantes ;○ cmd1 ; cmd2○ chainer quelque soit le précédent résultat.

● Execution conditionnelle &&○ cmd1 && cmd2○ si cmd1 réussie, éxécute cmd2.

● Execution alternative ||○ cmd1 || cmd2○ si cmd1 échoue, éxécute cmd2.

Page 16: Shell sans les coquilles

Redirection et Tubes

● Redirections de flux○ cmd > fichier : écrire dans un fichier.○ cmd < fichier : lire un fichier.○ cmd 2> fichier : rediriger les erreurs.○ cmd & : créer un processus.

● Tubes (ou pipe) ○ cmd1 | cmd2○ passé la sortie de cmd1 comme entrée de cmd2

■ wc -l fichier | cut -d' ' -f 1 # récupère le nb lignes

○ évite d'avoir un fichier temporaire.

○ tee : permet d'afficher un flux sans briser le tube.

Page 17: Shell sans les coquilles

Premier Script

● Créé son fichier○ gedit ./mon-script.sh

● Indiquer l'interpréteur avec #! (shebang)○ doit être sur la 1er ligne !

■ #!/usr/bin/env bash■ #!/usr/bin/env sh■ #!/usr/bin/env zsh

● Commentaires, lignes commençant par #○ # mon commentaire

● Remplacer ; par des retours à la ligne

Page 18: Shell sans les coquilles

Exécuter un script

● Vérifier la présence de l'interpréteur○ #!/usr/bin/env bash

● Ajouter les droits d'execution○ chmod u+x ./mon-script.sh

■ u = user■ + = ajoute■ x = execution

Page 19: Shell sans les coquilles

Conditions

● Si x alors y○ if [[ condition ]]; then instruction 1; fi○ [[ condition ]] && instruction

● Si x1 alors y1 Autre Si x2 Alors y2 Sinon y3○ if [[ x1 ]]; then

y1elif [[ x2 ]]; then y2else y3fi

Page 20: Shell sans les coquilles

Options de Test

● Existence d'un fichier○ [[ -e fichier ]] && echo "ok"

● Type de fichier: un dossier○ [[ -d fichier ]] && echo "ok"

● Type de fichier: un fichier (ni un lien, ni un réperttoire)○ [[ -f fichier ]] && echo "ok"

● -s (fichier existe et supérieur à 0 octets), -z (chaine zero), -n (non-null), etc.

Page 21: Shell sans les coquilles

Tests multiples : Switch

case "$variable" in"a")

cmds;;"b")

cmds;;val*) # le test peut être un glob: *.txt, *.jpe?g

*) # capture les autres cas

instructions;;esac

Page 22: Shell sans les coquilles

Boucles : répéter du code

for i in "$listElements"; # un glob, un tableaudo

cmdsdone

● La liste peut être :○ un intervalle : {1..4}○ glob : *.csv # éviter $(ls ...) [!]○ un tableau : $array[@]○ une sous-commande ⚠ # attention au format

● Il existe une syntaxe similaire au C :○ for (( i=0 ; i<5 ; i++ )) ; do cmds ; done

Page 23: Shell sans les coquilles

Guillemets Simple ' ' (apostrophe)

● Chaine litéral : pas d'analyse○ echo '$var' # affichera: $var

● Caractères spéciaux non-interprétés○ \n, \t, etc.

● Échappement de l'apostrophe○ \'

● Aller plus loin : http://mywiki.wooledge.org/Quotes

Page 24: Shell sans les coquilles

Guillemets Double " " (1/2)

● Permet certaines analyses

● Variables interprétées○ echo "$var" # affichera le contenu de $var

● Expansion des paramètres○ echo "${param/search/replace}"

● Expansion des expressions arithmétiques○ echo $((3+4)) # inutile

● Substitutions de commande○ echo "$(seq 3)"

Page 25: Shell sans les coquilles

Guillemets Double " " (2/2)

● Prévient certains comportements

● l'éclatement par mots○ list="aa bb cc"

for i in "$list"; do echo "$i"; donefor i in $list ; do echo "$i"; done # éclatement

● l'expansion des globs○ ls ./*

ls "./*" ⚠ # pas d'expansion du glob

● Enveloppe tout le résultat des substitutions ○ $()

Page 26: Shell sans les coquilles

Besoin d'aide ?

● Linux Bash Shell Cheat Sheethttp://cli.learncodethehardway.org/bash_cheat_sheet.pdf

● FAQ de salon IRC #BASHhttp://mywiki.wooledge.org/BashFAQ

● Questions Bash sur StackOverflowhttp://stackoverflow.com/questions/tagged/bash

● The Bash-Hackers Wikihttp://wiki.bash-hackers.org/

● The Grymoire - home for UNIX wizardshttp://www.grymoire.com/Unix/