cours/unix redirection de flux.md
oscar.plaisant@icloud.com a2ee0fa5ca from github to this gitea
2023-10-23 23:09:51 +02:00

66 lines
3.5 KiB
Markdown

up::[[unix redirection de flux]]
#informatique
----
Par défaut, les commandes récupèrent les données tapées par l'utilisateur au clavier en entrée ([[unix stdin|stdin]]).
Par défaut, la sortie des commandes ([[unix stdout|stdout]]) est affichée à l'écran.
Par défaut, la sortie des erreur ([[unix stderr]]) est également affichée à l'écran.
### Commandes de redirection
- `< entree` les données de la commande (stdin) seront lues dans le fichier `entree` plutôt qu'au clavier
- `> sortie` la sortie de la command (stdout) sera écrite dans le fichier `sortie`, en l'écrasant si il existait déjà
- `>> sortie` comme `> sortie` sauf que le fichier n'est pas écrasé (le stdout de la commande est ajouté à la fin du fichier)
- `2> erreur` les messages d'erreur de la commande (stderr) seront écrits dans le fichier `erreur`. Son ancien contenu est effacé
- `2>> erreur` le stderr de la commande est ajouté à la fin du fichier `erreur`
- `2>&1` le stderr est fusionné avec le stdout
- `1>&2` les données en sortie sont fusionnées avec les messages d'erreur (cas rare)
#### Exemples
- `sort monfichier` affiche à l'écran les lignes du fichier classées par ordre alphabétique. Si le fichier n'existe pas, un message d'erreur apparaît à l'écran
- `sort monfichier > resultat 2> problemes` écrit les lignes de `monfichier` triées par ordre alphabétique dans `resultat`. Si le fichier `monfichier` n'existe pas, le message d'erreur est écrit dans le fichier `problemes`
### Enchaînement des commandes
#### Syntaxe générale
```sh
commande1 options arguments | commande2 options | commande3 ...
```
#### Exemple
- `find / -size +1000k -mtime -7 | sort | tee trace | less`
- la commande `find` recherche dans tous les répertoires de l'ordinateur les fichiers de plus de 1000 kilooctets modifiés durant les 7 derniers jours et affiche leur chemin d'accès
- la commande `sort` fait un tri alphabétique des données reçues en entrée
- la commande `tee` envoie son stdin à la fois dans le fichier `trace` et dans le stdout
- la commande `less` permet de visualiser un texte trop long pour tenir en entier à l'écran.
## Métacaractères
Utilisés pour exprimer des noms de fichiers.
- `?` n'importe quel caractère, une seule fois
- `*` n'importe quel caractère, 0, une ou plusieurs fois
- `[c1-c2]` n'importe quel caractères de l'ensemble ordonné commençant par `c1` et terminant par `c2`
- `\` le caractère suivant de doit pas être traité comme un métacaractère (échappement)
- `.` le caractère `.` en première position doit être précisé explicitement (car les fichiers dont le nom commence par ce caractère sont des fichiers cachés, ils ne sont dont pas considérés pas défaut)
## Résultat d'une commande comme argument d'une autre
Les \` entourant une commande permettent d'utiliser le résultat de cette commande comme argument(s) dans la line de commande
#### Exemples
```sh
$ echo "Nous sommes le" `date +%d/%m/%y` "et il est" `date +%H:%M:%S`
```
```sh
$ echo "2 + 2 =" `expr 2 + 2`
```
## Faire se suivre des commandes
- `;` entre deux commandes pour les exécuter l'une après l'autre
- `&&` (signifie "et") entre deux commandes pour exécuter la seconde uniquement si la première n'a pas renvoyé d'erreur
- `||` (signifie "ou") entre deux commandes pour exécuter la seconde uniquement si la première a renvoyé une erreur
- `&` à la fin d'une commande, lance celle-ci en tâche de fond (et renvoie son [[PID]])