Redirection d'entrée-sortie dans les exemples Linux/Unix

⚡ Résumé intelligent

La redirection sous Linux et Unix modifie l'endroit où une commande lit les entrées ou envoie les sorties, et inverse les chemins.ping le clavier et l'écran pour les fichiers ou les périphériques utilisant des opérateurs tels que le signe supérieur à, le signe inférieur à et l'opérateur d'ajout.

  • 🔀 Redirection : La redirection modifie l'entrée ou la sortie standard d'une commande, qui passe du clavier et de l'écran à un fichier ou un périphérique.
  • ➡️ Sortie : L'opérateur > écrit la sortie dans un fichier, tandis que >> ajoute du contenu à un fichier existant sans l'effacer.
  • ⬅️ Entrées : L'opérateur < permet d'utiliser un fichier comme entrée standard d'une commande au lieu du clavier.
  • (I.e. Descripteurs de fichiers : Chaque fichier ouvert reçoit un numéro : 0 pour stdin, 1 pour stdout et 2 pour stderr.
  • ⚠️ Redirection en cas d'erreur : L'utilisation de 2> envoie les messages d'erreur dans un fichier séparé afin qu'ils n'encombrent pas la sortie normale.
  • 🔗 Flux combinés : La syntaxe 2>&1 redirige la sortie d'erreur standard vers la même cible que la sortie standard.
  • 🤖 Aide de l'IA : Les assistants IA et GitHub Copilot peuvent créer et expliquer les commandes de redirection et les scripts shell.

Redirection des entrées/sorties sous Linux et Unix avec exemples

La redirection est l'une des fonctionnalités les plus utiles de Linux et le shell Unix, car il permet de définir où une commande lit ses entrées et envoie sa sortie. Cette page explique la redirection des entrées, des sorties et des erreurs à l'aide d'exemples concrets.

Qu’est-ce que la redirection ?

La redirection est une fonctionnalité de Linux qui permet, lors de l'exécution d'une commande, de modifier les périphériques d'entrée et de sortie standard. Le flux de travail de base de toute commande consiste à… commande Linux c'est qu'il prend une entrée et donne une sortie.

  • Le périphérique d'entrée standard (stdin) est le clavier.
  • Le périphérique de sortie standard (stdout) est l'écran.

Grâce à la redirection, les entrées et sorties standard mentionnées ci-dessus peuvent être modifiées.

Redirection de sortie

Le graphique ci-dessous marque le début des exemples de redirection de sortie.

En-tête de la section de redirection de sortie (graphique)

Le symbole '>' est utilisé pour la redirection de la sortie (STDOUT).

Exemple :

ls -al > listings

Ici, la sortie de la commande `ls -al` est redirigée vers le fichier « listings » au lieu de s'afficher à l'écran. La capture d'écran ci-dessous illustre ce résultat.

Terminal affichant la liste ls -al redirigée vers le fichier de listes

Remarque : Utilisez le nom de fichier correct lorsque vous redirigez la sortie d’une commande vers un fichier. Si un fichier portant le même nom existe déjà, la commande redirigée supprimera son contenu puis l’écrasera.

Si vous ne souhaitez pas écraser un fichier mais voulez y ajouter du contenu, utilisez l'opérateur « >> ». La capture d'écran ci-dessous montre du contenu ajouté avec « >> ».

Terminal affichant la sortie d'une commande ajoutée à un fichier existant à l'aide de l'opérateur double supérieur à

Vous pouvez rediriger la sortie standard non seulement vers des fichiers, mais aussi vers des périphériques.

$ cat music.mp3 > /dev/audio

La commande « cat » lit le fichier « music ».mp3 et envoie la sortie vers /dev/audio, qui est le périphérique audio. Si la configuration audio de votre PC est correcte, cette commande lira le fichier musical.mp3.

Redirection d'entrée

Le graphique ci-dessous présente la redirection des entrées.

Graphique d'en-tête de la section de redirection des entrées

Le symbole '<' est utilisé pour la redirection de l'entrée (STDIN).

Exemple : Le programme de messagerie sous Linux peut vous aider à envoyer des courriels depuis le terminal.

Vous pouvez saisir le contenu du courriel à l'aide du clavier, périphérique d'entrée standard. Si vous souhaitez joindre un fichier au courriel, vous pouvez utiliser l'opérateur de redirection d'entrée au format suivant.

mail -s "Subject" to-address < Filename

La capture d'écran ci-dessous montre la commande mail lisant un fichier en entrée.

Commande mail utilisant la redirection d'entrée pour joindre un fichier à un e-mail

Le fichier est ainsi joint à l'e-mail, qui est ensuite envoyé au destinataire.

Les exemples précédents étaient simples. Voyons maintenant quelques techniques de redirection avancées qui utilisent des descripteurs de fichiers.

Fichier Descriptors (FD)

Sous Linux et Unix, tout est un fichier. Les fichiers, les répertoires et même les périphériques sont des fichiers. Chaque fichier possède un numéro associé appelé descripteur de fichier (FD).

Le diagramme ci-dessous illustre les flux standard et leurs descripteurs de fichiers.

Diagramme des flux d'entrée, de sortie et d'erreur standard et de leurs descripteurs de fichiers

Votre écran possède également un descripteur de fichier. Lorsqu'un programme est exécuté, sa sortie est envoyée au descripteur de fichier de l'écran, et vous visualisez le résultat du programme sur votre moniteur. Si la sortie était envoyée au descripteur de fichier de l'imprimante, le résultat du programme serait imprimé.

Redirection des erreurs

Lorsque vous exécutez un programme ou une commande dans le terminal, trois fichiers sont toujours ouverts : l’entrée standard, la sortie standard et l’erreur standard.

Ces fichiers sont toujours présents lors de l'exécution d'un programme. Comme expliqué précédemment, un descripteur de fichier est associé à chacun de ces fichiers.

Fichier Fichier Descriptor
Entrée standard STDIN 0
Sortie standard STDOUT 1
Erreur standard STDERR 2

Par défaut, le flux d'erreurs s'affiche à l'écran. La redirection d'erreurs permet de diriger les erreurs vers un fichier autre que l'écran.

Pourquoi la redirection des erreurs ?

La redirection d'erreurs est l'une des fonctionnalités les plus populaires d'Unix et de Linux.

Les utilisateurs réguliers d'Unix savent que de nombreuses commandes génèrent une quantité considérable d'erreurs. Par exemple, lors d'une recherche de fichiers, on obtient généralement le résultat suivant : autorisation Les erreurs de refus, qui ne sont généralement pas utiles à la personne recherchant un fichier particulier, peuvent s'avérer problématiques. Lors de l'exécution de scripts shell, il est souvent préférable d'éviter que les messages d'erreur n'encombrent la sortie normale du programme.

La solution consiste à rediriger les messages d'erreur vers un fichier.

Exemple 1

$ myprogram 2>errorsfile

La capture d'écran ci-dessous montre cette commande dans le terminal.

Terminal exécutant mon programme avec redirection de l'erreur standard vers le fichier errorsfile

Ci-dessus, nous exécutons un programme nommé myprogram. Le descripteur de fichier pour la sortie d'erreur standard est 2. En utilisant « 2> », nous redirigeons la sortie d'erreur vers un fichier nommé « errorsfile ». Ainsi, la sortie du programme n'est pas encombrée d'erreurs.

Exemple 2

Voici un autre exemple qui utilise l'instruction find.

find . -name 'my*' 2>error.log

La commande find permet de rechercher dans le répertoire courant « . » un fichier dont le nom commence par « my », et d'envoyer les erreurs éventuelles vers error.log.

Exemple 3: Prenons un exemple plus complexe.

Les administrateurs de serveurs listent fréquemment les répertoires et stockent les sorties d'erreur et standard dans un fichier, qui peut être traité ultérieurement. Voici la commande.

ls Documents ABC> dirlist 2>&1

Le schéma ci-dessous montre la capture des deux flux dans un seul fichier.

Diagramme de la sortie standard et de l'erreur standard, toutes deux redirigées vers le fichier dirlist

Ici:

  • 2>&1 signifie que STDERR est redirigé vers la même cible que STDOUT (qui est la liste des fichiers).
  • Le flux d'erreur est redirigé vers la sortie standard, qui est ensuite redirigée vers le répertoire de fichiers. Ainsi, les deux flux sont écrits dans le répertoire de fichiers.

Le schéma ci-dessous résume comment les entrées, les sorties et la redirection des erreurs s'articulent.

Diagramme récapitulatif des entrées, des sorties et de la redirection des erreurs sous Linux et Unix

FAQ

A pipe L'opérateur (|) envoie la sortie d'une commande directement à une autre commande en tant qu'entrée. La redirection, quant à elle, connecte une commande à un fichier ou un périphérique, y écrivant sa sortie ou y lisant son entrée. Les tubes (pipes) relient des commandes ; la redirection relie une commande à un fichier.

L'opérateur > écrit la sortie d'une commande dans un fichier, en remplaçant son contenu existant. L'opérateur >> ajoute la sortie à la fin du fichier, en conservant le contenu existant.ping Utilisez >> pour ajouter du contenu à un fichier sans l'écraser.

Le fichier `/dev/null` est un fichier spécial qui ignore tout ce qui y est écrit. L'ajout de `2>/dev/null` à une commande redirige ses messages d'erreur vers ce fichier, les ignorant silencieusement afin que seul le résultat normal s'affiche à l'écran. C'est une méthode courante pour masquer les messages d'erreur indésirables.

La commande `tee` lit l'entrée standard et écrit les données simultanément à l'écran et dans un ou plusieurs fichiers, par exemple : `ls -al | tee listing.txt`. Elle permet d'enregistrer la sortie d'une commande dans un fichier tout en la visualisant à l'écran.

Un document « here » utilise l'opérateur << pour transmettre plusieurs lignes de texte en ligne à une commande, jusqu'à un mot marqueur choisi. C'est pratique dans les scripts shell pour transmettre des données multilignes, comme le corps d'un courriel, sans fichier séparé.

Utilisez la syntaxe `2>&1` après avoir redirigé la sortie, comme dans `command > file 2>&1`, afin que la sortie d'erreur suive la sortie standard dans le fichier. En Bash moderne, la commande abrégée `&> file` fait la même chose. L'ordre est important : placez `2>&1` après la redirection de la sortie.

Les assistants IA peuvent transformer une requête en langage naturel en la commande de redirection appropriée, expliquer le rôle des opérateurs tels que 2>&1 ou &>, et signaler les erreurs avant leur exécution. Les outils d'apprentissage automatique analysent également les fichiers journaux et d'erreurs redirigés afin de déceler les anomalies qui échapperaient à une vérification manuelle.

Oui. Copilote GitHub peut générer des commandes et des scripts qui redirigent les entrées, les sorties et les erreurs à partir d'un court commentaire décrivant l'objectif, et les complètent au fur et à mesure que vous tapez. RevExaminez attentivement toute commande suggérée sur vos fichiers, en particulier celles utilisant le symbole > qui écrasent les données existantes.

Résumez cet article avec :