Shell Linux
sans les coquilles
Débutant → intermédiaire

Édouard Lopez
CC BY-NC-SA
C'est quoi ?
● Une interface pourrie qui pète les yeux ?
○ Faux
○ configurez là!

● Un truc de barbu ?
○ Faux
○ Nolwenn (♀...
Outils de base
● le terminal
○ gnome-terminal,
○ konsole,
○ et d'autres

● un éditeur de texte
○ graphique:
■ gedit,
■ kat...
Variations et diversité
● Sous linux vous avez le choix de votre shell :
○ POSIX
○ Shell
○ Bash (aujourd'hui)
○ Zsh
● Les ...
Obtenir de l'aide
● RTFM
● Beaucoup de ressources en anglais
○ wikibooks
○ BashFAQ

● Soyez social !
○ Twitter
○ IRC: #bas...
RTFM
● Pour les barbus :
○ Depuis la ligne de commande
■ man <commande>
man echo
■ <commande> --help
echo --help

● Pour l...
Chemin Unix
● Chemin relatif
○ courant : ./
○ Parent : ../

● Chemin Absolue
○ / : racine du système
○ /chemin/vers/dossie...
Concepts basiques
● Sensible à la casse : a ≠ A
● « Sans maîtrise, la puissance n'est rien » Pirelli
○ la force du shell c...
Commandes de base 1/2
● echo : affiche du texte ou une variable
○ echo $SHELL
● pwd : emplacement (print working dir)
● cd...
Commandes de base 2/2
● mv : déplacer ou renommer (move)
● touch : modifier la date ou le créer
● mkdir : créer un réperto...
Chercher des fichiers : globs 1/2
● Caractères
○ * : tous les caractères, sans limite de longueur
■ ls ./*.csv
○ foo* : co...
Chercher des fichiers : find 1/3
● Insensible à la casse
○ find ./ -iname "toto"

● Uniquement des dossiers
○ find ./ -typ...
Chercher des fichiers : find 2/3
● Par date
○ -mtime : modification (fichier éditer)
○ -atime : accès (fichier lu)
○ -ctim...
Chercher des fichiers : find 3/3
● Exécuter un action
○ find ./ -iname "toto" -exec echo {} ;
●

Attention à ce que vous f...
Séquence de commandes
● Séquence de commandes indépendantes ;
○ cmd1 ; cmd2
○ chainer quelque soit le précédent résultat.
...
Redirection et Tubes
● Redirections de flux
○
○
○
○

cmd > fichier : écrire dans un fichier.
cmd < fichier : lire un fichi...
Premier Script
● Créé son fichier
○ gedit ./mon-script.sh

● Indiquer l'interpréteur avec #! (shebang)
○ doit être sur la ...
Exécuter un script
● Vérifier la présence de l'interpréteur
○ #!/usr/bin/env bash

● Ajouter les droits d'execution
○ chmo...
Conditions
● Si x alors y
○ if [[ condition ]]; then instruction 1; fi
○
[[ condition ]] && instruction

● Si x1 alors y1 ...
Options de Test
● Existence d'un fichier
○ [[ -e fichier ]] && echo "ok"

● Type de fichier: un dossier
○ [[ -d fichier ]]...
Tests multiples : Switch
case "$variable" in
"a")
cmds;;
"b")
cmds;;
val*) # le test peut être un glob: *.txt, *.jpe?g
*) ...
Boucles : répéter du code
for i in "$listElements"; # un glob, un tableau
do
cmds
done

● La liste peut être :
○
○
○
○

un...
Guillemets Simple ' ' (apostrophe)
● Chaine litéral : pas d'analyse
○ echo '$var' # affichera: $var

● Caractères spéciaux...
Guillemets Double " " (1/2)
● Permet certaines analyses
● Variables interprétées
○ echo "$var" # affichera le contenu de $...
Guillemets Double " " (2/2)
● Prévient certains comportements
● l'éclatement par mots
○ list="aa bb cc"
for i in "$list"; ...
Besoin d'aide ?
● Linux Bash Shell Cheat Sheet
●
●
●
●

http://cli.learncodethehardway.org/bash_cheat_sheet.
pdf
FAQ de sa...
Prochain SlideShare
Chargement dans…5
×

Shell sans les coquilles

594 vues

Publié le

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.

Publié dans : Technologie
1 commentaire
0 j’aime
Statistiques
Remarques
  • C'est pas pour être méchant, mais première diapo :
    'configurer là', je dirais plutôt 'configurez la' :)
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
594
Sur SlideShare
0
Issues des intégrations
0
Intégrations
5
Actions
Partages
0
Téléchargements
39
Commentaires
1
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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/

×