Slide 1

Slide 1 text

(Re) Découvrir les outils UNIX

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

4 Disclaimer ● Crescendo ● Slides

Slide 5

Slide 5 text

Le shell La où tout se passe 1 5

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

● 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

Slide 9

Slide 9 text

● 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)

Slide 10

Slide 10 text

● \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)

Slide 11

Slide 11 text

Une commande 2 11

Slide 12

Slide 12 text

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, …)

Slide 13

Slide 13 text

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)

Slide 14

Slide 14 text

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)

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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 "$@" }

Slide 17

Slide 17 text

Les outils Unix 3 17

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

Quelques outils pratiques 4 39

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Conclusion 5 41

Slide 42

Slide 42 text

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