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 :
- le résultat de la commande - les données que le programme est conçu pour produire, et
- 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 :
- stdin ou 0 – il est connecté au clavier, la plupart des programmes lisent les entrées de ce fichier.
- stdout ou 1 – il est attaché à l'écran, et tous les programmes envoient leurs résultats dans ce fichier et
- 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 :
-b
– active top pour s'exécuter en mode batch, afin que vous puissiez rediriger sa sortie vers un fichier ou une autre commande.-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 :
-l
– active le format de liste longue-t
– trier par heure de modification avec les fichiers les plus récents affichés en premier-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 :
-n 1
– indique à xargs d'utiliser au plus un argument par ligne de commande et de l'envoyer à la commande cpcp
– copie le fichier-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.