Vendredi 23 novembre 2018

URL: https://linuxfr.org/users/rodhlann/journaux/des-basheries Title: Des “basheries” Authors: rdhlnn Date: 2016-11-29T15:56:08+01:00 License: CC by-sa Tags: shell et bash Score: 18

Salut,

Voici un journal qui répertorie les quelques raccourcis et commandes que j’ai découverts au fil du temps et de balades sur le net (blogs, forums, wiki, man bash, etc.). J’essaie de faire une liste ici de ceux qui me semblent vraiment utiles pour l’utilisation quotidienne du terminal par un utilisateur lambda. Je fais partie de cette catégorie, je ne suis ni un programmeur, ni un utilisateur averti, je fais de la recherche en sciences humaines et sociales et de l’édition. Aujourd’hui, je n’utilise quasiment plus qu’un navigateur web et un terminal (vim, mutt, pandoc, etc.). Dans mon domaine, on voit de plus en plus de gens s’intéresser à des outils comme vim, mais ils sont rebutés par l’utilisation du terminal lui-même (avant même celle de vim). Voilà donc quelques astuces qui facilitent grandement l’utilisation d’un terminal utilisant le shell unix bash.

Des raccourcis utiles

  • Ctrl + a : Pour aller au début de la ligne
  • Ctrl + e : Pour aller à la fin de la ligne
  • Ctrl + b : Pour se déplacer d’un caractère vers l’arrière (flèche gauche)
  • Ctrl + f : Pour se déplacer d’un caractère vers l’avant (flèche droite)
  • Alt + b : Pour se déplacer d’un mot vers l’arrière
  • Alt + f : Pour se déplacer d’un mot vers l’avant
  • Ctrl + xx : Pour passer de la position du curseur au début de la ligne et revenir à la position où se trouvait le curseur

  • TAB : Pour compléter automatiquement les noms de fichiers/dossiers/commandes
  • Ctrl + d : Pour effacer le caractère sur lequel se trouve le curseur
  • Ctrl + h : Pour effacer le caractère précédant le curseur (la fonction classique du retour arrière)
  • Alt + d : Pour effacer le mot suivant le curseur
  • Alt + retour arrière : Pour effacer le mot précédant le curseur

  • Ctrl + l : Pour nettoyer l’écran (l’équivalent de la commande clear)

  • Alt + t : Pour échanger la place du mot où se trouve le curseur avec celui le précédant
  • Ctrl + t : Pour échanger la place des deux caractères précédant le curseur

  • Ctrl + w : Pour couper le mot précédant le curseur
  • Ctrl + k : Pour couper la partie de la ligne suivant le curseur
  • Ctrl + u : Pour couper la partie de la ligne précédant le curseur
  • Ctrl + y : Pour coller la dernière chose coupée
  • Ctrl + _ : Pour annuler la dernière modification (undo)

  • Ctrl + j : Pour créer une nouvelle ligne
  • Ctrl + c : Pour arrêter la commande en cours et créer aussi une nouvelle ligne

  • Ctrl + r : Pour rechercher une commande précédente dans l’historique
  • Ctrl + g : Pour quitter la recherche dans l’historique
  • Ctrl + p : Commande précédente (flèche haut)
  • Ctrl + n : Commande suivante (flèche bas)

  • Ctrl + x + e : Pour lancer un traitement de texte (nano par ex.) pour écrire une longue commande.

La dernière commande

  • !! : Pour répéter la dernière commande Notamment très utile quand on oublie de mettre sudo avant une commande. $ apt install apt (qui donne une erreur parce qu’on a oublié sudo) $ sudo !!

  • alt + . : Pour ajouter le dernier argument de la dernière commande $ vim todo.txt $ mv [alt + .]todo.txt ~/tmp

  • !$ : Egalement utile pour ajouter le dernier argument de la dernière commande

  • !* : Pour reproduire tous les arguments de la dernière commande C’est utile si vous faites une erreur du genre : $ vim cd ~/downloads $ !* ce qui donnera $ cd ~/downloads

  • !foo : Pour réutiliser la dernière commande en commençant par foo (on peut aussi faire foo !!)

  • !:- : Pour réutiliser la dernière commande sans le dernier argument Un exemple: $ ping -c 3 linuxfr.org $ !:- framasoft.org Ce qui donnera $ ping -c 3 framasoft.org

  • A ces commandes, vous pouvez ajouter à la fin :p (par ex. !*:p) pour afficher la commande sans qu’elle se lance.

Astuces au quotidien

  • $ cp ~/.vimrc{,.old} Qui correspond à $ cp ~/.vimrc ~/.vimrc.old Ca marche aussi pour supprimer une extension par ex. pour transformer “blabla.txt” en “blabla” $ mv blabla{.txt,} Ou pour utiliser l’extension markdown à la place du .txt : $ mv blabla{.txt,.md}

  • .. Qui correspond au dossier parent de celui dans lequel on se trouve. Par ex. : cd .. emmène au dossier parent de celui dans lequel on se trouve. Cela peut aussi être utile pour copier un fichier cp foo.txt ..

  • . Cela correspond au dossier dans lequel on se trouve. Par ex.: cp ~/downloads/foo.txt .

  • cd - Qui emmène au dernier dossier dans lequel on se trouvait

  • En cas de coquille, on peut corriger la commande précédente erronée ainsi: mvi todo.txt ^mvi^vim

  • Pour appliquer une action (supprimer, copier, etc.) sur de nombreux fichiers qui ont des noms similaires, on peut utiliser l’astérisque. Par ex.: $ ls Fichier1.txt Fichier2.txt Fichier3.txt Fichier4.txt $ rm Fichier* (cela supprimera tous les fichiers commençant par “Fichier”) ou $ rm *.txt (cela supprimera tous les fichiers ayant l’extension “.txt”)

  • Pour renommer rapidement une série de fichiers, on peut utiliser rename ainsi : $ ls Fichier1.txt Fichier2.txt Fichier3.txt Fichier4.txt $ rename 's/Fichier/texte/' *.txt $ ls texte1.txt texte2.txt texte3.txt texte4.txt

  • Pour changer les extensions de plusieurs fichiers (en utilisant toujours rename, il est possible d’utiliser d’autres méthodes bien évidemment, avec find par ex.) : rename 's/\.txt$/\.md/' *.txt

  • ls -thor Pour invoquer le pouvoir du marteau ! Et accessoirement lister de façon complète et lisible les fichiers d’un dossier en fonction de leur date de modification (de la plus ancienne à la plus récente). Il n’y aura pas les fichiers cachés dans la liste. Pour cela il faut invoquer les écritures saintes ls -torah.

  • Pour supprimer tous les fichiers dans un dossier sauf un type de fichier (pdf et zip par ex.) $ rm !(*.pdf|*.zip)

Toutdoux liste

Une commande utile (un peu dangereuse) si vous maintenez un fichier ~/faire.txt (le fameux todo.txt, que je maintiens personnellement selon une méthode “Getting things done” à ma sauce). Je maintiens aussi un fichier ~/lecture.txt (le sujet de l’exemple ci-dessous) dans lequel j’ai une liste de livres/articles à lire (utile pour mon boulot, notamment avant de me rendre à la bibliothèque). Pour ajouter une ligne à un fichier $ echo "- Luciano Floridi, the fourth revolution, Oxford University Press, 2014" >> ~/lecture.txt Cela ajoute une ligne à la fin de ce fichier contenant ce qui se trouve entre guillemets (en passant cet auteur peut vous intéresser). C’est une méthode un peu dangereuse, parce que si on ne met qu’un “>” à la place de 2 “>”, on écrase le fichier.

Je peux donc lancer rapidement un terminal (j’ai un raccourci pour cela) et faire un less lecture.txt pour voir la totalité de la liste. Je peux aussi faire un head -5 lecture.txt pour afficher les 5 premières lignes, ou les 5 dernières avec tail -5 lecture.txt.

Mais encore une fois, attention à ne pas faire $ echo "blabla" > lecture.txt ! Cela supprimera le contenu du fichier et ne laissera que “blabla”.

Le partage facile d’un dossier au sein d’un réseau

Pour un partage facile d’un dossier avec une personne utilisant le même réseau, on peut lancer une commande créant un serveur depuis le dossier à partager : python3 -m http.server Ca fonctionne aussi avec python2 : python -m SimpleHTTPServer Pour préciser le port il suffit d’ajouter le numéro à la fin de la commande : python3 -m http.server 8042 Et d’autres langages peuvent faire la même chose bien sûr Avec ruby par ex.: ruby -run -e httpd . (le port sera indiqué au lancement de la commande mais c’est possible de le préciser avec -p par ex.: ruby -run -e httpd . -p 8042)

A suivre

Je m’attarde ici sur bash, mais cela devrait fonctionner mosso grodo avec les autres shell aussi (zsh notamment). Et je vise ici les astuces qui ne nécessitent pas de modifier .bashrc. Par ex., j’utilise certaines modifications de mon .bashrc comme :

alias ll=’ls -alF’ alias la=’ls -A’ alias l=’ls -CF’

Quelques autres idées me viennent pour de futurs journaux, si ça vous intéresse : 1) un journal sur bashrc pour rendre la vie de l’utilisateur lambda plus facile 2) un journal sur un vimrc pour “non-programmeur”, qui souhaite utiliser vim comme traitement de texte principalement 3) un journal sur des scripts bash utiles au quotidien pour un utilisateur lambda 4) un journal sur une automatisation (évitant notamment le danger du “>”, faisant des sauvegardes, etc.) de ma liste de tâches. Il existe de nombreux programmes “todo list”, mais je n’en ai trouvé aucun qui me satisfasse entièrement. Enfin… A suivre…

Je vous laisse aussi ajouter d’autres raccourcis, commandes et astuces qui peuvent être utiles à un utilisateur standard selon vous (s’il y a des fautes, n’hésitez pas non plus). Cette liste n’est vraiment pas exhaustive. Elle représente ce que j’utilise le plus. Il y a de nombreux autres raccourcis et astuces sur la toile.

Bonne bidouille !