Verified Commit b1a2572a authored by Stephane Bonnet's avatar Stephane Bonnet
Browse files

pipes et exercices

parent 795858a1
Pipeline #33804 failed with stage
in 13 seconds
......@@ -9,7 +9,8 @@
\end{block}
\begin{block}{wildcard (\emph{joker})}
Lettre spéciale qui représente un caractère ou une suite de caractères quelconques dans un \emph{globbing pattern}.
Lettre spéciale qui représente un caractère ou une suite de caractères
quelconques dans un \emph{globbing pattern}.
\end{block}
\end{frame}
......@@ -754,10 +755,90 @@ The quick yellow fox jumps over the lazy dog
\end{frame}
\subsection{Combiner les commandes: les pipes}
\begin{frame}[fragile]{Pipes}
\begin{frame}[fragile]{Les Pipes}
\framesubtitle{Généralités}
\begin{alertblock}{KISS (Keep It Simple, Stupid)}
Les commandes, aussi complexes qu'elles soient, sont chacune spécialisées dans une
fonction spécifique. C'est la philosophie générale des commandes Unix: ne faire qu'une
chose, mais la faire bien.
\end{alertblock}
\begin{block}{Les pipes (ou tubes)}
\begin{itemize}
\item Connectent la sortie standard d'une commande à l'entrée standard d'une autre.
\item Permettent de chaîner des commandes pour construire des traitements complexes.
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]{Les Pipes}
\framesubtitle{Comment ça marche?}
Supposons qu'on veuille voir le listing complet des fichiers du système. On peut
exécuter ``\cmd{ls -lR /}'' mais la sortie est trop grande et on ne pourra pas tout voir...
On peut utiliser les services de \cmd{less} pour paginer la sortie.
Il suffit de taper:
\begin{exampleblock}{}
\cmd{ls -lR / | less}
\end{exampleblock}
Le symbole ``|'' représente le pipe entre les deux commandes.
\end{frame}
\begin{frame}[fragile]{Les Pipes}
\framesubtitle{Remarques}
\begin{itemize}
\item Les pipes ne sont pas de taille infinie. Les commandes qui produisent
les données (ici \cmd{ls}) attendent lorsqu'ils sont pleins. \textbf{On ne peut pas perdre
de données dans un pipe.}
\item Si on arrête le consommateur (ici \cmd{less}), le producteur se termine également
par fermeture de son fichier de sortie standard.
\item De même, la fin du producteur entraine la fermeture de l'entrée standard du
consommateur et donc son arrêt.
\end{itemize}
\end{frame}
\begin{frame}[fragile]{\cmd{tee}}
\begin{frame}[fragile]{Les Pipes}
\framesubtitle{La commande \cmd{tee}}
On peut vouloir enregistrer la sortie d'une commande dans un fichier en même temps
qu'on la transmet à une autre commande par un pipe.
\begin{block}{\cmd{tee}}
\begin{description}
\item[\cmd{tee}] lit son entrée standard, l'enregistre dans un fichier et
la recopie sur sa sortie standard.
\end{description}
\end{block}
\begin{exampleblock}{Enregistrer la sortie de \cmd{ls -lR} pendant qu'on compte les fichiers}
\verb+ls -lR ~ | tee listing.txt | wc -l+
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]{Les Pipes}
\framesubtitle{A vous de jouer!}
\begin{itemize}
\item Téléchargez ``Vingt mille lieues sous les mers'' de Jules VERNE depuis le site du
projet Gutemberg:
\end{itemize}
\begin{exampleblock}{}
\cmd{wget http://www.gutenberg.org/files/54873/54873-0.txt}
\end{exampleblock}
\begin{exampleblock}{Combien de mots différents sont utilisés par l'auteur?}
Il faut: lire le fichier, le transformer pour qu'il ait un mot par ligne, trier les mots,
éliminer les mots en double ou plus, compter le nombre de lignes.
\end{exampleblock}
\begin{exampleblock}{Combien de fois le Capitaine Nemo est-il nommé?}
L'approche est similaire, mais il faut aussi ne garder que le mot ``Nemo''.
\end{exampleblock}
\end{frame}
\subsection{Processus et jobs}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment