GNU/Linux >> Tutoriels Linux >  >> Linux

Cinq façons d'utiliser les opérateurs de redirection dans Bash

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.


Linux
  1. Utiliser $[Expr] au lieu de $((Expr)) ?

  2. Utiliser l'extension .sh ou .bash pour les scripts bash ?

  3. Manières inhabituelles d'utiliser des variables dans des scripts bash

  4. comment utiliser kill SIGUSR2 dans bash?

  5. Utilisez .bashrc sans casser sftp

Comment utiliser la commande de lecture Bash

Comment rediriger stderr vers stdout dans Bash

Comment utiliser les opérateurs de test de fichiers Bash sous Linux

7 façons d'utiliser la commande Linux Head

7 façons d'utiliser la commande Linux Watch

Qu'est-ce que Zsh ? Devriez-vous l'utiliser ?