GNU/Linux >> Tutoriels Linux >  >> Linux

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

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

[email protected]:~$ wc -l < command.txt
52

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 output_file.

Erreur standard de redirection

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 :

[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

Utilisez 2>&1 Syntaxe pour rediriger l'erreur standard vers le même emplacement que la sortie standard .

Exemple :1

[email protected]:~$ ls /usr/bin > command.txt 2>&1

La commande ci-dessus comporte trois parties.

  • ls /usr/bin est la commande exécutée
  • > command.txt redirige la sortie de la commande ls
  • 2>&1 envoie la sortie du descripteur de fichier 2, stderr , au même emplacement que le descripteur de fichier 1, stdout.

Exemple :2

[email protected]:~$ ls /usr2222/bin > command.txt 2>&1
[email protected]:~$ more command.txt
ls: cannot access /usr2222/bin: No such file or directory

Notez que l'exemple ci-dessus suppose que votre système n'a pas de noms de répertoire "/usr2222/bin"

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

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.

Ajouter aux fichiers

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 :

[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 :

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.

[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

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.

[email protected]:~$ ls /usr/bin > /dev/null

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


Linux
  1. Rechercher des fichiers et des répertoires sous Linux avec la commande find

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

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

  4. Comment enregistrer la sortie de la commande dans un fichier sous Linux

  5. Commande de tri sous Linux avec des exemples

Explication :Redirection des entrées, des sorties et des erreurs sous Linux

Shell Scripting Part4 - Entrée, sortie et redirection

Utilisation de la commande Linux mv avec des exemples

Principes de base de la ligne de commande Linux - Travailler avec des fichiers et des répertoires

Commande de montage Linux avec exemples

Commande Linux gawk avec exemples