Apprenez les bases du fonctionnement de la redirection d’E/S (Entrée/Sortie) Linux

L’un des sujets les plus importants et intéressants en administration Linux est la redirection d’E/S. Cette fonctionnalité de la ligne de commande vous permet de rediriger l’entrée et/ou la sortie des commandes vers et/ou depuis des fichiers, ou de joindre plusieurs commandes ensemble à l’aide de tubes pour former ce qu’on appelle un «pipeline de commandes».

Toutes les commandes que nous exécutons produisent fondamentalement deux types de sortie :

  1. le résultat de la commande – les données que le programme est conçu pour produire, et
  2. les messages de statut et d’erreur du programme qui informent un utilisateur des détails de l’exécution du programme.

Dans Linux et les autres systèmes de type Unix, il existe trois fichiers par défaut nommés ci-dessous qui sont également identifiés par le shell à l’aide de numéros de descripteurs de fichier :

  1. stdin ou 0 – il est connecté au clavier, la plupart des programmes lisent l’entrée à partir de ce fichier.
  2. stdout ou 1 – il est attaché à l’écran, et tous les programmes envoient leurs résultats à ce fichier et
  3. stderr ou 2 – les programmes envoient des messages de statut/erreur à ce fichier qui est également attaché à l’écran.

Par conséquent, la redirection d’E/S vous permet de modifier la source d’entrée d’une commande ainsi que l’endroit où sa sortie et ses messages d’erreur sont envoyés. Et cela est rendu possible par les opérateurs de redirection “<” et “>”.

Comment rediriger la sortie standard vers un fichier dans Linux

Vous pouvez rediriger la sortie standard comme dans l’exemple ci-dessous, ici, nous voulons stocker la sortie de la commande top pour une inspection ultérieure:

$ top -bn 5 >top.log

Où les indicateurs:

  1. -b – permet à top de fonctionner en mode batch, afin que vous puissiez rediriger sa sortie vers un fichier ou une autre commande.
  2. -n – spécifie le nombre d’itérations avant que la commande se termine.

Vous pouvez afficher le contenu du fichier top.log en utilisant la commande cat comme suit:

$ cat top.log

Pour ajouter la sortie d’une commande, utilisez l’opérateur “>>”.

Par exemple, pour ajouter la sortie de la commande top ci-dessus dans le fichier top.log notamment dans un script (ou sur la ligne de commande), entrez la ligne ci-dessous:

$ top -bn 5 >>top.log

Remarque: En utilisant le numéro de descripteur de fichier, la commande de redirection de sortie ci-dessus est la même que:

$ top -bn 5 1>top.log

Comment rediriger l’erreur standard vers un fichier dans Linux

Pour rediriger l’erreur standard d’une commande, vous devez spécifier explicitement le numéro de descripteur de fichier, 2, pour que le shell comprenne ce que vous essayez de faire.

Par exemple, la commande ls ci-dessous produira une erreur lorsqu’elle est exécutée par un utilisateur système normal sans privilèges root :

$ ls -l /root/

Vous pouvez rediriger l’erreur standard vers un fichier comme ci-dessous :

$ ls -l /root/ 2>ls-error.log
$ cat ls-error.log 
Redirect Standard Error to File

Pour ajouter l’erreur standard, utilisez la commande suivante :

$ ls -l /root/ 2>>ls-error.log

Comment rediriger la sortie/ l’erreur standard vers un seul fichier

Il est également possible de capturer toute la sortie d’une commande (à la fois la sortie standard et l’erreur standard) dans un seul fichier. Cela peut être fait de deux manières possibles en spécifiant les numéros des descripteurs de fichiers :

1. La première méthode est relativement ancienne et fonctionne comme suit :

$ ls -l /root/ >ls-error.log 2>&1

La commande ci-dessus signifie que le shell enverra d’abord la sortie de la commande ls vers le fichier ls-error.log (en utilisant >ls-error.log), puis écrira tous les messages d’erreur vers le descripteur de fichier 2 (sortie standard) qui a été redirigé vers le fichier ls-error.log (en utilisant 2>&1). Cela signifie que l’erreur standard est également envoyée vers le même fichier que la sortie standard.

2. La deuxième méthode, plus directe, est la suivante :

$ ls -l /root/ &>ls-error.log

Vous pouvez également ajouter la sortie standard et l’erreur standard à un seul fichier comme ceci :

$ ls -l /root/ &>>ls-error.log

Comment rediriger l’entrée standard vers un fichier

La plupart, voire toutes les commandes, obtiennent leur entrée à partir de l’entrée standard, et par défaut, l’entrée standard est liée au clavier.

Pour rediriger l’entrée standard à partir d’un fichier autre que le clavier, utilisez l’opérateur « < » comme ci-dessous:

$ cat <domains.list 
Redirect Standard Input to File

Comment rediriger l’entrée/sortie standard vers un fichier

Vous pouvez effectuer une redirection de l’entrée standard et de la sortie standard en même temps en utilisant la commande sort comme ci-dessous:

$ sort <domains.list >sort.output

Comment utiliser la redirection E/S en utilisant des tubes

Pour rediriger la sortie d’une commande en tant qu’entrée d’une autre, vous pouvez utiliser des tubes, ce qui est un moyen puissant de construire des lignes de commande utiles pour des opérations complexes.

Par exemple, la commande ci-dessous va afficher les cinq fichiers récemment modifiés.

$ ls -lt | head -n 5 

Ici, les options:

  1. -l – permet le format de liste longue
  2. -ttrier par heure de modification avec les fichiers les plus récents sont affichés en premier
  3. -n – spécifie le nombre de lignes d’en-tête à afficher

Commandes importantes pour la construction de pipelines

Ici, nous passerons brièvement en revue deux commandes importantes pour la construction de pipelines de commandes et ce sont:

xargs qui est utilisé pour construire et exécuter des lignes de commandes à partir de l’entrée standard. Voici un exemple d’un pipeline qui utilise xargs, cette commande est utilisée pour copier un fichier dans plusieurs répertoires sous Linux:

$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh
Copy Files to Multiple Directories

Et les options:

  1. -n 1 – indique à xargs d’utiliser au plus un argument par ligne de commande et de l’envoyer à la commande cp
  2. cp – copie le fichier
  3. -vaffiche la progression de la commande de copie.

Pour plus d’options d’utilisation et d’informations, consultez la page de manuel de xargs:

$ man xargs 

A tee command reads from standard input and writes to standard output and files. We can demonstrate how tee works as follows:

$ echo "Testing how tee command works" | tee file1 
tee Command Example

Les filtres de fichiers ou de textes sont couramment utilisés avec des tubes pour des opérations sur les fichiers Linux efficaces, afin de traiter les informations de manière puissante comme la restructuration de la sortie des commandes (cela peut être vital pour la génération de rapports Linux utiles), la modification de texte dans les fichiers plus plusieurs autres tâches d’administration système Linux.

Pour en savoir plus sur les filtres et les tubes Linux, lisez cet article Trouver les 10 principales adresses IP accédant au serveur Apache, montre un exemple utile de l’utilisation des filtres et des tubes.

Dans cet article, nous avons expliqué les fondamentaux de la redirection E/S sous Linux. N’oubliez pas de partager vos pensées via la section de feedback ci-dessous.

Source:
https://www.tecmint.com/linux-io-input-output-redirection-operators/