Chaque processus sous Linux est fourni avec trois fichiers ouverts (généralement appelés descripteur de fichier). Ces fichiers sont les fichiers d'entrée, de sortie et d'erreur standard. Par défaut :
- Saisie standard est le clavier, résumé sous forme de fichier pour faciliter l'écriture de scripts shell.
- Sortie standard est la fenêtre shell ou le terminal à partir duquel le script s'exécute, résumé sous forme de fichier pour faciliter à nouveau l'écriture de scripts et de programmes
- Erreur type est identique à la sortie standard :la fenêtre du shell ou le terminal à partir duquel le script s'exécute.
Un descripteur de fichier est simplement un nombre qui fait référence à un fichier ouvert. Par défaut, descripteur de fichier 0 (zéro) fait référence à l'entrée standard et souvent abrégé en stdin . Le descripteur de fichier 1 fait référence à la sortie standard (stdout ) et le descripteur de fichier 2 fait référence à l'erreur standard (stderr ). Ces numéros sont importants lorsque vous devez accéder à un fichier particulier, en particulier lorsque vous souhaitez rediriger ces fichiers vers d'autres emplacements. Les numéros de descripteurs de fichiers augmentent à partir de zéro.
Redirection de la sortie standard
Syntaxe pour rediriger la sortie d'une commande vers un fichier.
# Command_options_and_arguments> output_file
Exemple :
[email protected]:~$ cat /proc/cpuinfo > command.txt
On peut voir les données qui seraient passées à l'écran avec plus de commande :
[email protected]:~$ more command.txt processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 37 model name : Intel(R) Core(TM) i3 CPU M 370 @ 2.40GHz stepping : 5 microcode : 0x616 cpu MHz : 0.000 cache size : 6144 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 2 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 5 wp : yes
L'opérateur> indique au shell de rediriger la sortie de la commande vers le fichier donné. Si le fichier existe, le supprime l'ancien contenu du fichier et le remplace par la sortie de la commande.
Redirection de l'entrée d'une commande
Syntaxe pour rediriger l'entrée d'une commande pour qu'elle provienne d'un fichier.
# Command_options_and_arguments
Utilisez l'opérateur Dans cet exemple, l'entrée de 'wc ‘ La commande provient du fichier nommé command.txt. Le shell envoie le contenu du fichier command.txt comme entrée standard pour la commande wc.
Remarque : Nous pouvons également combiner les deux redirections avec la syntaxe suivante :
# command_options_and_agruments En plus de rediriger l'entrée et la sortie standard d'un script ou d'une commande, nous pouvons également rediriger l'erreur standard. Même si l'erreur standard va par défaut au même endroit que la sortie standard - la fenêtre du shell ou le terminal. Il y a de bonnes raisons pour lesquelles stdout et stderr sont traités séparément. La raison principale est que nous pouvons rediriger la sortie d'une ou plusieurs commandes vers un fichier, mais vous n'avez aucun moyen de savoir si une erreur s'est produite. Séparer stderr de stdout permet au message d'erreur d'apparaître sur votre écran alors que la sortie va toujours dans un fichier.
Syntaxe pour rediriger stderr d'une commande vers un fichier.
# command_options_and_agruments 2> output_file.
Le 2 en 2> fait référence au descripteur de fichier 2, le numéro de descripteur pour stderr.
Exemple :
Utilisez 2>&1 Syntaxe pour rediriger l'erreur standard vers le même emplacement que la sortie standard .
Exemple :1
La commande ci-dessus comporte trois parties.
Exemple :2
Notez que l'exemple ci-dessus suppose que votre système n'a pas de noms de répertoire "/usr2222/bin"
Dans la commande ci-dessus, ls est la commande , /usr2222/bin est l'argument de 'ls ‘ commande et ‘&> command.txt ' redirige à la fois stdout et stderr vers un fichier nommé command.txt.
Utilisez l'opérateur '>>' pour rediriger la sortie d'une commande, mais ajoutez-la au fichier, s'il existe. La syntaxe est donnée ci-dessous :
# Commande>> file_to_append.
Exemple :
Nous pouvons utiliser une syntaxe abrégée pour tronquer les fichiers en omettant la commande avant l'opérateur> . La syntaxe est donnée ci-dessous :
#> nom_fichier
Nous pouvons également utiliser un format alternatif avec deux-points :
# :> nom_fichier Ces deux commandes sans commande créeront le fichier s'il n'existe pas et tronqueront le fichier à zéro octet si le fichier existe.
Il existe certains scénarios dans lesquels vous souhaitez non seulement rediriger la sortie d'une commande , mais également supprimer la sortie. Vous pouvez le faire en redirigeant la sortie d'une commande vers le fichier nul "/dev/null". Le fichier nul consomme toute la sortie qui lui est envoyée, comme si /dev/null était une étoile trou noir.
Remarque :Le fichier /dev/null est souvent appelé un compartiment de bits.
Lecture recommandée :Comment utiliser un mot de passe crypté dans le script shell Linux Bash [email protected]:~$ wc -l < command.txt
52
Erreur standard de redirection
[email protected]:~$ lsash /usr/bin 2> commands-error.txt
[email protected]:~$ cat commands-error.txt
No command 'lsash' found, did you mean:
Command 'sash' from package 'sash' (universe)
lsash: command not found
Redirection à la fois de la sortie standard et de l'erreur standard
[email protected]:~$ ls /usr/bin > command.txt 2>&1
[email protected]:~$ ls /usr2222/bin > command.txt 2>&1
[email protected]:~$ more command.txt
ls: cannot access /usr2222/bin: No such file or directory
Redirection simultanée de stderr et stdout
[email protected]:~$ ls /usr2222/bin &> command.txt
[email protected]:~$ more command.txt
ls: cannot access /usr2222/bin: No such file or directory
Ajouter aux fichiers
[email protected]:~$ uptime >> sysload.txt
[email protected]:~$ uptime >> sysload.txt
[email protected]:~$ uptime >> sysload.txt
[email protected]:~$ more sysload.txt
11:49:17 up 1:22, 3 users, load average: 0.28, 0.12, 0.11
11:49:28 up 1:22, 3 users, load average: 0.40, 0.15, 0.12
11:49:36 up 1:23, 3 users, load average: 0.33, 0.14, 0.12
Tronquer les fichiers :
[email protected]:~$ ls /usr/bin > command.txt
[email protected]:~$ ls -l command.txt
-rw-rw-r-- 1 linuxtechi linuxtechi 19713 Dec 2 12:18 command.txt
[email protected]:~$ > command.txt
[email protected]:~$ ls -l command.txt
-rw-rw-r-- 1 linuxtechi linuxtechi 0 Dec 2 12:18 command.txt
Envoi rapide de la sortie vers nulle part
[email protected]:~$ ls /usr/bin > /dev/null