Trucs et astuces pour la console

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche

Utiliser la ligne de commande rebute souvent les débutants. C'est pourtant une manière puissante et rapide de réaliser toutes sortes de tâches qui sont souvent impossibles à faire depuis une interface graphique.

Voici Quelques petits trucs permettent d'utiliser la console avec une efficacité redoutable.

Accéder à une console

Il y a plusieurs méthodes permettant d'entrer des lignes de commandes.

Depuis votre interface graphique, avec un émulateur de terminal, installé automatiquement par votre environnement de bureau. Suivant celui qui a été installé par défaut avec votre environnement de Bureau ou que vous aurez choisis d'installer, ce peut être gnome-terminal, konsole, lxterminal, etc.
Cet émulateur de terminal est aussi accessible par le menu de l'interface graphique( Applications ⇨ Accessoires ⇨ Terminal pour Gnome ).

Une installation debian (avec ou sans interface graphique) mets à disposition 6 consoles en mode texte (non graphique) qui peuvent être accessibles depuis l'interface graphique avec les raccourcis clavier Ctrl+Alt suivi de F1,F2,F3,F4,F5 ou F6.

Essayez ! Tapez Ctrl+Alt+F2, l'interface graphique de votre environnement de Bureau vient de disparaître et votre écran n'est plus en mode graphique… Pas d'affolement : L'interface graphique est toujours fonctionnelle, et vous pourrez y retourner en tapant Alt+F7, car la 7ème console est celle (par défaut) qui est utilisée pour le gestionnaire de connexion graphique.

Depuis une des 6 consoles en mode texte, les raccourcis Alt+F1, Alt-F2 etc… vous permettront de passer de l'une à l'autre de ces console en mode texte et Alt+F7 vous permettra de retrouver votre environnement de bureau en mode graphique.

À l'ouverture d'une console en mode texte, une invite (qu'on apelle aussi prompt) vous demandera de vous identifier pour ouvrir une session. Il vous est donc demander d'entrer un nom d'utilisateur sur le système (login) et bien sûr, il vous faudra entrer le mot de passe associé à ce compte utilisateur. Vous pouvez aussi, si c'est vraiment indispensable vous "logger" en tant qu'administrateur en tapant "root" suivi du mot de passe correspondant à ce compte..

S'il ne vous est pas demandé de vous identifier à l'ouverture d'un émulateur de terminal (donc depuis l'interface graphique), c'est parce que pour ouvrir votre session graphique, vous vous étiez déjà identifié.

Raccourcis clavier

racourci description
Flèches haut et bas
Navigation dans l'historique des commandes.
Ctrl + flèche droite ou gauche
Se déplacer de mot en mot.
Tab ( ⇆ )
Autocomplétion des noms de commande et des paramètres possibles utilisables avec la commande.
Ctrl + a
Déplacer le curseur au début de ligne de commandes.
Ctrl + e
Se déplacer en fin de ligne.
Ctrl + w
Supprimer le mot qui précède le curseur.
Ctrl + u
Effacer tout ce qui précède le curseur.
Ctrl + k
Effacer tout ce qui suit le curseur.
Ctrl + y
Coller à la position du curseur ce qui vient d'être supprimé.
Ctrl + l
Faire remonter le prompt en haut de l'écran (Attention : Il s'agit d'un L minuscule).
Ctrl + c
Arrêter la commande en cours d'exécution.
Ctrl + z
Mettre la commande en cours en tâche de fond.
Ctrl + r
Recherche dans l'historique.
Ctrl + d
Déconnexion, ferme le terminal si simple utilisateur.
Ctrl + t
Intervertir les 2 lettres avant le curseur.
Shift + PageUp/PageDown
se déplacer de haut en bas, comme avec la barre de défilement d'un terminal graphique.
Alt + d
Supprimer le mot qui suit le curseur.
Alt + t
échanger deux mots.
Alt + c
échanger les mots avant et après le curseur.
Alt + u
Mets le mot en majuscule.
Alt + l
Mets le mot en minuscule (Attention : Il s'agit d'un L minuscule).

Effacement du terminal

Pour y voir un peu plus clair, vous pouvez utiliser les commandes :

clear : efface le terminal (équivalent de Ctrl+L)
reset : réinitialise complètement le terminal (on ne peut plus remonter via Shift+PgUp ou avec la barre de défilement).

Aide de bash

Les commandes internes de bash (cd, umask, export, history,...) n'ont pas de pages de manuel. Elles sont documentées dans la page de manuel de bash. Vous pouvez y avoir accès sans avoir à faire une longue recherche dans la page de manuel en utilisant la commande help. Par exemple :

$ help umask
umask: umask [-p] [-S] [mode]
   Display or set file mode mask.
   
   Sets the user file-creation mask to MODE.  If MODE is omitted, prints
   the current value of the mask.
   
   If MODE begins with a digit, it is interpreted as an octal number;
   otherwise it is a symbolic mode string like that accepted by chmod(1).
   
   Options:
     -p	if MODE is omitted, output in a form that may be reused as input
     -S	makes the output symbolic; otherwise an octal number is output
   
   Exit Status:
   Returns success unless MODE is invalid or an invalid option is given.

Historique des commandes

Lorsque vous entrez une commande au clavier, celle-ci est automatiquement mémorisée. Vous pouvez ainsi accéder aux 500 dernières en tapant history. Vous pouvez aussi restreindre votre recherche en tapant history suivi du nombre désiré ; history 18 affichera ainsi les 18 dernières commandes entrées. history -c efface tout l'historique.

history vous présente une liste des dernières commandes tapées précédées d'un numéro d'ordre. Pour ré-utiliser une commande particulière il suffit de taper un point d'exclamation suivi de son numéro. Ainsi !362 relancera la 362ème commande de l'historique.

Imaginez que vous vouliez de nouveau utiliser la commande copier ( cp ) sur un fichier avec un nom à rallonge, taper !cp ré-utilisera la dernière commande de copie.

De même taper !! vous permet de ré-utiliser la dernière commande que vous venez de taper.

Plus fort encore : taper !? suivi d'une partie quelconque d'une commande recherchera dans l'historique la dernière commande qui utilisait cette partie de commande et l'exécutera. Par exemple !?gra pourrait lancer la commande aptitude full-upgrade.

Ctrl + R n'est pas mal non plus, car taper Ctrl + R suivi du début d'une commande recherchera en arrière les commandes déjà tapées qui correspondent au début que vous venez d'entrer. Il vous proposera la première trouvée, si elle ne convient pas, retapez Ctrl + R il vous proposera la suivante, et ainsi de suite.

^ancien^nouveau permet de relancer la dernière commande en remplaçant « ancien » par « nouveau » dans le texte. Par exemple :

mount /media/cdrom
^mount^cd # lancera : cd /media/cdrom

Redirection, pipeline et autres amusements

Redirection

Il est parfois utile de conserver le résultat d'une commande. Par exemple le résultat de dmidecode qui répertorie votre matériel est un texte relativement long. Vous pouvez, bien entendu, copier le texte, créer un fichier et y coller ce que vous venez de copier. Il existe pourtant une méthode qui vous fera gagner un peu de temps, la redirection.

En tapant :

 # dmidecode > listing_matériel

vous venez de créer un fichier " listing_matériel " qui contient le résultat de la commande.

En tapant >> au lieu de > , le résultat sera ajouté à la suite du texte déja existant dans le fichier.

Il existe aussi une redirection inverse, avec <, utilisable avec certaines commandes. Prenons un exemple :

Vous venez de créer un fichier disques.txt qui contient, dans le désordre, la liste des centaines de CD que comporte votre discothèque. Vous aimeriez bien trier cette liste par ordre alphabétique.

Vous avez de la chance ! La commande sort réalise cela. Il vous suffira de faire :

$ sort < disques.txt

... et le tour sera joué !

Pipeline

Le "pipe" (tube anonyme), symbolisé par une barre verticale "|" ( AltGr-6 sur un clavier Français ), permet de renvoyer la sortie d'une première commande vers l'entrée d'une deuxième commande.

Par exemple en tapant ls vous obtenez la liste des répertoires et fichiers contenus dans le répertoire courant... Si maintenant vous faites ls | sort, vous obtiendrez toujours cette même liste, mais triée par ordre alphabétique : sort a utilisé la sortie de ls pour le faire.

Une façon très courante d'utiliser le pipe est de l'associer à grep, qui permet de filtrer le résultat d'une commande en n'affichant que ceux comportant le ou les mots (en fonction d'une expression rationnelle) suivant grep.

Par exemple :

ls | grep rapport

n'affichera que les répertoires ou fichiers comportant le mot "rapport" dans leur nom.

Noms comportant des espaces

Imaginons que vous vouliez créer dans votre répertoire personnel un répertoire nommé "Rapport de juin". Un mkdir Rapport de juin risque fort de ne pas donner le résultat escompté : Vous allez vous retrouver avec 3 répertoires nommés Rapport, de et juin.

Pour créer ce répertoire il y a deux manières de procéder :

  • mettre le nom entre guillemets : mkdir "Rapport de juin"
  • échapper les espaces en les faisant précéder d'un caractère "backslash" ( \ ) : mkdir Rapport\ de\ juin

De même, pour l'effacement, un rm -r Rapport de juin vous donnera :

rm: impossible de supprimer « Rapport »: Aucun fichier ou répertoire de ce type
rm: impossible de supprimer « de »: Aucun fichier ou répertoire de ce type
rm: impossible de supprimer « juin »: Aucun fichier ou répertoire de ce type


Il faut donc, comme précédemment utiliser les guillemets ou le backslash :

rm -r "Rapport de juin"

ou

rm -r Rapport\ de\ juin

Noms commençant par -

Les fichiers commençants par le caractère "-" (moins) peuvent être gênant à gérer en ligne de commande, car ils sont reconnus comme des options du programme. La solution pour les utiliser consiste à ajouter -- entre les options du programme et les fichiers que vous souhaitez passer en paramètre.
Si vous vouliez supprimer sans demande de confirmation (option "-f") le fichier "-aeffacer" situé dans votre répertoire personnel, vous seriez tenté de formuler votre ligne de commande comme cela :

votrelogin@votremachine:~$ rm -f -aeffacer
rm : option non valide -- a
Saisissez « rm --help » pour plus d'informations.

On constate ici que le shell a bien interprété la chaîne de caractère "-f" comme une option de la commande "rm", mais étant donné que le premier caractère de la chaîne suivante est le caractère "-", il a cherché s'il existait une option de la commande "rm" qui correspondrait à la première lettre suivant le "-" de "-aeffacer" : la lettre "a".
N'ayant pas trouvé d'option "-a" dans la liste des options possibles de la commande "rm", il renvoie un message d'erreur nous informant que cette option est "non valide".

Séparer les options des paramètres avec "--"

Afin d'éviter ce type de confusion à l'interpréteur de commandes, il est possible de lui indiquer par deux caractères moins "--" l'endroit où finissent les options, et donc commencent les paramètres.
On peut donc utiliser ce nom de fichier comme paramètre en insérerant les deux caractères moins "--" dès que la liste des options est terminée, le shell comprendra que ce qui suit ne peut pas être une option.

Pour supprimer le fichier "-aeffacer" sans demander de confirmation (option "-f"), il faudrait alors entrer la commande:

monlogin@mamachine:~$ rm -f -- -aeffacer

Autre solution : Cacher le caractère "-" en début paramètre.

Cette deuxième solution consiste à faire en sorte que le premier caractère de la chaîne ne soit plus un "-", afin que le shell ne l'interprète pas comme une option de programme.
Pour ce faire, on peut faire précéder ce nom de fichier par son chemin relatif ou absolu.

Si la commande est exécuté depuis le répertoire dans lequel se trouve le fichier, le chemin courant peut être représenté par un caractère point ".".
Dans ce cas, la chaîne de caractère correspondant à ce nom de fichier avec son chemin relatif sera donc "./-aeffacer" Le premier caractère de cette chaîne n'étant plus le caractère "-", le shell ne pourra donc pas être induit en erreur et la prendre pour une chaîne d'options.
Dans ce cas la ligne de commande pourrait être :

monlogin@mamachine:~$ rm ./-aeffacer

Ou bien, avec le chemin absolu:

monlogin@mamachine:~$ rm /home/monlogin/-aeffacer

Accolades

L'utilisation des accolades {...} dans une commande permet souvent de se faciliter la tâche. Prenons un exemple :

A votre retour de vacances, vous avez décidé de classer les centaines de photos que vous avez prises dans des répertoires correspondant à chacune de vos destinations. Vous pourriez faire :


$ mkdir photos_Bahamas
$ mkdir photos_Hawai
$ mkdir photos_Antilles
$ mkdir photos_Japon

en créant chaque répertoire individuellement... fastidieux !

Il y a une manière plus rapide de réaliser cela :


$ mkdir photos_{Bahamas,Hawai,Antilles,Japon}

... étonnant ! non ?

Les accolades fonctionnent avec toutes les commandes, si vos photos des Bahamas et du Japon sont ratées et que vous vouliez effacer les répertoires correspondant, un simple :

$ rm -r photos_{Bahamas,Japon}

suffira !

Si, au lieu de créer des répertoires avec les noms de vos destinations, vous vouliez plutôt photos_1, photos_2, photos_3...jusqu'à photos_12, il suffit de faire :

$ mkdir photos_{1..12}

... et ça marche aussi avec des lettres :

$ mkdir photos_{A..Z}

créera 26 répertoires de photos_A jusqu'à photos_Z.

Jokers

Les jokers sont des caractères spéciaux qui peuvent se substituer à n'importe quel autre. Les plus utilisés sont :

  • L'astérisque ( * ) qui peut remplacer n'importe quelle combinaison ou nombre de caractères. Ainsi rm * effacera tous les fichiers du répertoire courant. Pour revenir à nos vacances, un rm -r photos_* effacera tous les répertoires de photos de vos derniers congés que vous avez créé précédemment... C'est votre chère et tendre qui va être contente !
  • Le point d'interrogation ( ? ), lui sert à remplacer un seul et unique caractère. Ainsi rm -r photos? effacera photos1, photos2,photosA...etc, mais ne touchera pas aux autres répertoires commençant par photos et comportant à la suite plus d'un caractère. Le répertoire nommé "photos" ne sera pas non plus touché.
  • Une autre façon d'indiquer un joker est d'utiliser les crochets [..]. Ainsi rm -r photos[158] effacera photos1, photos5 et photos8, mais laissera les autres en place.


Jobs en arrière plan

On a vu précédemment dans les raccourcis que CTRL+Z permettait de mettre un job en arrière plan. Il peut donc être intéressant de savoir comment revenir dessus.

Pour cela il est utile de connaitre ces deux commandes:

  • jobs -l : liste des jobs avec leur PID
  • fg + PID : revenir en premier plan sur le processus indiqué