Aide-mémoire terminal

tmux / tar / vim

Ce qu'on n'a jamais le réflexe de chercher : les panneaux, les archives qui ne tiennent pas en RAM, et les dix touches de vim qui remplacent une heure de clics.

préfixe tmux C-b
GNU tar  ·  vim en mode normal
zstd · pigz · pv

Aucune commande ne correspond.

tmux

Deux modalités à ne pas confondre : les commandes shell se tapent hors de tmux, les raccourcis commencent par le préfixe C-b puis une touche — on relâche le préfixe avant d'appuyer sur la suivante.

Sessions — depuis le shell

tmux new -s infraCrée une session nommée
tmux lsListe les sessions du serveur
tmux a -t infraRejoint une session existante
tmux aRejoint la dernière session utilisée
tmux new -d -s job 'commande'Lance une commande dans une session détachée — elle survit à la fermeture du terminal
tmux send-keys -t infra 'ls' EnterTape dans une session sans s'y attacher
tmux capture-pane -p -t infraRécupère le contenu affiché d'un panneau sur la sortie standard
tmux kill-session -t jobTermine une session
tmux kill-serverTermine toutes les sessions d'un coup

Fenêtres et panneaux — après C-b

d
Détache — la session continue de tourner
c
Nouvelle fenêtre
,
Renomme la fenêtre courante
w
Liste interactive des fenêtres
09
Va directement à la fenêtre n
%
Coupe le panneau verticalement (côte à côte)
"
Coupe horizontalement (l'un sous l'autre)
o
Passe au panneau suivant
q
Affiche le numéro de chaque panneau — taper le chiffre y va
z
Zoom : le panneau prend tout l'écran, rappuyer pour revenir
Espace
Fait défiler les dispositions prédéfinies
{/}
Échange le panneau avec son voisin
!
Extrait le panneau dans une fenêtre à lui
x
Ferme le panneau (demande confirmation)
C-←
Redimensionne le panneau, préfixe maintenu

Copier du texte sans la souris

C-bpuis[
Entre en mode copie — on peut alors défiler dans l'historique
Espace
Démarre la sélection, Entrée la copie
C-bpuis]
Colle ce qui vient d'être copié
tmux show-bufferAffiche le tampon de copie dans le shell

Le coup qui change tout

:setw synchronize-panes onAprès C-b : — ce qu'on tape part dans tous les panneaux à la fois. Deux hôtes, une seule frappe. off pour arrêter
C-bpuis?
Liste tous les raccourcis actifs — q pour sortir

Le piège du détachement. C-b d détache, exit tue la session. Les deux ferment le terminal de la même façon — seul le premier laisse le travail tourner. C'est exactement ce qui distingue une session résidente d'une session perdue.

archives

Moyen mnémotechnique pour tar : créer, extraire, lister — puis f qui annonce le nom du fichier, toujours en dernier. tar xf devine seul la compression : inutile de préciser z, j ou J pour extraire.

Créer

tar -czf a.tar.gz dossier/gzip — rapide, universel
tar -cJf a.tar.xz dossier/xz — le plus compact, le plus lent
tar --zstd -cf a.tar.zst dossier/zstd — presque aussi compact que xz, bien plus rapide
tar -cf - d/ | pigz -p 4 > a.tgzgzip sur 4 cœurs — sur un gros dossier, le gain est net
tar -czf a.tgz --exclude='*.log' d/Exclut un motif (répétable)
tar -czf a.tgz -C /var/www freshrssSe place dans un dossier avant d'archiver — évite les chemins absolus dans l'archive

Extraire

tar xf a.tar.zstExtrait, quel que soit le compresseur
tar xf a.tgz -C /tmp/cibleExtrait ailleurs que dans le dossier courant
tar xf a.tgz chemin/du/fichierN'extrait qu'un seul fichier
tar xf a.tgz --strip-components=1Retire le premier niveau de dossier — le classique des tarballs amont
tar xf a.tgz --wildcards '*.conf'N'extrait que ce qui correspond

Inspecter avant d'extraire

tar tf a.tgz | headListe le contenu — à faire systématiquement avant d'extraire chez soi
tar tvf a.tgzListe avec droits, propriétaire et taille
tar df a.tgz -C /Compare l'archive au système de fichiers et signale les écarts

Gros volumes

tar cf - d/ | pv -s $(du -sb d/ | cut -f1) | gzip > a.tgzBarre de progression et estimation du temps restant
zstd -T0 -19 gros.imgCompression maximale sur tous les cœurs
split -b 2G a.tgz a.tgz.part-Découpe en morceaux de 2 Go
cat a.tgz.part-* > a.tgzRecolle les morceaux, dans l'ordre
sha256sum a.tgz > a.tgz.sha256Empreinte — sha256sum -c la vérifie plus tard

zip — pour ce qui doit s'ouvrir ailleurs

zip -r a.zip dossier/Archive récursive
zip -er a.zip dossier/Chiffré par mot de passe — chiffrement faible, bon pour un envoi, pas pour un secret
unzip -l a.zipListe sans extraire
unzip a.zip -d /tmp/cibleExtrait dans un dossier précis
unzip -o a.zipÉcrase sans demander

La zip-bomb de dossier courant. Un .zip ou un .tar mal fait déverse des dizaines de fichiers là où on se trouve, mélangés aux siens — et il n'y a pas d'annulation. tar tf ou unzip -l avant, ou extraction dans un dossier jetable. Deux secondes contre un ménage d'un quart d'heure.

vim

Les commandes ci-dessous se tapent en mode normal (touche Échap d'abord). Celles qui commencent par : ouvrent la ligne de commande en bas de l'écran.

Se déplacer vite

gg/G
Début / fin du fichier
42G
Va à la ligne 42
C-d/C-u
Descend / monte d'un demi-écran
HML
Haut, milieu, bas de l'écran visible
%
Saute à la parenthèse ou l'accolade correspondante
*
Cherche le mot sous le curseur, occurrence suivante
C-o/C-i
Recule / avance dans l'historique des sauts — même entre fichiers
mapuis'a
Pose une marque et y revient

Modifier sans compter les caractères

ciw
Remplace le mot entier sous le curseur
ci"
Remplace ce qui est entre les guillemets, où qu'on soit dedans
di(
Vide la parenthèse — ca( l'emporte avec
dt,
Efface jusqu'à la prochaine virgule (non comprise)
.
Répète la dernière modification — la touche la plus rentable de vim
>>/<<
Indente / désindente la ligne
gg=G
Ré-indente tout le fichier

Colonnes — le mode bloc

C-v
Sélection rectangulaire
C-vpuisI
Insère le même texte au début de toutes les lignes — commenter un bloc en trois touches
C-vpuis$A
Ajoute à la fin de chaque ligne, longueurs inégales comprises
C-vpuisd
Supprime la colonne

Chercher et remplacer

:%s/vieux/neuf/gPartout dans le fichier
:%s/vieux/neuf/gcAvec confirmation à chaque occurrence
:'<,'>s/a/b/gSeulement dans la sélection visuelle
:g/motif/dSupprime toutes les lignes contenant le motif
:v/motif/dSupprime toutes celles qui ne le contiennent pas
:nohÉteint le surlignage de recherche

Macros — répéter l'irrégulier

qa
Démarre l'enregistrement dans le registre a
q
Arrête l'enregistrement
@a
Rejoue la macro
50@a
La rejoue 50 fois — s'arrête d'elle-même si une étape échoue

Fichiers et fenêtres

:vsp fichierOuvre à côté, en colonne
C-wpuish j k l
Passe d'une fenêtre à l'autre
:e!Recharge depuis le disque, en jetant les modifications
:w !sudo tee % > /dev/nullEnregistre un fichier ouvert sans les droits — puis :e!
:earlier 10mRamène le fichier tel qu'il était il y a 10 minutes — :later revient
:%!python3 -m json.toolPasse tout le tampon dans une commande externe et garde le résultat
:set number relativenumberNuméros relatifs — 7dd devient évident

Coller casse l'indentation. Vim ré-indente ce qui arrive au clavier, et un collage lui parvient touche par touche : le texte part en escalier. :set paste avant de coller, :set nopaste après. Sans ça on passe dix minutes à réparer ce qu'on venait de coller proprement.