Outils pour utilisateurs

Outils du site


commande:historique

— 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).

  • L'auto-complétion fonctionne avec le nom d'une commande. Par exemple, taper “e2f” [tab] complètera la commande en “e2fsck” (utilitaire pour tester les partitions ext2/3).
  • L'auto-complétion fonctionne avec un chemin. Par exemple, si vous avez téléchargé un installateur de pilote graphique Nvidia dans /home/tux/Downloads, et que vous vouliez l'exécuter, taper :
$ 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.

  • L'auto-complétion s'adapte au type de commande. Par exemple, si la commande est “cd” (pour se placer dans un répertoire), l'auto-complétion ne proposera que des chemins menant à des répertoires et les autres types de fichiers (exécutables, texte…) seront ignorés. À l'inverse, si la commande est “sh” (pour exécuter un script), l'auto-complétion proposera également les exécutables.
  • En cas de possibilités multiples, un appui simple sur [tab] ne renverra rien. Dans ce cas, un double appui [tab][tab] proposera les différents choix :
$ 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é.

  • Le raccourcis [ctrl][r] (touches “ctrl” (control) et “r”) permet d'appeler la recherche dans l'historique. La recherche est faite à partir des éléments que vous allez taper. Elle a lieu sur l'ensemble des lignes de commandes contenues dans l'historique et pas uniquement sur leur début. Répétez [ctrl][r] pour poursuivre la recherche dans l'historique, validez pour effectuer la commande trouvée ou utilisez la touche [flèche_droite] pour l'afficher sur la ligne de commande.
  • Deux points d'exclamation “!!rappellent la dernière commande de l'historique et l'exécute.
  • Si vous voulez rappeler la dernière commande utilisant “tail”, faites :
$ !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.

  • Si cette fois vous désirez exécuter la dernière commande qui comprenait la chaîne de caractères “ext3”, utilisez :
$ !?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…

  • Si vous désirez modifier la dernière commande avant de l'exécuter, vous pouvez utiliser une substitution. Par exemple, si vous exécutez “tail -n 3” pour lire les 3 dernières lignes d'un fichier et que vous vouliez finalement avoir les 5 dernières :
$ 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.

  • Il est possible d'utiliser les touches [flèche_haut] et [flèche_bas] pour effectuer une recherche contextuelle dans l'historique à partir de ce qui est déjà tapé. Pour obtenir ce résultat, vous pouvez ajouter dans le fichier “.bashrc” de votre répertoire personnel :
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.

  • Pour personnaliser l'historique, il est possible de modifier quelques variables dans votre fichier .bashrc (ou .bash_local, selon vos habitudes). Vous devrez ouvrir un nouveau shell pour constater les changements. Par exemple, en tapant “bash” (sans les guillemets) :

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”).

  • Pour consulter directement l'historique, utilisez la commande history. Pour afficher les 10 dernières entrées, utilisez :
$ 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.

commande/historique.txt · Dernière modification: 2014/05/09 18:56 (modification externe)