diff --git a/README-fr.md b/README-fr.md index c054c43..2da0a4c 100644 --- a/README-fr.md +++ b/README-fr.md @@ -85,6 +85,134 @@ Les options `-i`, `-o`, `-v`, `-A`, `-B` et `-C` méritent d'être connues. Assurez-vous d'avoir `pip` pour installer des outils en ligne de commande écrits en Python (quelques-uns ci-dessous s'installent plus facilement à l'aide de `pip`). +## Utilisation quotidienne + +- En Bash, utilisez **Tab** pour compléter les arguments ou lister toutes les commandes disponibles, et **ctrl-r** pour rechercher dans l'historique des commandes (tapez pour rechercher, appuyez sur **ctrl-r** plusieurs fois pour parcourir les différentes correspondances, appuyez sur **Enter** pour exécuter la commande trouvée ou sur la flèche droite pour l'éditer). + +- En Bash, utilisez **ctrl-w** pour effacer le dernier mot et **ctrl-u** pour effacer le contenu de la ligne jusqu'au curseur. +Utilisez **alt-b** et **alt-f** pour se déplacer mot par mot, **ctrl-a** pour déplacer le curseur au début de la ligne, **ctrl-e** pour déplacer le curseur à la fin de la ligne, **ctrl-k** pour effacer depuis le curseur jusqu'à la fin de la ligne, **ctrl-l** pour effacer l'écran. +Voir `man readline` pour la liste des raccourcis clavier par défault de Bash. +Il y en a beaucoup. +Par exemple **alt-.** fait défiler les arguments précédents et **alt-*** développe un glob. + +- Autrement, si vous adorez les raccourcis clavier de vi, utilisez `set -o vi` (et `set -o emacs` pour revenir à l'état initial). + +- Pour éditer de longues commandes, après avoir configuré votre éditeur (par exemple `export EDITOR=vim`), **ctrl-x** **ctrl-e** (**escape-v** dans le mode vi) ouvre un éditeur pour éditer la commande courante. + +- Pour voir les commandes récentes, `history`. +Il y a aussi beaucoup abréviations telles que `!$` (dernier argument) et `!!` (dernière commande), bien que celles-ci soient souvent remplacées par **ctrl-r** et **alt-.**. + +- Pour revenir au répertoire précédent : `cd -`. + +- Si vous êtes au milieu de la saisie d'une commande mais que vous changez d'avis, tapez **alt-#** pour ajouter `#` au début de la ligne et la saisir comme un commentaire (ou utilisez **ctrl-a**, **#**, **enter**). +Vous pouvez alors y revenir plus tard à l'aide de la commande history. + +- Utilisez `xargs` (ou `parallel`). +C'est très puissant. +Remarquez que vous pouvez contrôler le nombre d'items à exécuter par ligne (`-L`) ainsi que le parallélisme (`-P`). +Si vous n'êtes pas sûr s'il fera les choses correctement, utilisez d'abord `xargs echo`. +`-I{}` est également pratique. +Exemples : +```bash + find . -name '*.py' | xargs grep some_function + cat hosts | xargs -I{} ssh root@{} hostname +``` + +- `pstree -p` fournit un affichage utile des processus sous la forme d'un arbre. + +- `pgrep` et `pkill` pour rechercher ou envoyer un signal à des processus en fonction de leur nom (`-f` est utile). + +- Apprenez les différents signaux que vous pouvez envoyer aux processus. +Par exemple, pour arrêter un processus, utiliser `kill -STOP [pid]`. +Pour la liste complète, consultez `man 7 signal`. + +- Utilisez `nohup` ou `disown` pour qu'un processus en arrière-plan reste actif indéfiniment. + +- Vérifiez quels sont les processus qui écoutent à l'aide de `netstat -lntp` ou `ss -plat` (pour TCP; ajoutez `-u` pour UDP). + +- Regardez `lsof` pour la liste des fichiers et *sockets* ouverts. + +- Voyez `uptime` ou `w` pour savoir depuis combien de temps le système fonctionne. + +- Utilisez `alias` pour créer des raccourcis pour les commandes fréquemment utilisées. +Par exemple, `alias ll='ls -latr'` crée un nouvel alias `ll`. + +- Dans les scripts Bash, utilisez `set -x` (ou la variante `set -v` qui enregistre les entrées brutes, y compris les variables non référencées et les commentaires) pour l'affichage d'informations de débogage. +Utilisez les modes stricts à moins que vous ayez une bonne raison de ne pas le faire : utilisez `set -e` pour interrompre le script en cas d'erreur (code de sortie non nul). +Utilisez `set -u` pour détecter l'utilisation d'une variable non initialisée. +Envisagez aussi `set -o pipefail` pour détecter les erreurs dans les tubes (renseignez-vous sur le sujet car ce sujet est un peu délicat). +Pour des scripts plus compliqués, servez-vous également de `trap` pour intercepter EXIT ou ERR. +Une bonne habitude est de commencer un script comme cela, ce qui lui permettra de détecter les erreurs courantes, de s'interrompre et d'afficher un message : +```bash + set -euo pipefail + trap "echo 'error: Script failed: see failed command above'" ERR +``` + +- Dans les scripts Bash, les sous-shells (placés entre parenthèses) sont commodes pour grouper des commandes. +Un exemple typique consiste à se déplacer temporairement dans un autre répertoire de travail, p. ex. +```bash + # faire quelque chose dans le répertoire courant + (cd /some/other/dir && other-command) + # continue dans le répertoire original +``` + +- Remarquez qu'en Bash il y a de nombreux types d'expansion des variables. +Vérifier l'existence d'une variable : `${name:?error message}`. +Par exemple, si un script Bash exige un unique argument, il vous suffit d'écrire `input_file=${1:?usage: $0 input_file}`. +L'expansion arithmétique  `i=$(( (i + 1) % 5 ))`. Suites : `{1..10}`. Suppression de sous-chaînes : `${var%suffix}` et `${var#prefix}`. Par exemple, si `var=foo.pdf`, alors `echo ${var%.pdf}.txt` affiche `foo.txt`. + +- La sortie d'une commande peut être traitée comme un fichier à l'aide de `<(some command)`. +Par exemple, pour comparer le fichier local `/etc/hosts` avec un fichier distant : +```sh + diff /etc/hosts <(ssh somehost cat /etc/hosts) +``` + +- Renseignez-vous à propos des « here documents » en Bash, comme dans `cat < logfile 2>&1` ou `some-command &>logfile`. +Souvent, pour s'assurer qu'une commande de laisse pas un descripteur de fichier ouvert sur l'entrée standard, le l'attachant au terminal dans lequel vous vous trouvez, c'est une bonne pratique d'ajouter `