Utilisation avancée de la ligne de commande (redirections et compositions de commandes)
cette partie n'est pas au programme et n'est pas à connaître, mais tout ça est très utile si vous voulez devenir meilleur-e (et si vous continuez à faire de l'informatique et de la programmation, vous aurez besoin de la ligne de commande linux à un moment !)
Rediriger la sortie d'une commande sur l'entrée d'une autre avec le pipe '|'
On peut rediriger la sortie d'une commande sur l'entrée d'une autre, plusieurs fois d'affilée si on veut, par exemple :
getent passwd | grep nicolas
exercices:
- Que fait le programme suivant ? (testez morceau par morceau en rajoutant une commande à chaque fois)
ls | rev | cut -s -d'.' -f1 | rev | sort | uniq -c
- On peut afficher un fichier avec
cat NOMDUFICHIER
. Comment afficher seulement les lignes qui contiennent le mot "renard" ? Comment afficher seulement les lignes qui contiennent "renard" et "ami" ?
Entrée standard, sortie standard, erreur standard (stdin,stdout,stderr)
Ce qu'on redirige avec le pipe, c'est l'entrée standard qui se comporte comme un fichier sur lequel lit un programme, et la sortie standard, qui est comme un fichier sur lequel le programme écrit.
Par exemple en python, print
affiche sur la sortie standard et input
lit sur l'entrée standard.
Les erreurs sont en général affichées sur l'erreur standard, qui s'affiche aussi dans le terminal mais peut être manipulée différemment.
Seule la sortie standard est redirigée par le pipe, les erreurs ne sont donc pas envoyées au programme suivant.
Rediriger la sortie vers un fichier, ou l'entrée depuis un fichier
On peut rediriger la sortie standard d'une commande vers un fichier avec >
:
ls > resultats_de_ls.txt
<
:
tr 'A-Za-z' 'N-Z-A-Mn-z-a-m' < fichier_secret_a_chiffrer.txt
tr 'A-Za-z' 'N-Z-A-Mn-z-a-m' < fichier_secret_a_chiffrer.txt > message_secret.txt
Si on utilise >>
, cela rajoute le texte à la fin du fichier (Attention, >
écrase le fichier
s'il existait déjà !).
exercice :
C'est une bonne manière de tester vos programmes python qui utilisent input() et print().
Reprenez un exercice de france-ioi que vous avez réussi, copiez une des entrées fournies
dans un fichier au même endroit, et tester le résultat avec python3 votrecode.py < test.txt
.
L'erreur standard peut être redirigée indépendamment en mettant 2
devant le >
:
ls 2> erreurs_de_ls.txt
Les fichiers spéciaux ̀/dev/null,
/dev/random`
/dev/null
est un fichier linux qui jette tout ce qu'on lui envoie.
On peut s'en servir pour ne pas afficher la sortie ou l'erreur standard, par exemple:
find /
find / 2>/dev/null
/dev/random
est un fichier depuis lequel on peut lire et qui produit à la demande du contenu aléatoire.