RHEL 7 - Remarques RHCSA (aide-mémoire)
Trois descripteurs de fichiers standards :
1. stdin 0 - Standard input to the program. 2. stdout 1 - Standard output from the program. 3. stderr 2 - Standard error output from the program.
Objectif | Commande |
---|---|
rediriger la sortie std vers le nom de fichier | > nom de fichier ou 1> nom de fichier |
ajouter std out au nom de fichier | >> nom de fichier |
ajouter std out et std err au nom de fichier | >> nom de fichier 2>&1 ou 1>> nom de fichier 2>&1 |
prendre l'entrée du nom de fichier | |
rediriger l'erreur std vers le nom de fichier | 2> nom de fichier |
rediriger la sortie std et l'erreur std vers le nom de fichier | 1> nom de fichier 2>&1 ou> nom de fichier 2>&1 |
Quelques exemples d'utilisation de la redirection d'E/S
# cat goodfile badfile 1> output 2> errors
Cette commande redirige la sortie normale (contenu de goodfile) vers la sortie du fichier et envoie toute erreur (à propos de badfile inexistant, par exemple) vers le fichier errors.
# mail user_id < textfile 2> errors
Cette commande redirige l'entrée pour que la commande mail provienne du fichier textfile et toutes les erreurs sont redirigées vers le fichier errors.
# find / -name xyz -print 1> abc 2>&1
Cette commande redirige la sortie normale vers le fichier abc. La construction "2> &1" indique "envoyer la sortie d'erreur au même endroit où nous avons dirigé la sortie normale".
Notez que l'ordre est important; la commande 2>&1 1>fichier ne fait pas la même chose que la commande 1>fichier 2>&1. En effet, la construction 2>&1 signifie rediriger l'erreur standard vers l'endroit où se trouve actuellement la sortie standard. La commande de construction 2>&1 1>fichier redirigera d'abord l'erreur standard vers l'endroit où la sortie standard va (probablement le terminal, où l'erreur standard va de toute façon par défaut) puis redirigera la sortie standard vers le fichier. Ce n'est probablement pas ce qui était prévu.# ( grep Bob filex > out ) 2> err
– toute sortie de la commande grep est envoyée au fichier out et toutes les erreurs sont envoyées au fichier err.
# trouver . -name xyz -print 2>/dev/nullCela exécute la commande find, mais envoie toute sortie d'erreur (due à des répertoires inaccessibles, par exemple) à /dev/null. À utiliser avec précaution, à moins que la sortie d'erreur ne présente vraiment aucun intérêt.