logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
doc:programmation:shell:chevrons [16/10/2012 20:51]
smolski
doc:programmation:shell:chevrons [26/04/2015 17:49]
milou [Entrée]
Ligne 1: Ligne 1:
-====== Chevron ​en signe : > ======+====== Chevron > ====== 
 + 
 +  * Objet : commandes de redirection 
 +  * Niveau requis : {{tag>​débutant avisé}} 
 +  * Commentaires : // Par redirection,​ on entend la possibilité de rediriger l'​affichage de l'​écran vers un fichier ou tout autre périphérique...//​ 
 +  * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) 
 +  * Suivi : 
 +    * Création par [[user>​smolski]] le 16/​08/​2011 
 +    * Testé sur squeeze par **[[user>​smolski]]** le 16/​10/​2012 
 +  * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​pid=53393 | Lien vers le forum concernant ce tuto]] ((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) 
  
 Il existe une commande toute simple pour créer un fichier vide ou bien pour vider un fichier existant de son contenu. Il existe une commande toute simple pour créer un fichier vide ou bien pour vider un fichier existant de son contenu.
 +
 +
  
 ===== On peut se placer ===== ===== On peut se placer =====
-tout d'​abord dans le dossier désiré (pour se faire voir [[commande:cd|la commande cd]]), puis on tape la commande suivante : + 
-   ​> nomdufichier+tout d'​abord dans le dossier désiré (pour ce faire voir [[:​doc:​programmation:​shell:cd|la commande cd]]), puis on tape la commande suivante : 
 +<code user>> nomdufichier</​code>​
  
 ===== Ou, de façon plus générale ===== ===== Ou, de façon plus générale =====
 on tape : on tape :
-   /​chemin/​du/​repertoire > nomdufichier+<code user> 
 +/​chemin/​du/​repertoire/​nomdufichier 
 +</code> 
 +C'​est-à-dire que l'on crée le "​nomdufichier"​ depuis son répertoire personnel, sans s'​être déplacé au niveau du répertoire dans lequel on veut placer "nomdufichier".
  
 ==== Si le fichier existe :==== ==== Si le fichier existe :====
Ligne 19: Ligne 35:
 ===== Complément ===== ===== Complément =====
  
-Pour créer un fichier, les commandes ''>''​ et [[commande:touch | commande touch]] sont équivalentes.+Pour créer un fichier, les commandes ''>''​ et [[:​doc:​systeme:touch | commande touch]] sont équivalentes.
  
-La touch sert avant tout __à mettre ​ à jour la date et l'​heure__ d’accès pour la dernière modification d'un ou plusieurs ​fichier ​selon la date actuelle.+La touch sert avant tout __à mettre ​ à jour la date et l'​heure__ d’accès pour la dernière modification d'un ou plusieurs ​fichiers ​selon la date actuelle.
  
 Dans le cas d'un seul fichier, s'il n'​existe pas, il sera alors créé. Dans le cas d'un seul fichier, s'il n'​existe pas, il sera alors créé.
Ligne 28: Ligne 44:
  
 Avec la commande ''​touch''​ tu feras : Avec la commande ''​touch''​ tu feras :
-   rm fichier | touch /fichier+<code user>rm fichier | touch /fichier</​code>​
  
 Avec la commande ''>'',​ tu feras simplement : Avec la commande ''>'',​ tu feras simplement :
-   > /fichier+<code user>> /fichier</​code>​
  
 Ce sont bien sûr des détails, mais cela nous donne une façon différente de procéder. Ce sont bien sûr des détails, mais cela nous donne une façon différente de procéder.
Ligne 42: Ligne 58:
  
 Prenons un fichier d'​environs 100Mo. Prenons un fichier d'​environs 100Mo.
-<​code ​bash+<​code ​user
-dd if=/​dev/​zero of=fichier bs=1 count=1 seek=100M +dd if=/​dev/​zero of=fichier bs=1 count=1 seek=100M</​code>​ 
-1+0 enregistrements lus+<code bash>1+0 enregistrements lus
 1+0 enregistrements écrits 1+0 enregistrements écrits
-1 octet (1 B) copié, 4,4267e-05 s, 22,6 kB/s +1 octet (1 B) copié, 4,4267e-05 s, 22,6 kB/s</​code>​ 
-ls -lhi +<code user>ls -lhi</​code>​ 
-total 4,0K+<code bash>total 4,0K
 1163 -rw-r--r-- 1 user user 101M oct.  16 20:34 fichier</​code>​ 1163 -rw-r--r-- 1 user user 101M oct.  16 20:34 fichier</​code>​
  
-Le vider un fichier se fait aussi simplement que ça :+Vider le fichier se fait aussi simplement que ça : 
 +<code user> 
 +> fichier</​code>​
  
-<​code ​bash+<​code ​user
-$ > fichier</​code>​ +ls -lhi</​code>​ 
- +<code bash>​total 0
-<code bash> +
-$ ls -lhi +
-total 0+
 1163 -rw-r--r-- 1 fgivors fgivors 0 oct.  16 20:33 fichier</​code>​ 1163 -rw-r--r-- 1 fgivors fgivors 0 oct.  16 20:33 fichier</​code>​
  
Ligne 68: Ligne 83:
 ===== Redirection ===== ===== Redirection =====
  
-Voir +Les redirections sont l'une des plus importantes possibilités offerte par le shell. 
-  * [[manuel:​redirection ​Les commandees ​de redirection en détail]]+ 
 +Par redirection,​ on entend la possibilité de rediriger l'​affichage de l'​écran vers un fichier, une imprimante ou tout autre périphérique,​ les messages d'​erreurs vers un autre fichier, remplacer la saisie clavier par le contenu d'un fichier. 
 + 
 +Unix utilise des canaux d'​entrées/​sorties pour lire et écrire ses données. \\ 
 +Par défaut le canal d'​entrée est le clavier, et le canal de sortie, l'​écran. \\ 
 +Un troisième canal, le canal d'​erreur,​ est aussi redirigé vers l'​écran. 
 + 
 +Il est donc possible de rediriger ces canaux vers des fichiers, ou du flux texte de manière transparente pour les commandes Unix. 
 + 
 +<note tip>Il est aussi important de savoir dans quel sens le shell interprète les redirections. \\ 
 +Les redirections étant en principe en fin de commande, le shell recherche d'​abord les caractères « <, >, >> » en fin de ligne.</​note>​ 
 + 
 +===== Préparation ===== 
 + 
 +Créer(([[:​doc:​editeurs:​vim:​vim]])) les éléments nécessaires pour réaliser les exemples de ce tuto : 
 +<code user> 
 +mkdir dossier1 dossier2</​code>​ 
 + 
 +<code user> 
 +vim dossier1/​test1.txt</​code>​ 
 + 
 +Écrivez : 
 +<​code>​ 
 +fichier de test1</​code>​ 
 + 
 +<code user> 
 +vim dossier2/​test2.txt</​code>​ 
 + 
 +Écrivez : 
 +<​code>​ 
 +fichier de test2</​code>​ 
 + 
 +===== Entrée ===== 
 + 
 +Les commandes qui attendent des données ou des paramètres depuis le clavier peuvent aussi en recevoir depuis un fichier, à l'aide du caractère inverse : 
 +   <​ 
 + 
 +Un exemple avec la commande [[:​doc:​systeme:​wc]] (word count) qui permet de compter le nombre de lignes, de mots et de caractères d'un fichier. 
 +<code user> 
 +wc dossier1/​test1.txt</​code>​  
 +<code bash> 1  3 17 dossier1/​test1.txt</​code>​ 
 + 
 +Ces trois nombres signifie : 
 +  - "​1"​ : est le nombre de lignes. 
 +  - "​3"​ : est le nombre de mots. 
 +  - "​17"​ : est le nombre d'​octets. 
 +<note tip> 
 +options intéressantes ​
 +  * -l : compte le nombre le lignes uniquement ; 
 +  * -w : compte le nombre de mots uniquement ; 
 +  * -c : compte le nombre d'​octets uniquement ; 
 +  * -m : compte le nombre de caractères uniquement. 
 +</​note>​ 
 + 
 + 
 +**Utilisation avec " < " :** 
 +<code user> 
 +< ~/​dossier1/​test1.txt wc    # retour :  1  3 17 
 +                             
 +</​code>​ 
 + 
 +ou 
 + 
 +<code user> 
 +wc < ~/​dossier1/​test1.txt ​  # retour :  1  3 17 
 +</​code>​ 
 + 
 +Pour la commande cat voir : [[doc:systeme:​cat]] 
 +===== Sortie ===== 
 + 
 +==== Sortie simple ==== 
 + 
 +Première commande dans le terminal : 
 +<code user> 
 +ls -l dossier1 
 +total 4 
 +-rw-r--r-- 1 user user 17 oct.  16 18:31 test1.txt</​code>​ 
 + 
 +On se sert du caractère « > » pour rediriger la sortie standard (celle qui va normalement sur écran). 
 +On indique ensuite le nom du fichier où seront placés les résultats de sortie. 
 +<code user> 
 +ls -l dossier1 > resultat.txt</​code>​ 
 + 
 +<code user> 
 +cat resultat.txt  
 +total 4 
 +-rw-r--r-- 1 user user 17 oct.  16 18:31 test1.txt</​code>​ 
 + 
 +  - Si le fichier n'​existe pas, il sera créé. 
 +  - S'il existe, son contenu sera écrasé, même si la commande tapée est incorrecte. 
 +<note tip>Le shell commence d’abord par créer le fichier puis exécute ensuite la commande.</​note>​ 
 + 
 +Seconde commande : 
 +<code user> 
 +ls -l dossier2 > resultat.txt</​code>​ 
 + 
 +<code user> 
 +cat resultat.txt  
 +total 4 
 +-rw-r--r-- 1 user user 17 oct.  16 18:31 test2.txt</​code>​ 
 + 
 +On voit que l'​écriture précédente a été remplacée. 
 + 
 +Continuons avec une troisième commande : 
 +<code user> 
 +ls -l dossier3 > resultat.txt</​code>​ 
 + 
 +<code user> 
 +cat resultat.txt</​code>​ 
 + 
 +Le contenu du répertoire a été remplacé par rien, puisque la commande ne donnait aucune écriture à transcrire, il n'y avait pas de dossier3 ! 
 + 
 +==== Sorties ajoutées ==== 
 + 
 +Pour ne rien effacer et/ou ajouter des données à la suite du fichier resultat.txt on utilise la double ​redirection ​
 +   >>​ 
 + 
 +Le résultat est ajouté à la fin du fichier. Exemple : 
 +<code user> 
 +ls -l dossier1 > resultat.txt</​code>​ 
 + 
 +<code user> 
 +ls -l dossier2 >> resultat.txt</​code>​ 
 + 
 +<code user> 
 +cat resultat.txt  
 +total 4 
 +-rw-r--r-- 1 user user 17 oct.  16 18:53 test1.txt 
 +total 4 
 +-rw-r--r-- 1 user user 17 oct.  16 18:50 test2.txt</​code>​ 
 + 
 + 
 + 
 +==== Les canaux standards ==== 
 + 
 +On peut considérer un canal comme un fichier, qui possède son propre descripteur par défaut, et dans lequel on peut ou lire ou écrire. 
 +  - Le canal d' entrée standard se nomme « stdin » et porte le descripteur 0. 
 +  - Le canal de sortie standard se nomme « stdout » et porte le descripteur 1. 
 +  - La canal d' erreur standard se nomme « stderr » et porte le descripteur 2. 
 + 
 +On peut ainsi rediriger les canaux de sortie 1 et 2 vers un autre fichier. 
 +<code user> 
 +rmdir dossier3 
 +rmdir: échec de suppression de « dossier3 »: Aucun fichier ou dossier de ce type</​code>​ 
 + 
 +<code user> 
 +rmdir dossier3 2>​error.log</​code>​ 
 + 
 +<code user> 
 +cat error.log  
 +rmdir: échec de suppression de « dossier3 »: Aucun fichier ou dossier de ce type</​code>​ 
 + 
 +==== Sorties dirigées ==== 
 + 
 +On pourrait souhaiter enregistrer les erreurs dans un fichier à part pour ne pas les oublier et pour pouvoir les analyser ensuite. Pour cela, on utilise l'​opérateur : 
 +   ​2>​ 
 + 
 +==== Sorties doubles ==== 
 + 
 +Faisons une seconde ​redirection ​avec une erreur ​en utilisant le dossier3 inexistant à la fin d'une commande, par exemple : 
 +<code user> 
 +ls -l dossier3 > resultat.txt 2> error.log</​code>​ 
 + 
 +Il y a deux redirections ici : 
 +  - > resultat.txt : redirige le résultat de la commande (sauf les erreurs) dans le fichier resultat.txt. C'est la sortie standard ; 
 +  - 2> error.log : redirige les erreurs éventuelles dans le fichier error.log. C'est la sortie d'​erreurs. 
 + 
 +Résultat dans le fichier **resultat.txt** : 
 +<code user> 
 +cat resultat.txt</​code>​ 
 + 
 +Il est devenu vierge. \\ 
 +Et dans le fichier de redirection error.log : 
 +<code user> 
 +cat error.log  
 +ls: impossible d'​accéder à dossier3: Aucun fichier ou dossier de ce type</​code>​ 
 + 
 +L'​erreur s'est bien redirigée pour s'​écrire dans le fichier **error.log**. 
 + 
 +==== Sorties doubles sauvegardées ==== 
 + 
 +Pour ajouter une éventuelle redirection dans le fichier error.log en conservant l'​intégrité des écritures dans nos 2 fichiers de redirection : 
 +   ​resultat.txt 
 +   ​error.log 
 + 
 +Nous devons utiliser la double redirection en sortie pour chacun d'​eux. 
 + 
 +Réécrivons et vérifions le fichier resultat.txt : 
 +<code user> 
 +ls -l dossier1 > resultat.txt</​code>​ 
 + 
 +<code user> 
 +cat resultat.txt  
 +total 4 
 +-rw-r--r-- 1 user user 17 oct.  16 18:53 test1.txt</​code>​ 
 + 
 +Utilisons maintenant la double direction en sortie des 2 fichiers : 
 +<code user> 
 +ls -l dossier3 >> resultat.txt 2>> error.log</​code>​ 
 + 
 +Vérifions chacun des fichiers : 
 + 
 +<code user> 
 +cat tuto_resultat.txt  
 +total 4 
 +-rw-r--r-- 1 user user 17 oct.  16 18:53 test1.txt</​code>​ 
 + 
 +<code user> 
 +cat error.log  
 +ls: impossible d'​accéder à dossier3: Aucun fichier ou dossier de ce type</​code>​ 
 + 
 +Les erreurs se sont bien ajoutées dans le fichier **error.log** et le fichier **resultat.txt** n'a pas subi de modification. :-) 
 + 
 +==== Sorties fusionnées ==== 
 + 
 +Il est possible de fusionner les sorties dans un seul et même fichier.Il faut utiliser le code suivant : 
 +   ​2>&​1. 
 + 
 +Cela a pour effet de rediriger toute la sortie d'​erreurs dans la sortie standard((Traduction pour l'​ordinateur : « envoie les erreurs au même endroit que le reste »)). 
 +<code user> 
 +ls -l dossier4 > resultat.txt 2>&​1</​code>​ 
 + 
 +<code user> 
 +cat resultat.txt  
 +ls: impossible d'​accéder à dossier4: Aucun fichier ou dossier de ce type</​code>​ 
 + 
 +Impec nous avons l'​erreur redirigée en écriture dans notre répertoire resultat.txt 
 + 
 +==== Sorties liées ==== 
 + 
 +Pour préserver le répertoire de ses précédentes écritures il suffit de doubler la sortie ainsi : 
 +<code user> 
 +ls -l dossier5 >> resultat.txt 2>&​1</​code>​ 
 + 
 +<code user> 
 +cat resultat.txt  
 +ls: impossible d'​accéder à dossier4: Aucun fichier ou dossier de ce type 
 +ls: impossible d'​accéder à dossier5: Aucun fichier ou dossier de ce type</​code>​ 
 + 
 +===== Entrée - Sortie ===== 
 + 
 +On peut aussi utiliser à la fois les deux types de redirection. 
 +<code user> 
 +wc < resultat.txt > comptes.txt</​code>​ 
 + 
 +<code user> 
 +cat comptes.txt  
 +  2  24 170</​code>​ 
 + 
 +On peut aussi se reporter à la commande « tee ». 
 + 
 +===== Filtres ===== 
 + 
 +Un filtre (ou une commande filtre) est un programme sachant écrire et lire des données par les canaux standards d'​entrée et de sortie. Il en modifie ou traite éventuellement le contenu. wc est un filtre. 
 + 
 +Nous nous attarderons sur quelques filtres plus tard, mais en voici quelques uns : 
 +  - [[:​doc:​systeme:​more]] (affiche les données page par page) 
 +  - sort (tri des données) 
 +  - [[:​doc:​systeme:​grep]] (critères de recherche) 
 +  - [[:​doc:​programmation:​shell:​pipe | pipe ou tube (|)]] 
 + 
 +===== Lien et remerciement ===== 
 + 
 +Le site du zero : 
 +  * [[http://​www.siteduzero.com/​tutoriel-3-62417-les-flux-de-redirection.html|Les flux de redirection du site zero]] 
 + 
 + 
 +//Merci aussi à //​**arthefact**//​ et //​**melodie**//​ de nous avoir offert le tuto en pdf éclairant celui-ci !// :-) 
 + 
 + 
 +===== À suivre... ===== 
doc/programmation/shell/chevrons.txt · Dernière modification: 01/05/2021 12:58 par jpt

Pied de page des forums

Propulsé par FluxBB