Introduction
Bienvenue dans cet atelier pratique sur l'exécution de commandes et le traitement de texte sous Linux ! Si vous débutez avec Linux, ne vous inquiétez pas : nous vous guiderons à chaque étape. Dans cet atelier, nous allons explorer comment exécuter plusieurs commandes de manière efficace et utiliser des outils de traitement de texte performants. À la fin de cette session, vous serez capable de combiner des commandes, d'effectuer des recherches dans du texte et de manipuler des données comme un expert !
Exécuter des commandes de manière séquentielle
Sous Linux, vous pouvez exécuter plusieurs commandes les unes après les autres sur une seule ligne. C'est particulièrement utile lorsque vous souhaitez effectuer une série de tâches liées.
Commençons par un exemple simple. Nous allons afficher la date actuelle, puis lister le contenu de votre répertoire personnel :
date && ls ~
Voici le détail de cette commande :
date: Affiche la date et l'heure actuelles.&&: Ce symbole signifie "et". Il indique à Linux de n'exécuter la commande suivante que si la première réussit.ls ~: Liste le contenu de votre répertoire personnel (le symbole~représente votre dossier "home").
Saisissez cette commande dans votre terminal et appuyez sur Entrée. Vous devriez voir la date du jour suivie d'une liste de fichiers et de dossiers.
Si aucun fichier ne s'affiche après la date, pas de panique ! Cela signifie probablement que votre répertoire personnel est vide. Vous pouvez essayer ls /home/labex à la place pour vous assurer de voir un résultat.
Exécution conditionnelle de commandes
Dans cette étape, nous allons explorer comment utiliser les opérateurs conditionnels pour contrôler l'exécution des commandes en fonction du succès ou de l'échec des commandes précédentes.
Tout d'abord, essayons d'exécuter une commande conditionnelle avec un programme non installé :
which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"
Dans cette séquence de commandes :
which cowsayvérifie si le programmecowsayest installé.&&est un opérateur ET logique qui exécute la commande suivante uniquement si la précédente réussit.cowsay "Hello, LabEx"affiche une vache en art ASCII disant "Hello, LabEx".||est un opérateur OU logique qui exécute la commande suivante uniquement si la précédente échoue.echo "cowsay is not installed"affiche un message indiquant que cowsay n'est pas installé.
Vous devriez voir le message "cowsay is not installed" car le programme n'est pas encore présent sur le système.
Maintenant, installons cowsay :
sudo apt-get update && sudo apt-get install -y cowsay
Puis exécutez à nouveau la même commande :
which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"
Cette fois, vous devriez voir une vache en art ASCII vous saluer.
Cet exemple montre comment utiliser && et || pour créer des séquences conditionnelles. && signifie "exécuter si la commande précédente réussit", tandis que || signifie "exécuter si la commande précédente échoue".
Analysons ce qui s'est passé :
Avant l'installation :
which cowsays'est exécuté (mais n'a rien trouvé).- À cause du
&&, la tentative d'exécutercowsay "Hello, LabEx"a eu lieu mais a échoué car le programme était absent. - Comme
cowsaya échoué, la commande après le||(echo "cowsay is not installed") a été exécutée.
Après l'installation :
which cowsaya réussi, donc il a exécutécowsay "Hello, LabEx".- Il n'a pas eu besoin d'exécuter la commande echo après le
||.
Essayez de créer vos propres séquences conditionnelles en utilisant ces opérateurs !
Introduction aux Pipelines
Les pipelines sont une fonctionnalité puissante de Linux qui vous permet de connecter la sortie d'une commande à l'entrée d'une autre. Cela se fait à l'aide du symbole | (barre verticale ou "pipe").
Commençons par un exemple simple :
ls -l /etc | less
Voici le fonctionnement :
ls -l /etc: Liste le contenu du répertoire/etcau format long.|: Envoie la sortie de la commande précédente vers la commande suivante.less: Un programme qui vous permet de faire défiler un texte volumineux.
Lorsque vous lancez cela, vous verrez une liste de fichiers. Utilisez les flèches haut et bas pour naviguer, et appuyez sur 'q' pour quitter.
Essayons maintenant un pipeline plus complexe :
ls -l /etc | grep '^d' | wc -l
Cette commande compte le nombre de répertoires dans /etc. Voici comment elle fonctionne :
ls -l /etc: Liste le contenu de/etc.grep '^d': Filtre les lignes commençant par 'd' (ce qui indique un répertoire).wc -l: Compte le nombre de lignes (ce qui correspond ici au nombre de répertoires).
Un nombre s'affichera, représentant le total des répertoires trouvés dans /etc.
Utiliser cut pour extraire des champs
La commande cut est utile pour extraire des parties spécifiques de chaque ligne d'un fichier. Nous allons l'utiliser pour extraire les noms d'utilisateur et les répertoires personnels du fichier /etc/passwd, qui contient les informations sur les comptes utilisateurs du système.
Exécutez cette commande :
cut -d: -f1,6 /etc/passwd | head -n 5
Analysons les options :
cut: La commande pour extraire des portions de lignes.-d:: Utilise le caractère:comme délimiteur (le séparateur de champs).-f1,6: Extrait les 1er et 6ème champs (nom d'utilisateur et répertoire personnel).|: Transmet le résultat à la commande suivante.head -n 5: Affiche seulement les 5 premières lignes du résultat.
Vous devriez obtenir un résultat similaire à ceci :
root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
Chaque ligne affiche un utilisateur et son dossier personnel, séparés par deux-points.
Combiner grep avec les pipelines et les séquences
Dans cette étape, nous allons voir comment utiliser grep en combinaison avec des pipelines et des séquences de commandes pour un traitement de texte plus avancé.
Commençons par rechercher toutes les lignes contenant "PATH" dans votre fichier .zshrc et comptons-les :
grep "PATH" ~/.zshrc | wc -l
Ce pipeline utilise d'abord grep pour trouver les lignes contenant "PATH", puis envoie le résultat à wc -l pour les compter.
Maintenant, utilisons une séquence de commandes pour chercher "PATH", puis "HOME" si "PATH" est trouvé :
grep "PATH" ~/.zshrc && grep "HOME" ~/.zshrc
Cela n'affichera les lignes contenant "HOME" que si des lignes contenant "PATH" ont été trouvées au préalable.
Tentons un exemple plus élaboré. Nous allons chercher les lignes contenant "bin" dans /etc/passwd, les trier, et afficher les 5 premières :
grep "bin" /etc/passwd | sort | head -n 5
Ce pipeline effectue trois actions :
- Trouve les lignes contenant "bin".
- Trie ces lignes par ordre alphabétique.
- Affiche uniquement les 5 premiers résultats.
Enfin, combinons tout ce que nous avons appris. Nous allons chercher les lignes contenant "sh" dans /etc/passwd, les compter, et selon le résultat, soit afficher les lignes, soit afficher un message d'avertissement :
grep "sh" /etc/passwd | wc -l | {
read count
[ $count -gt 5 ] && grep "sh" /etc/passwd || echo "Found $count lines, not enough to display."
}
Cette commande complexe procède ainsi :
- Recherche les lignes contenant "sh".
- Compte ces lignes.
- Si le nombre est supérieur à 5, elle affiche les lignes correspondantes.
- Si le nombre est inférieur ou égal à 5, elle affiche un message indiquant le compte.
Note : Lors de la saisie de commandes multi-lignes dans le terminal, vous devrez peut-être appuyer sur Alt+Enter après chaque ligne (sauf la dernière) pour créer un saut de ligne, ou simplement saisir toute la commande sur une seule ligne.
Essayez ces commandes et expérimentez vos propres combinaisons !
Compter avec wc
La commande wc (word count) est très pratique pour compter les lignes, les mots et les caractères dans un texte.
Commençons par compter le nombre de lignes dans /etc/passwd :
wc -l /etc/passwd
L'option -l indique à wc de compter les lignes. Vous verrez un nombre suivi du nom du fichier.
Maintenant, comptons le nombre de mots dans les 10 premières lignes de /etc/passwd :
head -n 10 /etc/passwd | wc -w
Ce pipeline fait deux choses :
head -n 10 /etc/passwd: Récupère les 10 premières lignes du fichier.wc -w: Compte les mots dans ces lignes.
Vous devriez voir s'afficher le nombre total de mots.
Trier avec sort
La commande sort est utilisée pour trier des lignes de texte. Utilisons-la pour trier le fichier /etc/passwd en fonction du troisième champ (l'identifiant utilisateur ou UID) :
sort -t: -k3 -n /etc/passwd | head -n 5
Voici le rôle de chaque option :
-t:: Utilise:comme séparateur de champs.-k3: Trie en se basant sur le troisième champ.-n: Effectue un tri numérique (au lieu d'alphabétique).| head -n 5: Affiche seulement les 5 premières lignes du résultat.
Vous verrez les cinq premières lignes de /etc/passwd, classées par UID.
Supprimer les doublons avec uniq
La commande uniq permet de supprimer ou d'identifier les lignes en double dans un texte préalablement trié. Utilisons-la pour trouver les types de shells uniques utilisés dans /etc/passwd :
cut -d: -f7 /etc/passwd | sort | uniq
Ce pipeline exécute trois étapes :
cut -d: -f7 /etc/passwd: Extrait le 7ème champ (le shell) de chaque ligne.sort: Trie les lignes par ordre alphabétique (indispensable pouruniq).uniq: Supprime les lignes identiques consécutives.
Vous obtiendrez la liste des différents shells configurés sur le système.
Maintenant, comptons combien d'utilisateurs utilisent chaque shell :
cut -d: -f7 /etc/passwd | sort | uniq -c
L'option -c ajoute en préfixe le nombre d'occurrences. Chaque chemin de shell sera précédé du nombre d'utilisateurs qui lui sont associés.
Résumé
Félicitations ! Vous avez terminé cet atelier sur l'exécution de commandes et le traitement de texte sous Linux. Récapitulons ce que vous avez appris :
- Vous pouvez exécuter des commandes de manière séquentielle avec
&&et de manière conditionnelle avec||. - Les pipelines (
|) permettent de connecter plusieurs commandes en transmettant la sortie de l'une comme entrée de la suivante. cutest idéal pour extraire des parties spécifiques de lignes dans un fichier.grepvous aide à rechercher des motifs spécifiques dans du texte.wcpermet de compter les lignes, les mots et les caractères.sortorganise les lignes de texte selon un ordre précis.uniqélimine les doublons d'un texte trié et peut compter les occurrences.
Ces outils sont fondamentaux pour la manipulation de données sous Linux. Au fil de votre progression, vous découvrirez d'innombrables façons de combiner ces commandes pour résoudre des tâches complexes. N'ayez pas peur d'expérimenter de nouvelles combinaisons !
N'oubliez pas que c'est en forgeant qu'on devient forgeron. Essayez d'utiliser ces commandes avec différents fichiers et options pour approfondir votre compréhension. Si vous oubliez le fonctionnement d'une commande, vous pouvez toujours consulter sa documentation avec la commande man (par exemple, man grep).
Bonne continuation dans votre apprentissage de Linux !



