Les données sont entrées dans l'ordinateur via stdin (généralement le clavier), et la sortie résultante va à stdout (généralement la coquille). Ces voies sont appelées flux . Cependant, il est possible de modifier ces emplacements d'entrée et de sortie, ce qui amène l'ordinateur à obtenir des informations d'un endroit autre que stdin ou envoyer les résultats ailleurs que stdout . Cette fonctionnalité est appelée redirection .
Dans cet article, vous découvrirez cinq opérateurs de redirection, dont un pour stderr . J'ai fourni des exemples de chacun et présenté le matériel d'une manière que vous pouvez dupliquer sur votre propre système Linux.
Opérateur de sortie régulière>
Le redirecteur de sortie est probablement le plus reconnu des opérateurs. La sortie standard (stdout ) est généralement dans la fenêtre du terminal. Par exemple, lorsque vous saisissez la date
commande, l'heure et la date résultantes s'affichent à l'écran.
[damon@localhost ~]$ date
Tue Dec 29 04:07:37 PM MST 2020
[damon@localhost ~]$
Il est cependant possible de rediriger cette sortie depuis stdout vers un autre endroit. Dans ce cas, je vais rediriger les résultats vers un fichier nommé specifications.txt
. Je vais confirmer que cela a fonctionné en utilisant le cat
commande pour afficher le contenu du fichier.
[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ cat specifications.txt
Tue Dec 29 04:08:44 PM MST 2020
[damon@localhost ~]$
Le problème avec le >
redirecteur est qu'il écrase toutes les données existantes dans le fichier. A ce stade, vous avez maintenant date
informations dans le specifications.txt
dossier, non ? Si vous saisissez hostname > specifications.txt
, la sortie sera envoyée au fichier texte, mais elle écrasera les informations d'heure et de date existantes des étapes précédentes.
[damon@localhost ~]$ hostname > specifications.txt
[damon@localhost ~]$ cat specifications.txt
localhost.localdomain
[damon@localhost ~]$
Il est facile d'avoir des ennuis avec le >
redirecteur en écrasant accidentellement les informations existantes.
[ Les lecteurs ont également apprécié : 10 commandes Linux de base que vous devez connaître ]
Opérateur d'ajout>> de sortie normal
L'ajout >>
L'opérateur ajoute la sortie au contenu existant au lieu de l'écraser. Cela vous permet de rediriger la sortie de plusieurs commandes vers un seul fichier. Par exemple, je pourrais rediriger la sortie de date
en utilisant le >
opérateur puis redirigez hostname
et uname -r
au specifications.txt
fichier en utilisant >>
opérateur.
[damon@localhost ~]$ date > specifications.txt
[damon@localhost ~]$ hostname >> specifications.txt
[damon@localhost ~]$ uname -r >> specifications.txt
[damon@localhost ~]$ cat specifications.txt
Tue Dec 29 04:11:51 PM MST 2020
localhost.localdomain
5.9.16-200.fc33.x86_64
[damon@localhost ~]$
Remarque :Le >>
redirecteur fonctionne même sur un fichier vide. Cela signifie que vous pourriez éventuellement
ignorer le >
normal redirecteur pour atténuer le risque d'écraser les données et toujours s'appuyer sur le >>
redirecteur à la place. Ce n'est pas une mauvaise habitude à prendre.
Opérateur
Le redirecteur d'entrée extrait les données d'un flux à partir d'une source donnée. Habituellement, les programmes reçoivent leur entrée du clavier. Cependant, les données peuvent être extraites d'une autre source, comme un fichier.
Il est temps de construire un exemple en utilisant le sort
commande. Tout d'abord, créez un fichier texte nommé mylist.txt
qui contient les lignes suivantes :
cat
dog
horse
cow
Observez que les animaux ne sont pas classés par ordre alphabétique.
Et si vous devez les répertorier dans l'ordre ? Vous pouvez extraire le contenu du fichier dans le sort
commande en utilisant le <
opérateur.
[damon@localhost ~]$ sort < mylist.txt
cat
cow
dog
horse
[damon@localhost ~]$
Vous pouvez même devenir un peu plus sophistiqué et rediriger les résultats triés vers un nouveau fichier :
[damon@localhost ~]$ sort < mylist.txt > alphabetical-file.txt
[damon@localhost ~]$ cat alphabetical-file.txt
cat
cow
dog
horse
[damon@localhost ~]$
Opérateur d'erreur normale 2>
La stdout affiche les résultats attendus. Si des erreurs apparaissent, elles sont gérées différemment. Les erreurs sont étiquetées en tant que descripteur de fichier 2 (la sortie standard est le descripteur de fichier 1). Lorsqu'un programme ou un script ne génère pas les résultats attendus, il génère une erreur. L'erreur est généralement envoyée à la stdout , mais il peut être redirigé ailleurs. Le stderr l'opérateur est 2>
(pour le descripteur de fichier 2).
Voici un exemple simple, utilisant le ping
mal orthographié commande :
[damon@localhost ~]$ png
bash: png: command not found...
[damon@localhost ~]$
Voici la même commande mal orthographiée avec la sortie d'erreur redirigée vers /dev/null
:
[damon@localhost ~]$ png 2> /dev/null
[damon@localhost ~]$
Le message d'erreur résultant est redirigé vers /dev/null
au lieu de la stdout , donc aucun résultat ou message d'erreur ne s'affiche à l'écran.
Remarque :/dev/null
, ou le seau de bits , est utilisé comme poubelle pour la ligne de commande. Les sorties indésirables peuvent être redirigées vers cet emplacement pour les faire simplement disparaître. Par exemple, vous écrivez peut-être un script et vous souhaitez tester certaines de ses fonctionnalités, mais vous savez qu'il générera des erreurs dont vous ne vous souciez pas à ce stade de développement. Vous pouvez exécuter le script et lui dire de rediriger les erreurs vers /dev/null
pour plus de commodité.
Tuyau | opérateur
Ken Hess a déjà un article solide sur l'utilisation du tuyau |
opérateur, donc je vais seulement montrer une démonstration très rapide ici.
Le tube prend la sortie de la première commande et en fait l'entrée de la seconde commande. Vous voudrez peut-être voir une liste de tous les répertoires et fichiers dans le /etc
annuaire. Vous savez que la liste va être longue et que la plupart des résultats défileront en haut de l'écran. Le less
divisera la sortie en pages, et vous pourrez ensuite faire défiler les pages vers le haut ou vers le bas pour afficher les résultats. La syntaxe est d'émettre le ls
commande pour lister le contenu de /etc
, puis utilisez pipe pour envoyer cette liste dans less
afin qu'il puisse être divisé en pages.
[damon@localhost ~]$ ls /etc | less
L'article de Ken contient de nombreux autres exemples intéressants. Personnellement, je me retrouve à utiliser la command | less
et command | grep string
le plus souvent.
[ Télécharger maintenant :Un guide de l'administrateur système sur les scripts Bash. ]
Récapitulez
Les opérateurs de redirection sont très pratiques, et j'espère que ce bref résumé vous a fourni quelques astuces pour manipuler l'entrée et la sortie. La clé est de se rappeler que le >
l'opérateur écrasera les données existantes.
Le redirecteur d'entrée extrait les données d'un flux à partir d'une source donnée. Habituellement, les programmes reçoivent leur entrée du clavier. Cependant, les données peuvent être extraites d'une autre source, comme un fichier.
Il est temps de construire un exemple en utilisant le sort
commande. Tout d'abord, créez un fichier texte nommé mylist.txt
qui contient les lignes suivantes :
cat
dog
horse
cow
Observez que les animaux ne sont pas classés par ordre alphabétique.
Et si vous devez les répertorier dans l'ordre ? Vous pouvez extraire le contenu du fichier dans le sort
commande en utilisant le <
opérateur.
[damon@localhost ~]$ sort < mylist.txt
cat
cow
dog
horse
[damon@localhost ~]$
Vous pouvez même devenir un peu plus sophistiqué et rediriger les résultats triés vers un nouveau fichier :
[damon@localhost ~]$ sort < mylist.txt > alphabetical-file.txt
[damon@localhost ~]$ cat alphabetical-file.txt
cat
cow
dog
horse
[damon@localhost ~]$
Opérateur d'erreur normale 2>
La stdout affiche les résultats attendus. Si des erreurs apparaissent, elles sont gérées différemment. Les erreurs sont étiquetées en tant que descripteur de fichier 2 (la sortie standard est le descripteur de fichier 1). Lorsqu'un programme ou un script ne génère pas les résultats attendus, il génère une erreur. L'erreur est généralement envoyée à la stdout , mais il peut être redirigé ailleurs. Le stderr l'opérateur est 2>
(pour le descripteur de fichier 2).
Voici un exemple simple, utilisant le ping
mal orthographié commande :
[damon@localhost ~]$ png
bash: png: command not found...
[damon@localhost ~]$
Voici la même commande mal orthographiée avec la sortie d'erreur redirigée vers /dev/null
:
[damon@localhost ~]$ png 2> /dev/null
[damon@localhost ~]$
Le message d'erreur résultant est redirigé vers /dev/null
au lieu de la stdout , donc aucun résultat ou message d'erreur ne s'affiche à l'écran.
Remarque :/dev/null
, ou le seau de bits , est utilisé comme poubelle pour la ligne de commande. Les sorties indésirables peuvent être redirigées vers cet emplacement pour les faire simplement disparaître. Par exemple, vous écrivez peut-être un script et vous souhaitez tester certaines de ses fonctionnalités, mais vous savez qu'il générera des erreurs dont vous ne vous souciez pas à ce stade de développement. Vous pouvez exécuter le script et lui dire de rediriger les erreurs vers /dev/null
pour plus de commodité.
Tuyau | opérateur
Ken Hess a déjà un article solide sur l'utilisation du tuyau |
opérateur, donc je vais seulement montrer une démonstration très rapide ici.
Le tube prend la sortie de la première commande et en fait l'entrée de la seconde commande. Vous voudrez peut-être voir une liste de tous les répertoires et fichiers dans le /etc
annuaire. Vous savez que la liste va être longue et que la plupart des résultats défileront en haut de l'écran. Le less
divisera la sortie en pages, et vous pourrez ensuite faire défiler les pages vers le haut ou vers le bas pour afficher les résultats. La syntaxe est d'émettre le ls
commande pour lister le contenu de /etc
, puis utilisez pipe pour envoyer cette liste dans less
afin qu'il puisse être divisé en pages.
[damon@localhost ~]$ ls /etc | less
L'article de Ken contient de nombreux autres exemples intéressants. Personnellement, je me retrouve à utiliser la command | less
et command | grep string
le plus souvent.
[ Télécharger maintenant :Un guide de l'administrateur système sur les scripts Bash. ]
Récapitulez
Les opérateurs de redirection sont très pratiques, et j'espère que ce bref résumé vous a fourni quelques astuces pour manipuler l'entrée et la sortie. La clé est de se rappeler que le >
l'opérateur écrasera les données existantes.