Save 37% off PRO during our Black Friday Sale! »

(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

7602f2751868682b296171f58589c851?s=128

Grégoire Pineau

November 19, 2021
Tweet

Transcript

  1. (Re) Découvrir les outils UNIX

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

    github.com/@lyrixx Bonjour! 2
  3. 3

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

  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) 5 Le shell
  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 6 Votre shell
  7. • Augmenter la portée du PATH PATH="./node_modules/.bin:$PATH" • Et du

    CDPATH export CDPATH=".:$HOME:$HOME/dev/github.com" 7 Votre shell, Tips
  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é 8 Votre shell, Tips (2)
  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 !! 9 Votre shell, Tips (3)
  10. Une commande 1 10

  11. 11 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, …)
  12. 12 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)
  13. 13 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)
  14. Help On peut trouver de l’aide via • my_command --help

    (convention) • man my_command • https://tldr.sh/ (site web et commande) 14
  15. man++ 15 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 "$@" }
  16. Les outils Unix 2 16

  17. Use case #1 17 Afficher l'arborescence d’un dossier : tree

    Afficher les permissions d’un dossier récursivement namei -ol /path/to/file
  18. Use case #2 Extraire la troisième colonne d’un CSV cut

    -d ';' -f 3 with-markers-500000.csv • -d : delimiteur • -f : field 18
  19. Use case #3 Connaître qui commit le plus sur un

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

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

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

    projet git 22
  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 23
  24. 24 Use case #4 Comment stopper tous les container docker

    d’un projet ?
  25. 25 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
  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 26
  27. Use case #6 Vérifier périodiquement ce qu’il se passe ?

    watch -n 1 ls -lh • -n : intervale 27
  28. Use case #7 Stopper un processus après 30 secondes timeout

    30 sleep 60 28
  29. Use case #8 Passer l'exécution d’une commande en tâche de

    fond sleep 60 CTRL+Z jobs bg # ou fg 29
  30. Use case #9 Ouvrir une 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 30
  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 31
  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 32
  33. Use case #12 Comprendre pourquoi un logiciel bloque sans lire

    le code <?php $dom = new \DOMDocument(); $dom->loadHTML('<div></div>'); $dom->validate(); 33
  34. Use case #12 (suite) 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 34
  35. Use case #13 35 Où placer la configuration d’un logiciel,

    sans lire la doc ni le code ? strace -e file -o log git
  36. Use case #14 36 Vérifier les appels réseaux d’un logiciel

    strace -e network -e /sendmmsg php index.php
  37. Use case #15 37 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
  38. Quelques outils pratiques 4 38

  39. 39 Outils non standards • Silversearch (ag) : 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
  40. Conclusion 5 40

  41. Des questions ? You can find me at ◉ https://twitter.com/lyrixx

    ◉ https://github.com/lyrixx Merci! 41