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 →
Ci-dessous, les différences entre deux révisions de la page.
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 [29/03/2014 09:12] Hypathie [Entrée] |
doc:programmation:shell:chevrons [26/04/2015 17:48] milou [Corollaire rigolo] |
||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
* Objet : commandes de redirection | * Objet : commandes de redirection | ||
- | * Niveau requis : {{tag>débutant}} | + | * 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...// | * 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à !.]] :-) | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
* Suivi : | * Suivi : | ||
- | * Création par **smolski** le 16/08/2011 | + | * Création par [[user>smolski]] le 16/08/2011 |
- | * Testé sur squeeze par **smolski** le 16/10/2012 | + | * 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 !)) | * 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 !)) | ||
Ligne 17: | Ligne 17: | ||
===== On peut se placer ===== | ===== On peut se placer ===== | ||
- | tout d'abord dans le dossier désiré (pour se faire voir [[:doc:programmation:shell:cd|la commande cd]]), puis on tape la commande suivante : | + | 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 : |
- | > nomdufichier | + | <code user>> nomdufichier</code> |
===== Ou, de façon plus générale ===== | ===== Ou, de façon plus générale ===== | ||
on tape : | on tape : | ||
- | <code> | + | <code user> |
> /chemin/du/repertoire/nomdufichier | > /chemin/du/repertoire/nomdufichier | ||
</code> | </code> | ||
- | C'est-à-dire que l'on crée le "nomdufichier" depuis son répertoire personnel, sans s'être déplacé on niveau du répertoire dans lequel on veut placer "nomdufichier". | + | 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 37: | Ligne 37: | ||
Pour créer un fichier, les commandes ''>'' et [[:doc:systeme: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 44: | 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 58: | 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> | ||
Vider le fichier se fait aussi simplement que ça : | Vider le fichier se fait aussi simplement que ça : | ||
- | <code bash> | + | <code user> |
- | $ > fichier</code> | + | > fichier</code> |
- | <code bash> | + | <code user> |
- | $ ls -lhi | + | ls -lhi</code> |
- | total 0 | + | <code bash>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 99: | Ligne 99: | ||
Créer(([[:doc:editeurs:vim:vim]])) les éléments nécessaires pour réaliser les exemples de ce tuto : | Créer(([[:doc:editeurs:vim:vim]])) les éléments nécessaires pour réaliser les exemples de ce tuto : | ||
- | <code bash> | + | <code user> |
mkdir dossier1 dossier2</code> | mkdir dossier1 dossier2</code> | ||
- | <code bash> | + | <code user> |
vim dossier1/test1.txt</code> | vim dossier1/test1.txt</code> | ||
Ligne 109: | Ligne 109: | ||
fichier de test1</code> | fichier de test1</code> | ||
- | <code bash> | + | <code user> |
vim dossier2/test2.txt</code> | vim dossier2/test2.txt</code> | ||
Ligne 122: | Ligne 122: | ||
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. | 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 bash> | + | <code user> |
wc dossier1/test1.txt | wc dossier1/test1.txt | ||
1 3 17 dossier1/test1.txt</code> | 1 3 17 dossier1/test1.txt</code> | ||
Ligne 130: | Ligne 130: | ||
- "3" : est le nombre de mots. | - "3" : est le nombre de mots. | ||
- "17" : est le nombre d'octets. | - "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 ===== | ||
Ligne 136: | Ligne 157: | ||
Première commande dans le terminal : | Première commande dans le terminal : | ||
- | <code bash> | + | <code user> |
ls -l dossier1 | ls -l dossier1 | ||
total 4 | total 4 | ||
Ligne 143: | Ligne 164: | ||
On se sert du caractère « > » pour rediriger la sortie standard (celle qui va normalement sur écran). | 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. | On indique ensuite le nom du fichier où seront placés les résultats de sortie. | ||
- | <code bash> | + | <code user> |
ls -l dossier1 > resultat.txt</code> | ls -l dossier1 > resultat.txt</code> | ||
- | <code bash> | + | <code user> |
cat resultat.txt | cat resultat.txt | ||
total 4 | total 4 | ||
Ligne 156: | Ligne 177: | ||
Seconde commande : | Seconde commande : | ||
- | <code bash> | + | <code user> |
ls -l dossier2 > resultat.txt</code> | ls -l dossier2 > resultat.txt</code> | ||
- | <code bash> | + | <code user> |
cat resultat.txt | cat resultat.txt | ||
total 4 | total 4 | ||
Ligne 167: | Ligne 188: | ||
Continuons avec une troisième commande : | Continuons avec une troisième commande : | ||
- | <code bash> | + | <code user> |
ls -l dossier3 > resultat.txt</code> | ls -l dossier3 > resultat.txt</code> | ||
- | <code bash> | + | <code user> |
cat resultat.txt</code> | cat resultat.txt</code> | ||
Ligne 181: | Ligne 202: | ||
Le résultat est ajouté à la fin du fichier. Exemple : | Le résultat est ajouté à la fin du fichier. Exemple : | ||
- | <code bash> | + | <code user> |
ls -l dossier1 > resultat.txt</code> | ls -l dossier1 > resultat.txt</code> | ||
- | <code bash> | + | <code user> |
ls -l dossier2 >> resultat.txt</code> | ls -l dossier2 >> resultat.txt</code> | ||
- | <code bash> | + | <code user> |
cat resultat.txt | cat resultat.txt | ||
total 4 | total 4 | ||
Ligne 198: | Ligne 219: | ||
==== Les canaux standards ==== | ==== Les canaux standards ==== | ||
- | On peut considérer un canal comme un fichier, qui possède sont propre descripteur par défaut, et dans lequel on peut ou lire ou écrire. | + | 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 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. | - Le canal de sortie standard se nomme « stdout » et porte le descripteur 1. | ||
Ligne 204: | Ligne 225: | ||
On peut ainsi rediriger les canaux de sortie 1 et 2 vers un autre fichier. | On peut ainsi rediriger les canaux de sortie 1 et 2 vers un autre fichier. | ||
- | <code bash> | + | <code user> |
rmdir dossier3 | rmdir dossier3 | ||
rmdir: échec de suppression de « dossier3 »: Aucun fichier ou dossier de ce type</code> | rmdir: échec de suppression de « dossier3 »: Aucun fichier ou dossier de ce type</code> | ||
- | <code bash> | + | <code user> |
rmdir dossier3 2>error.log</code> | rmdir dossier3 2>error.log</code> | ||
- | <code bash> | + | <code user> |
cat error.log | cat error.log | ||
rmdir: échec de suppression de « dossier3 »: Aucun fichier ou dossier de ce type</code> | rmdir: échec de suppression de « dossier3 »: Aucun fichier ou dossier de ce type</code> | ||
Ligne 223: | Ligne 244: | ||
Faisons une seconde redirection avec une erreur en utilisant le dossier3 inexistant à la fin d'une commande, par exemple : | Faisons une seconde redirection avec une erreur en utilisant le dossier3 inexistant à la fin d'une commande, par exemple : | ||
- | <code bash> | + | <code user> |
- | ls -l dossier3 > resultat.txt 2>error.log</code> | + | ls -l dossier3 > resultat.txt 2> error.log</code> |
Il y a deux redirections ici : | Il y a deux redirections ici : | ||
Ligne 230: | Ligne 251: | ||
- 2> error.log : redirige les erreurs éventuelles dans le fichier error.log. C'est la sortie d'erreurs. | - 2> error.log : redirige les erreurs éventuelles dans le fichier error.log. C'est la sortie d'erreurs. | ||
- | Résultat dans le fichier **résultat.txt** : | + | Résultat dans le fichier **resultat.txt** : |
- | <code bash> | + | <code user> |
cat resultat.txt</code> | cat resultat.txt</code> | ||
Il est devenu vierge. \\ | Il est devenu vierge. \\ | ||
Et dans le fichier de redirection error.log : | Et dans le fichier de redirection error.log : | ||
- | <code bash> | + | <code user> |
cat error.log | cat error.log | ||
ls: impossible d'accéder à dossier3: Aucun fichier ou dossier de ce type</code> | ls: impossible d'accéder à dossier3: Aucun fichier ou dossier de ce type</code> | ||
- | L'erreur s'est bien redirigé pour s'écrire dans le fichier **error.log**. | + | L'erreur s'est bien redirigée pour s'écrire dans le fichier **error.log**. |
==== Sorties doubles sauvegardées ==== | ==== Sorties doubles sauvegardées ==== | ||
Ligne 251: | Ligne 272: | ||
Réécrivons et vérifions le fichier resultat.txt : | Réécrivons et vérifions le fichier resultat.txt : | ||
- | <code bash> | + | <code user> |
ls -l dossier1 > resultat.txt</code> | ls -l dossier1 > resultat.txt</code> | ||
- | <code bash> | + | <code user> |
cat resultat.txt | cat resultat.txt | ||
total 4 | total 4 | ||
Ligne 260: | Ligne 281: | ||
Utilisons maintenant la double direction en sortie des 2 fichiers : | Utilisons maintenant la double direction en sortie des 2 fichiers : | ||
- | <code bash> | + | <code user> |
ls -l dossier3 >> resultat.txt 2>> error.log</code> | ls -l dossier3 >> resultat.txt 2>> error.log</code> | ||
Vérifions chacun des fichiers : | Vérifions chacun des fichiers : | ||
- | <code bash> | + | <code user> |
cat tuto_resultat.txt | cat tuto_resultat.txt | ||
total 4 | total 4 | ||
-rw-r--r-- 1 user user 17 oct. 16 18:53 test1.txt</code> | -rw-r--r-- 1 user user 17 oct. 16 18:53 test1.txt</code> | ||
- | <code bash> | + | <code user> |
cat error.log | cat error.log | ||
ls: impossible d'accéder à dossier3: Aucun fichier ou dossier de ce type</code> | ls: impossible d'accéder à dossier3: Aucun fichier ou dossier de ce type</code> | ||
Ligne 282: | Ligne 303: | ||
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 »)). | 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 bash> | + | <code user> |
ls -l dossier4 > resultat.txt 2>&1</code> | ls -l dossier4 > resultat.txt 2>&1</code> | ||
- | <code bash> | + | <code user> |
cat resultat.txt | cat resultat.txt | ||
ls: impossible d'accéder à dossier4: Aucun fichier ou dossier de ce type</code> | ls: impossible d'accéder à dossier4: Aucun fichier ou dossier de ce type</code> | ||
Ligne 294: | Ligne 315: | ||
Pour préserver le répertoire de ses précédentes écritures il suffit de doubler la sortie ainsi : | Pour préserver le répertoire de ses précédentes écritures il suffit de doubler la sortie ainsi : | ||
- | <code bash> | + | <code user> |
ls -l dossier5 >> resultat.txt 2>&1</code> | ls -l dossier5 >> resultat.txt 2>&1</code> | ||
- | <code bash> | + | <code user> |
cat resultat.txt | cat resultat.txt | ||
ls: impossible d'accéder à dossier4: Aucun fichier ou dossier de ce type | ls: impossible d'accéder à dossier4: Aucun fichier ou dossier de ce type | ||
Ligne 305: | Ligne 326: | ||
On peut aussi utiliser à la fois les deux types de redirection. | On peut aussi utiliser à la fois les deux types de redirection. | ||
- | <code bash> | + | <code user> |
wc < resultat.txt > comptes.txt</code> | wc < resultat.txt > comptes.txt</code> | ||
- | <code bash> | + | <code user> |
cat comptes.txt | cat comptes.txt | ||
2 24 170</code> | 2 24 170</code> |