GNU/Linux >> Tutoriels Linux >  >> Linux

Lire et écrire des données de n'importe où avec la redirection dans le terminal Linux

La redirection des entrées et des sorties est une fonction naturelle de tout langage de programmation ou de script. Techniquement, cela se produit intrinsèquement chaque fois que vous interagissez avec un ordinateur. L'entrée est lue à partir de stdin (entrée standard, généralement votre clavier ou votre souris), la sortie va à stdout (sortie standard, un flux de texte ou de données) et les erreurs sont envoyées à stderr . Comprendre que ces flux de données existent vous permet de contrôler où vont les informations lorsque vous utilisez un shell, tel que Bash ou Zsh.

L'entrée standard, la sortie standard et l'erreur standard existent en tant qu'emplacements de système de fichiers sous Linux. Vous pouvez les voir dans /dev :

$ ls /dev/std*
/dev/stderr@  /dev/stdin@  /dev/stdout@

Vous ne pouvez pas faire grand-chose avec eux directement, mais il est parfois utile de les considérer comme des méta-emplacements où vous pouvez envoyer des données.

Les bases de la redirection sont simples :utilisez un certain nombre de > caractères pour rediriger la sortie, et un certain nombre de < caractères pour rediriger l'entrée.

Redirection de la sortie

Pour écrire la sortie de la commande ls dans un fichier :

$ ls > list.txt

Vous ne voyez pas la sortie de ls comme vous le feriez normalement, car la sortie est écrite dans le list.txt fichier au lieu de votre écran. C'est si polyvalent, en fait, que vous pouvez même l'utiliser pour copier le contenu d'un fichier dans un autre. Il ne doit pas non plus s'agir d'un fichier texte. Vous pouvez utiliser la redirection pour les données binaires :

$ cat image.png > picture.png

(Au cas où vous vous demanderiez pourquoi vous voudriez faire cela, c'est pour une répercussion parfois utile sur les autorisations de fichiers.)

Redirection de l'entrée

Vous pouvez également rediriger l'entrée "vers" une commande. C'est sans doute moins utile que de rediriger la sortie car de nombreuses commandes sont déjà codées en dur pour prendre l'entrée d'un argument que vous fournissez. Cela peut être utile, cependant, lorsqu'une commande attend une liste d'arguments, et que vous avez ces arguments dans un fichier et que vous souhaitez les "copier et coller" rapidement du fichier dans votre terminal (sauf que vous ne voulez pas réellement copier et coller):

$ sudo dnf install $(<package.list)

Les utilisations courantes de la redirection d'entrée sont le ici-document (ou juste ici-doc pour faire court) et chaîne-ici techniques. Cette méthode d'entrée redirige un bloc de texte dans le flux d'entrée standard, jusqu'à un marqueur spécial de fin de fichier (la plupart des gens utilisent EOF , mais il peut s'agir de n'importe quelle chaîne que vous pensez être unique). Essayez de taper ceci (jusqu'à la deuxième instance de EOF ) dans un terminal :

$ echo << EOF
> foo
> bar
> baz
> EOF

Le résultat attendu :

foo
bar
baz

Un ici-doc est une astuce couramment utilisée par les scripteurs Bash pour vider plusieurs lignes de texte dans un fichier ou sur l'écran. Tant que vous n'oubliez pas de terminer la clause avec votre marqueur de fin de fichier, c'est un moyen efficace d'éviter les listes lourdes de echo ou printf déclarations.

Une chaîne ici est similaire à un ici-doc , mais il se compose d'une seule chaîne (ou de plusieurs chaînes déguisées en une seule chaîne avec des guillemets) :

$ cat <<< "foo bar baz"
foo bar baz

Redirection des messages d'erreur

Les messages d'erreur sont dirigés vers un flux appelé stderr , désigné par 2> à des fins de redirection. Cette commande dirige les messages d'erreur vers un fichier appelé output.log :

$ ls /nope 2> output.log

Envoi de données à /dev/null

En savoir plus sur Bash

  • Aide-mémoire de Bash
  • Une introduction à la programmation avec Bash
  • Guide de l'administrateur système sur les scripts Bash
  • Derniers articles sur Bash

Tout comme il existe des emplacements pour l'entrée standard, la sortie standard et l'erreur, il existe également un emplacement pour nulle part sur le système de fichiers Linux. Il s'appelle null , et il se trouve dans /dev , il est donc souvent prononcé "devnull" par les personnes qui l'utilisent trop fréquemment pour dire "slash dev slash null".

Vous pouvez envoyer des données à /dev/null en utilisant la redirection. Par exemple, le find La commande a tendance à être détaillée et signale souvent des conflits d'autorisation lors de la recherche dans vos fichiers :

$ find ~ -type f 
/home/seth/actual.file
find: `/home/seth/foggy': Permission denied
find: `/home/seth/groggy': Permission denied
find: `/home/seth/soggy': Permission denied
/home/seth/zzz.file

Le find la commande traite cela comme une erreur, vous pouvez donc rediriger uniquement les messages d'erreur vers /dev/null :

$ find ~ -type f 2> /dev/null
/home/seth/actual.file
/home/seth/zzz.file

Utiliser la redirection

La redirection est un moyen efficace d'obtenir des données d'un endroit à un autre dans Bash. Vous n'utilisez peut-être pas la redirection tout le temps, mais apprendre à l'utiliser lorsque vous en avez besoin peut vous épargner beaucoup d'ouvertures de fichiers inutiles et de copier et coller des données, qui nécessitent généralement des mouvements de souris et de nombreuses pressions sur les touches. Ne recourez pas à de tels extrêmes. Vivez la belle vie et utilisez la redirection.


Linux
  1. Copier des fichiers dans le terminal Linux

  2. Renommer un fichier dans le terminal Linux

  3. Déplacer des fichiers dans le terminal Linux

  4. Copiez et collez sur la ligne de commande Linux avec xclip

  5. Utilisation de l'entrée-sortie et de la redirection d'erreur sous Linux

Gérez votre calendrier depuis le terminal Linux avec la commande konsolekalendar

Conseils Vim - Lire et écrire des fichiers distants avec Vim sous Linux

Gestion de fichiers Linux depuis le terminal

Redirection d'entrée/sortie sous Linux/Unix

Sécurisez Linux avec le fichier Sudoers

Enregistrer la sortie d'une commande du terminal Debian dans un fichier