Ernest

Astuces bash

Dernière modification : 2014-10-27 17:23:08

Sommaire


Introduction

Trouver des astuces et des raccourcis bash figure en bonne position parmi les hobbies des linuxiens. Cela permet de gagner en productivité et d'impressionner les filles (si t'y crois pas, c'est que tu fréquentes pas les bonnes ...).

Voici un petit échantillon de ces précieuses astuces.

[ sommaire ] | [ home ]


Se déplacer rapidement

Aller au début / à la fin de la ligne

Si, en console, lorsque vous êtes au début d'une longue ligne, vous vous retrouvez à maintenir la flèche droite du pavé numérique pendant une éternité, alors ce raccourci est pour vous. Il suffit de presser [Ctrl]+[e] pour arriver instantanément à la fin d'une ligne. De même, [Ctrl]+[a] vous amène au début de la ligne.

[ sommaire ] | [ home ]


Copier / Couper / Coller / Effacer

Couper / Coller un mot

Pour couper un mot, faites [Ctrl]+[w]. Vous pouvez ensuite coller ce mot avec [Ctrl]+[y].

Couper le début ou la fin d'une ligne

Pour couper le reste de la ligne courante (tout depuis le curseur jusqu'à la fin de la ligne), faites [Ctrl]+[k]. De même, pour couper le début de la ligne courante (tout depuis le début de la ligne jusqu'à la position actuelle du curseur), faites [Ctrl]+[u].

[ sommaire ] | [ home ]


Naviguer dans l'arborescence

Se rendre temporairement dans un répertoire : pushd et popd

Ces deux commandes permettent de faire un rapide passage dans un répertoire, d'y exécuter une ou deux commandes et de revenir au répertoire d'origine.


[ stephane@Lisa ]~/Images$ pushd /var/log
/var/log ~/Images
[ stephane@Lisa ]/var/log$ lance-une-ou-deux-commandes
[ stephane@Lisa ]/var/log$ popd
~/Images
[ stephane@Lisa ]~/Images$ 

Voici ce qui s'est passé : au départ, nous sommes dans le répertoire ~/Images. Nous tapons la commande pushd /var/log. Le bash retourne une ligne indiquant où l'on va et d'où on vient (/var/log ~/Images). Là, nous lançons une ou deux commandes puis nous tapons popd. Cette commande va nous ramener dans le répertoire dont nous venons (vous notez qu'on n'a pas eu besoin de le préciser. Comme lors du voyage "aller", il affiche l'endroit où nous allons (~/Images) mais pas celui d'où nous venons puisqu'il s'agit du voyage "retour".

Astuces avec cd

La commande cd (change directory) réserve quelques options intéressantes. Pour retourner dans son répertoire personnel, tapez simplement cd sans paramètres ou encore cd ~ (~ signifie "votre home"). Pour remonter d'un niveau dans l'arborescence (passer de /home/toto/scripts/bash à /home/toto/scripts par exemple), tapez cd ... Enfin, pour retourner au répertoire précédent, vous pouvez utiliser cd -.

[ sommaire ] | [ home ]


Répétition des commandes

Retaper la dernière commande (et les autres)

La manière la plus simple de répéter une commande est d'utiliser la flèche vers le haut du pavé numérique : cela affiche la commande précédente. Si vous pressez plusieurs fois la touche, le bash vous redonne chaque ligne de commande tapée auparavant qui est stocké dans l'historique, c'est-à-dire le fichier ~/.bash_history. Vous pouvez également taper !!, ce qui a pour effet de relancer la commande précédente.

Retaper les arguments d'une ancienne commande

Parfois, on n'a pas besoin d'une commande précédente mais des arguments passés à cette commande (par exemple, dans ls /home/toto, on ne veut pas le ls mais le /home/toto afin de faire un cd /home/toto). Dans ce cas, tapez le début de votre nouvelle commande (ici, cd) puis [Alt]+[.] (attention, si vous n'avez pas de pavé numérique, sur un portable par exemple, c'est [Alt]+[Shift]+[.]).

Alternativement, si vous voulez récupérer l'argument de la dernière commande tapée, vous pouvez utiliser !$. Par exemple, si vous aviez tapé ls /home/toto, vous pouvez taper cd !$.

Recherche dans l'historique avec [Ctrl] + [r]

Vous pouvez également utiliser [Ctrl]+[r]. La recherche est effectuée dans l'historique à partir des éléments que vous tapez. Lorsque vous faites [Ctrl]+[r], bash affiche la ligne (reverse-i-search)`':


[ stephane@Lisa ]~$
(reverse-i-search)`':

Vous pouvez maintenant taper une partie de la commande recherchée, par exemple cat. Notez que vous ne tapez plus sur la ligne indiquant votre répertoire courant mais sur la ligne "(reverse-i-search)". A chaque fois que vous appuyez sur une nouvelle touche, le bash cherche dans l'historique la chaîne de caractères. Lorsqu'il la trouve, il propose la commande entière, toujours sur la ligne "(reverse-i-search)", comme vous pouvez le voir ci-dessous.


(reverse-i-search)`cat': cat alternatives.log

Si cette suggestion vous convient, appuyez simplement sur [Entrée] : la ligne "(reverse-i-search)" disparaît et bash effectue votre commande puis affiche le résultat.

Toutefois, il arrive que le résultat proposé par bash ne soit pas celui que vous espérez. En effet, si j'ai tapé "cat" dans l'espoir de retrouver ma commande "vim categories.html" mais que depuis le moment où j'ai édité ce fichier il y a deux heures, j'ai fait une commande "cat alternatives.log", bash me propose ce "cat" là, puisqu'il est plus récent que mon "vim categories.html". Dans ce cas, il suffit de presser de nouveau [Ctrl]+[r] pour afficher l'occurrence précédente et de recommencer jusqu'à ce que bash trouve la commande qui vous intéresse. Il suffit alors d'appuyer sur [Entrée] pour la lancer.

Retaper une commande qui a échoué à cause des droits

Si le bash refuse votre commande parce que vous n'avez pas les droits nécessaires et que sudo vous le permet, tapez sudo !!.

[ sommaire ] | [ home ]


Naviguer entre les consoles

GNU/Linux propose, en plus du serveur X (le mode graphique), un mode console. En fait, ce dernier est toujours présent sur les machines (alors que le serveur X, pas nécessairement). A tout moment, il est possible de passer de l'un à l'autre. En outre, vous disposez par défaut de 6 consoles virtuelles entre lesquelles il est également possible de naviguer.

Pour repasser du mode console au mode graphique, pressez [Alt]+[F7] (je l'indique en premier pour que vous ne vous retrouviez pas coincé, notez le car votre navigateur (et tout le reste) aura (temporairement) disparu si vous passez en mode console :-)

Pour passer du mode graphique au mode console, appuyez sur [Ctrl]+[Alt]+[F1] (vous conduit sur la console 1) , [Ctrl]+[Alt]+[F2] (console 2), [Ctrl]+[Alt]+[F3] (console 3), etc.

Enfin, pour passer d'une console texte à une autre, faites [Alt]+[F1], [Alt]+[F2], ... [Alt]+[F6].

[ sommaire ] | [ home ]


Interagir avec le shell

Effacer l'écran

Plusieurs raccourcis clavier très utiles vous permettent de donner des instructions au shell. Tout d'abord, pour effacer l'écran, vous pouvez faire [Ctrl]+[l] (c'est l'équivalent de la commande clear.

Arrêter un programme temporairement ou définitivement

Pour mettre en pause un programme, utilisez [Ctrl]+[z]. Dans l'exemple ci-dessous, nous avons lancer la commande sleep 100000 qui, fondamentalement, est une looooongue pause. Puis nous avons fait [Ctrl+z], que vous pouvez voir (^Z) : le bash indique alors que le travail 1 (job #1) est stoppé.


[ stephane@Lisa ]~$ sleep 10000
^Z
[1]+  Stoppé                 sleep 10000

Pour relancer le programme, tapez fg 1 (si 1 est le numéro du programme mis en pause).

Vous pouvez également interrompre complètement un programme avec [Ctrl]+[c]. Attention, dans ce cas, il n'est pas possible de le relancer.

Se déconnecter du shell

Vous pouvez taper exit ou presser [Ctrl]+[d]. Dans les deux cas, si vous êtes en mode console, vous serez délogué, et si vous êtes dans un terminal lançé sous X, la fenêtre se ferme.

[ sommaire ] | [ home ]


Récapitulatif

Effets de la commande Commande / Raccourci clavier
Aller à la fin de la ligne [Ctrl]+[e]
Aller au début de la ligne [Ctrl]+[a]
Coupe / Colle le reste de la ligne [Ctrl]+[k] / [Ctrl]+[y]
Coupe / Colle le début de la ligne [Ctrl]+[u] / [Ctrl]+[y]
Aller temporairement / Revenir d'un répertoire $ pushd /chemin/du/répertoire / $ popd
Retourner dans son $HOME $ cd ou $ cd ~
Remonter d'un niveau dans l'arborescence $ cd ..
Retourner au répertoire précédent $ cd -
Retaper la commande précédente !! ou flèche du haut
Faire défiler les arguments des commandes précédentes [Alt]+[.] ou [Alt]+[Shift]+[.]
Utiliser une commande avec l'argument de la commande précédente $ commande !$ (par ex: $ ls !$)
Utiliser l'historique de recherche [Ctrl]+[r] (une ou plusieurs fois) puis [Entrée]
Relancer la commande précédente avec sudo $ sudo !!
Passer en mode console / graphique [Ctrl]+[Alt]+[F1] (F2, F3, etc.) / [Alt]+[F7]
Effacer le contenu de l'écran [Ctrl]+[l]
Arrêter la commande en cours [Ctrl]+[c]
Mettre un programme en pause / le relancer [Ctrl] + [z] / $ fg 1 (ou tout autre numéro)
Se déconnecter du shell [Ctrl]+[d]

[ sommaire ] | [ home ]


Liens utiles

[ sommaire ] | [ home ]


Conclusion

Le récapitulatif des commandes proposé sur cette page ne devrait pas rester sur le web : recopiez-le, imprimez-le au besoin et scotchez-le sur le bord de votre écran. En effet, c'est en pratiquant et seulement en pratiquant que vous mémoriserez ces astuces et ce n'est que comme cela qu'elle vous ferons économiser un temps précieux. A vous de jouer !

[ sommaire ] | [ home ]