GNU/Linux >> Tutoriels Linux >  >> Linux

Apprenez les bases du fonctionnement de la redirection Linux I/O (Entrée/Sortie)

L'un des sujets les plus importants et les plus intéressants de 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 des 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 sortie :

  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 d'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 dans ce fichier et
  3. stderr ou 2 – les programmes envoient des messages d'état/d'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ù ses messages de sortie et d'erreur sont envoyés. Et cela est rendu possible par le “<” et “>” opérateurs de redirection.

Comment rediriger la sortie standard vers un fichier sous 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 drapeaux :

  1. -b – active top pour 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 de top.log fichier en utilisant la commande cat comme suit :

$ cat top.log

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

Par exemple, pour ajouter la sortie de la commande top ci-dessus dans le top.log fichier en particulier 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 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 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 

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

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

Comment rediriger la sortie standard/l'erreur 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 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 écrit tous les messages d'erreur dans 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 toutes les commandes obtiennent leur entrée à partir de l'entrée standard, et par défaut l'entrée standard est attachée au clavier.

Pour rediriger la saisie standard depuis un fichier autre que le clavier, utilisez le “<” opérateur comme ci-dessous :

$ cat <domains.list 

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

Vous pouvez effectuer une redirection d'entrée standard et de sortie standard en même temps à 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 canaux

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

Par exemple, la commande ci-dessous répertorie les cinq premiers 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 construction de pipelines

Ici, nous allons brièvement passer 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 de l'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 – 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. -v – affiche la progression de la commande de copie.

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

$ man xargs 

Un tee La commande lit à partir de l'entrée standard et écrit dans la sortie et les fichiers standard. Nous pouvons démontrer comment tee fonctionne 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 de fichiers Linux efficaces, 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 administration système Linux tâches.

Pour en savoir plus sur les filtres et canaux Linux, lisez cet article Trouver les 10 meilleures 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 de commentaires ci-dessous.


Linux
  1. Comment faire pour que Iconv remplace le fichier d'entrée par la sortie convertie ?

  2. Comment ajouter la sortie à un fichier ?

  3. Comment rediriger la sortie de system() vers un fichier ?

  4. Comment rediriger la sortie de la commande time vers un fichier sous Linux ?

  5. Comment effectuer des E/S de bas niveau sur un fichier de périphérique Linux en Python ?

Comment utiliser la commande md5sum sous Linux

Comment utiliser la commande touch sous Linux

Comment utiliser la commande Linux head

Comment utiliser la commande Linux diff

Explication de la redirection d'entrée-sortie sur Linux

Comment puis-je masquer la sortie d'une application shell sous Linux ?