Transfert de données Linux

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

Le piping (acheminement) de données sous Linux est une technique puissante qui vous permet de passer la sortie d'une commande en tant qu'entrée à une autre commande. Ce concept fondamental vous permet de créer des chaînes de commandes complexes pour traiter et transformer les données efficacement. Dans ce labo (atelier), vous apprendrez à utiliser l'opérateur de pipe (|) pour combiner plusieurs commandes et créer des flux de traitement de données. Vous explorerez également des utilitaires essentiels de traitement de texte tels que grep, sort, tr et uniq qui sont fréquemment utilisés dans les pipelines de commandes.

À la fin de ce labo, vous comprendrez comment filtrer, transformer et organiser les données à l'aide d'outils en ligne de commande Linux et du concept de pipeline. Ces compétences sont essentielles pour le traitement de texte, l'analyse de journaux (logs) et les tâches de manipulation de données dans les environnements Linux.

Comprendre la commande grep pour le filtrage de texte

La commande grep est un outil puissant de filtrage de texte sous Linux qui recherche des motifs dans des fichiers ou des flux d'entrée. Dans cette étape, vous apprendrez à utiliser grep pour trouver des motifs de texte spécifiques dans un fichier.

Tout d'abord, créons un fichier texte avec des données d'exemple que nous pourrons utiliser pour nos exercices. Nous allons créer un fichier nommé data.txt dans le répertoire ~/project.

cd ~/project
echo -e "apple\nbanana\norange\ngrape\nkiwi\npineapple" > data.txt

La commande ci-dessus crée un fichier avec différents noms de fruits, chacun sur une ligne distincte. Maintenant, utilisons grep pour filtrer ce fichier et trouver les lignes contenant la chaîne de caractères "apple" :

grep "apple" data.txt

Lorsque vous exécutez cette commande, vous devriez voir la sortie suivante :

apple
pineapple

La commande grep a trouvé deux lignes contenant la chaîne de caractères "apple" : la ligne avec simplement "apple" et la ligne avec "pineapple".

Essayons un autre exemple. Créez un fichier avec quelques termes liés au système :

echo -e "file system\nnetwork configuration\nsystem update\nuser management\nsystem security" > systems.txt

Maintenant, utilisez grep pour trouver toutes les lignes contenant le mot "system" :

grep "system" systems.txt

La sortie devrait afficher :

file system
system update
system security

La commande grep est sensible à la casse (majuscules/minuscules) par défaut. Si vous souhaitez effectuer une recherche insensible à la casse, vous pouvez utiliser l'option -i :

grep -i "SYSTEM" systems.txt

Cela produira la même sortie que précédemment, même si nous avons recherché "SYSTEM" en majuscules tandis que le fichier contient "system" en minuscules.

Maintenant que vous savez comment utiliser grep pour filtrer du texte, vous pouvez passer à l'étape suivante où vous apprendrez à combiner des commandes à l'aide de pipes.

Utilisation de l'opérateur de pipe pour enchaîner les commandes

Dans cette étape, vous apprendrez à utiliser l'opérateur de pipe (|) pour connecter plusieurs commandes entre elles. Le pipe transmet la sortie d'une commande en tant qu'entrée à une autre commande, vous permettant de créer des chaînes de commandes puissantes.

L'opérateur de pipe est représenté par le caractère barre verticale (|). Voyons comment cela fonctionne avec un exemple simple :

cd ~/project
ls -l | grep "txt"

Dans cet exemple, la commande ls -l liste les fichiers dans le répertoire actuel, et sa sortie est acheminée (pipée) vers la commande grep "txt", qui filtre et affiche seulement les lignes contenant "txt". Le résultat est une liste des fichiers texte dans votre répertoire actuel.

Maintenant, créons un nouveau fichier avec plus de données pour travailler :

echo -e "apple juice\nORANGE JUICE\nBanana Smoothie\napple pie\nCherry Pie\nSTRAWBERRY JAM" > foods.txt

Utilisons l'opérateur de pipe pour combiner grep avec d'autres commandes. Tout d'abord, trouvons toutes les lignes contenant "apple" dans le fichier foods.txt :

cat foods.txt | grep "apple"

La sortie devrait être :

apple juice
apple pie

La commande cat lit le fichier et envoie son contenu à grep via le pipe. La commande grep filtre ensuite le contenu et affiche seulement les lignes contenant "apple".

Maintenant, combinons plus de commandes pour transformer les données. La commande tr est utilisée pour traduire ou supprimer des caractères. Nous pouvons l'utiliser pour convertir les lettres minuscules en majuscules :

cat foods.txt | grep "apple" | tr '[:lower:]' '[:upper:]'

La sortie devrait maintenant être :

APPLE JUICE
APPLE PIE

Dans ce pipeline de commandes :

  1. cat foods.txt lit le contenu du fichier foods.txt
  2. Le pipe (|) envoie ce contenu à grep "apple"
  3. grep "apple" filtre et conserve seulement les lignes contenant "apple"
  4. Le pipe (|) envoie ces lignes filtrées à tr '[:lower:]' '[:upper:]'
  5. tr '[:lower:]' '[:upper:]' convertit toutes les lettres minuscules en majuscules

Cela démontre comment vous pouvez enchaîner plusieurs commandes ensemble à l'aide de pipes pour créer un flux de traitement de données. Chaque commande dans la chaîne effectue une opération spécifique sur les données, et le résultat final est la combinaison de toutes ces opérations.

Essayons un autre exemple. Nous allons créer un fichier avec des données numériques :

echo -e "10\n5\n8\n3\n7\n1\n9" > numbers.txt

Maintenant, trions ces nombres par ordre croissant :

cat numbers.txt | sort -n

La sortie devrait être :

1
3
5
7
8
9
10

La commande sort avec l'option -n trie les nombres numériquement. Sans les pipes, vous devriez écrire la sortie triée dans un nouveau fichier puis afficher ce fichier, mais avec les pipes, vous pouvez voir les résultats immédiatement.

Pipeline avancé : Combinaison de sort, uniq et autres commandes

Dans cette étape, vous apprendrez à créer des pipelines plus complexes en combinant plusieurs commandes telles que sort, uniq, wc et d'autres pour traiter et analyser des données.

La commande sort est utilisée pour trier les lignes de fichiers texte ou de flux d'entrée. La commande uniq filtre les lignes répétées dans un fichier ou un flux d'entrée, mais elle fonctionne correctement seulement sur une entrée triée. En combinant ces commandes avec des pipes, vous pouvez traiter et organiser efficacement les données.

Créons un fichier avec des entrées en double :

cd ~/project
echo -e "apple\nbanana\napple\norange\nbanana\nkiwi\napple" > fruits_with_duplicates.txt

Pour afficher les noms de fruits uniques triés par ordre alphabétique, vous pouvez utiliser :

cat fruits_with_duplicates.txt | sort | uniq

La sortie devrait être :

apple
banana
kiwi
orange

Dans ce pipeline :

  1. cat fruits_with_duplicates.txt lit le contenu du fichier
  2. sort range les lignes par ordre alphabétique
  3. uniq supprime les lignes en double

Si vous souhaitez compter combien de fois chaque fruit apparaît dans la liste, vous pouvez utiliser l'option -c avec uniq :

cat fruits_with_duplicates.txt | sort | uniq -c

La sortie affichera le nombre d'occurrences de chaque fruit :

      3 apple
      2 banana
      1 kiwi
      1 orange

Maintenant, créons un fichier avec des entrées de journal pour démontrer un cas d'utilisation plus pratique :

echo -e "INFO: User logged in\nERROR: Connection failed\nINFO: File download started\nWARNING: Low disk space\nERROR: Database connection lost\nINFO: Operation completed\nERROR: Connection failed" > logs.txt

Pour savoir combien d'erreurs se sont produites dans les journaux, vous pouvez utiliser :

cat logs.txt | grep "ERROR" | wc -l

La sortie devrait être :

3

Dans ce pipeline :

  1. cat logs.txt lit le fichier de journal
  2. grep "ERROR" filtre seulement les messages d'erreur
  3. wc -l compte le nombre de lignes (c'est-à-dire le nombre de messages d'erreur)

Créons un pipeline plus complexe. Tout d'abord, créons un fichier avec des données structurées :

echo -e "John,Sales,5000\nMary,IT,6000\nBob,HR,4500\nAlice,IT,5500\nDavid,Sales,5200\nEve,HR,4800" > employees.txt

Maintenant, trouvons les départements et comptons combien d'employés y sont affectés :

cat employees.txt | cut -d',' -f2 | sort | uniq -c

La sortie devrait être :

      2 HR
      2 IT
      2 Sales

Dans ce pipeline :

  1. cat employees.txt lit les données des employés
  2. cut -d',' -f2 extrait le deuxième champ (département) en utilisant la virgule comme délimiteur
  3. sort trie les départements par ordre alphabétique
  4. uniq -c compte le nombre d'occurrences de chaque département

Ces exemples démontrent comment vous pouvez combiner plusieurs commandes à l'aide de pipes pour créer des flux de traitement de données puissants. Le concept de pipeline sous Linux vous permet de décomposer des tâches de traitement de données complexes en étapes plus simples, rendant vos opérations en ligne de commande plus efficaces et flexibles.

Applications pratiques des pipelines Linux

Dans cette étape finale, vous allez explorer quelques applications pratiques des pipelines Linux en analysant des fichiers de journal, en traitant des fichiers de données et en résolvant des tâches courantes d'administration système.

Analyse de fichiers de journal

Les administrateurs système ont souvent besoin d'extraire des informations utiles à partir de fichiers de journal. Créons un fichier de journal d'exemple et utilisons des pipelines pour l'analyser :

cd ~/project
cat > server_log.txt << EOF
[2023-05-10 08:45:22] INFO: Server started
[2023-05-10 09:12:35] ERROR: Database connection failed
[2023-05-10 09:14:01] INFO: Retrying database connection
[2023-05-10 09:14:10] INFO: Database connection established
[2023-05-10 09:30:45] WARNING: High CPU usage detected
[2023-05-10 10:15:30] ERROR: API request timeout
[2023-05-10 10:20:15] INFO: System update available
[2023-05-10 11:05:22] WARNING: Low disk space
[2023-05-10 11:45:18] ERROR: Memory allocation failed
EOF

Maintenant, effectuons quelques opérations d'analyse de journal utiles :

  1. Compter le nombre d'occurrences de chaque niveau de journal (INFO, WARNING, ERROR) :
cat server_log.txt | grep -o "INFO\|WARNING\|ERROR" | sort | uniq -c

Sortie :

      4 INFO
      3 ERROR
      2 WARNING
  1. Extraire toutes les horodatages et les niveaux de journal :
cat server_log.txt | grep -o "\[[0-9-]* [0-9:]*\] [A-Z]*" | head -5

Sortie :

[2023-05-10 08:45:22] INFO
[2023-05-10 09:12:35] ERROR
[2023-05-10 09:14:01] INFO
[2023-05-10 09:14:10] INFO
[2023-05-10 09:30:45] WARNING

Traitement de données CSV

Le traitement de fichiers CSV (Comma-Separated Values, valeurs séparées par des virgules) est une autre tâche courante. Créons un fichier CSV d'exemple avec des données de ventes :

cat > sales.csv << EOF
Date,Product,Units,Price
2023-01-15,Laptop,10,1200
2023-01-16,Mouse,30,25
2023-01-16,Keyboard,20,45
2023-01-17,Monitor,15,200
2023-01-18,Laptop,5,1200
2023-01-18,Printer,8,300
2023-01-19,Mouse,25,25
EOF

Maintenant, utilisons des pipelines pour analyser ces données de ventes :

  1. Extraire et compter les produits uniques vendus :
cat sales.csv | tail -n +2 | cut -d',' -f2 | sort | uniq -c

La commande tail -n +2 saute la ligne d'en-tête du fichier CSV.

Sortie :

      2 Keyboard
      2 Laptop
      2 Monitor
      2 Mouse
      1 Printer
  1. Calculer le nombre total d'unités vendues :
cat sales.csv | tail -n +2 | cut -d',' -f3 | paste -sd+ | bc

Sortie :

113

Ce pipeline extrait la troisième colonne (Unités), combine toutes les valeurs avec des signes "+" et utilise ensuite la calculatrice bc pour calculer la somme.

Tâches de surveillance système

Les pipelines Linux sont également utiles pour les tâches de surveillance et d'administration système :

  1. Lister les 5 processus consommant le plus de mémoire :
ps aux | sort -k 4 -r | head -6

Cette commande liste les processus triés par la 4ème colonne (utilisation de la mémoire) dans l'ordre inverse et affiche les 6 premières lignes (y compris l'en-tête).

  1. Trouver tous les fichiers de plus de 1 Mo dans le répertoire actuel :
find . -type f -size +1M -exec ls -lh {} \; | sort -k 5 -h

Cette commande trouve les fichiers de plus de 1 Mo, exécute ls -lh sur chacun d'eux et trie la sortie par taille de fichier.

Ces exemples démontrent comment les pipelines Linux peuvent être utilisés pour résoudre efficacement des problèmes réels. En combinant des commandes simples, vous pouvez créer des flux de traitement de données puissants sans écrire de scripts ou de programmes complexes.

Résumé

Dans ce laboratoire, vous avez appris le principe de la transmission de données sous Linux, une technique puissante pour la chaîne de commandes et le traitement de données. Les concepts clés abordés dans ce laboratoire sont les suivants :

  1. Filtrage de texte de base avec grep : Vous avez appris à utiliser la commande grep pour rechercher des motifs spécifiques dans des fichiers texte et filtrer les données en fonction de ces motifs.

  2. Chaînage de commandes avec des pipes : Vous avez exploré comment utiliser l'opérateur de pipe (|) pour connecter plusieurs commandes, en passant la sortie d'une commande en tant qu'entrée pour une autre.

  3. Commandes de traitement de texte : Vous avez utilisé diverses utilitaires de traitement de texte, notamment :

    • grep pour filtrer le texte
    • tr pour la traduction de caractères
    • sort pour trier les lignes
    • uniq pour supprimer les doublons
    • cut pour extraire des champs spécifiques à partir de données structurées
    • wc pour compter les lignes, les mots ou les caractères
  4. Applications pratiques : Vous avez appliqué ces techniques de pipeline pour résoudre des problèmes pratiques tels que l'analyse de journaux, le traitement de données CSV et les tâches de surveillance système.

Ces compétences en matière de pipelines Linux sont essentielles pour les administrateurs système, les analystes de données et les développeurs travaillant dans des environnements Linux. Elles vous permettent d'effectuer des tâches de manipulation de données complexes directement depuis la ligne de commande sans écrire de programmes complets. En combinant des commandes simples via des pipes, vous pouvez créer des flux de traitement de données puissants, à la fois efficaces et flexibles.

Au fur et à mesure de votre progression dans le monde Linux, vous constaterez que maîtriser l'art des pipelines de commandes améliorera considérablement votre productivité et vos capacités de résolution de problèmes dans l'environnement de ligne de commande.