→ Slide 1

CLI is fun !

Philippe Wambeke - LoLiGrUB (20 novembre 2021)

→ Slide 2

Préambule

La ligne de commande, c'est magique. Il existe des tas de sortilèges. Si vous êtes perdu, vous pouvez toujours demander votre chemin à man (le manuel).

→ Slide 3

Exemple 1

Démarrage en douceur:

Affichage des fichiers triés par extension:

ls -lX

Beuh, c'est moche ! Installons exa !

La commande devient:

exa -l --icons --sort=extension
↓ Slide 4

Un petit mot concernant les arguments

Lorsqu'on appelle une commande avec des arguments, quelle est la différence entre -h et –human-readable ?

↓ Slide 5

Un petit alias peut-être ?

exa c'est bien, mais c'est long à taper: créons un alias. Dans votre fichier ~/.bashrc ou ~/.zshrc, ajoutez:

alias ll="exa -l --icons --group-directories-first --sort=extension"
↓ Slide 6

Quelques trucs de base

Notations particulières couramment utilisées:

→ Slide 7

Exemple 2

Détecter un “trou” dans une séquence de fichiers:

ls PW1_{4700..4750}.jpg > /dev/null
↓ Slide 8

Les redirections

Chaque programme peut rediriger la sortie écran (stdout) vers un fichier via l'opérateur >

→ Slide 9

Exemple 3

On passe la deuxième:

Dans un log de serveur web (nginx), affichage des 100 urls les plus consultées:

awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -100
↓ Slide 10

awk

Du nom de ses concepteurs: Al Aho, Peter Weinberger et Brian Kernighan. Outil de traitement et d'extraction de texte possédant son propre langage.

The AWK Programming Language

En gros, les mots sont séparés par un caractère blanc et sont numérotés de $1 à $x.

La ligne {print $7} signifie:

affiche le septième champ (l'url).

↓ Slide 11

Le pipe

Concept clé du shell UNIX, le pipe permet de rediriger la sortie d'un programme vers l'entrée d'un autre.

Il est représenté par le caractère |

→ Slide 12

Exemple 4: encore awk

Dans un log de serveur web (nginx), affichage des 30 urls générant le plus de code http 404:

awk '$9 == "404" {print $7}' access.log | sort | uniq -c | sort -rn | head -n 30

La ligne $9 == “404” {print $7} signifie:

Si le neuvième champ de chaque ligne est 404, alors affiche le septième champ.

→ Slide 13

Exemple 5

Générateur de phrase de passe composées de 2 mots:

look . | grep -E "^[a-z]{4,8}$" | shuf | head -40 | xargs -n2 
↓ Slide 14

look

Outil (apparu dans l'édition 7 de UNIX) permettant de rechercher un mot dans un fichier.

Si aucun fichier n'est spécifié, recherche dans un dictionnaire.

. signifie “n'importe quel terme”

↓ Slide 15

grep

Get Regular Expression and Print: recherche toute chaîne répondant à l'expression régulière et l'affiche.

[quote, Wikipedia] Chaîne de caractères, qui décrit selon une syntaxe précise, un ensemble de chaînes de caractères possibles.

↓ Slide 16

N'importe quel mot de 4 à 8 lettres

↓ Slide 17

xargs

Parfois, il n'est pas possible que la sortie d'une commande corresponde à l'entrée d'une autre. xargs permet de se sortir de situations parfois difficiles où il n'est pas possible d'enchainer les commandes avec des |

Par défaut, xargs affiche ce qu'il reçoit sur 1 ligne. L'argument -n2 lui indique de grouper 2 éléments par ligne.

cd /usr/bin ; ls -1 | shuf | xargs man
↓ Slide 18

Autre exemple d'expression régulière

Afficher toutes les lignes qui ne sont pas des commentaires dans un fichier de configuration:

grep '^[^#]' /etc/pacman.conf
→ Slide 19

Du fun, du fun, du fun

Ça ne sert à rien, mais c'est tellement bien !

Les outils indispensables:

↓ Slide 20

La météo

Rapide, facile et sans pub:

curl fr.wttr.in/Boussu

curl: outil d'interrogation de serveur web en ligne de commande.

↓ Slide 21

Base combo

neofetch
catimg loligrub-asbl.png
chuck | cowsay | lolcat -F 1
figlet -tc -f shadow "Merci de votre attention \!" | lolcat

La sortie de figlet peut être redirigée vers /etc/motd (message of the day).

↓ Slide 22

Ultra combo !

yes "$(seq 231 -1 16)" | while read i; do printf "\x1b[48;5;${i}m\n";\
sleep .03; done
grep -ao "[/\\]" /dev/urandom | sed -e 's,\\,╲,' -e 's,/,╱,' |\
tr -d \\n | lolcat -F 0.001
↓ Slide 23

Le meilleur pour la fin

for p in {36..1..4}; do espeak-ng -v en -p $p\
"We are the Borg. Lower your shields and surrender your ships...\
Your biological and technological distinctiveness will be added to our own.\
Resistance is futile."\
& sleep 0.007; done
yes $COLUMNS $LINES|awk 'BEGIN{x=y=e=f=1}{if(x==$1||!x)\
{e*=-1};if(y==$2||!y){f*=-1};x+=e;y+=f;\
printf "\033[%s;%sH",y,x;system("sleep .02")}'
→ Slide 24

Quelques références

→ Slide 25

Merci

Questions ?