Aller au contenu principal
- Pourquoi le shell: composer de petits outils, automatiser, diagnostiquer.
- Premier pas:
pwd, ls -lah, cd -, man, --help; l'aide se lit en trois voies — pages de manuel, système Info, aide de Gnome.
- Codes de sortie: 0 succès, autre valeur erreur;
$?, &&, ||; la convention est inversée par rapport à la logique habituelle, et un processus tué par un signal rend 128 + n.
- Commandes intrinsèques: exécutées dans le processus du shell (
cd, echo, exec, eval, whence, shift); les autres créent un processus. Ordre de résolution: fonction, puis intrinsèque, puis PATH.
- Redirections:
<, >, >>, 2>, >&, <>, >!, entrée sur place << mot; faites par le shell, donc indépendantes du programme. clobber est actif par défaut à Valrose.
- Tube
|: processus simultanés, synchronisation par le système, aucun fichier temporaire — à distinguer de l'enchaînement séquentiel ;.
- Filtres:
cat, wc, head, tail, tr, cut, fold, split, paste, sort, grep, sed, awk. Idiomes: head -n n | tail -n k, grep -c (lignes) contre grep -o | wc -l (occurrences).
- Citer:
'...' fige tout, "..." laisse leur sens à $, accent grave, \ et guillemet, \ annule un caractère.
- Jokers (
*, ?, [...]) interprétés par le shell sur des noms de fichiers; expressions rationnelles interprétées par la commande sur des contenus — deux grammaires à ne pas confondre.
- Variables:
PATH, HOME, TERM, DISPLAY, PWD, OLDPWD, RANDOM, HOST, USERNAME; vared édite une variable; set, env, unset.
- Paramètres:
$0 à $n, $#, $*, $@, $$, $!, $?, shift.
- Arithmétique:
(( )) rend un code de retour, $(( )) rend une valeur; let; avec == pas de dollar, avec +, -, / on l'utilise.
- Tests:
[[ ]] équivaut à test; fichiers -e -f -d -r -w -x -s -L -p, chaînes -n -z == !=, nombres -eq -ne -lt -le -gt -ge, logique ! -a -o, motif =~.
- Boucles:
while, until, repeat, for nom in liste, for (( )), {1..5} va jusqu'à 5 inclus (il n'y a pas de range); select numérote une liste.
- Fonctions:
function nom { } sans parenthèses, nom() { } avec; toutes les variables sont globales; return ne rend qu'un code de retour entre 0 et 255, un résultat passe par echo et $( ).
- Permissions: triplets
rwx pour u/g/o, sémantique différente sur fichier et répertoire (x = traverser), inode et compteur de liens, chmod symbolique (+, -, =) et octal, umask soustractif avec bases 666 (fichier) et 777 (répertoire), mkdir -m, sticky bit sur /tmp.
- Processus et jobs:
&, jobs, fg, bg, Ctrl+Z; signaux -9 (destruction) et -19 (suspension), TERM et KILL; ps x et ps aux, uptime et la charge moyenne, top interactif; nohup et nohup.out; at et crontab.
- Scripts fiables: shebang
#!/bin/zsh, contrôle des paramètres par $#, quoting "$var", trap, mktemp, shellcheck; en bash, set -Eeuo pipefail.
- Réseau: graphe, Ethernet et adresse MAC, classes IPv4 puis CIDR, IPv6 sur 128 bits, DNS et hiérarchie des domaines, TCP et numéros de port (21, 23, 25, 53, 80, 110, 119, 123, 194),
host, dig, ping, traceroute.
- Connexion:
telnet, rlogin, rsh et leur insécurité (.rhosts, mot de passe en clair); SSH avec clés d'hôte, known_hosts, authorized_keys, ssh-keygen; rcp, scp, sftp, wget; NFS et Samba; X distant et VNC.
- Courrier: agent de transport sur le port 25, agent de courrier, boîtes aux lettres dans
/var/spool/mail, en-têtes normalisés (To, Subject, Cc, Bcc, From, Date, Received), codage MIME, POP et IMAP.
- Pièges fréquents: guillemets oubliés, fichier écrasé par
>, KILL avant TERM, permissions laxistes sur ~/.ssh, grep -c pris pour un compteur d'occurrences, * développé par le shell avant l'appel d'un script.