L'environnement de travail du shell : aide et documentation, historique, raccourcis clavier, alias, éditeurs de texte, outils utilitaires pour les pipelines (xargs, tee, watch...), sessions de terminal, planification (cron, at) et gestion de versions avec git.
Aide et documentation
Avant tout moteur de recherche : la doc est déjà sur la machine, exacte pour la version installée. man pour le manuel complet, apropos pour retrouver une commande par mot-clé quand on ignore son nom.
man · apropos · whatis
Lire le manuel d'une commande, et la retrouver par mot-clé
man (manual) affiche la page de manuel d'une commande, d'un appel système ou d'un fichier de configuration. C'est le réflexe numéro un : la réponse exacte, pour la version installée, est déjà là. apropos et whatis interrogent l'index des manuels (construit par mandb) pour retrouver une page quand on ne connaît pas le nom précis.
Navigation dans man (pager less)
Espace / b
Page suivante / précédente.
/motif
Rechercher. n = suivant, N = précédent.
g / G
Début / fin de la page.
q
Quitter.
Sections du manuel
1
Commandes utilisateur (ls, cp…).
5
Formats de fichiers (man 5 crontab, man 5 fstab).
8
Commandes d'administration (man 8 mount).
2 / 3
Appels système / fonctions de bibliothèque (programmation C).
$ man ls
man 5 crontab # la section 5 : le FORMAT du fichier
man 8 useradd
Un même nom peut exister dans plusieurs sections : man passwd ouvre la commande (section 1), man 5 passwd le format du fichier /etc/passwd. Préciser le numéro lève l'ambiguïté.
$ apropos partition
fdisk (8) - manipulate disk partition table
parted (8) - a partition manipulation program
partprobe (8) - inform the OS of partition table changes
On ignore le nom de la commande mais on connaît le sujet : apropos (= man -k) cherche dans les descriptions courtes de toutes les pages. Une sortie vide signifie souvent qu'il faut (re)construire l'index avec sudo mandb.
$ whatis ssh
man -k '^cron' # toutes les pages commençant par cron
ssh (1) - OpenSSH remote login client
whatis donne le résumé en une ligne ; man -k (= apropos) accepte une expression régulière.
Pas de page man ?
Beaucoup d'outils récents documentent surtout via cmd --help (résumé court) ou info cmd (manuel GNU hypertexte). Sur les conteneurs minimaux, les pages man sont souvent retirées pour gagner de la place — --help reste alors le seul recours embarqué.
Une variable d'environnement est une valeur héritée par les processus enfants. PATH, HOME, EDITOR, LANG sont les plus structurantes. On les définit pour la session, ou on les rend permanentes via les fichiers de démarrage du shell.
export · env · PATH
Définir, exporter et persister des variables d'environnement
Une affectation simple (VAR=valeur) n'existe que dans le shell courant. export la promeut en variable d'environnement : elle est alors héritée par tous les processus lancés ensuite. env (ou printenv) liste l'environnement. $PATH — la liste des répertoires où le shell cherche les exécutables — est celle qu'on manipule le plus.
$ VAR=bonjour # variable de shell, locale
echo "$VAR"
export VAR # devient variable d'environnement
export EDITOR=vim # déclaration + export en une fois
Tant qu'elle n'est pas exportée, la variable n'est PAS vue par les programmes lancés depuis ce shell — le piège classique quand un outil ne « voit » pas un réglage qu'on vient de poser.
$ echo "$PATH"
export PATH="$HOME/bin:$PATH"
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Ajouter ~/bin EN TÊTE : un binaire perso y est trouvé avant celui du système (le premier répertoire qui contient la commande gagne). Toujours réinclure $PATH à la fin — sinon on perd l'accès à toutes les commandes système dans ce shell.
$ env
printenv HOME
env -i bash # shell avec environnement VIDE
env liste l'environnement et printenv NOM une variable. env -i retire les variables héritées, mais un Bash interactif peut en recréer et charger ~/.bashrc ; utiliser env -i bash --noprofile --norc pour un shell de test sans fichiers de démarrage.
Rendre permanent :
une variable posée en ligne de commande disparaît à la fermeture du terminal. Pour la persister, l'ajouter dans un fichier de démarrage : ~/.bashrc (shells interactifs, le cas courant), ~/.profile / ~/.bash_profile (shells de login), ou /etc/environment (tous les utilisateurs). Recharger sans rouvrir le terminal avec source ~/.bashrc (ou . ~/.bashrc).
Bash conserve par défaut les 1000 dernières commandes dans ~/.bash_history.
history
Afficher et rappeler les commandes passées
Le shell garde la liste des commandes tapées, enregistrée dans ~/.bash_history pour bash à la fermeture de la session. history l'affiche, et plusieurs raccourcis permettent de la rappeler.
Notations utiles
history
Liste numérotée de l'historique.
!N
Re-exécute la commande numéro N.
!!
Re-exécute la commande précédente.
!$
Le dernier argument de la commande précédente.
!str
La dernière commande commençant par str.
history -c
Vide l'historique courant.
Ctrl+R
Recherche interactive dans l'historique.
$ history | grep ssh
Retrouve toutes les sessions SSH récentes.
$ mkdir /etc/projet
mkdir: impossible de créer le répertoire « /etc/projet »: Permission non accordée
Exemple d'échec attendu dans un shell utilisateur sans droits sur /etc. Saisir ensuite la commande suivante dans le même Bash interactif.
$ sudo !!
Dans un Bash interactif avec l'expansion de l'historique active, reprend la commande précédente avec sudo : ici sudo mkdir /etc/projet. Vérifier la commande rappelée avant de l'exécuter.
$ ls /etc/nginx/conf.d
Saisir cette commande puis la suivante dans le même Bash interactif.
$ cd !$
Avec l'expansion de l'historique active, !$ reprend /etc/nginx/conf.d, le dernier argument de la commande précédente.
Éditer la ligne en cours, compléter les noms et contrôler le terminal sans quitter le clavier.
Raccourcis de la ligne de commande
Éditer, naviguer et compléter sans retaper la commande
Bash, comme la plupart des shells, s'appuie sur la bibliothèque readline pour éditer la ligne en cours. Ces raccourcis évitent de déplacer le curseur caractère par caractère ou de retaper une commande pour corriger une faute. Pour l'historique (Ctrl+R, !!, !$), voir history.
Déplacement et édition
Ctrl+A / Ctrl+E
Aller au début ou à la fin de la ligne.
Alt+B / Alt+F
Reculer ou avancer d'un mot.
Ctrl+W
Effacer le mot avant le curseur.
Ctrl+U / Ctrl+K
Effacer jusqu'au début ou jusqu'à la fin de la ligne.
Ctrl+Y
Recoller le dernier texte effacé.
Alt+.
Insérer le dernier argument de la commande précédente ; répéter pour remonter plus loin.
Ctrl+XCtrl+E
Ouvrir la ligne dans l'éditeur ($EDITOR) pour corriger une longue commande.
Contrôle du terminal
Tab
Compléter un nom de commande, de fichier ou d'option ; deux fois pour lister les possibilités.
Ctrl+L
Effacer l'écran en gardant la ligne en cours.
Ctrl+C
Interrompre la commande en cours.
Ctrl+Z
Suspendre la commande ; la reprendre avec fg ou bg.
Ctrl+D
Fin d'entrée ; sur une ligne vide, ferme le shell.
Ctrl+S / Ctrl+Q
Geler ou reprendre l'affichage du terminal : si plus rien ne s'affiche, essayer Ctrl+Q.
$ mkdir -p /srv/app/releases/v2
cd /srv/app/releases/v2
Pour la seconde ligne, taper seulement cd puis Alt+. : le shell insère le dernier argument de la commande précédente.
Mode vi :set -o vi remplace ces raccourcis par ceux de vi (Échap pour passer en mode commande). set -o emacs revient aux raccourcis par défaut.
unalias supprime un alias défini dans la session courante. Pour une suppression permanente, retirer aussi sa définition du fichier de configuration du shell.
Pour éditer une config dans /etc/, écrire un script, modifier un crontab — il faut un éditeur en CLI. Deux familles : vi/vim (universel, installé partout, courbe d'apprentissage abrupte) et nano (immédiat, mais absent d'un système minimal type conteneur ou serveur Alpine).
vi · vim
L'éditeur omniprésent, modal et puissant
vi est un éditeur normalisé par POSIX, mais il peut être absent d'une image minimale ou d'un initramfs. vim ajoute notamment coloration, historique d'annulation et fenêtres multiples. Selon la distribution et les paquets, vi peut être un lien ou une alternative vers Vim, BusyBox vi ou un autre éditeur compatible. Son fonctionnement est modal.
Les trois modes
Normal (au démarrage)
Navigation et commandes. Toutes les frappes sont des raccourcis (h j k l = gauche/bas/haut/droite, dd = couper ligne, yy = copier, p = coller). Echap y revient depuis n'importe où.
Insertion
Saisie de texte classique. On y entre avec i (avant curseur), a (après), o (nouvelle ligne en dessous), O (au-dessus).
Commande (préfixe :)
Sauvegarde, quitter, recherche, remplacement. :w sauve, :q quitte, :wq les deux, :q! quitte sans sauver.
Commandes de survie
i
Entrer en mode insertion.
Echap
Revenir au mode normal. Le réflexe à acquérir.
:w
Écrire (sauver) le fichier.
:q
Quitter (échoue si modifications non sauvées).
:q!
Quitter sans sauver (en cas de doute, c'est la commande qui sauve la mise).
:wq ou ZZ
Sauver puis quitter.
:w !sudo tee %
Sauver via sudo quand on a ouvert un fichier root sans privilèges (le grand classique).
Navigation et édition (mode normal)
h j k l
Gauche, bas, haut, droite. Les flèches marchent aussi mais hjkl est plus rapide.
0 / ^ / $
Début de ligne / premier non-blanc / fin de ligne.
gg / G
Début / fin de fichier. 42G = ligne 42.
w / b
Mot suivant / précédent.
x / dd
Supprimer caractère / ligne entière.
yy / p
Copier ligne (yank) / coller après.
u / Ctrl+R
Undo / redo.
/motif
Recherche avant. n = occurrence suivante, N = précédente.
:%s/avant/apres/g
Remplacer dans tout le fichier (ajouter c pour confirmer chaque fois).
$ vim /etc/ssh/sshd_config
Ouvre un fichier. Démarrage en mode normal : taper i pour insérer, Echap pour sortir, :wq pour sauver et quitter.
$ vim +30 script.sh # ouvre direct ligne 30
vim -p f1.txt f2.txt f3.txt # ouvre dans 3 onglets
vim -d ancien.conf nouveau.conf # mode diff cote a cote
Quelques arguments en ligne de commande à connaître. -d (diff) est un vimdiff incorporé : navigation entre les hunks avec ]c / [c, copie d'un côté à l'autre avec do / dp.
$ vimtutor
vimtutor fr
Tutoriel interactif intégré (≈ 30 min). Le moyen le plus rapide pour acquérir les réflexes — fortement recommandé avant de passer un LPIC-1. Version française disponible.
Configuration minimale :
créer ~/.vimrc avec quelques lignes change radicalement l'expérience : syntax on (coloration), set number (numéros de ligne), set expandtab tabstop=4 shiftwidth=4 (indentation cohérente), set incsearch hlsearch (recherche incrémentale). Les distros ont souvent un /etc/vim/vimrc avec déjà ces réglages.
Coincé ?
En cas de doute, Échap puis :q! quitte sans sauvegarder. E325 peut signaler une autre session encore active ou un ancien fichier swap : vérifier d'abord qu'aucun éditeur n'utilise le fichier, récupérer les changements avec Recover si nécessaire, puis supprimer seulement un swap devenu inutile.
nano est un éditeur sans modes : saisir le texte, sauver avec Ctrl+O et quitter avec Ctrl+X. Le signe ^ signifie Ctrl dans les raccourcis. Il peut être absent des installations minimales ; vérifier les éditeurs disponibles, car vi n'y est pas garanti non plus.
Raccourcis (^ = Ctrl, M = Alt/Meta)
^O (Ctrl+O)
Write Out : sauve. Confirme le nom de fichier.
^X
Quitter. Propose de sauver si modifications non enregistrées.
^K / ^U
Couper / coller la ligne courante (cut/uncut).
^W
Where is : rechercher dans le fichier.
^\
Rechercher et remplacer.
^G
Aide complète.
M-U / M-E
Undo / redo (sur nano récent).
$ nano /etc/hosts
Ouvre le fichier. Le bandeau du bas montre les raccourcis principaux. Pour sauver : Ctrl+O, Entrée pour confirmer le nom, Ctrl+X pour quitter.
$ nano -w long-fichier.txt # ne pas couper les longues lignes
nano +50 script.sh # ouvre direct ligne 50
nano -B fichier # cree fichier~ en backup avant sauvegarde
Options utiles. -w est important pour éditer un fichier de config dont le wrapping casserait la syntaxe (ex. /etc/apt/sources.list).
Configuration :~/.nanorc active la coloration et autres options. Recommandations courantes : set tabsize 4, set autoindent, set linenumbers, include "/usr/share/nano/*.nanorc" (charge tous les schémas de coloration disponibles).
Petites commandes essentielles dans les pipelines et scripts.
xargs
Construire et exécuter des commandes à partir d'une entrée standard
Beaucoup de commandes (rm, cp, echo…) prennent leurs arguments en paramètres, pas via stdin. xargs sert de pont : il transforme une liste de lignes en arguments.
Options
-I {}
Remplace {} par chaque entrée. Utile pour les commandes complexes.
Robuste face aux noms avec espaces grâce à -print0 + -0.
$ xargs -r -P 4 -n 1 curl -fLO -- < urls.txt
Lance jusqu'à quatre téléchargements simultanés. Ce format suppose une URL par argument, sans espaces ni guillemets bruts ; -r évite un appel sur une liste vide. -f détecte les erreurs HTTP et -L suit les redirections. Des URL de même nom final peuvent écraser le même fichier : prévoir des destinations distinctes si nécessaire.
Dupliquer la sortie : afficher ET écrire dans un fichier
tee lit son entrée standard et l'envoie à la fois sur la sortie standard et dans des fichiers. Très utile pour conserver la trace d'une commande tout en la voyant défiler.
Options
-a
Ajoute (append) au fichier au lieu de l'écraser.
$ make 2>&1 | tee build.log
Compilation : on voit la sortie en direct, et tout est sauvegardé pour analyse.
$ echo "deb https://example.com/repo stable main" | sudo tee /etc/apt/sources.list.d/repo.list
Astuce classique : écrire dans un fichier protégé sans avoir à sudo tout le pipeline. sudo > ne fonctionne pas, sudo tee oui.
watch relance une commande à intervalles réguliers, toutes les 2 secondes par défaut, et affiche le résultat en plein écran. Pratique pour suivre une valeur qui évolue.
Options
-n N
Intervalle en secondes (défaut : 2).
-d
Surligne les différences entre deux exécutions.
-c
Conserve les couleurs de la commande surveillée.
$ watch -d df -h
Surveille l'occupation des disques en surlignant les valeurs qui changent.
$ watch -n 5 'systemctl is-active nginx'
Vérifie toutes les 5 secondes que nginx tourne. Quitter avec Ctrl+C.
echo affiche ses arguments suivis d'un retour à la ligne. Ses options varient entre le shell et le programme /bin/echo : pour un affichage formaté et portable, préférer printf.
$ echo "192.168.1.10 db.local" | sudo tee -a /etc/hosts
Pattern pour écrire dans un fichier protégé. sudo echo "..." >> /etc/hosts ne marche pas : la redirection >> est évaluée par le shell avant que sudo ne s'exécute, donc avec les droits courants. tee -a (append) fait l'écriture à l'intérieur du sudo, donc avec les droits root.
Astuce :
pour des sorties plus prédictibles entre shells, utiliser printf qui se comporte comme la fonction C : printf '%s\n' "Bonjour".
which n'est pas normalisé par POSIX et son comportement dépend de l'implémentation et des wrappers du shell ; il recherche généralement dans PATH et peut parfois connaître des alias ou fonctions. type décrit la commande vue par Bash ; command -v est la forme POSIX à privilégier dans un script.
$ which python3
/usr/bin/python3
Cherche python3 selon l'implémentation de which. Pour connaître exactement la résolution du shell courant, préférer type python3 ou command -v python3 ; ne pas supposer que toutes les variantes de which traitent les alias de la même manière.
$ type ll
type cd
type python3
ll is aliased to `ls -lah'
cd is a shell builtin
python3 is /usr/bin/python3
type dit la nature de la commande : alias, builtin, fonction, ou fichier. C'est l'outil de diagnostic à privilégier en interactif.
Idiome script « refuser de démarrer si X n'est pas installé ». command -v est POSIX, marche partout, sortie clean (chemin ou rien). À préférer à which dans les scripts portables.
Mesure le temps écoulé (real) et les temps CPU utilisateur et noyau (user, sys). Dans Bash, time est un mot-clé réservé capable de mesurer des pipelines ; /usr/bin/time est un programme externe dont l'option GNU -v fournit notamment la mémoire résidente maximale.
$ time make
real 0m12.345s
user 0m45.123s
sys 0m2.456s
user + sys > real ? La commande utilise plusieurs CPUs en parallèle. real > somme des deux ? Elle attend (I/O, locks, sleep).
$ /usr/bin/time -v ./mon-prog
Elapsed (wall clock) time: 0:08.23
Maximum resident set size (kbytes): 152300
Major (requiring I/O) page faults: 4
Voluntary context switches: 1283
...
Mode verbeux -v. Donne notamment la RSS max (mémoire physique consommée au pic) — alternative légère à valgrind --tool=massif pour un premier coup d'œil. Penser à utiliser le chemin complet pour ne pas tomber sur le builtin.
$ for i in {1..5}; do time curl -s https://api.example.test >/dev/null; done 2>&1 | grep real
Boucle de mini-benchmark. Pour quelque chose de plus sérieux, utiliser hyperfine qui fait des passes warm-up et de la statistique.
Créer un fichier ou répertoire temporaire de manière sûre
mktemp crée un fichier (ou répertoire avec -d) avec un nom aléatoire dans /tmp. Plus sûr que /tmp/myfile.$$ qui est prévisible et peut ouvrir une race condition exploitable.
Options
-d
Crée un répertoire au lieu d'un fichier.
-t
Place dans $TMPDIR ou /tmp.
--suffix=.ext
Ajoute une extension au nom (utile pour des outils qui inspectent le nom).
TEMPLATE
Modèle nominatif : les X finaux sont remplacés par des caractères aléatoires (ex. backup-XXXXXX).
Crée le répertoire puis installe son nettoyage à la sortie, avec INT/TERM/HUP convertis en sorties explicites. SIGKILL ou un arrêt brutal de la machine ne permettent pas de garantir le nettoyage. Voir aussi trap.
$ mktemp /tmp/build-XXXXXX.log
Avec un template, on garde un préfixe lisible et on choisit l'extension. Pratique si plusieurs scripts laissent des temporaires côte à côte.
Garder des commandes actives après la fermeture du terminal ou une coupure SSH, et regrouper plusieurs terminaux dans une seule fenêtre.
tmux
Garder des sessions de terminal actives, avec fenêtres et panneaux
tmux fait tourner des sessions de terminal indépendantes de la connexion : on se détache, on ferme SSH, et les commandes continuent. On se rattache plus tard, depuis la même machine ou une autre. Une session se découpe en fenêtres et en panneaux. Les raccourcis commencent par le préfixe Ctrl+b.
Raccourcis (après Ctrl+b)
d
Se détacher de la session, qui continue de tourner.
c
Ouvrir une nouvelle fenêtre.
n / p
Passer à la fenêtre suivante ou précédente.
% / "
Partager le panneau verticalement ou horizontalement.
flèches
Passer d'un panneau à l'autre.
[
Mode défilement pour remonter dans l'historique ; q pour en sortir.
$ tmux new -s travaux
Crée une session nommée travaux et s'y attache.
$ tmux ls
travaux: 2 windows (created Fri Oct 30 20:15:02 2026)
Liste les sessions qui tournent sur la machine.
$ tmux attach -t travaux
Se rattache à la session, par exemple après une reconnexion SSH.
$ tmux new -d -s compil 'make -j8 2>&1 | tee build.log'
Lance une tâche longue directement en arrière-plan, dans une session détachée qu'on pourra consulter plus tard.
Travail à distance :
ouvrir tmux avant de lancer une longue opération par SSH. Une coupure réseau ne tue plus la commande, ce qui arrive avec une session SSH simple.
Multiplexeur de terminal historique, encore présent sur de nombreux serveurs
screen repose sur le même principe que tmux : des sessions qui survivent à la déconnexion. Il reste utile sur une machine où tmux n'est pas installé, et sait aussi ouvrir une console sur un port série. Les raccourcis commencent par Ctrl+a.
Options principales
-S NOM
Crée une session nommée.
-ls
Liste les sessions existantes.
-r NOM
Se rattache à une session détachée.
-d -r NOM
Détache la session de l'endroit où elle est ouverte, puis s'y rattache ici.
-dmS NOM CMD
Lance une commande dans une nouvelle session déjà détachée.
Ctrl+a puis d
Se détacher de la session courante.
$ screen -S maj
Ouvre une session nommée maj.
$ screen -ls
There is a screen on:
48213.maj (Detached)
1 Socket in /run/screen/S-alex.
Le numéro avant le nom est le PID de la session.
# screen /dev/ttyUSB0 115200
Ouvre une console série à 115 200 bauds, par exemple vers un routeur ou une carte embarquée. Quitter avec Ctrl+a puis k.
Exécuter une commande à heure fixe, périodiquement ou au démarrage : cron est l'outil historique, disponible partout. Sur une machine systemd moderne, les timers systemd offrent une alternative avec journalisation intégrée.
crontab
Programmer des commandes périodiques (cron)
cron est le démon ; crontab la commande qui édite la table des jobs d'un utilisateur. Chaque ligne décrit quand (cinq champs temporels) et quoi (la commande à exécuter). Les tables sont utilisateur-spécifiques.
Options
-e
Édite la crontab de l'utilisateur dans $EDITOR. C'est la voie normale.
-l
Liste la crontab actuelle (utile pour vérifier ce qui est planifié).
-r
Supprime entièrement la crontab. Attention, pas de confirmation.
-u USER
Cible un autre utilisateur (réservé à root).
Syntaxe
┌──────── minute (0-59)
│ ┌────── heure (0-23)
│ │ ┌──── jour du mois (1-31)
│ │ │ ┌── mois (1-12)
│ │ │ │ ┌ jour semaine (0-7, dimanche = 0 ou 7)
│ │ │ │ │
* * * * * commande à exécuter
# Raccourcis (selon implémentation) :
@reboot /chemin/vers/script.sh # une fois au démarrage
@hourly /chemin/vers/script.sh # equivalent : 0 * * * *
@daily /chemin/vers/script.sh # equivalent : 0 0 * * *
@weekly /chemin/vers/script.sh # equivalent : 0 0 * * 0
$ crontab -e
# Sauvegarde tous les jours à 3h15
15 3 * * * /home/dev/bin/backup.sh
# Toutes les 5 minutes en heures de bureau (lundi à vendredi)
*/5 9-18 * * 1-5 /home/dev/bin/health-check.sh
# Premier dimanche du mois à 6h
0 6 1-7 * * test "$(date +\%u)" = "7" && /home/dev/bin/maintenance.sh
Ouvre l'éditeur sur la crontab. Quelques patterns classiques. Le % doit être échappé en \% dans une crontab — non échappé, il agit comme un saut de ligne dans la commande, ce qui casse souvent.
$ crontab -l
Affiche la crontab actuelle. Premier réflexe quand on hérite d'un serveur : voir ce qui tourne en automatique.
Pièges classiques :
Cron définit généralement HOME et LOGNAME depuis le compte et utilise /bin/sh, avec un PATH limité ; il ne charge pas les fichiers de démarrage interactifs de Bash.
Les sorties non redirigées peuvent être envoyées par mail si le système le permet (MTA et MAILTO). Choisir un fichier de log accessible à l'utilisateur de la tâche.
Pour approcher ce contexte : env -i HOME="$HOME" PATH=/usr/bin:/bin /bin/sh -c 'commande'. Vérifier aussi le répertoire courant et les variables réellement définies par cron.
Alternative systemd :
Un timer systemd peut déclencher un service avec journalisation et dépendances ; Persistent=true rattrape certaines échéances manquées. Une relance après échec n'est pas automatique par le seul timer : configurer explicitement la politique du service si nécessaire.
at est le pendant ponctuel de cron : on lui donne une date/heure et un script, il l'exécute une seule fois puis oublie. Idéal pour « lance ce déploiement à 2h du matin une fois » sans avoir à modifier la crontab.
Commandes liées
at TIME
Mode interactif : tape les commandes, finit avec Ctrl+D.
at TIME < script.sh
Lit les commandes depuis un fichier.
echo "cmd" | at TIME
Mode pipe, le plus pratique en script.
atq
Liste les jobs en attente.
atrm N
Supprime le job numéro N.
Formats de date acceptés
23:00
Aujourd'hui à 23h, ou demain si déjà passé.
23:00 tomorrow
Demain à 23h.
now + 5 minutes
Dans 5 minutes. Aussi + 2 hours, + 3 days.
noon Friday
Vendredi midi.
09:00 2026-05-15
Date absolue.
$ echo "rsync -av /src/ user@host:/dst/" | at 02:00 tomorrow
Programme un rsync pour 2h du matin demain. Pas besoin d'éditer la crontab pour un job ponctuel.
# printf '%s\n' 'systemctl restart nginx' | at now + 30 minutes
job 42 at 2026-05-07 18:30:00
À exécuter dans un shell root : programme le redémarrage de nginx dans 30 minutes sans invite interactive. La tâche est enregistrée pour root, ce qui évite de demander un mot de passe sudo lors de son exécution différée. Le service atd doit être actif.
$ atq
atrm 42
Liste les jobs et annule le job 42.
Pas installé par défaut :
sur beaucoup de distros minimales : paquet at sur Debian/Ubuntu et Fedora, et il faut activer le service avec systemctl enable --now atd sinon les jobs sont bien créés mais jamais exécutés.
Conserver l'historique des modifications d'un projet, d'un script ou d'une configuration, et le partager.
git
Suivre les versions de fichiers et partager un historique
git enregistre l'historique d'un ensemble de fichiers sous forme de commits : chaque commit est un instantané accompagné d'un message. On peut revenir en arrière, comparer deux versions, travailler sur des branches et synchroniser un dépôt avec un serveur distant. Utile aussi pour versionner des scripts et des fichiers de configuration.
Sous-commandes principales
clone URL
Copie un dépôt distant avec tout son historique.
status
Fichiers modifiés, ajoutés ou non suivis.
add FICHIER
Prépare une modification pour le prochain commit.
commit -m "MESSAGE"
Enregistre les modifications préparées.
log --oneline
Historique condensé, un commit par ligne.
diff
Modifications pas encore préparées ; diff --staged pour celles qui le sont.
pull / push
Récupère ou envoie les commits du dépôt distant.
switch -c BRANCHE
Crée une branche et s'y place.
restore FICHIER
Annule les modifications non enregistrées d'un fichier.
stash
Met de côté les modifications en cours pour les réappliquer plus tard.
$ git clone https://exemple.fr/projet.git
Crée un dossier projet contenant les fichiers et tout l'historique.
$ git status
git add nginx.conf
git commit -m "Active la compression gzip"
Cycle de base : vérifier ce qui a changé, choisir ce qu'on enregistre, puis créer le commit avec un message qui dit pourquoi.
$ git log --oneline -3
f985865 Active la compression gzip
a2c41d0 Ajoute la page réseau
7d13e9b Version initiale
Chaque ligne commence par l'identifiant abrégé du commit.
$ git diff HEAD~1 -- nginx.conf
Compare le fichier avec sa version du commit précédent.
Modifications non enregistrées :git restore et git reset --hard effacent les modifications qui n'ont pas été enregistrées dans un commit, sans corbeille. Vérifier d'abord avec git status, ou les mettre de côté avec git stash.