Shell sans les coquilles

550 views

Published on

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.

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • C'est pas pour être méchant, mais première diapo :
    'configurer là', je dirais plutôt 'configurez la' :)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total views
550
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
28
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Shell sans les coquilles

  1. 1. Shell Linux sans les coquilles Débutant → intermédiaire Édouard Lopez CC BY-NC-SA
  2. 2. 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
  3. 3. Outils de base ● le terminal ○ gnome-terminal, ○ konsole, ○ et d'autres ● un éditeur de texte ○ graphique: ■ gedit, ■ kate ○ ligne de commande: ■ vim ■ nano
  4. 4. Variations et diversité ● 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 ?
  5. 5. Obtenir de l'aide ● RTFM ● Beaucoup de ressources en anglais ○ wikibooks ○ BashFAQ ● Soyez social ! ○ Twitter ○ IRC: #bash, #zsh
  6. 6. 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
  7. 7. Chemin Unix ● Chemin relatif ○ courant : ./ ○ Parent : ../ ● Chemin Absolue ○ / : racine du système ○ /chemin/vers/dossier/
  8. 8. 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
  9. 9. 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
  10. 10. 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
  11. 11. 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
  12. 12. Chercher des fichiers : find 1/3 ● Insensible à la casse ○ find ./ -iname "toto" ● Uniquement des dossiers ○ find ./ -type d -name "toto" ● Uniquement des fichiers ○ find ./ -type f -name "toto"
  13. 13. 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
  14. 14. 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
  15. 15. 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.
  16. 16. 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.
  17. 17. 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
  18. 18. 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
  19. 19. 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
  20. 20. 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.
  21. 21. 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
  22. 22. 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
  23. 23. 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
  24. 24. 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)"
  25. 25. 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
  26. 26. 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/

×