Bash : Commandes par l’exemples et astuces

Partager cet article

Temps estimé pour la lecture de cet article : 40 min

Bash (Bourne-Again shell) est un interpréteur en ligne de commande : un terminal. C’est le shell utilisé par Unix. Bien souvent, les utilisateurs habitués à Windows et aux interfaces graphiques sous-estiment la puissance de ce genre d’outil, à travers cet article, j’aimerais partager avec vous des exemples de commandes, scripts ou packages que j’utilise. Je ne parlerais pas des commandes de bases comme ls par exemple.

Lancer un terminal depuis un dossier précis

Il est possible grâce à au package nautilus-open-terminal de lancer un terminal dans un dossier précis grâce au menu contextuel obtenu lors d’un clic droit.

sudo apt-get install nautilus-open-terminal

Maintenant vous pourrez depuis n’importe quel dossier lancer un terminal, en faisant clic droit ouvrir dans un terminal.

Astuces

  • cd – : permet de revenir au dossier précédent votre dernier déplacement, par exemple si vous vous étiez dans le dossier Documents/c++ et que vous êtes revenu à la racine en faisant un cd -, vous serez de retour dans ce dossier.
  • pkill firefox : la commande pkill bien que peu connue permet de fermer un programme grâce à son nom. Ici on arrêterait donc firefox.
  • echo $(($RANDOM % 6 + 1)) : permet d’afficher un nombre aléatoire entre 1 et 6, il y a moyen de s’en faire un script pour ce faire des dés, pratique pour les jeux de rôles :3.

Raccourcis clavier bash

  • Ctrl+c : permet de quitter la commande active
  • Ctrl+d : ferme le shell courant
  • Ctrl+k/w : supprimer le mot à gauche ou à droite du curseur
  • Ctrl+a/e : se mettre en début ou en fin de ligne

Gérer ses programmes efficacement avec fg et bg

Il est possible d’exécuter des programmes en arrière plan ! Par exemple vous réaliser une copie assez longue d’un film (légal bien entendu). Vous pouvez alors au lieu d’ouvrir un nouveau terminal, passer cette copie en arrière plan. :

cp Téléchargements/MyFile.avi Bureau/. &

Le terminal nous renvoie alors, le numéro du processus mis en arrière plan et son PID, pratique si on veut le kill plus tard. On lance alors vim avec un fichier .c, sur le même principe, il suffira d’utiliser le raccourci ctrl+z pour envoyer cette application en arrière plan, le programme va alors être mis en pause.

On peut alors utiliser la commande bg, pour lancer à nouveau le processus mais en arrière plan. Si on veut récupérer la main dessus, il faut utiliser la commande fg (foreground). Enfin la dernière commande qui peut être intéressant de connaître c’est jobs qui va permettre de lister les programmes qui tournent en fond.

La commande watch

La commande watch permet d’exécuter, une commande ou un script périodiquement, et d’afficher le résultat. On peut préciser l’intervalle de temps, par défaut il est de deux secondes, si on veut le modifier on utilise l’option -n. On pourrait ainsi par exemple surveiller la progression d’un téléchargement en répétant la commande ls.

ls -s file

La commande grep

La commande grep permet de rechercher une chaîne de caractères dans un fichier, il est possible d’utiliser des expressions régulières. Ainsi par exemple pour rechercher une chaîne dans un ensemble de fichiers, il suffit de faire :

grep -ri "machaine" *.c

On recherche la chaîne « machaine » dans tous les fichiers c du répertoire courant et dans les sous-dossiers grâce à l’option -r (pour récursif) et l’option -i permet de préciser qu’on ignore la casse ainsi, on recherche également la chaîne : « MACHAINE ».

La commande mv

La commande mv est très efficace, elle permet de déplacer un fichier ou un répertoire, c’est une commande bien connue mais bien souvent les gens ignorent qu’elle permet également de renommer. Par exemple, il suffit de faire :

mv oldFile newFile

Grâce à cette commande on renomme le fichier oldFile en newFile. Cela fonctionne également avec les répertoires !

Voici un exemple de petit script bien utilise qui utilise mv :

for f in *\ *
do 
mv "$f" "${f// /_}" 
done

Pour chaque fichier et dossier dont le nom comporte un espace on le remplace par un underscore.

La commande find

La commande find permet de chercher des fichiers grâce à de nombreux critères. Nous allons voir quelques exemples d’utilisation de cette commande.

La première utilisation que nous allons voir est la principale, on cherche un fichier particulier par exemple, lorsqu’on développe un site web, on peut chercher à modifier le fichier php.ini, si on a oublié l’emplacement de ce dernier, une simple recherche sur le système nous permettra de le trouver :

sudo find / -name "php.ini"

On rajoute le sudo car certains dossiers sont protégés et nous empêcheraient de faire notre recherche. Et l’option -name permet de préciser que la recherche s’effectue sur le nom du fichier.

Une deuxième utilisation de find pourrait être pour compter le nombre de lignes d’un projet informatique :

find ./ -type f -name '*.[hc]' | xargs wc -l

On lance la recherche sur le répertoire courant, l’option -type permet de préciser qu’on recherche des fichiers, dans l’exemple on utilise une expression régulière afin de rechercher les fichiers .h et les fichiers.c. On utilise xargs afin de lancer la commande wc -l pour compter le nombre de lignes des fichiers trouvés.

Une troisième utilisation de find serait de pouvoir rechercher un fichier suivant la date de dernière modification. Ainsi pour connaître les fichiers modifiés dans les trois derniers jours, il faut taper :

find / -mtime 3

Enfin, la dernière utilisation que l’on va voir de find, permet de recherche un fichier selon la taille de ce dernier. Par exemple pour connaître les fichiers dont la taille dépasse 10 Mo, on ferait :

find / -size 20000

La commande df

La commande df permet d’afficher l’espace disque disponible dans n’importe quel dossier, par exemple pour connaitre la taille d’un dossier, il suffit de lancer cette commande :

df -h projet/

L’option -h (human-readable) permet d’avoir un affichage en Mo ou Go, par défaut c’est affiché en octet.

La commande tar

Cette commande permet de créer des archives rapidement.

  • tar -czf archive.zip * : Créer une archive au format zip, avec le contenu du répertoire courant
  • tar -tvf archive.zip : Liste les fichiers présents dans l’archive
  • tar -xf archive.zip : Extrait les fichiers de l’archive

Exemple de script :

if [ "$2" = "-c" ]; then
tar -czf $1.zip *
elif [ "$2" = "-l" ]; then
tar -tvf $1.zip
elif [ "$2" = "-x" ]; then
tar -xf $1.zip
else
echo "Help : arch.sh file c/l/x :"
echo "> -c : create an archive"
echo "> -l : liste an files in archive"
echo "> -x : extract files"
fi

Ce script permet de créer une archive du dossier courant si on utilise l’option -c, de voir le contenu d’une archive si on utilise l’option -l et enfin d’extraire les fichiers grâce à l’option -x. Enfin, si rien n’est précisé on affiche une aide d’utilisation.

Améliorer l’historique de bash

La commande history permet d’afficher toutes les commandes utilisées par l’utilisateur précédemment. En effet, le bash par défaut conserve un historique des dernières commandes dans le fichier .bash_history. L’intérêt, ça va être de pouvoir rappeler rapidement des commandes. Commençons par tester la commande :

Bash - History

On va alors pouvoir répéter une ancienne commande en utilisant le symbole !. Voici par exemple ce que l’on peut faire :

  • !55 : exécute la commande 55 de l’historique
  • !! : exécute la dernière commande
  • sudo !! : permets d’exécuter la dernière commande avec le droit root (pratique si on a tendance à l’oublier :3)

Quand on cherche une commande qu’on a utilisée dans l’historique cela devient bien sur moins évident de la retrouver, on peut alors utiliser un pipe et la commande grep afin de retrouver la commande que l’on veut, comme ceci :

history | grep 'pattern'

Voyons maintenant comment on peut customiser l’historique grâce au bashrc. Par défaut, la taille maximum du nombre de commandes enregistrer est d’environ 500. Si l’on veut conserver notre historique plus longtemps que quelques jours, il peut être intéressant d’agrandir cette taille. On va donc modifier les variables $HISTSIZE et $HISTFILESIZE. Pour ce faire il suffit d’ajouter ces deux lignes dans notre bashrc :

HISTFILESIZE=10 000
HISTSIZE=10000

Enfin, certaines commandes sont répétitives et peu intéressantes d’enregistrer comme la fonction ls qui permet de lister les fichiers et documents. On peut donc la retirer des recherches en faisant :

HISTIGNORE='ls:history'

Tree : afficher ses dossiers sous forme d’arborescence

La commande tree permet d’afficher des dossiers sous forme d’arbre, pour l’installer il suffit de faire :

sudo apt-get install tree

Ce qui nous permet d’avoir ce genre de rendu (pratique pour les rapports de projets :D).

Bash - Tree

Options :

  • -C : color
  • -d : n’affichez que les dossiers
  • -L level : on choisit le niveau de profondeur de parcours
  • -t : lister par dernière modification

Htop : gérer ses processus facilement dans son terminal

sudo apt-get install htop

Bash - Htop

Une fois installé, lancer la commande htop et vous pourrez observer tous les processus lancés. Ensuite, rien de plus simple, lancer la recherche en faisant ‘/’ puis le logiciel que vous recherchez. Taper sur la touche entrez, puis F9 et le signal de terminaison du processus.

Mocp : écouter de la musique dans son terminal

Bash - Mocp

Mocp, possède plusieurs avantages, le premier bien sûr c’est qu’il est léger, de plus il est compatible avec beaucoup de formats. Il est surtout utile dans le sens qu’on peut le lancer en tâche de fond comme simple serveur.

sudo apt-get install mocp

On peut ainsi le mettre sur un raspberry pi et utiliser ce dernier depuis une interface web ou encore depuis son éditeur de texte par exemple.

Commandes :

  • mocp -S : lancer un serveur
  • mocp -G : switch entre l’état en pause et en cours
  • mocp -p : jouer une musique
  • mocp -i : avoir des infos sur la liste en cours
  • mocp -x : fermer le serveur en cours

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *