Recherche de site Web

Apprenez les bases du fonctionnement de la redirection d'E/S Linux (entrée/sortie)


L'un des sujets les plus importants et les plus intéressants sous l'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 de commandes depuis et/ou vers des fichiers, ou de joindre plusieurs commandes ensemble à l'aide de canaux pour former ce que l'on appelle un « pipeline de commandes ». .

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

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

Sous Linux et d'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 descripteur de fichier :

  1. stdin ou 0 – il est connecté au clavier, la plupart des programmes lisent les entrées 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 d'état/d'erreur à ce fichier qui est également joint à 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 sous Linux

Vous pouvez rediriger la sortie standard comme dans l'exemple ci-dessous. Ici, nous souhaitons stocker la sortie de la commande top pour une inspection ultérieure :

top -bn 5 >top.log

Où les drapeaux :

  1. -b – permet à top de s'exécuter 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 la fin de la commande.

Vous pouvez afficher le contenu du fichier top.log à l'aide de la commande cat comme suit :

cat top.log

Pour ajouter le résultat d'une commande, utilisez l'opérateur «>>».

Par exemple, pour ajouter le résultat de la commande top ci-dessus dans le fichier top.log, notamment dans un script (ou sur la ligne de commande), saisissez 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 sous Linux

Pour rediriger l'erreur standard d'une commande, vous devez spécifier explicitement le numéro du 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 sera 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 

Afin d'ajouter l'erreur standard, utilisez la commande ci-dessous :

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

Comment rediriger la sortie/erreur standard vers un seul fichier

Il est également possible de capturer toutes les sorties 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 de descripteur de fichier :

1. La première est une méthode relativement ancienne qui 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 au 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 implique que l'erreur standard est également envoyée au même fichier que la sortie standard.

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

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, sinon la totalité, des commandes reçoivent leur entrée à partir de l'entrée standard et, par défaut, l'entrée standard est attaché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 

Comment rediriger les entrées/sorties standard vers un fichier

Vous pouvez effectuer simultanément une redirection d'entrée standard et de sortie standard à l'aide de la commande de tri comme ci-dessous :

sort <domains.list >sort.output

Comment utiliser la redirection d'E/S à l'aide de tuyaux

Pour rediriger la sortie d'une commande vers l'entrée d'une autre, vous pouvez utiliser des tubes, c'est un moyen puissant de créer des lignes de commande utiles pour des opérations complexes.

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

ls -lt | head -n 5 

Ici, les options :

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

Commandes importantes pour la création de pipelines

Ici, nous passerons brièvement en revue deux commandes importantes pour la création de pipelines de commandes :

xargs qui est utilisé pour créer et exécuter des lignes de commande à partir d'une entrée standard. Vous trouverez ci-dessous un exemple de 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

Et les options :

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

Pour plus d'options d'utilisation et d'informations, lisez la page de manuel xargs :

man xargs 

Une commande tee lit à partir de l'entrée standard et écrit dans la sortie et les fichiers standard. Nous pouvons démontrer le fonctionnement de tee comme suit :

echo "Testing how tee command works" | tee file1 

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

Pour en savoir plus sur les filtres et les canaux Linux, lisez cet article Rechercher les 10 principales adresses IP accédant au serveur Apache, montre un exemple utile d'utilisation de filtres et de canaux.

Dans cet article, nous avons expliqué les principes fondamentaux de la redirection d'E/S sous Linux. N'oubliez pas de partager vos réflexions via la section commentaires ci-dessous.