Sommaire :
I. Qu’est-ce que le Shell?
II. Où trouvons-nous ce Shell ?
III. Qu’est-ce qu’une commande ?
IV. Les fonctionnalités Bash
Wildcards
Fichiers cachés
Expansion par accolades
Variables shell
Utilisation du PATH et du fichier .bashrc en entreprise
Pour lire l’article précédent c’est par ici :
Continuons notre exploration de Linux 🐧!
Je vous ai présenté le noyau Linux précédemment, mais, en tant que tel, vous ne pouvez pas interagir directement avec lui.
Pour cela, nous devons utiliser un programme spécial : le Shell !
I. Qu’est-ce que le Shell ?
Le Shell (qui signifie "Coquille" en anglais) est un programme qui expose les services du noyau et permet d’interagir avec celui-ci, que ce soit par un utilisateur ou par d’autres programmes.
Le plus souvent, lorsqu’on veut interagir avec le Shell en tant que développeur, on utilise un Shell en ligne de commande. Il existe des Shells graphiques, mais je préfère ne pas vous perdre avec cela. Ainsi, dans le reste de la formation, lorsque je mentionnerai le Shell, je ferai référence à un programme fonctionnant en ligne de commande.
En résumé, le Shell est un programme permettant aux utilisateurs de taper des commandes pour interagir avec le noyau et voir les résultats de ces commandes.
C’est toute la puissance de Linux : en tant que développeur, vous dépasserez rapidement l’interface graphique pour vous plonger dans le shell. Cela peut sembler plus difficile au départ, mais une fois habitué, vous délaisserez complètement votre souris pour n’utiliser que votre clavier et tirer parti de la puissance du shell.
Il existe plusieurs shell pour Linux : Bourne shell, Bourne-Again Shell, Korn shell, C shell, Zsh, Fish, et bien d’autres encore. Dans la suite de la formation, je me concentrerai principalement sur le Bourne-Again Shell (ou Bash), mais je n’exclus pas de vous en présenter d’autres, comme Zsh ou Fish, tout aussi sympathiques.
Bash est le shell le plus largement utilisé par défaut sur toutes les principales distributions Linux ainsi que sur macOS.
II. Où trouvons-nous ce Shell ?
Sur Ubuntu, vous devez naviguer dans l’interface graphique utilisateur (le bureau, les fenêtres, les dossiers, etc.) pour démarrer une application particulière : le terminal.
Il existe cependant un raccourci clavier sur Ubuntu pour ouvrir une fenêtre de terminal directement : Ctrl + Alt + T.
Vous avez remarqué le symbole “$” sur l’invite de commande ? Cela veut dire que le shell est prêt pour votre prochaine commande. Si vous customisez votre shell, vous pouvez avoir d’autres symboles que le $
.
III. Qu’est-ce qu’une commande ?
Une commande Linux se compose généralement du nom d'un programme suivi d'options et d'arguments, saisis dans un shell. Par exemple :
ls -l /home
Nom du programme :
ls
(pour "list"), localisé et exécuté par le shell.
Linux comporte des programmes stockés sous forme de fichiers binaires exécutables. Ce sont des fichiers contenant du code binaire (des 0 et des 1) directement exécutables par le processeur de notre machine. Beaucoup de commandes de base du shell exécutent des fichiers binaires exécutables. Nous verrons plus tard où ces fichiers binaires sont stockés (pour les impatients :
).
Options : Elles commencent souvent par un tiret et modifient le comportement du programme. Ici,
-l
demande de retourner un format avec plus d’informations sur les éléments retournés.Arguments : Représentent généralement des fichiers ou des éléments à traiter, comme le dossier
/home
dans cet exemple.
Il est important de retenir que pour la plupart des programmes :
Les options peuvent être écrites séparément (
ls -l -h
) ou combinées (ls -lh
).On peut utiliser des arguments multiples, par exemple avec
ls
, pour traiter plusieurs fichiers ou répertoires (ls -l /etc /home
).
Les options et arguments varient selon les programmes et ne sont pas standardisés (ex. : -l
est utilisé pour avoir plus de détails avec ls
, mais sert à compter les lignes au lieu des mots avec la commande wc
(word count)).
C’est un tout petit aperçus de ce que nous pouvons faire avec le shell. 2 fonctionnalités nous permettent d’étendre les possibilités :
Les pipelines : Les sorties d'une commande peuvent être utilisées comme entrées pour une autre, ce qui nous permet de faire des enchaînements de commandes en une ligne, très pratique.
La programmation shell : Il est possible de faire de la programmation avec le shell et notamment des scripts ! Cela permet d’automatiser des tâches complexes, comme rediriger des sorties, gérer des erreurs ou envoyer des notifications.
Nous pouvons lancer quelques commandes basiques et voir leurs résultats :
ls ~
Affiche : Desktop Downloads Documents …
Liste les fichiers et dossiers de votre répertoir courant.
whoami
Affiche : nom_de_l’utilisateur
Pour ma part florent
vu que je suis connecté avec cet utilisateur ;).
wc -l ~/.bashrc
Affiche : 120 /home/nom_du_user/.bashrc
Retourne le nombre de lignes dans le fichier .bashrc
echo “salut”
Affiche : salut
echo est une commande hyper pratique, c’est le print que l’on peut avoir en python mais pour le bash.
Quelques commandes utiles en toutes circonstances :
Les commandes man, info et --help sont des outils essentiels pour obtenir de l'aide sur les commandes Linux :
man : Affiche le manuel complet d'une commande, incluant sa description, sa syntaxe, ses options et souvent des exemples d'utilisation.
info : Fournit une documentation plus détaillée et structurée que man, avec une navigation hypertexte entre les sections. Si la commande n’a pas de page info elle affiche la page man.
A noter que vous pouvez utiliser
info
surinfo
etman
surman
.--help : Option disponible pour la plupart des commandes, affichant une aide concise directement dans le terminal, incluant une brève description et la liste des options principales.
Ces trois outils permettent aux utilisateurs d'accéder rapidement à l'information nécessaire pour utiliser efficacement les commandes Linux, chacun offrant un niveau de détail différent.
IV. Les fonctionnalités Bash
Bash vient avec son lot de fonctionnalités en plus des programmes Linux disponibles.
1) Wildcards (Caractères génériques)
Les wildcards permettent de désigner un ensemble de fichiers aux noms similaires. Par exemple, a*
représente tous les fichiers dont le nom commence par "a". Le shell remplace automatiquement le wildcard par les noms des fichiers correspondants. Exemple :
ls a*
Vous retournera tous les fichiers commençant par a de votre répertoire courant.
Vous pouvez placer des wildcards à n’importe quel endroit par exemple : ls a*z , vous retournera tous les fichiers commençant par a et finissant par z.
2) Fichiers cachés (Dot Files)
Les fichiers dont le nom commence par un point (.
), appelés "dot files", sont considérés comme spéciaux. Par défaut :
Ils ne s'affichent pas dans les listes de fichiers, sauf si l’option
a
est utilisée avecls
.Les wildcards ne les prennent pas en compte à moins qu'ils soient explicitement mentionnés. Ces fichiers sont souvent appelés "fichiers cachés".
3) Expansion par accolades (Brace Expansion)
Les accolades permettent de générer plusieurs arguments en une seule commande. Par exemple, l’expression :
{X,YY,ZZZ}
produit les arguments X
, YY
, et ZZZ
. Exemple pratique :
echo sand{X,YY,ZZZ}wich
Affiche : sandXwich sandYYwich sandZZZwich
.
Contrairement aux wildcards, les accolades fonctionnent avec n'importe quelles chaînes, pas seulement des noms de fichiers existants.
4) Variables shell
Vous pouvez définir une variable en attribuant une valeur :
MYVAR=3
echo $MYVAR
Certaines variables sont prédéfinies par le shell, comme :
HOME
: répertoire personnel.PATH
: chemin de recherche des commandes.PWD
: répertoire actuel.USER
: nom de l’utilisateur connecté.
Pour rendre une variable accessible à d'autres programmes, utilisez la commande export
:
export MYVAR=3
Cela crée une variable d’environnement, disponible pour tous les programmes exécutés dans ce shell.
5) Le chemin de recherche PATH
Sur Linux, les programmes sont répartis dans différents dossiers du système, comme /bin
ou /usr/bin
. Mais comment le shell sait-il où trouver un programme lorsque vous tapez une commande ? C’est là qu’intervient la variable PATH.
Comment ça marche ?
Quand vous tapez une commande, par exemple :
who
Le shell consulte la variable PATH, qui contient une liste de dossiers séparés par des deux-points :
:
echo $PATH
/usr/local/bin:/bin:/usr/bin
Le shell cherche le programme who
dans chacun de ces dossiers, dans l’ordre. S’il le trouve, par exemple dans /usr/bin/who
, il l’exécute. Sinon, vous verrez un message d’erreur :
bash: who: command not found
Modifier le chemin de recherche
Vous pouvez temporairement ajouter un dossier au chemin de recherche :
PATH=$PATH:/usr/sbin
echo $PATH
Affiche : /usr/local/bin:/bin:/usr/bin:/usr/sbin
Cette modification ne s’applique qu’à la session actuelle.
Rendre le changement permanent
Pour conserver ce changement, ajoutez-le à votre fichier de démarrage ~/.bashrc
. Ensuite, relancez votre session ou appliquez manuellement le fichier avec :
. $HOME/.bashrc
Grâce à PATH, le shell sait toujours où chercher vos commandes et programmes, ce qui simplifie considérablement votre interaction avec Linux.
Infos supplémentaires :
la commande
.
permet d’exécuter des scripts shell, un équivalent est la commandesource
qui produit le même résultat.~
et la variable$HOME
sont équivalents, ils font tous deux référence au répertoire personnel de l'utilisateur. Cependant, il existe quelques nuances importantes dans leur utilisation :
$HOME
est une variable d'environnement, tandis que~
est une expansion du shell.~
est interprété directement par le shell (comme bash ou zsh), alors que$HOME
peut être utilisé dans divers contextes, y compris en dehors d'un shell spécifique. Ce qui fait que de$HOME
est généralement considérée comme plus portable et compatible entre différents environnements et situations.
6) Utilisation du PATH et du fichier .bashrc en entreprise
Souvent, lors de votre arrivée en entreprise, vous passerez plusieurs heures, voire des journées, à configurer votre environnement local (votre ordinateur quoi) avant de pouvoir commencer à coder.
Dans la plupart des cas, vous devrez installer de nombreux programmes supplémentaires et modifier votre PATH pour pouvoir les utiliser.
Comme nous l’avons vu, cela se fera par la modification de votre fichier .bashrc.
Une autre utilisation courante en entreprise consiste à utiliser le .bashrc pour indiquer où chercher des identifiants d’authentification. En effet, le .bashrc peut être utilisé pour configurer des chemins d'accès à des systèmes centralisés comme LDAP, des services cloud, des clés SSH ou des gestionnaires de secrets. Cela permet une gestion sécurisée et centralisée des identifiants d'accès.
Nous aurons l’occasion de voir des exemples dans la suite de la formation.
Pour lire le prochain article de la formation :
Merci de votre lecture !