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

(Re) Découvrir les outils UNIX

(Re) Découvrir les outils UNIX

Votre logiciel hang, vous ne savez pas pourquoi ? Ou votre application préférée ne lit pas sa configuration et vous ne savez pas pourquoi ? Il existe beaucoup d'outils fournis avec Linux. Pourtant beaucoup de développeurs ne les connaissent pas ou ne les utilisent pas. A travers une série de cas d'utilisation, nous verrons comment utiliser tout ces outils: grep, find, xargs, strace, tcpdump, lsof

Grégoire Pineau

November 19, 2021
Tweet

More Decks by Grégoire Pineau

Other Decks in Technology

Transcript

  1. (Re) Découvrir
    les outils UNIX

    View full-size slide

  2. Je suis Grégoire Pineau
    Développeur @JoliCode
    Core Team @symfony
    twitter.com/@lyrixx
    github.com/@lyrixx
    Bonjour!
    2

    View full-size slide

  3. 4
    Disclaimer
    ● Crescendo
    ● Slides

    View full-size slide

  4. Le shell
    La où tout se passe
    1
    5

    View full-size slide

  5. Un shell Unix est un interpréteur de commandes.
    Il se présente sous la forme d'une interface en
    ligne de commande accessible depuis un terminal.
    BASH, ZSH et fish sont des shell très populaires.
    (https://fr.wikipedia.org/wiki/Shell_Unix)
    6
    Le shell

    View full-size slide

  6. Le fichier ~/.bashrc vous appartient.
    Il vous permet de personnaliser votre shell.
    ● Ajouter des alias : alias ls = "ls -lh"
    ● De changer le prompt
    ● De changer les couleurs
    ● Et plus encore
    7
    Votre shell

    View full-size slide

  7. ● Augmenter la portée du PATH
    PATH="./node_modules/.bin:$PATH"
    ● Et du CDPATH
    export CDPATH=".:$HOME:$HOME/dev/github.com"
    8
    Votre shell, Tips

    View full-size slide

  8. ● cd : va dans votre $HOME
    ● cd - : revient dans le dossier précédent
    ● cd . : reste dans le même dossier
    mais actualise le path si il a changé
    9
    Votre shell, Tips (2)

    View full-size slide

  9. ● \ls : l’opérateur \ permet de ne pas utiliser un alias
    ● CTRL+R pour rechercher parmis son historique
    ● !! qui permet de rejouer la dernière commande
    ○ chown -R gregoire: v3/
    ○ sudo !!
    10
    Votre shell, Tips (3)

    View full-size slide

  10. Une commande
    2
    11

    View full-size slide

  11. 12
    Une commande
    Une commande est une instruction
    Une commande peut être:
    ● Une built-in shell (cd, echo, exec, exit, kill, ...)
    ● Un binaire (mkdir, ls, ip, git, …)

    View full-size slide

  12. 13
    La communication
    Une commande peut communiquer avec le monde extérieur via:
    ● Des options ou arguments (ls -l, mkdir -p foo, …)
    ● Des variables d'environnement (FOO=bar my-command)
    ● Les flux d’I/O : STDIN, STDOUT, STDERR, ...
    ● (et d’autres techniques non abordées ici)
    (https://man7.org/linux/man-pages/man2/execve.2.html)

    View full-size slide

  13. 14
    Les flux d’I/O
    Les flux d’I/O permettent d'interagir avec des File
    Descriptor
    echo Hello > my-file.txt
    cat < my-file.txt
    echo Hello | cat
    (https://man7.org/linux/man-pages/man3/stdout.3.html)

    View full-size slide

  14. Help
    On peut trouver de l’aide via
    ● my_command --help (convention)
    ● man my_command
    ● https://tldr.sh/ (site web et commande)
    15

    View full-size slide

  15. man++
    16
    man() {
    env \
    LESS_TERMCAP_mb=$(printf "\e[1;31m") \
    LESS_TERMCAP_md=$(printf "\e[1;31m") \
    LESS_TERMCAP_me=$(printf "\e[0m") \
    LESS_TERMCAP_se=$(printf "\e[0m") \
    LESS_TERMCAP_so=$(printf "\e[1;41;37m") \
    LESS_TERMCAP_ue=$(printf "\e[0m") \
    LESS_TERMCAP_us=$(printf "\e[1;35m") \
    man "$@"
    }

    View full-size slide

  16. Les outils Unix
    3
    17

    View full-size slide

  17. Use case #1
    18
    Afficher l'arborescence
    d’un dossier :
    tree
    Afficher les permissions
    d’un dossier récursivement
    namei -ol /path/to/file

    View full-size slide

  18. Use case #2
    Extraire la troisième colonne d’un CSV
    cut -d ';' -f 3 with-markers-500000.csv
    ● -d : delimiteur
    ● -f : field
    19

    View full-size slide

  19. Use case #3
    Connaître qui commit le plus sur un projet git
    20

    View full-size slide

  20. Use case #3
    Connaître qui commit le plus sur un projet git
    21

    View full-size slide

  21. Use case #3
    Connaître qui commit le plus sur un projet git
    22

    View full-size slide

  22. Use case #3
    Connaître qui commit le plus sur un projet git
    23

    View full-size slide

  23. Use case #3
    Connaître qui commit le plus sur un projet git
    git log --format=%an | \
    sort | uniq -c | sort -rn
    ● uniq -c : count
    ● sort -r : reverse
    ● sort -n : number 24

    View full-size slide

  24. 25
    Use case #4
    Comment stopper tous les container docker d’un
    projet ?

    View full-size slide

  25. 26
    Use case #4 (suite)
    ● grep : pour chercher
    ● awk : pour extraire
    ● xargs : pour construire une commande et
    l'exécuter
    docker ps | grep ^app_ | awk '{print $1}' | xargs docker stop
    docker stop app_c5 app_c4 app_c3 app_c2 app_c1

    View full-size slide

  26. Use case #5
    Générer un gros fichier pour tester un upload
    dd if=/dev/zero of=my-file.date count=1M bs=1k
    ● if : input file
    ● of : output file
    ● count : nombre de bloc
    ● bs : taille d’un bloc
    27

    View full-size slide

  27. Use case #6
    Vérifier périodiquement ce qu’il se passe ?
    watch -n 1 ls -lh
    ● -n : intervale
    28

    View full-size slide

  28. Use case #7
    Stopper un processus après 30 secondes
    timeout 30 sleep 60
    29

    View full-size slide

  29. Use case #8
    Passer l'exécution d’une commande en tâche de fond
    sleep 60
    CTRL+Z
    jobs
    bg # ou fg
    30

    View full-size slide

  30. Use case #9
    Ouvrir un tunnel en SSH pour accéder à un
    serveur de prod
    ssh -TL 1234:192.168.2.206:9200 \
    my-server.io
    ● -L : tunnel
    ● -T : pas d’allocation de terminal
    31

    View full-size slide

  31. Use case #10
    Lister les fichiers ouverts par Chrome
    pgrep chrome | xargs -l1 lsof -p
    ● xargs -p1 : exécute la commande pour
    chaque résultat
    ● lsof -p : LiSt Open File pour le PID
    32

    View full-size slide

  32. Use case #11
    Trouver quel processus utilise le port 9999
    lsof -P -n -i :9999
    ● -P : ne résound pas les ports
    ● -n : ne résound pas “network number”
    ● -i :999 : selectionne le port 9999
    33

    View full-size slide

  33. Use case #12
    Comprendre pourquoi un logiciel bloque sans lire
    le code
    $dom = new \DOMDocument();
    $dom->loadHTML('');
    $dom->validate();
    34

    View full-size slide

  34. Use case #12 (suite)
    35
    Strace permet d’intercepter tous les appels system au
    kernel
    strace -s 65000 php index.php
    [...]
    sendto(7, "GET /TR/REC-html40/loose.dtd
    HTTP/1.1\r\nHost: www.w3.org\r\nConnection:
    close\r\n\r\n", 78, MSG_DONTWAIT, NULL, 0) = 78

    View full-size slide

  35. Use case #13
    36
    Où placer la configuration d’un logiciel, sans lire la
    doc ni le code ?
    strace -e file -o log git

    View full-size slide

  36. Use case #14
    37
    Vérifier les appels réseaux d’un logiciel
    strace -e network -e /sendmmsg php index.php

    View full-size slide

  37. Use case #15
    38
    Vérifier les appels réseaux entre votre app et ES
    tcpdump -Apni any port 9200 and host elasticsearch
    💡 Wireshark permet de
    visualiser les logs de manière
    plus confortable

    View full-size slide

  38. Quelques outils
    pratiques
    4
    39

    View full-size slide

  39. 40
    Outils non standards
    ● RipGreg (rg) : comme grep, mais plus rapide
    ● tmux : multiplexer des terminaux
    ● dnsmasq : serveur DNS très leger
    ● ngrok : exposer son laptop sur internet
    ● transfer.sh : partager des fichiers en CLI
    ● httpie : comme curl, mais orienté REST
    ● jq : pour filtrer du JSON
    ● explainshell.com : explique une commande

    View full-size slide

  40. Conclusion
    5
    41

    View full-size slide

  41. Des questions ?
    Slide: https://bit.ly/3FI79wV
    You can find me at
    ◉ https://twitter.com/lyrixx
    ◉ https://github.com/lyrixx
    Merci!
    42

    View full-size slide