Contrôle de séquence et pipelines

LinuxLinuxBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Bienvenue dans ce laboratoire pratique sur l'exécution de commandes Linux et le traitement de texte! Si vous êtes nouveau dans le monde de Linux, ne vous inquiétez pas - nous vous guiderons à chaque étape. Dans ce laboratoire, nous explorerons comment exécuter efficacement plusieurs commandes et utiliser des outils puissants de traitement de texte. À la fin de ce laboratoire, vous serez capable de combiner des commandes, de rechercher dans du texte et de manipuler des données comme un pro!

Exécution séquentielle de commandes

Sous Linux, vous pouvez exécuter plusieurs commandes les unes après les autres sur une seule ligne. Cela 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 ce que fait cette commande :

  • date : Cette commande affiche la date et l'heure actuelles.
  • && : Ce symbole signifie "et". Il indique à Linux d'exécuter la commande suivante uniquement si la première réussit.
  • ls ~ : Cette commande liste le contenu de votre répertoire personnel (le symbole ~ représente votre répertoire personnel).

Tapez cette commande dans votre terminal et appuyez sur Entrée. Vous devriez voir la date d'aujourd'hui suivie d'une liste des fichiers et dossiers de votre répertoire personnel.

Si vous ne voyez aucun fichier listé après la date, ne vous inquiétez pas! Cela peut signifier que votre répertoire personnel est vide. Vous pouvez essayer ls /home/labex à la place pour vous assurer de voir une sortie.

Exécution conditionnelle de commandes

Dans cette étape, nous allons explorer comment utiliser des opérateurs conditionnels pour contrôler l'exécution de 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 cowsay vérifie si le programme cowsay est installé.
  • && est un opérateur logique ET qui exécute la commande suivante seulement si la commande précédente réussit.
  • cowsay "Hello, LabEx" affiche une vache en art ASCII disant "Hello, LabEx".
  • || est un opérateur logique OU qui exécute la commande suivante seulement si la commande précédente échoue.
  • echo "cowsay is not installed" affiche un message indiquant que cowsay n'est pas installé.

Vous devriez voir le message de sortie "cowsay is not installed" car le programme cowsay n'est pas encore installé sur le système.

Maintenant, installons cowsay :

sudo apt-get update && sudo apt-get install -y cowsay

et exécutons à nouveau la même commande :

which cowsay && cowsay "Hello, LabEx" || echo "cowsay is not installed"

Cette fois-ci, vous devriez voir une vache en art ASCII disant "Hello, LabEx".

Cet exemple montre comment utiliser && et || pour créer des séquences de commandes 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é :

  1. Avant l'installation :

    • which cowsay s'est exécuté avec succès (mais n'a trouvé aucune correspondance)
    • En raison de &&, cowsay "Hello, LabEx" a été tenté mais a échoué car cowsay n'était pas installé
    • Comme cowsay a échoué, la commande après || (echo "cowsay is not installed") a été exécutée
  2. Après l'installation :

    • which cowsay a réussi, donc il a exécuté cowsay "Hello, LabEx"
    • Il n'a pas eu besoin d'exécuter la commande echo après ||

Essayez de créer vos propres séquences de commandes 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 en utilisant le symbole | (pipe).

Commençons par un exemple simple :

ls -l /etc | less

Voici ce que cette commande fait :

  • ls -l /etc : Liste le contenu du répertoire /etc en format détaillé.
  • | : Envoie la sortie de la commande précédente à la commande suivante.
  • less : Un programme qui vous permet de parcourir du texte.

Lorsque vous exécutez cette commande, vous verrez une liste de fichiers et de répertoires. Vous pouvez utiliser les flèches haut et bas pour faire défiler le texte, et appuyer sur 'q' pour quitter.

Maintenant, essayons un pipeline plus complexe :

ls -l /etc | grep '^d' | wc -l

Cette commande compte le nombre de répertoires dans /etc. Voici comment cela fonctionne :

  1. ls -l /etc : Liste le contenu de /etc en format détaillé.
  2. grep '^d' : Filtre les lignes commençant par 'd' (qui indiquent des répertoires).
  3. wc -l : Compte le nombre de lignes (qui correspond maintenant au nombre de répertoires).

Vous devriez voir un nombre affiché, qui est le nombre de répertoires dans /etc.

Utilisation de 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 à partir du fichier /etc/passwd, qui contient des informations sur les comptes utilisateur du système.

Exécutez cette commande :

cut -d: -f1,6 /etc/passwd | head -n 5

Analysons cette commande :

  • cut : La commande pour extraire des parties de lignes.
  • -d: : Utilise : comme délimiteur (le caractère qui sépare les champs).
  • -f1,6 : Extrait le 1er et le 6ème champ (nom d'utilisateur et répertoire personnel).
  • | : Envoie la sortie à la commande suivante.
  • head -n 5 : Affiche seulement les 5 premières lignes de la sortie.

Vous devriez voir une sortie similaire à celle-ci :

root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin

Chaque ligne affiche un nom d'utilisateur et son répertoire personnel, séparés par deux-points.

Combinaison de grep avec des pipelines et des séquences de commandes

Dans cette étape, nous allons explorer 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 en compter le nombre :

grep "PATH" ~/.zshrc | wc -l

Ce pipeline utilise d'abord grep pour trouver les lignes contenant "PATH", puis envoie la sortie à wc -l pour compter les lignes.

Maintenant, utilisons une séquence de commandes pour rechercher "PATH" et ensuite "HOME" si "PATH" est trouvé :

grep "PATH" ~/.zshrc && grep "HOME" ~/.zshrc

Cela affichera les lignes contenant "HOME" seulement si des lignes contenant "PATH" ont été trouvées.

Essayons un exemple plus complexe. Nous allons rechercher les lignes se terminant par "bin" dans /etc/passwd, les trier et afficher les 5 premières :

grep "bin" /etc/passwd | sort | head -n 5

Ce pipeline effectue trois opérations :

  1. Trouve les lignes contenant "bin"
  2. Trie ces lignes par ordre alphabétique
  3. Affiche seulement les 5 premières lignes du résultat

Enfin, combinons tout ce que nous avons appris. Nous allons rechercher les lignes contenant "sh" dans /etc/passwd, en compter le nombre, et en fonction du nombre, nous afficherons soit les lignes, soit un message :

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 effectue les opérations suivantes :

  1. Recherche les lignes contenant "sh"
  2. Compte ces lignes
  3. Si le nombre est supérieur à 5, elle affiche les lignes
  4. Si le nombre est inférieur ou égal à 5, elle affiche un message avec le nombre

Essayez d'exécuter ces commandes et expérimentez avec vos propres combinaisons!

Compter avec wc

La commande wc (compte de mots) est utile pour compter le nombre de lignes, de mots et de caractères dans un texte.

Commençons par compter le nombre de lignes dans le fichier /etc/passwd :

wc -l /etc/passwd

L'option -l indique à wc de compter le nombre de lignes. Vous devriez voir un nombre suivi du nom du fichier.

Maintenant, comptons le nombre de mots dans les 10 premières lignes du fichier /etc/passwd :

head -n 10 /etc/passwd | wc -w

Ce pipeline effectue deux opérations :

  1. head -n 10 /etc/passwd : Récupère les 10 premières lignes du fichier.
  2. wc -w : Compte le nombre de mots dans ces lignes.

Vous devriez voir un nombre représentant le nombre de mots.

Tri avec sort

La commande sort est utilisée pour trier les lignes de texte. Utilisons-la pour trier le fichier /etc/passwd selon le troisième champ (identifiant utilisateur) :

sort -t: -k3 -n /etc/passwd | head -n 5

Voici ce que chaque partie fait :

  • -t: : Utilise : comme séparateur de champ.
  • -k3 : Trie en fonction du troisième champ.
  • -n : Trie numériquement (au lieu d'alphabétiquement).
  • | head -n 5 : Affiche seulement les 5 premières lignes de la sortie.

Vous devriez voir les cinq premières lignes du fichier /etc/passwd, triées par identifiant utilisateur (le troisième champ).

Suppression des doublons avec uniq

La commande uniq est utilisée pour supprimer ou identifier les lignes en double dans un texte trié. Utilisons-la pour trouver les types de shells uniques dans le fichier /etc/passwd :

cut -d: -f7 /etc/passwd | sort | uniq

Ce pipeline effectue trois opérations :

  1. cut -d: -f7 /etc/passwd : Extrait le 7ème champ (le shell) de chaque ligne.
  2. sort : Trie les lignes par ordre alphabétique.
  3. uniq : Supprime les lignes en double.

Vous devriez voir une liste des chemins de shells uniques utilisés sur le système.

Maintenant, comptons combien d'utilisateurs utilisent chaque shell :

cut -d: -f7 /etc/passwd | sort | uniq -c

L'option -c préfixe les lignes par le nombre d'occurrences. Vous devriez voir chaque chemin de shell précédé d'un nombre indiquant combien d'utilisateurs utilisent ce shell.

Résumé

Félicitations! Vous avez terminé ce laboratoire sur l'exécution de commandes Linux et le traitement de texte. Récapitulons ce que vous avez appris :

  1. Vous pouvez exécuter des commandes de manière séquentielle en utilisant && et de manière conditionnelle en utilisant ||.
  2. Les pipelines (|) vous permettent de connecter plusieurs commandes, en passant la sortie d'une commande en tant qu'entrée pour la suivante.
  3. cut est très utile pour extraire des parties spécifiques des lignes d'un fichier.
  4. grep vous aide à rechercher des motifs spécifiques dans un texte.
  5. wc peut compter le nombre de lignes, de mots et de caractères dans un texte.
  6. sort permet d'organiser les lignes de texte dans un ordre spécifique.
  7. uniq supprime les doublons d'un texte trié et peut compter le nombre d'occurrences.

Ces outils sont fondamentaux pour le traitement de texte sous Linux. Au fur et à mesure de votre apprentissage du Linux, vous trouverez de nombreuses façons de combiner ces commandes pour résoudre des tâches complexes de traitement de texte. N'ayez pas peur d'expérimenter et d'essayer de nouvelles combinaisons!

N'oubliez pas que la pratique fait parfait. Essayez d'utiliser ces commandes avec différents fichiers et options pour approfondir votre compréhension. Si vous oubliez jamais comment fonctionne une commande, vous pouvez toujours utiliser la commande man (par exemple, man grep) pour consulter sa page de manuel.

Continuez à explorer et bonne apprentissage du Linux!