Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Shell sans les coquilles

Shell sans les coquilles

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.

Édouard Lopez

November 16, 2012
Tweet

Transcript

  1. 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
  2. Outils de base • le terminal ◦ gnome-terminal, ◦ konsole,

    ◦ et d'autres • un éditeur de texte ◦ graphique: ▪ gedit, ▪ kate ◦ ligne de commande: ▪ vim ▪ nano
  3. • 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 ? Variations et diversité
  4. Obtenir de l'aide • RTFM • Beaucoup de ressources en

    anglais ◦ wikibooks ◦ BashFAQ • Soyez social ! ◦ Twitter ◦ IRC: #bash, #zsh
  5. RTFM • Pour les barbus : ◦ Depuis la ligne

    de commande ▪ man <commande> man echo ▪ <commande> --help echo --help • Pour les gens normaux : ◦ man sur le web ◦ Google est ton ami
  6. Chemin Unix • Chemin relatif ◦ courant : ./ ◦

    Parent : ../ • Chemin Absolue ◦ / : racine du système ◦ /chemin/vers/dossier/
  7. 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
  8. 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
  9. 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
  10. 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
  11. • 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
  12. 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
  13. 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
  14. 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.
  15. 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.
  16. 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
  17. 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
  18. 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 y1 elif [[ x2 ]]; then y2 else y3
  19. 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.
  20. 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
  21. Boucles : répéter du code for i in "$listElements"; #

    un glob, un tableau do cmds done • 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
  22. 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
  23. 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)"
  24. Guillemets Double " " (2/2) • Prévient certains comportements •

    l'éclatement par mots ◦ list="aa bb cc" for i in "$list"; do echo "$i"; done for 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
  25. Besoin d'aide ? • Linux Bash Shell Cheat Sheet http://cli.learncodethehardway.org/bash_cheat_sheet.

    pdf • FAQ de salon IRC #BASH http://mywiki.wooledge.org/BashFAQ • Questions Bash sur StackOverflow http://stackoverflow.com/questions/tagged/bash • The Bash-Hackers Wiki http://wiki.bash-hackers.org/ • The Grymoire - home for UNIX wizards http://www.grymoire.com/Unix/