Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

(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. 3

  2. 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
  3. 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
  4. • 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
  5. • 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)
  6. • \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)
  7. 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, …)
  8. 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)
  9. 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)
  10. Help On peut trouver de l’aide via • my_command --help

    (convention) • man my_command • https://tldr.sh/ (site web et commande) 15
  11. 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 "$@" }
  12. Use case #1 18 Afficher l'arborescence d’un dossier : tree

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

    -d ';' -f 3 with-markers-500000.csv • -d : delimiteur • -f : field 19
  14. 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
  15. 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
  16. 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
  17. Use case #6 Vérifier périodiquement ce qu’il se passe ?

    watch -n 1 ls -lh • -n : intervale 28
  18. Use case #8 Passer l'exécution d’une commande en tâche de

    fond sleep 60 CTRL+Z jobs bg # ou fg 30
  19. 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
  20. 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
  21. 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
  22. Use case #12 Comprendre pourquoi un logiciel bloque sans lire

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

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

    strace -e network -e /sendmmsg php index.php
  26. 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
  27. 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
  28. Des questions ? Slide: https://bit.ly/3FI79wV You can find me at

    ◉ https://twitter.com/lyrixx ◉ https://github.com/lyrixx Merci! 42