66 lines
3.5 KiB
Markdown
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]])
|