Table des matières

— page corrigée — oh!rocks 2009/05/09 18:07

Auto-complétion, historique, raccourcis

Un signe $ précède les commandes qui ne nécessitent pas de droits administrateur ; un signe # précède celles qui nécessitent des droits administrateur (ces signes ne font PAS partie des commandes). Les lignes qui ne commencent pas par un signe $ ou # correspondent au résultat de la commande précédente.
Les touches utilisées sont indiquées entre crochets, exemple [ctrl] pour la touche “contrôle”

Auto-complétion

L'interpréteur de commandes “bash” possède des fonctions très pratiques à l'usage, en particulier l'auto-complétion.
Cette fonction consiste à compléter la ligne de commande que vous êtes en train de taper d'un simple appui sur la touche “tab” (tabulation).

$ sh /home/tux/Do[tab]/NV[tab]

Cela complètera la ligne en “/home/tux/Downloads/NVIDIA-Linux-x86_64-180.44-pkg2.run”, ce qui économise un nombre de caractères non négligeable (et les fautes de frappe qui vont avec…). Vous remarquerez que la touche [tab] a été utilisée deux fois pour compléter deux éléments du chemin.

$ e2[tab][tab]
e2fsck   e2image  e2label  e2pall   e2undel  e2undo

Tapez “e2” puis deux fois la touche [tab] renvoie la liste des commandes commençant par “e2”. Le comportement est le même pour les chemins et si aucun début de mot n'est proposé, le double [tab] renvoie la liste de toutes les possibilités comme, par exemple, tous les chemins vers des sous-répertoires de /usr pour la commande “cd /usr/” :

$ cd /usr/[tab][tab]
bin/     games/   include/ lib/     lib32/   lib64/   local/   sbin/    share/   src/     X11R6/

Historique

Bash peut garder dans un historique une trace des commandes exécutées. C'est en général le comportement par défaut et un appui sur la touche [haut] (la flèche pointant vers le haut) rappelle la dernière commande exécutée. Des appuis successifs rappellent les commandes plus anciennes, par ordre d'exécution, jusqu'à atteindre la limite de l'historique.
Ce comportement est pratique mais peut-être grandement amélioré.

$ !tail
tail -n 2 /var/log/syslog
Apr 19 14:35:43 deb64 dhclient: Sending on   Socket/fallback
Apr 19 14:35:43 deb64 dhclient: DHCPRELEASE on eth0 to 192.168.0.1 port 67

La commande correspondante s'affiche et s'exécute.

$ !?ext3?
dmesg | grep -i ext3
EXT3-fs: INFO: recovery required on readonly filesystem.
EXT3-fs: write access will be enabled during recovery.
EXT3-fs: recovery complete.
EXT3-fs: mounted filesystem with ordered data mode.
EXT3 FS on md0, internal journal
EXT3 FS on md1, internal journal
EXT3-fs: mounted filesystem with ordered data mode.

C'est plus rapide que de retaper la commande surtout si vous en avez oublié la syntaxe…

$ tail -n 3 /var/log/syslog
Apr 19 14:35:43 deb64 dhclient: Sending on   LPF/eth0/00:1d:60:57:cf:57
Apr 19 14:35:43 deb64 dhclient: Sending on   Socket/fallback
Apr 19 14:35:43 deb64 dhclient: DHCPRELEASE on eth0 to 192.168.0.1 port 67
$ ^3^5
Apr 19 14:35:43 deb64 dhclient: wmaster0: unknown hardware address type 801
Apr 19 14:35:43 deb64 dhclient: Listening on LPF/eth0/00:1d:60:57:cf:57
Apr 19 14:35:43 deb64 dhclient: Sending on   LPF/eth0/00:1d:60:57:cf:57
Apr 19 14:35:43 deb64 dhclient: Sending on   Socket/fallback
Apr 19 14:35:43 deb64 dhclient: DHCPRELEASE on eth0 to 192.168.0.1 port 67

Le premier caractère de substitution ^ (accent circonflexe) précède la valeur à remplacer, le second la nouvelle valeur.

shopt -s histappend
PROMPT_COMMAND='history -a'

“histappend” permet également d'enregistrer dans l'historique les commandes des différents shell qui seraient utilisés simultanément et pas seulement celles du dernier shell utilisé.

Et dans votre fichier “.inputrc” (à créer s'il n'existe pas) :

"\e[A": history-search-backward
"\e[B": history-search-forward

De cette manière la touche [flèche_haut] garde son comportement par défaut si rien n'est tapé : elle rappelle la dernière commande effectuée. Mais si un début de commande est tapé, la touche [flèche_haut] effectue une recherche dans l'ensemble de l'historique à partir des éléments déjà tapés ([flèche_bas] effectue la recherche en arrière).
Vous devez ouvrir une nouvelle session shell pour que les changements soient effectifs.

export HISTSIZE= cette variable détermine le nombre de commandes qui seront enregistrées dans l'historique ; la valeur par défaut est souvent 500. Si vous mettez la valeur à 0 rien ne sera enregistré. Toutes les valeurs au-dessus de 500 peuvent être utilisées. Pour laisser l'historique enregistrer les 5000 dernières commandes, écrivez :

export HISTSIZE=5000

Vous pouvez connaître la valeur actuelle de la variable avec :

$ echo $HISTSIZE

export HISTCONTROL=ignoreboth:erasedups permet d'éviter les doublons dans l'historique (“ignoredups” et “ignorespace” sont des sous-ensembles de “ignoreboth”).

$ history 10

Et si vous désirez effacer une commande de l'historique, par exemple si vous venez de taper un mot de passe en clair par erreur :

$ history 1
798 mot-de-passe-ultra-secret
$ history -d 798

“history 1” vous donne le numéro de ligne de la dernière commande tapée (ici “798”) et “history -d” vous permet ensuite de l'effacer.

Raccourcis

Lorsque vous utilisez une console, vous bénéficiez de nombreux raccourcis qui peuvent vous faire économiser des frappes. Voici un petit mémo des plus courants ([maj] = “touche majuscule” ou “shift”, [ctrl] = “touche ctrl”, …etc) :

Raccourcis Fonction
[ctrl][a] place le curseur en début de ligne
[ctrl][e] place le curseur en fin de ligne
[alt][f] sauter de mot en mot en avant
[alt][b] sauter de mot en mot en arrière
[ctrl][t] inverser les deux caractères avant le curseur (lsmdo > lsmod)
[ctrl][_] annuler la dernière modification
[alt][maj][t] inverser les deux mots avant le curseur (modprobe sudo > sudo modprobe)
[alt][maj][u] mettre le mot suivant le curseur en majuscules
[alt][maj][l] mettre le mot suivant le curseur en minuscules
[ctrl][c] arrêter (crasher) la commande en cours d'exécution
[ctrl][z] suspendre la commande en cours d'exécution (restauration avec “fg” ou “bg”)
[ctrl][d] quitter le shell en cours (équivalent “exit”)

Ceci n'est qu'une courte sélection personnelle. Il existe de nombreux autres raccourcis.