# I/O Redirections
| | Descripteur | Identifiant |
| --------------- | ----------- | ----------- |
| Entrée standard | stdin | 0 |
| Sortie standard | stdout | 1 |
| Sortie erreur | stderr | 2 |
#### Redirection de sortie: `>`
Redirige la sortie standart vers un nouveau fichier:
```bash
$ ls > liste.txt
```
Redirige la sortie standart vers un fichier (ajoute à la suite):
```bash
$ ls >> liste.txt
```
Redirige la sortie erreur vers un fichier:
```bash
>2 erreur.log
```
#### Redirection d'entrée: `<`
Considère liste.txt comme entrée standart (au lieu du clavier):
```bash
$ sort < liste.txt
```
Envoyer un contenu à une commande avec votre clavier.
```bash
$ sort -n << FIN
heredoc… ❯ 45
heredoc… ❯ 23
heredoc… ❯ 12
heredoc… ❯ 78
heredoc… ❯ 45
heredoc… ❯ 9
heredoc… ❯ FIN
9
12
23
45
45
78
$ wc -m << STOP
heredoc… ❯ Combien de caracteres ?
heredoc… ❯ STOP
24
```
#### On peut combiner les 2
```bash
$ sort < liste.txt > liste_triee.txt
```
#### Rediriger vers un autre descripteur: `>&`
Rediriger la sortie standard sur la sortie d'erreur:
```bash
$ echo "Error" 1>&2
$ echo "Error" >&2
```
#### Le trou noir: `/dev/null`
- si on affiche son contenu, on n'obtient rien.
- si on écrit quelque chose dedans, il disparait.
```bash
$ echo "Bonjour"
Bonjour
$ echo "Bonjour" >/dev/null
```
#### Connecter 2 processus: `|`
La sortie d'un programme est utilisée comme entrée d'un autre.
```bash
$ echo "Hello!" | tr "[:lower:]" "[:upper:]"
HELLO!
```
#### Erreurs
Rediriger les erreurs vers un fichier:
```bash
$ UneCommande 2> fichier-erreurs.txt
```
Rediriger les erreurs vers un fichier (ajouter à la suite)::
```bash
$ UneCommande 2>> erreurs.log
```
Rediriger la sortie standart et les erreurs vers un fichier:
```bash
$ UneCommande 2> erreurs.log
```
Rediriger la sortie et les erreurs vers un fichier:
```bash
$ UneCommande 2>&1 | tee fichier.txt
```
#### Fusionner les sorties
Il est possible de fusionner les sorties (standart et erreur) dans un seul et même fichier.
```bash
$ bad_command >>filename 2>&1
```